ast-crispr-markdown-markly 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 92d7122e6e9bc649ac5bedf7f8affdd9fc2d6dd5c6f06eb0dd9852eea3f2250c
4
+ data.tar.gz: 3751a3eff28dd9a6d22980e580096d32951abe550af1d5fb8ee65d3f454a6e86
5
+ SHA512:
6
+ metadata.gz: 957009eb5983e817532a7538e3096e41278806e94f2cdbc9532a0844adfae320d75c7c6d9f01e960d9e9f988afb3613b33f0455ee73483cea81b54c4c0ae2590
7
+ data.tar.gz: 07d446a671275ba57ed09b90676c9b3ca730fe7cfa7021e7e4524201a1a560319c5e889b8c38efc0fc1c8ffa2c99533839f00a134baee3b841c8aab11f20e880
checksums.yaml.gz.sig ADDED
Binary file
data/LICENSE.md ADDED
@@ -0,0 +1,13 @@
1
+ # License
2
+
3
+ This project is made available under the following licenses.
4
+ Choose the option that best fits your use case:
5
+
6
+ - [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
7
+ - [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
8
+
9
+ If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
10
+
11
+ ## Copyright Notice
12
+
13
+ - Required Notice: Copyright (c) 2026 Peter H. Boling
data/README.md ADDED
@@ -0,0 +1,316 @@
1
+ <a href="https://github.com/structuredmerge"><img alt="structuredmerge Logo by GitHub" src="https://github.com/structuredmerge.png?size=192" width="14%" align="right"/></a>
2
+
3
+ # 🧬 Ast::Crispr::Markdown::Markly
4
+
5
+ [![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Total downloads][👽dl-ranki]][👽dl-rank] [![CI Current][🚎11-c-wfi]][🚎11-c-wf]
6
+
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
8
+
9
+ ---
10
+
11
+ `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
12
+
13
+ [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
14
+
15
+ <details markdown="1">
16
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
17
+
18
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
19
+
20
+ </details>
21
+
22
+ ## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
23
+
24
+ `ast-crispr-markdown-markly` is the Markdown/Markly adapter for `ast-crispr`. It exposes Markdown heading sections, link definitions, and HTML comments as structural owners so README and documentation edits can be made without regular-expression section slicing.
25
+
26
+ ### Key Features
27
+
28
+ - Markly-backed Markdown document contexts.
29
+ - Heading-section selectors that include nested subsection content.
30
+ - Link-definition and HTML-comment selectors.
31
+ - Managed-block selection for template-owned README regions.
32
+ - Source-preserving replacements for destination-owned documentation sections.
33
+
34
+ ## 💡 Info you can shake a stick at
35
+
36
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
37
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
38
+ | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
39
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
40
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
41
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
42
+ | Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
43
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
44
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
45
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
46
+
47
+ ### Compatibility
48
+
49
+ Compatible with MRI Ruby 4.0.0+, and concordant releases of JRuby, and TruffleRuby.
50
+ CI workflows and Appraisals are generated for MRI Ruby 4.0.0+.
51
+ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
52
+ may be higher than the gem's runtime compatibility floor when legacy Rubies are
53
+ not practical for the current toolchain.
54
+
55
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
56
+
57
+ The _amazing_ test matrix is powered by the kettle-dev stack.
58
+
59
+ <details markdown="1">
60
+ <summary>How kettle-dev manages complexity in tests</summary>
61
+
62
+ | Gem | Source | Role | Total downloads |
63
+ |-----|--------|------|---------------------|
64
+ | [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Total downloads for appraisal2](https://img.shields.io/gem/dt/appraisal2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2) |
65
+ | [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Total downloads for appraisal2-rubocop](https://img.shields.io/gem/dt/appraisal2-rubocop.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
66
+ | [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Total downloads for kettle-dev](https://img.shields.io/gem/dt/kettle-dev.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
67
+ | [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Total downloads for kettle-jem](https://img.shields.io/gem/dt/kettle-jem.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
68
+ | [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Total downloads for kettle-soup-cover](https://img.shields.io/gem/dt/kettle-soup-cover.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
69
+ | [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Total downloads for kettle-test](https://img.shields.io/gem/dt/kettle-test.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-test) |
70
+ | [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Total downloads for rubocop-lts](https://img.shields.io/gem/dt/rubocop-lts.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
71
+ | [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Total downloads for turbo_tests2](https://img.shields.io/gem/dt/turbo_tests2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
72
+
73
+ </details>
74
+
75
+ ## ✨ Installation
76
+
77
+ Install the gem and add to the application's Gemfile by executing:
78
+
79
+ ```console
80
+ bundle add ast-crispr-markdown-markly
81
+ ```
82
+
83
+ If bundler is not being used to manage dependencies, install the gem by executing:
84
+
85
+ ```console
86
+ gem install ast-crispr-markdown-markly
87
+ ```
88
+
89
+ ## ⚙️ Configuration
90
+
91
+ Require the adapter and choose the selector family that matches the edit.
92
+
93
+ ```ruby
94
+ require "ast/crispr/markdown/markly"
95
+
96
+ context = Ast::Crispr::Markdown::Markly.document_context(
97
+ content: File.read("README.md"),
98
+ source_label: "README.md",
99
+ )
100
+
101
+ sections = context.structural_owners(owner_scope: :heading_sections)
102
+ links = context.structural_owners(owner_scope: :link_definitions)
103
+ ```
104
+
105
+ Heading selectors match rendered heading text, so inline Markdown formatting is normalized by the parser before selection.
106
+
107
+ ## 🔧 Basic Usage
108
+
109
+ ```ruby
110
+ require "ast/crispr"
111
+ require "ast/crispr/markdown/markly"
112
+
113
+ target = Ast::Crispr::Markdown::Markly::Selectors.heading_section(
114
+ heading_text: "Basic Usage",
115
+ level: 2,
116
+ limit: { exactly: 1 },
117
+ )
118
+
119
+ replacement = <<~MARKDOWN
120
+ ## Basic Usage
121
+
122
+ ~~~ruby
123
+ puts :ok
124
+ ~~~
125
+ MARKDOWN
126
+
127
+ result = Ast::Crispr::Replace.call(
128
+ content: File.read("README.md"),
129
+ target: target,
130
+ replacement: replacement,
131
+ source_label: "README.md",
132
+ )
133
+
134
+ File.write("README.md", result.updated_content)
135
+ ```
136
+
137
+ ## 🔐 Security
138
+
139
+ See [SECURITY.md][🔐security].
140
+
141
+ ## 🤝 Contributing
142
+
143
+ If you need some ideas of where to help, you could work on adding more code coverage,
144
+ or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
145
+ or use the gem and think about how it could be better.
146
+
147
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
148
+
149
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
150
+
151
+ ### Code Coverage
152
+
153
+ <details markdown="1">
154
+ <summary>Coverage service badges</summary>
155
+
156
+ </details>
157
+
158
+ ## 📌 Versioning
159
+
160
+ This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
161
+ For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
162
+
163
+ For example:
164
+
165
+ ```ruby
166
+ spec.add_dependency("ast-crispr-markdown-markly", "~> 7.0")
167
+ ```
168
+
169
+ <details markdown="1">
170
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
171
+
172
+ Dropping support for a platform can be a breaking change for affected users.
173
+ If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
174
+
175
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
176
+ read this article from the creator of SemVer:
177
+
178
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
179
+
180
+ </details>
181
+
182
+ See [CHANGELOG.md][📌changelog] for a list of releases.
183
+
184
+ ## 📄 License
185
+
186
+ The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
187
+ See [LICENSE.md][📄license] for details.
188
+
189
+ If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
190
+
191
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
192
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
193
+ [⛳liberapay]: https://liberapay.com/pboling/donate
194
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
195
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
196
+ [🖇sponsor]: https://github.com/sponsors/pboling
197
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
198
+ [🖇kofi]: https://ko-fi.com/pboling
199
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
200
+ [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
201
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
202
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
203
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
204
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
205
+ [🖇floss-funding.dev]: https://floss-funding.dev
206
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
207
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
208
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
209
+ [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
210
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
211
+ [✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
212
+ [✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
213
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/structuredmerge
214
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
215
+ [⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr-markdown-markly
216
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-Ast::Crispr::Markdown::Markly-3C2D2D.svg?style=square&logo=ruby&logoColor=white
217
+ [⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/ast-crispr-markdown-markly
218
+ [⛳️name-img]: https://img.shields.io/badge/name-ast--crispr--markdown--markly-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
219
+ [⛳️tag-img]: https://img.shields.io/github/tag/structuredmerge/structuredmerge-ruby.svg
220
+ [⛳️tag]: https://github.com/structuredmerge/structuredmerge-ruby/releases
221
+ [🚂maint-blog]: http://www.railsbling.com/tags/ast-crispr-markdown-markly
222
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
223
+ [🚂maint-contact]: http://www.railsbling.com/contact
224
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
225
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
226
+ [💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
227
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
228
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
229
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
230
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
231
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
232
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
233
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
234
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
235
+ [💖🌳linktree]: https://linktr.ee/galtzo
236
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
237
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
238
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
239
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
240
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
241
+ [💖🧊berg]: https://codeberg.org/pboling
242
+ [💖🐙hub]: https://github.org/pboling
243
+ [💖🛖hut]: https://sr.ht/~galtzo/
244
+ [💖🧪lab]: https://gitlab.com/pboling
245
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
246
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
247
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
248
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
249
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-ast-crispr-markdown-markly?utm_source=rubygems-ast-crispr-markdown-markly&utm_medium=referral&utm_campaign=readme
250
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
251
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
252
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
253
+ [🚂railsbling]: http://www.railsbling.com
254
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
255
+ [📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/ast-crispr-markdown-markly
256
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
257
+ [📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/ast-crispr-markdown-markly
258
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
259
+ [📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr-markdown-markly
260
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
261
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
262
+ [📜gl-wiki]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/wikis/home
263
+ [📜gh-wiki]: https://github.com/structuredmerge/structuredmerge-ruby/wiki
264
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
265
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
266
+ [👽dl-rank]: https://clickgems.clickhouse.com/dashboard/ast-crispr-markdown-markly
267
+ [👽dl-ranki]: https://img.shields.io/gem/dt/ast-crispr-markdown-markly.svg
268
+ [👽version]: https://clickgems.clickhouse.com/dashboard/ast-crispr-markdown-markly
269
+ [👽versioni]: https://img.shields.io/gem/v/ast-crispr-markdown-markly.svg
270
+ [🚎11-c-wf]: https://github.com/structuredmerge/structuredmerge-ruby/actions/workflows/current.yml
271
+ [🚎11-c-wfi]: https://github.com/structuredmerge/structuredmerge-ruby/actions/workflows/current.yml/badge.svg
272
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
273
+ [🤝gh-issues]: https://github.com/structuredmerge/structuredmerge-ruby/issues
274
+ [🤝gh-pulls]: https://github.com/structuredmerge/structuredmerge-ruby/pulls
275
+ [🤝gl-issues]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/issues
276
+ [🤝gl-pulls]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/merge_requests
277
+ [🤝cb-issues]: https://codeberg.org/structuredmerge/structuredmerge-ruby/issues
278
+ [🤝cb-pulls]: https://codeberg.org/structuredmerge/structuredmerge-ruby/pulls
279
+ [🤝cb-donate]: https://donate.codeberg.org/
280
+ [🤝contributing]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/CONTRIBUTING.md
281
+ [🖐contrib-rocks]: https://contrib.rocks
282
+ [🖐contributors]: https://github.com/structuredmerge/structuredmerge-ruby/graphs/contributors
283
+ [🖐contributors-img]: https://contrib.rocks/image?repo=structuredmerge/structuredmerge-ruby
284
+ [🪇conduct]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/CODE_OF_CONDUCT.md
285
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
286
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
287
+ [📌semver]: https://semver.org/spec/v2.0.0.html
288
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
289
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
290
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
291
+ [📌changelog]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/CHANGELOG.md
292
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
293
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
294
+ [📌gitmoji]: https://gitmoji.dev
295
+ [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
296
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
297
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.104-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
298
+ [🔐security]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/SECURITY.md
299
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
300
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
301
+ [📄license]: LICENSE.md
302
+ [📄license-ref]: LICENSE.md
303
+ [📄license-img]: https://img.shields.io/badge/License-AGPL--3.0--only_OR_PolyForm--Small--Business--1.0.0-259D6C.svg
304
+ [📄license-compat]: https://www.apache.org/legal/resolved.html#category-x
305
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Incompatible:_Category_X-%E2%9C%97-C0392B.svg?style=flat&logo=Apache
306
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
307
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
308
+ [🚎yard-current]: http://rubydoc.info/gems/ast-crispr-markdown-markly
309
+ [🚎yard-head]: https://ast-crispr-markdown-markly.galtzo.com
310
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
311
+ [💎SHA_checksums]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/checksums
312
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
313
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
314
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
315
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
316
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ast
4
+ module Crispr
5
+ module Markdown
6
+ module Markly
7
+ # Version namespace for this gem.
8
+ module Version
9
+ # Current gem version.
10
+ VERSION = '7.1.1'
11
+ end
12
+ # Current gem version exposed at the traditional constant location.
13
+ VERSION = Version::VERSION # Traditional Constant Location
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,358 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ast/crispr'
4
+ require 'markly/merge'
5
+ require_relative 'markly/version'
6
+
7
+ module Ast
8
+ module Crispr
9
+ module Markdown
10
+ module Markly
11
+ class Error < StandardError; end
12
+
13
+ class Adapter
14
+ def read_ast(document)
15
+ analysis = ::Markly::Merge::FileAnalysis.new(document.content)
16
+ return analysis if analysis.valid?
17
+
18
+ raise Ast::Crispr::Error.new("Unable to read structural owners from #{document.source_label}",
19
+ details: { source_label: document.source_label })
20
+ end
21
+
22
+ def structural_owners(document, owner_scope: :shared_default)
23
+ analysis = document.ast
24
+ case owner_scope
25
+ when :shared_default, :heading_sections
26
+ analysis.heading_section_owners
27
+ when :link_definitions
28
+ analysis.link_definition_owners
29
+ when :html_comments
30
+ analysis.html_comment_owners
31
+ when :list_items
32
+ analysis.list_item_owners
33
+ when :inline_references
34
+ analysis.inline_reference_owners
35
+ when :table_rows
36
+ analysis.table_row_owners
37
+ else
38
+ raise Ast::Crispr::Error.new('Unsupported CRISPR owner scope', details: { owner_scope: owner_scope })
39
+ end
40
+ end
41
+
42
+ def comment_regions_for(_document, _owner, region: :leading, owner_scope: :shared_default)
43
+ raise Ast::Crispr::Error.new(
44
+ 'Unsupported CRISPR comment region',
45
+ details: { region: region, owner_scope: owner_scope }
46
+ )
47
+ end
48
+
49
+ def comment_region_text(_document, _comment_region)
50
+ raise Ast::Crispr::Error, 'Markdown CRISPR adapter does not expose comment regions'
51
+ end
52
+
53
+ def structure_profile(owner_scope: :shared_default)
54
+ case owner_scope
55
+ when :shared_default, :heading_sections
56
+ Ast::Crispr::StructureProfile.new(
57
+ owner_scope: owner_scope,
58
+ owner_selector: :heading_sections,
59
+ supported_comment_regions: [],
60
+ metadata: { adapter: :markly }
61
+ )
62
+ when :link_definitions
63
+ Ast::Crispr::StructureProfile.new(
64
+ owner_scope: owner_scope,
65
+ owner_selector: :link_definitions,
66
+ supported_comment_regions: [],
67
+ metadata: { adapter: :markly }
68
+ )
69
+ when :html_comments
70
+ Ast::Crispr::StructureProfile.new(
71
+ owner_scope: owner_scope,
72
+ owner_selector: :line_bound_statements,
73
+ supported_comment_regions: [],
74
+ metadata: { adapter: :markly, markdown_owner: :html_comment }
75
+ )
76
+ when :list_items
77
+ Ast::Crispr::StructureProfile.new(
78
+ owner_scope: owner_scope,
79
+ owner_selector: :list_items,
80
+ supported_comment_regions: [],
81
+ metadata: { adapter: :markly, markdown_owner: :list_item }
82
+ )
83
+ when :inline_references
84
+ Ast::Crispr::StructureProfile.new(
85
+ owner_scope: owner_scope,
86
+ owner_selector: :inline_references,
87
+ supported_comment_regions: [],
88
+ metadata: { adapter: :markly, markdown_owner: :inline_reference }
89
+ )
90
+ when :table_rows
91
+ Ast::Crispr::StructureProfile.new(
92
+ owner_scope: owner_scope,
93
+ owner_selector: :table_rows,
94
+ supported_comment_regions: [],
95
+ metadata: { adapter: :markly, markdown_owner: :table_row }
96
+ )
97
+ else
98
+ raise Ast::Crispr::Error.new('Unsupported CRISPR owner scope', details: { owner_scope: owner_scope })
99
+ end
100
+ end
101
+ end
102
+
103
+ module Selectors
104
+ module_function
105
+
106
+ def heading_section(heading_text:, level: nil, id: nil, limit: nil, metadata: {}, **options)
107
+ Ast::Crispr::OwnerSelector.new(
108
+ id: id || "heading_section_#{heading_text}",
109
+ limit: limit,
110
+ metadata: metadata.merge(
111
+ adapter: Ast::Crispr::Markdown::Markly.adapter,
112
+ owner_scope: :heading_sections,
113
+ selector_kind: :heading_section,
114
+ selection_intent: :section_branch,
115
+ include_trailing_gap: false
116
+ ).merge(options),
117
+ locate: lambda do |context|
118
+ context.structural_owners(owner_scope: :heading_sections).filter_map do |owner|
119
+ next unless owner.heading_text.to_s.strip == heading_text.to_s.strip
120
+ next if level && owner.level != level
121
+
122
+ Ast::Crispr::Match.new(
123
+ node: owner,
124
+ start_line: owner.location.start_line,
125
+ end_line: owner.location.end_line,
126
+ metadata: {
127
+ start_boundary: :owner_start,
128
+ end_boundary: :owner_end,
129
+ payload_kind: :section_branch,
130
+ heading_text: owner.heading_text,
131
+ level: owner.level,
132
+ base: owner.base
133
+ }
134
+ )
135
+ end
136
+ end
137
+ )
138
+ end
139
+
140
+ def link_definition(label: nil, url: nil, id: nil, limit: nil, metadata: {}, **options)
141
+ Ast::Crispr::OwnerSelector.new(
142
+ id: id || ['link_definition', label, url].compact.join(':'),
143
+ limit: limit,
144
+ metadata: metadata.merge(
145
+ adapter: Ast::Crispr::Markdown::Markly.adapter,
146
+ owner_scope: :link_definitions,
147
+ selector_kind: :link_definition,
148
+ selection_intent: :predicate_filter,
149
+ include_trailing_gap: false
150
+ ).merge(options),
151
+ locate: lambda do |context|
152
+ context.structural_owners(owner_scope: :link_definitions).filter_map do |owner|
153
+ next if label && owner.label.to_s != label.to_s
154
+ next if url && owner.url.to_s != url.to_s
155
+
156
+ Ast::Crispr::Match.new(
157
+ node: owner,
158
+ start_line: owner.location.start_line,
159
+ end_line: owner.location.end_line,
160
+ metadata: {
161
+ start_boundary: :owner_start,
162
+ end_boundary: :owner_end,
163
+ payload_kind: :structural_owner_body,
164
+ label: owner.label,
165
+ url: owner.url
166
+ }
167
+ )
168
+ end
169
+ end
170
+ )
171
+ end
172
+
173
+ def html_comment(text:, id: nil, limit: nil, metadata: {}, **options)
174
+ Ast::Crispr::OwnerSelector.new(
175
+ id: id || "html_comment_#{text}",
176
+ limit: limit,
177
+ metadata: metadata.merge(
178
+ adapter: Ast::Crispr::Markdown::Markly.adapter,
179
+ owner_scope: :html_comments,
180
+ selector_kind: :html_comment,
181
+ selection_intent: :predicate_filter,
182
+ include_trailing_gap: false
183
+ ).merge(options),
184
+ locate: lambda do |context|
185
+ context.structural_owners(owner_scope: :html_comments).filter_map do |owner|
186
+ next unless owner.text.to_s == text.to_s
187
+
188
+ Ast::Crispr::Match.new(
189
+ node: owner,
190
+ start_line: owner.location.start_line,
191
+ end_line: owner.location.end_line,
192
+ metadata: {
193
+ start_boundary: :owner_start,
194
+ end_boundary: :owner_end,
195
+ payload_kind: :structural_owner_body,
196
+ text: owner.text
197
+ }
198
+ )
199
+ end
200
+ end
201
+ )
202
+ end
203
+
204
+ def list_item(text: nil, id: nil, limit: nil, metadata: {}, **options)
205
+ Ast::Crispr::OwnerSelector.new(
206
+ id: id || ['list_item', text].compact.join(':'),
207
+ limit: limit,
208
+ metadata: metadata.merge(
209
+ adapter: Ast::Crispr::Markdown::Markly.adapter,
210
+ owner_scope: :list_items,
211
+ selector_kind: :list_item,
212
+ selection_intent: :predicate_filter,
213
+ include_trailing_gap: false
214
+ ).merge(options),
215
+ locate: lambda do |context|
216
+ context.structural_owners(owner_scope: :list_items).filter_map do |owner|
217
+ next if text && !owner.text.to_s.include?(text.to_s)
218
+
219
+ Ast::Crispr::Match.new(
220
+ node: owner,
221
+ start_line: owner.location.start_line,
222
+ end_line: owner.location.end_line,
223
+ metadata: {
224
+ start_boundary: :owner_start,
225
+ end_boundary: :owner_end,
226
+ payload_kind: :structural_owner_body,
227
+ depth: owner.depth,
228
+ marker: owner.marker,
229
+ text: owner.text
230
+ }
231
+ )
232
+ end
233
+ end
234
+ )
235
+ end
236
+
237
+ def inline_reference(label: nil, reference_kind: nil, id: nil, limit: nil, metadata: {}, **options)
238
+ Ast::Crispr::OwnerSelector.new(
239
+ id: id || ['inline_reference', label, reference_kind].compact.join(':'),
240
+ limit: limit,
241
+ metadata: metadata.merge(
242
+ adapter: Ast::Crispr::Markdown::Markly.adapter,
243
+ owner_scope: :inline_references,
244
+ selector_kind: :inline_reference,
245
+ selection_intent: :predicate_filter,
246
+ include_trailing_gap: false
247
+ ).merge(options),
248
+ locate: lambda do |context|
249
+ context.structural_owners(owner_scope: :inline_references).filter_map do |owner|
250
+ next if label && !owner.labels.include?(label.to_s)
251
+ next if reference_kind && owner.reference_kind != reference_kind.to_sym
252
+
253
+ Ast::Crispr::Match.new(
254
+ node: owner,
255
+ start_line: owner.location.start_line,
256
+ end_line: owner.location.end_line,
257
+ metadata: {
258
+ start_boundary: :owner_start,
259
+ end_boundary: :owner_end,
260
+ payload_kind: :structural_owner_body,
261
+ label: owner.label,
262
+ labels: owner.labels,
263
+ reference_kind: owner.reference_kind,
264
+ start_column: owner.start_column,
265
+ end_column: owner.end_column
266
+ }
267
+ )
268
+ end
269
+ end
270
+ )
271
+ end
272
+
273
+ def html_comment_block(start_text:, end_text:, id: nil, limit: nil, span: :nearest,
274
+ include_trailing_gap: false, metadata: {}, **options)
275
+ Ast::Crispr::OwnerSelector.new(
276
+ id: id || "html_comment_block_#{start_text}",
277
+ limit: limit,
278
+ metadata: metadata.merge(
279
+ adapter: Ast::Crispr::Markdown::Markly.adapter,
280
+ owner_scope: :html_comments,
281
+ selector_kind: :html_comment_block,
282
+ selection_intent: :predicate_filter,
283
+ include_trailing_gap: include_trailing_gap
284
+ ).merge(options),
285
+ locate: lambda do |context|
286
+ comments = context.structural_owners(owner_scope: :html_comments)
287
+ if span.to_sym == :outermost
288
+ opening = comments.find { |comment| comment.text.to_s == start_text.to_s }
289
+ closing = comments.reverse.find do |comment|
290
+ opening && comment.text.to_s == end_text.to_s && comment.location.end_line >= opening.location.start_line
291
+ end
292
+ next [] unless opening && closing
293
+
294
+ end_line = closing.location.end_line
295
+ end_line = context.expand_following_gap(end_line) if include_trailing_gap
296
+ next [
297
+ Ast::Crispr::Match.new(
298
+ node: opening,
299
+ start_line: opening.location.start_line,
300
+ end_line: end_line,
301
+ metadata: {
302
+ start_boundary: :owner_start,
303
+ end_boundary: (include_trailing_gap ? :owner_end_plus_trailing_gap : :owner_end),
304
+ payload_kind: :structural_owner_body,
305
+ start_text: start_text,
306
+ end_text: end_text
307
+ }
308
+ )
309
+ ]
310
+ end
311
+
312
+ comments.each_with_index.filter_map do |owner, index|
313
+ next unless owner.text.to_s == start_text.to_s
314
+
315
+ closing = comments[index + 1..]&.find { |comment| comment.text.to_s == end_text.to_s }
316
+ next unless closing
317
+
318
+ end_line = closing.location.end_line
319
+ end_line = context.expand_following_gap(end_line) if include_trailing_gap
320
+ Ast::Crispr::Match.new(
321
+ node: owner,
322
+ start_line: owner.location.start_line,
323
+ end_line: end_line,
324
+ metadata: {
325
+ start_boundary: :owner_start,
326
+ end_boundary: (include_trailing_gap ? :owner_end_plus_trailing_gap : :owner_end),
327
+ payload_kind: :structural_owner_body,
328
+ start_text: start_text,
329
+ end_text: end_text
330
+ }
331
+ )
332
+ end
333
+ end
334
+ )
335
+ end
336
+ end
337
+
338
+ Targets = Selectors
339
+
340
+ class << self
341
+ def adapter
342
+ @adapter ||= Adapter.new
343
+ end
344
+
345
+ def document_context(content:, source_label: 'source', metadata: {}, **options)
346
+ Ast::Crispr::DocumentContext.new(
347
+ content: content,
348
+ source_label: source_label,
349
+ adapter: adapter,
350
+ metadata: metadata,
351
+ **options
352
+ )
353
+ end
354
+ end
355
+ end
356
+ end
357
+ end
358
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ast/crispr/markdown/markly'
4
+ require 'version_gem'
5
+ require_relative 'ast/crispr/markdown/markly/version'
6
+
7
+ Ast::Crispr::Markdown::Markly::Version.class_eval do
8
+ extend VersionGem::Basic
9
+ end
@@ -0,0 +1,12 @@
1
+ module Ast
2
+ module Crispr
3
+ module Markdown
4
+ module Markly
5
+ module Version
6
+ VERSION: String
7
+ end
8
+ VERSION: String
9
+ end
10
+ end
11
+ end
12
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,361 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ast-crispr-markdown-markly
3
+ version: !ruby/object:Gem::Version
4
+ version: 7.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Peter H. Boling
8
+ bindir: exe
9
+ cert_chain:
10
+ - |
11
+ -----BEGIN CERTIFICATE-----
12
+ MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
13
+ ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
14
+ A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
15
+ DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
16
+ LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
17
+ uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
18
+ LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
19
+ mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
20
+ coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
21
+ FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
22
+ yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
23
+ to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
24
+ qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
25
+ fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
26
+ HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
27
+ A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
28
+ ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
29
+ wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
30
+ L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
31
+ GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
32
+ kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
33
+ QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
34
+ 0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
35
+ DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
36
+ L9nRqA==
37
+ -----END CERTIFICATE-----
38
+ date: 1980-01-02 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: ast-crispr
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '='
45
+ - !ruby/object:Gem::Version
46
+ version: 7.1.1
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 7.1.1
54
+ - !ruby/object:Gem::Dependency
55
+ name: markdown-merge
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '='
59
+ - !ruby/object:Gem::Version
60
+ version: 7.1.1
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '='
66
+ - !ruby/object:Gem::Version
67
+ version: 7.1.1
68
+ - !ruby/object:Gem::Dependency
69
+ name: markly-merge
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '='
73
+ - !ruby/object:Gem::Version
74
+ version: 7.1.1
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '='
80
+ - !ruby/object:Gem::Version
81
+ version: 7.1.1
82
+ - !ruby/object:Gem::Dependency
83
+ name: version_gem
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.1'
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 1.1.15
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: '1.1'
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 1.1.15
102
+ - !ruby/object:Gem::Dependency
103
+ name: kettle-dev
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '2.5'
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 2.5.17
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '2.5'
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 2.5.17
122
+ - !ruby/object:Gem::Dependency
123
+ name: bundler-audit
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: 0.9.3
129
+ type: :development
130
+ prerelease: false
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: 0.9.3
136
+ - !ruby/object:Gem::Dependency
137
+ name: rake
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '13.0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '13.0'
150
+ - !ruby/object:Gem::Dependency
151
+ name: require_bench
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '1.0'
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 1.0.4
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.0'
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 1.0.4
170
+ - !ruby/object:Gem::Dependency
171
+ name: anonymous_loader
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '0.1'
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 0.1.3
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.1'
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 0.1.3
190
+ - !ruby/object:Gem::Dependency
191
+ name: appraisal2
192
+ requirement: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - "~>"
195
+ - !ruby/object:Gem::Version
196
+ version: '3.2'
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: 3.2.0
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - "~>"
205
+ - !ruby/object:Gem::Version
206
+ version: '3.2'
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: 3.2.0
210
+ - !ruby/object:Gem::Dependency
211
+ name: kettle-test
212
+ requirement: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: '2.0'
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: 2.0.19
220
+ type: :development
221
+ prerelease: false
222
+ version_requirements: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - "~>"
225
+ - !ruby/object:Gem::Version
226
+ version: '2.0'
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: 2.0.19
230
+ - !ruby/object:Gem::Dependency
231
+ name: turbo_tests2
232
+ requirement: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '3.2'
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ version: 3.2.4
240
+ type: :development
241
+ prerelease: false
242
+ version_requirements: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - "~>"
245
+ - !ruby/object:Gem::Version
246
+ version: '3.2'
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: 3.2.4
250
+ - !ruby/object:Gem::Dependency
251
+ name: ruby-progressbar
252
+ requirement: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: '1.13'
257
+ type: :development
258
+ prerelease: false
259
+ version_requirements: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: '1.13'
264
+ - !ruby/object:Gem::Dependency
265
+ name: stone_checksums
266
+ requirement: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: '1.0'
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ version: 1.0.8
274
+ type: :development
275
+ prerelease: false
276
+ version_requirements: !ruby/object:Gem::Requirement
277
+ requirements:
278
+ - - "~>"
279
+ - !ruby/object:Gem::Version
280
+ version: '1.0'
281
+ - - ">="
282
+ - !ruby/object:Gem::Version
283
+ version: 1.0.8
284
+ - !ruby/object:Gem::Dependency
285
+ name: gitmoji-regex
286
+ requirement: !ruby/object:Gem::Requirement
287
+ requirements:
288
+ - - "~>"
289
+ - !ruby/object:Gem::Version
290
+ version: '2.0'
291
+ - - ">="
292
+ - !ruby/object:Gem::Version
293
+ version: 2.0.11
294
+ type: :development
295
+ prerelease: false
296
+ version_requirements: !ruby/object:Gem::Requirement
297
+ requirements:
298
+ - - "~>"
299
+ - !ruby/object:Gem::Version
300
+ version: '2.0'
301
+ - - ">="
302
+ - !ruby/object:Gem::Version
303
+ version: 2.0.11
304
+ description: "\U0001F9EC Markdown/Markly heading section selectors and edit helpers
305
+ for ast-crispr."
306
+ email:
307
+ - floss@galtzo.com
308
+ executables: []
309
+ extensions: []
310
+ extra_rdoc_files: []
311
+ files:
312
+ - LICENSE.md
313
+ - README.md
314
+ - lib/ast-crispr-markdown-markly.rb
315
+ - lib/ast/crispr/markdown/markly.rb
316
+ - lib/ast/crispr/markdown/markly/version.rb
317
+ - sig/ast/crispr/markdown/markly.rbs
318
+ homepage: https://github.com/structuredmerge/structuredmerge-ruby
319
+ licenses:
320
+ - AGPL-3.0-only
321
+ - PolyForm-Small-Business-1.0.0
322
+ metadata:
323
+ homepage_uri: https://structuredmerge.org
324
+ source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.1
325
+ changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.1/CHANGELOG.md
326
+ bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
327
+ documentation_uri: https://www.rubydoc.info/gems/ast-crispr-markdown-markly/7.1.1
328
+ funding_uri: https://github.com/sponsors/pboling
329
+ wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
330
+ news_uri: https://www.railsbling.com/tags/ast-crispr-markdown-markly
331
+ discord_uri: https://discord.gg/3qme4XHNKN
332
+ mailing_list_uri: https://www.rubyforum.org/tag/structuredmerge
333
+ rubygems_mfa_required: 'true'
334
+ rdoc_options:
335
+ - "--title"
336
+ - "ast-crispr-markdown-markly - \U0001F9EC Markly adapter for AST CRISPR structural
337
+ edits"
338
+ - "--main"
339
+ - README.md
340
+ - "--exclude"
341
+ - "^sig/"
342
+ - "--line-numbers"
343
+ - "--inline-source"
344
+ - "--quiet"
345
+ require_paths:
346
+ - lib
347
+ required_ruby_version: !ruby/object:Gem::Requirement
348
+ requirements:
349
+ - - ">="
350
+ - !ruby/object:Gem::Version
351
+ version: 4.0.0
352
+ required_rubygems_version: !ruby/object:Gem::Requirement
353
+ requirements:
354
+ - - ">="
355
+ - !ruby/object:Gem::Version
356
+ version: '0'
357
+ requirements: []
358
+ rubygems_version: 4.0.17
359
+ specification_version: 4
360
+ summary: "\U0001F9EC Markly adapter for AST CRISPR structural edits"
361
+ test_files: []
metadata.gz.sig ADDED
@@ -0,0 +1 @@
1
+ {��ts��&0~+�rz�����jvh̓�.��z�єxƍ�L���bӈ;�tK˵�n�l�҃$�%]