asciidoclint 0.5.0

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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +258 -0
  3. package/assets/README.md +12 -0
  4. package/assets/icon.svg +198 -0
  5. package/assets/logo.svg +203 -0
  6. package/dist/api/fixes.d.ts +6 -0
  7. package/dist/api/fixes.js +61 -0
  8. package/dist/api/lint.d.ts +2 -0
  9. package/dist/api/lint.js +191 -0
  10. package/dist/api/rules.d.ts +33 -0
  11. package/dist/api/rules.js +115 -0
  12. package/dist/cli/index.d.ts +2 -0
  13. package/dist/cli/index.js +86 -0
  14. package/dist/cli/init-rule.d.ts +7 -0
  15. package/dist/cli/init-rule.js +74 -0
  16. package/dist/cli/install-skill.d.ts +10 -0
  17. package/dist/cli/install-skill.js +37 -0
  18. package/dist/formatters/json.d.ts +2 -0
  19. package/dist/formatters/json.js +30 -0
  20. package/dist/formatters/pretty.d.ts +2 -0
  21. package/dist/formatters/pretty.js +41 -0
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.js +3 -0
  24. package/dist/parsers/asciidoctor.d.ts +4 -0
  25. package/dist/parsers/asciidoctor.js +444 -0
  26. package/dist/parsers/tolerant.d.ts +4 -0
  27. package/dist/parsers/tolerant.js +528 -0
  28. package/dist/rules/AD001.d.ts +2 -0
  29. package/dist/rules/AD001.js +28 -0
  30. package/dist/rules/AD002.d.ts +2 -0
  31. package/dist/rules/AD002.js +30 -0
  32. package/dist/rules/AD003.d.ts +2 -0
  33. package/dist/rules/AD003.js +28 -0
  34. package/dist/rules/AD004.d.ts +2 -0
  35. package/dist/rules/AD004.js +58 -0
  36. package/dist/rules/AD005.d.ts +2 -0
  37. package/dist/rules/AD005.js +31 -0
  38. package/dist/rules/AD006.d.ts +2 -0
  39. package/dist/rules/AD006.js +53 -0
  40. package/dist/rules/AD007.d.ts +2 -0
  41. package/dist/rules/AD007.js +39 -0
  42. package/dist/rules/AD008.d.ts +2 -0
  43. package/dist/rules/AD008.js +88 -0
  44. package/dist/rules/AD010.d.ts +2 -0
  45. package/dist/rules/AD010.js +39 -0
  46. package/dist/rules/AD011.d.ts +2 -0
  47. package/dist/rules/AD011.js +31 -0
  48. package/dist/rules/AD012.d.ts +2 -0
  49. package/dist/rules/AD012.js +28 -0
  50. package/dist/rules/AD013.d.ts +2 -0
  51. package/dist/rules/AD013.js +43 -0
  52. package/dist/rules/AD016.d.ts +2 -0
  53. package/dist/rules/AD016.js +83 -0
  54. package/dist/rules/AD017.d.ts +2 -0
  55. package/dist/rules/AD017.js +53 -0
  56. package/dist/rules/AD019.d.ts +2 -0
  57. package/dist/rules/AD019.js +58 -0
  58. package/dist/rules/AD020.d.ts +2 -0
  59. package/dist/rules/AD020.js +40 -0
  60. package/dist/rules/AD022.d.ts +2 -0
  61. package/dist/rules/AD022.js +55 -0
  62. package/dist/rules/AD023.d.ts +2 -0
  63. package/dist/rules/AD023.js +59 -0
  64. package/dist/rules/AD024.d.ts +2 -0
  65. package/dist/rules/AD024.js +30 -0
  66. package/dist/rules/AD025.d.ts +2 -0
  67. package/dist/rules/AD025.js +32 -0
  68. package/dist/rules/AD026.d.ts +2 -0
  69. package/dist/rules/AD026.js +26 -0
  70. package/dist/rules/AD027.d.ts +2 -0
  71. package/dist/rules/AD027.js +31 -0
  72. package/dist/rules/AD028.d.ts +2 -0
  73. package/dist/rules/AD028.js +113 -0
  74. package/dist/rules/AD029.d.ts +2 -0
  75. package/dist/rules/AD029.js +46 -0
  76. package/dist/rules/AD030.d.ts +2 -0
  77. package/dist/rules/AD030.js +33 -0
  78. package/dist/rules/AD031.d.ts +2 -0
  79. package/dist/rules/AD031.js +66 -0
  80. package/dist/rules/AD032.d.ts +2 -0
  81. package/dist/rules/AD032.js +81 -0
  82. package/dist/rules/AD034.d.ts +2 -0
  83. package/dist/rules/AD034.js +50 -0
  84. package/dist/rules/AD035.d.ts +2 -0
  85. package/dist/rules/AD035.js +77 -0
  86. package/dist/rules/AD036.d.ts +2 -0
  87. package/dist/rules/AD036.js +34 -0
  88. package/dist/rules/AD037.d.ts +2 -0
  89. package/dist/rules/AD037.js +34 -0
  90. package/dist/rules/AD039.d.ts +2 -0
  91. package/dist/rules/AD039.js +58 -0
  92. package/dist/rules/AD040.d.ts +2 -0
  93. package/dist/rules/AD040.js +56 -0
  94. package/dist/rules/AD041.d.ts +2 -0
  95. package/dist/rules/AD041.js +66 -0
  96. package/dist/rules/AD042.d.ts +2 -0
  97. package/dist/rules/AD042.js +62 -0
  98. package/dist/rules/AD043.d.ts +2 -0
  99. package/dist/rules/AD043.js +30 -0
  100. package/dist/rules/AD044.d.ts +2 -0
  101. package/dist/rules/AD044.js +54 -0
  102. package/dist/rules/AD045.d.ts +2 -0
  103. package/dist/rules/AD045.js +66 -0
  104. package/dist/rules/builtin.d.ts +3 -0
  105. package/dist/rules/builtin.js +81 -0
  106. package/dist/rules/helpers.d.ts +2 -0
  107. package/dist/rules/helpers.js +11 -0
  108. package/dist/rules/registry.d.ts +3 -0
  109. package/dist/rules/registry.js +34 -0
  110. package/dist/rules/utils.d.ts +42 -0
  111. package/dist/rules/utils.js +274 -0
  112. package/dist/types.d.ts +166 -0
  113. package/dist/types.js +1 -0
  114. package/dist/version.d.ts +2 -0
  115. package/dist/version.js +4 -0
  116. package/package.json +70 -0
  117. package/skills/asciidoclint/SKILL.md +84 -0
  118. package/skills/asciidoclint/references/ai-fix-policy.md +11 -0
  119. package/skills/asciidoclint/references/result-schema.md +22 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shawn Hu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,258 @@
1
+ <p align="center">
2
+ <img src="assets/logo.svg" width="160" height="160" alt="asciidoclint logo">
3
+ </p>
4
+ <p align="center">
5
+ <sub><code>assets/logo.svg</code> and <code>assets/icon.svg</code> were created with <a href="https://inkscape.org/">Inkscape</a>. The <strong>lint</strong> label uses <a href="https://www.jetbrains.com/lp/mono/">JetBrains Mono</a> (SIL Open Font License).</sub>
6
+ </p>
7
+
8
+ # asciidoclint
9
+
10
+ `asciidoclint` is an AsciiDoc syntax, structure, and document-policy linter for
11
+ CLI, AI-agent, and editor workflows.
12
+
13
+ `asciidoclint` began as an in-house implementation and has been open-sourced
14
+ under the MIT License since June 1, 2026.
15
+
16
+ Design goals:
17
+
18
+ - Provide a library-first, typed, plugin-friendly rule model.
19
+ - Use Asciidoctor-backed diagnostics, source mapping, include awareness, and a
20
+ safe/unsafe fix model.
21
+ - Keep generic AsciiDoc syntax/structure rules separate from project or
22
+ organization policy rules.
23
+
24
+ Start with the architecture proposal:
25
+
26
+ - [Architecture](docs/architecture.md)
27
+
28
+ ## Install the npm package
29
+
30
+ Install in a project:
31
+
32
+ ```bash
33
+ npm install --save-dev asciidoclint
34
+ ```
35
+
36
+ Run the CLI:
37
+
38
+ ```bash
39
+ npx asciidoclint docs/**/*.adoc
40
+ npx asciidoclint --format json docs/**/*.adoc
41
+ npx asciidoclint --fix docs/**/*.adoc
42
+ npx asciidoclint --fix --unsafe docs/**/*.adoc
43
+ ```
44
+
45
+ Inspect rules:
46
+
47
+ ```bash
48
+ npx asciidoclint --list-rules
49
+ npx asciidoclint --explain AD001
50
+ npx asciidoclint --explain heading-level-progression
51
+ ```
52
+
53
+ Load organization-specific conformance or style rules as custom rules:
54
+
55
+ ```yaml
56
+ extends:
57
+ - asciidoclint:recommended
58
+
59
+ ignores:
60
+ - build/**
61
+
62
+ customRules:
63
+ - ./lint-rules/ORG001-no-todo.js
64
+ - ./lint-rules/ORG002-section-policy.js
65
+ ```
66
+
67
+ Scaffold a custom rule without modifying `asciidoclint` source:
68
+
69
+ ```bash
70
+ npx asciidoclint init-rule --pack my-org --id ORG001 --alias no-todo
71
+ ```
72
+
73
+ ## Install the AI skill
74
+
75
+ The repository ships an `asciidoclint` skill under `skills/asciidoclint`. The
76
+ skill lets AI agents trigger lint, summarize results, apply safe fixes, apply
77
+ explicit unsafe fixes, and use reported `fixHelper` guidance for focused
78
+ AI-assisted repairs.
79
+
80
+ Install the skill directly from GitHub with the open skills CLI:
81
+
82
+ ```bash
83
+ npx skills add f33lgood/asciidoclint --skill asciidoclint -a codex -g
84
+ ```
85
+
86
+ The repository hides repo-maintenance skills from normal discovery, so the
87
+ shorter form installs the public `asciidoclint` skill too:
88
+
89
+ ```bash
90
+ npx skills add f33lgood/asciidoclint
91
+ ```
92
+
93
+ If you already installed the npm package and want the matching bundled skill
94
+ version, install it through the `asciidoclint` CLI:
95
+
96
+ ```bash
97
+ npx asciidoclint install-skill
98
+ ```
99
+
100
+ Useful installer options:
101
+
102
+ ```bash
103
+ npx asciidoclint install-skill --project
104
+ npx asciidoclint install-skill --dest ./tmp/skills --force
105
+ ```
106
+
107
+ ## VS Code and Cursor extension
108
+
109
+ `asciidoclint` is also available as a VS Code/Cursor extension. The extension
110
+ shows lint issues as source-file diagnostics in the editor and Problems panel,
111
+ including diagnostics mapped back to included source files.
112
+
113
+ The extension can import CLI diagnostics written by:
114
+
115
+ ```bash
116
+ npx asciidoclint --format json \
117
+ --output-diagnostics .asciidoclint/diagnostics.json \
118
+ docs/index.adoc
119
+ ```
120
+
121
+ See [packages/vscode-asciidoclint](packages/vscode-asciidoclint/README.md) for
122
+ extension commands and settings.
123
+
124
+ ## Use this repository
125
+
126
+ Install dependencies:
127
+
128
+ ```bash
129
+ npm install
130
+ ```
131
+
132
+ Run the check loop:
133
+
134
+ ```bash
135
+ npm run check
136
+ ```
137
+
138
+ Run coverage only:
139
+
140
+ ```bash
141
+ npm run test:coverage
142
+ ```
143
+
144
+ Coverage thresholds and the latest metrics are documented in
145
+ [docs/reports/report-coverage.md](docs/reports/report-coverage.md).
146
+
147
+ Run the CLI from source:
148
+
149
+ ```bash
150
+ npx tsx src/cli/index.ts test/fixtures/api/structural_errors.adoc
151
+ npx tsx src/cli/index.ts --format json test/fixtures/api/structural_errors.adoc
152
+ npx tsx src/cli/index.ts --fix test/fixtures/api/structure_only.adoc
153
+ npx tsx src/cli/index.ts install-skill --dest ./tmp/skills --force
154
+ ```
155
+
156
+ Build and package the VS Code/Cursor extension:
157
+
158
+ ```bash
159
+ npm run build:extension
160
+ npm test -w vscode-asciidoclint
161
+ npm run package -w vscode-asciidoclint
162
+ ```
163
+
164
+ Install the generated `.vsix` in Cursor with **Extensions: Install from VSIX**,
165
+ then run **asciidoclint: Lint Current File** or **asciidoclint: Lint Workspace**.
166
+
167
+ ## Built-in Rules
168
+
169
+ | ID / Alias | Short description |
170
+ |---|---|
171
+ | `AD000/asciidoctor-diagnostic` | Asciidoctor parser/render diagnostics are reported as lint findings |
172
+ | `AD001/heading-level-progression` | Section headings must not skip levels |
173
+ | `AD002/single-document-title` | Article documents should have only one level-0 title |
174
+ | `AD003/unterminated-block` | Delimited blocks should have matching closing delimiters |
175
+ | `AD004/table-cell-count` | Table rows should match the declared column count |
176
+ | `AD005/explicit-document-title` | Root documents should provide an explicit document title |
177
+ | `AD006/included-document-title` | Included AsciiDoc files should not introduce a level-0 title without level offset |
178
+ | `AD007/heading-depth-limit` | Section headings should not exceed Asciidoctor's supported depth |
179
+ | `AD008/blank-before-list` | Lists should be separated from preceding paragraph text |
180
+ | `AD010/table-title` | Table blocks should have a title |
181
+ | `AD011/image-title` | Block images should have a title |
182
+ | `AD012/diagram-title` | Diagram blocks should have a title |
183
+ | `AD013/standalone-inline-image` | Standalone image macros should use block image syntax |
184
+ | `AD016/malformed-figure-caption` | Figure captions should use AsciiDoc title syntax |
185
+ | `AD017/malformed-table-caption` | Table captions should use AsciiDoc title syntax |
186
+ | `AD019/content-after-include` | Text should not be attached directly after include directives |
187
+ | `AD020/appendix-section-level` | Appendices should be section-level blocks in article documents |
188
+ | `AD022/circular-include` | Include trees must not contain cycles |
189
+ | `AD023/empty-section` | Sections should contain body content or child sections |
190
+ | `AD024/missing-include` | Include targets should exist after attribute substitution |
191
+ | `AD025/missing-image` | Image targets should exist after attribute substitution |
192
+ | `AD026/missing-xref` | Cross-reference targets should resolve to an anchor or file |
193
+ | `AD027/missing-local-link` | Local link targets should resolve to existing files |
194
+ | `AD028/image-alt-text` | Images should not explicitly set empty alt text |
195
+ | `AD029/markdown-link-image-residue` | Markdown link and image residue should not render as text |
196
+ | `AD030/markdown-table-residue` | Markdown pipe table residue should not render as text |
197
+ | `AD031/no-nested-link-text` | Link text should not contain nested links or cross references |
198
+ | `AD032/blank-before-block` | Structural block delimiters should be preceded by a blank line |
199
+ | `AD034/no-hard-tabs` | Prose and structural markup lines should not contain hard tabs |
200
+ | `AD035/blank-after-block` | Structural block delimiters should be followed by a blank line |
201
+ | `AD036/list-marker-residue` | Standalone list marker residue should be removed or completed |
202
+ | `AD037/underline-residue` | Standalone three-underscore residue should be removed or converted |
203
+ | `AD039/punctuation-passthrough-residue` | Safe punctuation passthrough residue should be removed |
204
+ | `AD040/html-link-text-residue` | Link text should not contain raw HTML or XML residue |
205
+ | `AD041/no-space-in-inline-formatting` | Inline formatting markers should not contain inner spaces |
206
+ | `AD042/interdocument-xref-text` | Interdocument xrefs should provide explicit link text |
207
+ | `AD043/section-title-start-left` | Section title syntax should start at the beginning of the line |
208
+ | `AD044/local-adoc-link` | Local AsciiDoc files should be referenced with xref, not link |
209
+ | `AD045/markdown-heading-mix` | Markdown-compatible headings should not be mixed with AsciiDoc headings |
210
+
211
+ Detailed per-rule docs live under `docs/rules/`; `--explain` exposes the same
212
+ metadata programmatically.
213
+
214
+ ## Tags
215
+
216
+ Tags group related rules and can be used to enable or disable classes of rules.
217
+
218
+ | Group | IDs |
219
+ |---|---|
220
+ | `blank_lines` | `AD008` |
221
+ | `blocks` | `AD003`, `AD032`, `AD035` |
222
+ | `accessibility` | `AD028`, `AD042` |
223
+ | `cleanup` | `AD032`, `AD034`, `AD035`, `AD036`, `AD037`, `AD039`, `AD040`, `AD041` |
224
+ | `conversion` | `AD029`, `AD030`, `AD031`, `AD036`, `AD037`, `AD039`, `AD040` |
225
+ | `dependencies` | `AD024`, `AD025`, `AD026`, `AD027` |
226
+ | `diagram` | `AD012` |
227
+ | `format` | `AD041` |
228
+ | `headings` | `AD001`, `AD002`, `AD005`, `AD006`, `AD007`, `AD043`, `AD045` |
229
+ | `image` | `AD011`, `AD013`, `AD016`, `AD025`, `AD028` |
230
+ | `include` | `AD006`, `AD019`, `AD022`, `AD024` |
231
+ | `inline` | `AD041` |
232
+ | `lists` | `AD008`, `AD036` |
233
+ | `parser` | `AD000` |
234
+ | `table` | `AD004`, `AD010`, `AD017`, `AD030` |
235
+ | `whitespace` | `AD034` |
236
+ | `references` | `AD023` |
237
+ | `links` | `AD027`, `AD031`, `AD042`, `AD044` |
238
+ | `structure` | `AD043` |
239
+ | `markdown-compatibility` | `AD045` |
240
+ | `maintainability` | `AD045` |
241
+ | `xref` | `AD026`, `AD042`, `AD044` |
242
+
243
+ ## Rule ID Namespaces
244
+
245
+ Built-in rule IDs use one reserved namespace:
246
+
247
+ - `AD###` - all built-in `asciidoclint` rules.
248
+
249
+ Rule responsibility is expressed through tags such as `headings`,
250
+ `dependencies`, `policy`, and `cleanup`, not through multiple built-in ID
251
+ prefixes. This keeps built-in IDs predictable as the rule set grows.
252
+
253
+ Company, product, or template-specific rules should not be built-ins. Use a
254
+ three-letter custom prefix such as `ORG`, `ABC`, or a team-owned namespace. The
255
+ registry rejects duplicate IDs and aliases across built-in and custom rules.
256
+
257
+ The rule-by-rule rendering and severity rationale is in
258
+ [docs/rules/rule-necessity.md](docs/rules/rule-necessity.md).
@@ -0,0 +1,12 @@
1
+ # Brand assets
2
+
3
+ | File | Purpose |
4
+ | --- | --- |
5
+ | **`logo.svg`** | README, GitLab/GitHub, npm (includes **lint** text) |
6
+ | **`icon.svg`** | VS Code extension (`packages/vscode-asciidoclint/media/icon.svg`) — same as logo, no text |
7
+
8
+ Both SVGs were created with [Inkscape](https://inkscape.org/). The **lint** label in `logo.svg` uses [JetBrains Mono](https://www.jetbrains.com/lp/mono/) (SIL Open Font License).
9
+
10
+ When editing, open `logo.svg` in Inkscape. If the mark changes, update `icon.svg` as well (remove the `<text>…</text>` block, or hide the text layer and save a copy). For distribution without a font dependency, convert the text to paths (**Path → Object to Path**) before committing.
11
+
12
+ MIT — same as the project.
@@ -0,0 +1,198 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ viewBox="0 0 128 128"
4
+ role="img"
5
+ aria-labelledby="title desc"
6
+ version="1.1"
7
+ id="svg4"
8
+ sodipodi:docname="icon.svg"
9
+ xml:space="preserve"
10
+ inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ xmlns:svg="http://www.w3.org/2000/svg"><defs
15
+ id="defs4"><inkscape:path-effect
16
+ effect="bspline"
17
+ id="path-effect14"
18
+ is_visible="true"
19
+ lpeversion="1.3"
20
+ weight="33.333333"
21
+ steps="2"
22
+ helper_size="0"
23
+ apply_no_weight="true"
24
+ apply_with_weight="true"
25
+ only_selected="false"
26
+ uniform="false" /><linearGradient
27
+ id="swatch13"
28
+ inkscape:swatch="solid"><stop
29
+ style="stop-color:#000000;stop-opacity:1;"
30
+ offset="0"
31
+ id="stop13" /></linearGradient><inkscape:path-effect
32
+ effect="bspline"
33
+ id="path-effect13"
34
+ is_visible="true"
35
+ lpeversion="1.3"
36
+ weight="33.333333"
37
+ steps="2"
38
+ helper_size="0"
39
+ apply_no_weight="true"
40
+ apply_with_weight="true"
41
+ only_selected="false"
42
+ uniform="false" /><inkscape:path-effect
43
+ effect="bspline"
44
+ id="path-effect12"
45
+ is_visible="true"
46
+ lpeversion="1.3"
47
+ weight="33.333333"
48
+ steps="2"
49
+ helper_size="0"
50
+ apply_no_weight="true"
51
+ apply_with_weight="true"
52
+ only_selected="false"
53
+ uniform="false" /><inkscape:path-effect
54
+ effect="bspline"
55
+ id="path-effect11"
56
+ is_visible="true"
57
+ lpeversion="1.3"
58
+ weight="33.333333"
59
+ steps="2"
60
+ helper_size="0"
61
+ apply_no_weight="true"
62
+ apply_with_weight="true"
63
+ only_selected="false"
64
+ uniform="false" /><inkscape:path-effect
65
+ effect="bspline"
66
+ id="path-effect10"
67
+ is_visible="true"
68
+ lpeversion="1.3"
69
+ weight="33.333333"
70
+ steps="2"
71
+ helper_size="0"
72
+ apply_no_weight="true"
73
+ apply_with_weight="true"
74
+ only_selected="false"
75
+ uniform="false" /><inkscape:path-effect
76
+ effect="bspline"
77
+ id="path-effect9"
78
+ is_visible="true"
79
+ lpeversion="1.3"
80
+ weight="33.333333"
81
+ steps="2"
82
+ helper_size="0"
83
+ apply_no_weight="true"
84
+ apply_with_weight="true"
85
+ only_selected="false"
86
+ uniform="false" /><inkscape:path-effect
87
+ effect="spiro"
88
+ id="path-effect8"
89
+ is_visible="true"
90
+ lpeversion="1" /><inkscape:path-effect
91
+ effect="bspline"
92
+ id="path-effect3"
93
+ is_visible="true"
94
+ lpeversion="1.3"
95
+ weight="33.333333"
96
+ steps="2"
97
+ helper_size="0"
98
+ apply_no_weight="true"
99
+ apply_with_weight="true"
100
+ only_selected="false"
101
+ uniform="false" /><inkscape:path-effect
102
+ effect="bspline"
103
+ id="path-effect7"
104
+ is_visible="true"
105
+ lpeversion="1.3"
106
+ weight="33.333333"
107
+ steps="2"
108
+ helper_size="0"
109
+ apply_no_weight="true"
110
+ apply_with_weight="true"
111
+ only_selected="false"
112
+ uniform="false" /><inkscape:path-effect
113
+ effect="bspline"
114
+ id="path-effect6"
115
+ is_visible="true"
116
+ lpeversion="1.3"
117
+ weight="33.333333"
118
+ steps="2"
119
+ helper_size="0"
120
+ apply_no_weight="true"
121
+ apply_with_weight="true"
122
+ only_selected="false"
123
+ uniform="false" /><inkscape:path-effect
124
+ effect="bspline"
125
+ id="path-effect5"
126
+ is_visible="true"
127
+ lpeversion="1.3"
128
+ weight="33.333333"
129
+ steps="2"
130
+ helper_size="0"
131
+ apply_no_weight="true"
132
+ apply_with_weight="true"
133
+ only_selected="false"
134
+ uniform="false" /><inkscape:path-effect
135
+ effect="bspline"
136
+ id="path-effect4"
137
+ is_visible="true"
138
+ lpeversion="1.3"
139
+ weight="33.333333"
140
+ steps="2"
141
+ helper_size="0"
142
+ apply_no_weight="true"
143
+ apply_with_weight="true"
144
+ only_selected="false"
145
+ uniform="false" /></defs><sodipodi:namedview
146
+ id="namedview4"
147
+ pagecolor="#ffffff"
148
+ bordercolor="#000000"
149
+ borderopacity="0.25"
150
+ inkscape:showpageshadow="2"
151
+ inkscape:pageopacity="0.0"
152
+ inkscape:pagecheckerboard="0"
153
+ inkscape:deskcolor="#d1d1d1"
154
+ showgrid="true"
155
+ inkscape:zoom="2.298097"
156
+ inkscape:cx="2.8284271"
157
+ inkscape:cy="52.434687"
158
+ inkscape:window-width="1440"
159
+ inkscape:window-height="726"
160
+ inkscape:window-x="0"
161
+ inkscape:window-y="33"
162
+ inkscape:window-maximized="0"
163
+ inkscape:current-layer="svg4"><inkscape:grid
164
+ id="grid4"
165
+ units="px"
166
+ originx="0"
167
+ originy="0"
168
+ spacingx="1"
169
+ spacingy="1"
170
+ empcolor="#0099e5"
171
+ empopacity="0.30196078"
172
+ color="#0099e5"
173
+ opacity="0.14901961"
174
+ empspacing="5"
175
+ enabled="true"
176
+ visible="true" /></sodipodi:namedview><title
177
+ id="title">asciidoclint</title><desc id="desc">Compact icon: logo without Lint text</desc><rect
178
+ width="128"
179
+ height="128"
180
+ rx="28"
181
+ fill="#e40046"
182
+ id="rect1" /><g
183
+ fill="none"
184
+ stroke="#ffffff"
185
+ stroke-width="10"
186
+ stroke-linecap="round"
187
+ stroke-linejoin="round"
188
+ id="g3"
189
+ transform="matrix(0.8004134,0,0,0.8004134,13.923007,6.3310621)"><path
190
+ d="M 36.153846,94.307692 64,28"
191
+ id="path1"
192
+ sodipodi:nodetypes="cc" /><path
193
+ d="M 92.461538,94.307692 64,28"
194
+ id="path2"
195
+ sodipodi:nodetypes="cc" /></g><path
196
+ id="path14"
197
+ style="fill:none;fill-opacity:1;stroke:#ffff00;stroke-width:4.45706;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
198
+ d="m 41.675229,96.773101 c 1.340122,-1.303113 2.643607,-3.268472 3.888134,-3.346229 1.641041,-0.102533 3.179471,3.076889 4.717948,2.974289 1.538477,-0.102591 3.076909,-3.487142 4.820518,-3.435824 1.743609,0.05132 3.692287,3.538424 5.435892,3.640954 1.743604,0.10254 3.282037,-3.179451 4.871798,-3.128135 1.58976,0.05132 3.230754,3.435865 4.871793,3.384545 1.64104,-0.05131 3.282035,-3.538425 4.97436,-3.640956 1.692326,-0.102531 3.435882,3.179456 5.128206,3.179426 1.692325,-4.1e-5 3.333316,-3.282024 4.974359,-3.230708 1.379819,0.04315 2.759604,2.442813 4.139412,3.754388" /></svg>