@mark1russell7/ste-lint 0.0.0-stage → 0.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.
Files changed (227) hide show
  1. package/README.md +225 -2
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +9 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +103 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +251 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/dictionary.d.ts +74 -0
  12. package/dist/dictionary.d.ts.map +1 -0
  13. package/dist/dictionary.js +169 -0
  14. package/dist/dictionary.js.map +1 -0
  15. package/dist/files.d.ts +35 -0
  16. package/dist/files.d.ts.map +1 -0
  17. package/dist/files.js +181 -0
  18. package/dist/files.js.map +1 -0
  19. package/dist/format.d.ts +21 -0
  20. package/dist/format.d.ts.map +1 -0
  21. package/dist/format.js +61 -0
  22. package/dist/format.js.map +1 -0
  23. package/dist/index.d.ts +17 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +17 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lexicon.d.ts +33 -0
  28. package/dist/lexicon.d.ts.map +1 -0
  29. package/dist/lexicon.js +71 -0
  30. package/dist/lexicon.js.map +1 -0
  31. package/dist/lint.d.ts +28 -0
  32. package/dist/lint.d.ts.map +1 -0
  33. package/dist/lint.js +132 -0
  34. package/dist/lint.js.map +1 -0
  35. package/dist/rules/about-quantity.d.ts +3 -0
  36. package/dist/rules/about-quantity.d.ts.map +1 -0
  37. package/dist/rules/about-quantity.js +34 -0
  38. package/dist/rules/about-quantity.js.map +1 -0
  39. package/dist/rules/index.d.ts +8 -0
  40. package/dist/rules/index.d.ts.map +1 -0
  41. package/dist/rules/index.js +35 -0
  42. package/dist/rules/index.js.map +1 -0
  43. package/dist/rules/ing-verb.d.ts +9 -0
  44. package/dist/rules/ing-verb.d.ts.map +1 -0
  45. package/dist/rules/ing-verb.js +60 -0
  46. package/dist/rules/ing-verb.js.map +1 -0
  47. package/dist/rules/latin-abbreviation.d.ts +3 -0
  48. package/dist/rules/latin-abbreviation.d.ts.map +1 -0
  49. package/dist/rules/latin-abbreviation.js +48 -0
  50. package/dist/rules/latin-abbreviation.js.map +1 -0
  51. package/dist/rules/missing-subject.d.ts +16 -0
  52. package/dist/rules/missing-subject.d.ts.map +1 -0
  53. package/dist/rules/missing-subject.js +138 -0
  54. package/dist/rules/missing-subject.js.map +1 -0
  55. package/dist/rules/modal-verb.d.ts +3 -0
  56. package/dist/rules/modal-verb.d.ts.map +1 -0
  57. package/dist/rules/modal-verb.js +72 -0
  58. package/dist/rules/modal-verb.js.map +1 -0
  59. package/dist/rules/noun-cluster.d.ts +17 -0
  60. package/dist/rules/noun-cluster.d.ts.map +1 -0
  61. package/dist/rules/noun-cluster.js +83 -0
  62. package/dist/rules/noun-cluster.js.map +1 -0
  63. package/dist/rules/paragraph-length.d.ts +3 -0
  64. package/dist/rules/paragraph-length.d.ts.map +1 -0
  65. package/dist/rules/paragraph-length.js +19 -0
  66. package/dist/rules/paragraph-length.js.map +1 -0
  67. package/dist/rules/passive-instruction.d.ts +15 -0
  68. package/dist/rules/passive-instruction.d.ts.map +1 -0
  69. package/dist/rules/passive-instruction.js +38 -0
  70. package/dist/rules/passive-instruction.js.map +1 -0
  71. package/dist/rules/pronouns.d.ts +4 -0
  72. package/dist/rules/pronouns.d.ts.map +1 -0
  73. package/dist/rules/pronouns.js +57 -0
  74. package/dist/rules/pronouns.js.map +1 -0
  75. package/dist/rules/rule.d.ts +46 -0
  76. package/dist/rules/rule.d.ts.map +1 -0
  77. package/dist/rules/rule.js +31 -0
  78. package/dist/rules/rule.js.map +1 -0
  79. package/dist/rules/semicolon.d.ts +3 -0
  80. package/dist/rules/semicolon.d.ts.map +1 -0
  81. package/dist/rules/semicolon.js +20 -0
  82. package/dist/rules/semicolon.js.map +1 -0
  83. package/dist/rules/sentence-length.d.ts +3 -0
  84. package/dist/rules/sentence-length.d.ts.map +1 -0
  85. package/dist/rules/sentence-length.js +31 -0
  86. package/dist/rules/sentence-length.js.map +1 -0
  87. package/dist/rules/unknown-word.d.ts +9 -0
  88. package/dist/rules/unknown-word.d.ts.map +1 -0
  89. package/dist/rules/unknown-word.js +49 -0
  90. package/dist/rules/unknown-word.js.map +1 -0
  91. package/dist/rules/word-list-matcher.d.ts +25 -0
  92. package/dist/rules/word-list-matcher.d.ts.map +1 -0
  93. package/dist/rules/word-list-matcher.js +60 -0
  94. package/dist/rules/word-list-matcher.js.map +1 -0
  95. package/dist/rules/word-list.d.ts +3 -0
  96. package/dist/rules/word-list.d.ts.map +1 -0
  97. package/dist/rules/word-list.js +26 -0
  98. package/dist/rules/word-list.js.map +1 -0
  99. package/dist/run-cli.d.ts +27 -0
  100. package/dist/run-cli.d.ts.map +1 -0
  101. package/dist/run-cli.js +176 -0
  102. package/dist/run-cli.js.map +1 -0
  103. package/dist/source/blocks.d.ts +55 -0
  104. package/dist/source/blocks.d.ts.map +1 -0
  105. package/dist/source/blocks.js +464 -0
  106. package/dist/source/blocks.js.map +1 -0
  107. package/dist/source/inline.d.ts +42 -0
  108. package/dist/source/inline.d.ts.map +1 -0
  109. package/dist/source/inline.js +396 -0
  110. package/dist/source/inline.js.map +1 -0
  111. package/dist/source/jsx.d.ts +18 -0
  112. package/dist/source/jsx.d.ts.map +1 -0
  113. package/dist/source/jsx.js +137 -0
  114. package/dist/source/jsx.js.map +1 -0
  115. package/dist/source/lines.d.ts +34 -0
  116. package/dist/source/lines.d.ts.map +1 -0
  117. package/dist/source/lines.js +83 -0
  118. package/dist/source/lines.js.map +1 -0
  119. package/dist/source/markdown.d.ts +23 -0
  120. package/dist/source/markdown.d.ts.map +1 -0
  121. package/dist/source/markdown.js +42 -0
  122. package/dist/source/markdown.js.map +1 -0
  123. package/dist/source/suppressions.d.ts +38 -0
  124. package/dist/source/suppressions.d.ts.map +1 -0
  125. package/dist/source/suppressions.js +69 -0
  126. package/dist/source/suppressions.js.map +1 -0
  127. package/dist/source/tsdoc.d.ts +40 -0
  128. package/dist/source/tsdoc.d.ts.map +1 -0
  129. package/dist/source/tsdoc.js +176 -0
  130. package/dist/source/tsdoc.js.map +1 -0
  131. package/dist/text/grammar.d.ts +91 -0
  132. package/dist/text/grammar.d.ts.map +1 -0
  133. package/dist/text/grammar.js +289 -0
  134. package/dist/text/grammar.js.map +1 -0
  135. package/dist/text/phrases.d.ts +30 -0
  136. package/dist/text/phrases.d.ts.map +1 -0
  137. package/dist/text/phrases.js +65 -0
  138. package/dist/text/phrases.js.map +1 -0
  139. package/dist/text/sentences.d.ts +45 -0
  140. package/dist/text/sentences.d.ts.map +1 -0
  141. package/dist/text/sentences.js +141 -0
  142. package/dist/text/sentences.js.map +1 -0
  143. package/dist/text/tokens.d.ts +35 -0
  144. package/dist/text/tokens.d.ts.map +1 -0
  145. package/dist/text/tokens.js +113 -0
  146. package/dist/text/tokens.js.map +1 -0
  147. package/dist/text/words.d.ts +58 -0
  148. package/dist/text/words.d.ts.map +1 -0
  149. package/dist/text/words.js +159 -0
  150. package/dist/text/words.js.map +1 -0
  151. package/dist/types.d.ts +18 -0
  152. package/dist/types.d.ts.map +1 -0
  153. package/dist/types.js +20 -0
  154. package/dist/types.js.map +1 -0
  155. package/dist/units.d.ts +47 -0
  156. package/dist/units.d.ts.map +1 -0
  157. package/dist/units.js +42 -0
  158. package/dist/units.js.map +1 -0
  159. package/dist/word-list.d.ts +34 -0
  160. package/dist/word-list.d.ts.map +1 -0
  161. package/dist/word-list.js +90 -0
  162. package/dist/word-list.js.map +1 -0
  163. package/package.json +46 -3
  164. package/src/cli.ts +9 -0
  165. package/src/config.test.ts +188 -0
  166. package/src/config.ts +318 -0
  167. package/src/dictionary.test.ts +82 -0
  168. package/src/dictionary.ts +177 -0
  169. package/src/files.test.ts +107 -0
  170. package/src/files.ts +191 -0
  171. package/src/format.ts +78 -0
  172. package/src/index.test.ts +28 -0
  173. package/src/index.ts +34 -0
  174. package/src/lexicon.ts +92 -0
  175. package/src/lint.test.ts +182 -0
  176. package/src/lint.ts +135 -0
  177. package/src/rules/about-quantity.ts +33 -0
  178. package/src/rules/index.ts +40 -0
  179. package/src/rules/ing-verb.test.ts +48 -0
  180. package/src/rules/ing-verb.ts +54 -0
  181. package/src/rules/latin-abbreviation.ts +46 -0
  182. package/src/rules/missing-subject.test.ts +53 -0
  183. package/src/rules/missing-subject.ts +129 -0
  184. package/src/rules/modal-verb.test.ts +45 -0
  185. package/src/rules/modal-verb.ts +72 -0
  186. package/src/rules/noun-cluster.test.ts +49 -0
  187. package/src/rules/noun-cluster.ts +82 -0
  188. package/src/rules/paragraph-length.test.ts +30 -0
  189. package/src/rules/paragraph-length.ts +19 -0
  190. package/src/rules/passive-instruction.test.ts +38 -0
  191. package/src/rules/passive-instruction.ts +37 -0
  192. package/src/rules/pronouns.test.ts +38 -0
  193. package/src/rules/pronouns.ts +54 -0
  194. package/src/rules/punctuation.test.ts +59 -0
  195. package/src/rules/rule.ts +73 -0
  196. package/src/rules/semicolon.ts +19 -0
  197. package/src/rules/sentence-length.test.ts +52 -0
  198. package/src/rules/sentence-length.ts +32 -0
  199. package/src/rules/unknown-word.test.ts +81 -0
  200. package/src/rules/unknown-word.ts +43 -0
  201. package/src/rules/word-list-matcher.ts +68 -0
  202. package/src/rules/word-list.test.ts +110 -0
  203. package/src/rules/word-list.ts +25 -0
  204. package/src/run-cli.test.ts +189 -0
  205. package/src/run-cli.ts +193 -0
  206. package/src/source/blocks.ts +534 -0
  207. package/src/source/inline.test.ts +92 -0
  208. package/src/source/inline.ts +416 -0
  209. package/src/source/jsx.test.ts +46 -0
  210. package/src/source/jsx.ts +147 -0
  211. package/src/source/lines.test.ts +51 -0
  212. package/src/source/lines.ts +91 -0
  213. package/src/source/markdown.test.ts +210 -0
  214. package/src/source/markdown.ts +49 -0
  215. package/src/source/suppressions.ts +79 -0
  216. package/src/source/tsdoc.test.ts +137 -0
  217. package/src/source/tsdoc.ts +189 -0
  218. package/src/text/grammar.ts +304 -0
  219. package/src/text/phrases.ts +72 -0
  220. package/src/text/sentences.ts +148 -0
  221. package/src/text/text.test.ts +262 -0
  222. package/src/text/tokens.ts +135 -0
  223. package/src/text/words.ts +183 -0
  224. package/src/types.ts +39 -0
  225. package/src/units.ts +86 -0
  226. package/src/word-list.ts +128 -0
  227. package/ste.config.schema.json +87 -0
@@ -0,0 +1,464 @@
1
+ /**
2
+ * A block parser for the part of Markdown, GFM and MDX that has prose in it.
3
+ *
4
+ * The parser keeps paragraphs, headings, list items, block quotes and table
5
+ * cells. It removes fenced and indented code, HTML blocks, JSX tags, MDX
6
+ * import and export lines, MDX expressions, link reference definitions and
7
+ * thematic breaks. The TSDoc extractor uses the same parser for the text in
8
+ * a doc comment.
9
+ *
10
+ * The parser does not build a full CommonMark tree. It knows only the
11
+ * structure that the lint rules use. That is where a block starts and
12
+ * stops, and if the block is a heading, a table cell or text in a list item.
13
+ */
14
+ import { indentWidth, isBlank, sliceLine, stripIndent } from "./lines.js";
15
+ /** HTML tags that start an HTML block (CommonMark type 6). */
16
+ const BLOCK_TAGS = new Set([
17
+ "address", "article", "aside", "base", "basefont", "blockquote", "body", "caption", "center", "col",
18
+ "colgroup", "dd", "details", "dialog", "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure",
19
+ "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr",
20
+ "html", "iframe", "legend", "li", "link", "main", "menu", "menuitem", "nav", "noframes", "ol",
21
+ "optgroup", "option", "p", "param", "search", "section", "summary", "table", "tbody", "td",
22
+ "tfoot", "th", "thead", "title", "tr", "track", "ul",
23
+ ]);
24
+ /** HTML tags whose block stops at the closing tag, not at a blank line (CommonMark type 1). */
25
+ const RAW_TAGS = new Set(["script", "pre", "style", "textarea"]);
26
+ const DIRECTIVE = /^ste-(disable-next|disable|enable)\b(.*)$/s;
27
+ /** This function parses `lines` into prose blocks and directive comments. */
28
+ export function parseBlocks(lines, options) {
29
+ const out = [];
30
+ parseInto(lines, options, { list: null, quote: false }, out);
31
+ return out;
32
+ }
33
+ /** The directive in the text of a comment, or null. */
34
+ export function parseDirective(commentText, offset) {
35
+ const match = DIRECTIVE.exec(commentText.trim());
36
+ if (!match)
37
+ return null;
38
+ const rest = match[2].split(" -- ")[0];
39
+ const rules = rest.split(/[\s,]+/).filter((rule) => rule.length > 0);
40
+ return { kind: "directive", command: match[1], rules, offset };
41
+ }
42
+ function proseBlock(kind, lines, context, headingDepth = 0, tableHeader = false) {
43
+ return { kind, lines, list: context.list, quote: context.quote, headingDepth, tableHeader };
44
+ }
45
+ function parseInto(lines, options, context, out) {
46
+ let paragraph = [];
47
+ const flush = () => {
48
+ if (paragraph.length > 0)
49
+ out.push(proseBlock("paragraph", paragraph, context));
50
+ paragraph = [];
51
+ };
52
+ let i = 0;
53
+ while (i < lines.length) {
54
+ const line = lines[i];
55
+ if (isBlank(line.text)) {
56
+ flush();
57
+ i++;
58
+ continue;
59
+ }
60
+ const indent = indentWidth(line.text);
61
+ const inParagraph = paragraph.length > 0;
62
+ if (!inParagraph && indent >= 4) {
63
+ i = skipIndentedCode(lines, i);
64
+ continue;
65
+ }
66
+ const body = stripIndent(line, 3);
67
+ const text = body.text;
68
+ const fence = fenceOpening(text);
69
+ if (fence !== null) {
70
+ flush();
71
+ i = skipFence(lines, i, fence);
72
+ continue;
73
+ }
74
+ const atx = /^(#{1,6})(?:[ \t]+|$)/.exec(text);
75
+ if (atx) {
76
+ flush();
77
+ out.push(proseBlock("heading", [headingContent(body, atx[0].length)], context, atx[1].length));
78
+ i++;
79
+ continue;
80
+ }
81
+ if (inParagraph && /^(?:=+|-+)[ \t]*$/.test(text)) {
82
+ out.push(proseBlock("heading", paragraph, context, text.startsWith("=") ? 1 : 2));
83
+ paragraph = [];
84
+ i++;
85
+ continue;
86
+ }
87
+ if (isThematicBreak(text)) {
88
+ flush();
89
+ i++;
90
+ continue;
91
+ }
92
+ if (text.startsWith(">")) {
93
+ flush();
94
+ i = parseQuote(lines, i, options, context, out);
95
+ continue;
96
+ }
97
+ const marker = listMarker(text);
98
+ if (marker !== null && (!inParagraph || canInterruptParagraph(marker))) {
99
+ flush();
100
+ i = parseListItem(lines, i, options, context, out);
101
+ continue;
102
+ }
103
+ if (text.startsWith("<!--")) {
104
+ flush();
105
+ i = parseHtmlComment(lines, i, out);
106
+ continue;
107
+ }
108
+ if (text.startsWith("<")) {
109
+ const next = parseTagLine(lines, i, body, inParagraph, options);
110
+ if (next !== null) {
111
+ flush();
112
+ if (next.rest !== null)
113
+ paragraph.push(next.rest);
114
+ i = next.index;
115
+ continue;
116
+ }
117
+ }
118
+ if (options.mdx && !inParagraph && /^(?:import|export)\b/.test(text)) {
119
+ i = skipUntilBlank(lines, i);
120
+ continue;
121
+ }
122
+ if (options.mdx && text.startsWith("{")) {
123
+ flush();
124
+ i = parseExpressionBlock(lines, i, body, out);
125
+ continue;
126
+ }
127
+ if (text.startsWith(":::")) {
128
+ flush();
129
+ i++;
130
+ continue;
131
+ }
132
+ if (!inParagraph && /^\[[^\]]+\]:/.test(text)) {
133
+ i++;
134
+ continue;
135
+ }
136
+ if (text.includes("|") && i + 1 < lines.length && isDelimiterRow(lines[i + 1].text)) {
137
+ flush();
138
+ i = parseTable(lines, i, context, out);
139
+ continue;
140
+ }
141
+ paragraph.push(sliceLine(body, body.text.length - body.text.trimStart().length));
142
+ i++;
143
+ }
144
+ flush();
145
+ }
146
+ function fenceOpening(text) {
147
+ const match = /^(`{3,}|~{3,})(.*)$/.exec(text);
148
+ if (!match)
149
+ return null;
150
+ const run = match[1];
151
+ // A backtick fence cannot have a backtick in its info string.
152
+ if (run[0] === "`" && match[2].includes("`"))
153
+ return null;
154
+ return { char: run[0], length: run.length };
155
+ }
156
+ function skipFence(lines, start, fence) {
157
+ for (let i = start + 1; i < lines.length; i++) {
158
+ const text = stripIndent(lines[i], 3).text;
159
+ const match = /^(`+|~+)[ \t]*$/.exec(text);
160
+ if (match && match[1][0] === fence.char && match[1].length >= fence.length)
161
+ return i + 1;
162
+ }
163
+ return lines.length;
164
+ }
165
+ function skipIndentedCode(lines, start) {
166
+ let i = start;
167
+ while (i < lines.length && (isBlank(lines[i].text) || indentWidth(lines[i].text) >= 4))
168
+ i++;
169
+ return i;
170
+ }
171
+ function skipUntilBlank(lines, start) {
172
+ let i = start;
173
+ while (i < lines.length && !isBlank(lines[i].text))
174
+ i++;
175
+ return i;
176
+ }
177
+ function headingContent(body, markerLength) {
178
+ const content = sliceLine(body, markerLength);
179
+ const closing = /(?:^|[ \t]+)#+[ \t]*$/.exec(content.text);
180
+ const text = closing ? content.text.slice(0, closing.index) : content.text;
181
+ return { text: text.trimEnd(), offset: content.offset };
182
+ }
183
+ function isThematicBreak(text) {
184
+ return /^(?:(?:\*[ \t]*){3,}|(?:-[ \t]*){3,}|(?:_[ \t]*){3,})$/.test(text);
185
+ }
186
+ function listMarker(text) {
187
+ const match = /^(?:([-*+])|(\d{1,9})[.)])([ \t]+|$)/.exec(text);
188
+ if (!match)
189
+ return null;
190
+ const ordered = match[2] !== undefined;
191
+ const length = ordered ? match[2].length + 1 : 1;
192
+ const empty = text.slice(length).trim().length === 0;
193
+ return { ordered, start: ordered ? Number(match[2]) : 0, length, spaces: match[3].length, empty };
194
+ }
195
+ /** A list can interrupt a paragraph only when it is not empty and an ordered list starts at 1 (CommonMark). */
196
+ function canInterruptParagraph(marker) {
197
+ return !marker.empty && (!marker.ordered || marker.start === 1);
198
+ }
199
+ /** True when `text` starts a block that stops a lazy continuation line. */
200
+ function startsBlock(text) {
201
+ return fenceOpening(text) !== null
202
+ || /^#{1,6}(?:[ \t]|$)/.test(text)
203
+ || text.startsWith(">")
204
+ || isThematicBreak(text)
205
+ || listMarker(text) !== null
206
+ || /^<(?:!--|\/?[A-Za-z])/.test(text);
207
+ }
208
+ function parseQuote(lines, start, options, context, out) {
209
+ const quoted = [];
210
+ let i = start;
211
+ while (i < lines.length) {
212
+ const line = lines[i];
213
+ const body = stripIndent(line, 3);
214
+ if (body.text.startsWith(">")) {
215
+ let inner = sliceLine(body, 1);
216
+ if (inner.text.startsWith(" "))
217
+ inner = sliceLine(inner, 1);
218
+ quoted.push(inner);
219
+ i++;
220
+ continue;
221
+ }
222
+ const previous = quoted[quoted.length - 1];
223
+ if (!isBlank(line.text) && previous !== undefined && !isBlank(previous.text) && !startsBlock(body.text)) {
224
+ quoted.push(body);
225
+ i++;
226
+ continue;
227
+ }
228
+ break;
229
+ }
230
+ // A GitHub alert marker, for example `[!NOTE]`, is not prose.
231
+ const first = quoted[0];
232
+ if (first !== undefined && /^\[![A-Za-z]+\]\s*$/.test(first.text))
233
+ quoted.shift();
234
+ parseInto(quoted, options, { list: context.list, quote: true }, out);
235
+ return i;
236
+ }
237
+ function parseListItem(lines, start, options, context, out) {
238
+ const first = lines[start];
239
+ const markerIndent = indentWidth(first.text);
240
+ const atMarker = stripIndent(first, markerIndent);
241
+ const marker = listMarker(atMarker.text);
242
+ const spaces = marker.empty || marker.spaces > 4 ? 1 : marker.spaces;
243
+ const contentColumn = markerIndent + marker.length + spaces;
244
+ const itemLines = [sliceLine(atMarker, marker.length + Math.min(marker.spaces, spaces))];
245
+ let i = start + 1;
246
+ let previousBlank = marker.empty;
247
+ while (i < lines.length) {
248
+ const line = lines[i];
249
+ if (isBlank(line.text)) {
250
+ itemLines.push(line);
251
+ previousBlank = true;
252
+ i++;
253
+ continue;
254
+ }
255
+ const indent = indentWidth(line.text);
256
+ if (indent >= contentColumn) {
257
+ itemLines.push(stripIndent(line, contentColumn));
258
+ previousBlank = false;
259
+ i++;
260
+ continue;
261
+ }
262
+ if (!previousBlank && !startsBlock(stripIndent(line, 3).text) && !(i + 1 < lines.length && isDelimiterRow(lines[i + 1].text))) {
263
+ itemLines.push(stripIndent(line, indent));
264
+ i++;
265
+ continue;
266
+ }
267
+ break;
268
+ }
269
+ parseInto(itemLines, options, { list: { ordered: marker.ordered }, quote: context.quote }, out);
270
+ return i;
271
+ }
272
+ function parseHtmlComment(lines, start, out) {
273
+ const first = stripIndent(lines[start], 3);
274
+ let text = first.text.slice(4);
275
+ let i = start;
276
+ while (!text.includes("-->") && i + 1 < lines.length) {
277
+ i++;
278
+ text += "\n" + lines[i].text;
279
+ }
280
+ const directive = parseDirective(text.split("-->")[0], first.offset);
281
+ if (directive !== null)
282
+ out.push(directive);
283
+ return i + 1;
284
+ }
285
+ /**
286
+ * This function handles a line that starts with `<`. The result is null when
287
+ * the line is prose with inline HTML.
288
+ */
289
+ function parseTagLine(lines, start, body, inParagraph, options) {
290
+ const text = body.text;
291
+ const tag = /^<(\/?)([A-Za-z][A-Za-z0-9.:_-]*)(?=[\s/>]|$)/.exec(text);
292
+ const fragment = /^<\/?>/.test(text);
293
+ if (tag === null && !fragment)
294
+ return null;
295
+ if (options.mdx) {
296
+ const end = findTagEnd(lines, start, body.offset - lines[start].offset);
297
+ const endLine = lines[end.line];
298
+ const rest = sliceLine(endLine, end.column);
299
+ // A line with only a tag is a JSX block, also after paragraph text. A tag with text after it in a paragraph is inline JSX.
300
+ if (isBlank(rest.text) || rest.text.trimStart().startsWith("<"))
301
+ return { index: end.line + 1, rest: null };
302
+ if (inParagraph)
303
+ return null;
304
+ return { index: end.line + 1, rest: sliceLine(rest, rest.text.length - rest.text.trimStart().length) };
305
+ }
306
+ const name = tag === null ? "" : tag[2].toLowerCase();
307
+ if (tag !== null && tag[1] === "" && RAW_TAGS.has(name)) {
308
+ let i = start;
309
+ while (i < lines.length && !lines[i].text.toLowerCase().includes(`</${name}>`))
310
+ i++;
311
+ return { index: Math.min(i + 1, lines.length), rest: null };
312
+ }
313
+ if (BLOCK_TAGS.has(name))
314
+ return { index: skipUntilBlank(lines, start), rest: null };
315
+ // CommonMark type 7: a line with only a complete tag, which cannot interrupt a paragraph.
316
+ if (!inParagraph && /^<\/?[A-Za-z][^<>]*>\s*$/.test(text))
317
+ return { index: skipUntilBlank(lines, start), rest: null };
318
+ return null;
319
+ }
320
+ /** This function finds the `>` that closes a JSX tag. JSX can continue on the lines after the tag start. */
321
+ function findTagEnd(lines, startLine, startColumn) {
322
+ let quote = null;
323
+ let depth = 0;
324
+ for (let l = startLine; l < lines.length; l++) {
325
+ const text = lines[l].text;
326
+ for (let c = l === startLine ? startColumn + 1 : 0; c < text.length; c++) {
327
+ const char = text[c];
328
+ if (quote !== null) {
329
+ if (char === quote)
330
+ quote = null;
331
+ }
332
+ else if (char === "\"" || char === "'" || char === "`") {
333
+ quote = char;
334
+ }
335
+ else if (char === "{") {
336
+ depth++;
337
+ }
338
+ else if (char === "}") {
339
+ depth = Math.max(0, depth - 1);
340
+ }
341
+ else if (char === ">" && depth === 0) {
342
+ return { line: l, column: c + 1 };
343
+ }
344
+ }
345
+ }
346
+ return { line: lines.length - 1, column: lines[lines.length - 1].text.length };
347
+ }
348
+ /** This function skips an MDX `{...}` expression, and keeps a directive comment in it. */
349
+ function parseExpressionBlock(lines, start, body, out) {
350
+ let depth = 0;
351
+ let quote = null;
352
+ let collected = "";
353
+ for (let l = start; l < lines.length; l++) {
354
+ const text = l === start ? body.text : lines[l].text;
355
+ for (let c = 0; c < text.length; c++) {
356
+ const char = text[c];
357
+ collected += char;
358
+ if (quote !== null) {
359
+ if (char === quote)
360
+ quote = null;
361
+ }
362
+ else if (char === "\"" || char === "'" || char === "`") {
363
+ quote = char;
364
+ }
365
+ else if (char === "{") {
366
+ depth++;
367
+ }
368
+ else if (char === "}") {
369
+ depth--;
370
+ if (depth === 0) {
371
+ const comment = /^\{\s*\/\*([\s\S]*)\*\/\s*\}$/.exec(collected);
372
+ if (comment) {
373
+ const directive = parseDirective(comment[1], body.offset);
374
+ if (directive !== null)
375
+ out.push(directive);
376
+ }
377
+ return l + 1;
378
+ }
379
+ }
380
+ }
381
+ collected += "\n";
382
+ }
383
+ return lines.length;
384
+ }
385
+ /** True for a GFM table delimiter row, for example `| --- | :-: |`. */
386
+ export function isDelimiterRow(text) {
387
+ return text.includes("|") && /^\s*\|?\s*:?-+:?\s*(?:\|\s*:?-+:?\s*)*\|?\s*$/.test(text);
388
+ }
389
+ /** This function divides a table row into cells. A `|` in a code span or after `\` does not divide cells. */
390
+ export function splitCells(row) {
391
+ const text = row.text;
392
+ const cells = [];
393
+ let cellStart = 0;
394
+ let i = 0;
395
+ const pushCell = (end) => {
396
+ const raw = text.slice(cellStart, end);
397
+ const lead = raw.length - raw.trimStart().length;
398
+ cells.push({ text: raw.trim(), offset: row.offset + cellStart + lead });
399
+ };
400
+ while (i < text.length) {
401
+ const char = text[i];
402
+ if (char === "\\") {
403
+ i += 2;
404
+ continue;
405
+ }
406
+ if (char === "`") {
407
+ let run = 1;
408
+ while (text[i + run] === "`")
409
+ run++;
410
+ const close = findBacktickRun(text, i + run, run);
411
+ i = close === -1 ? i + run : close + run;
412
+ continue;
413
+ }
414
+ if (char === "|") {
415
+ pushCell(i);
416
+ cellStart = i + 1;
417
+ }
418
+ i++;
419
+ }
420
+ pushCell(text.length);
421
+ // A leading or trailing pipe makes an empty cell at the edge. That cell is not part of the table.
422
+ if (text.trimStart().startsWith("|"))
423
+ cells.shift();
424
+ if (text.trimEnd().endsWith("|") && !text.trimEnd().endsWith("\\|"))
425
+ cells.pop();
426
+ return cells;
427
+ }
428
+ /** The index of the next run of exactly `length` backticks at or after `from`, or -1. */
429
+ export function findBacktickRun(text, from, length) {
430
+ let i = from;
431
+ while (i < text.length) {
432
+ if (text[i] === "`") {
433
+ let run = 1;
434
+ while (text[i + run] === "`")
435
+ run++;
436
+ if (run === length)
437
+ return i;
438
+ i += run;
439
+ }
440
+ else {
441
+ i++;
442
+ }
443
+ }
444
+ return -1;
445
+ }
446
+ function parseTable(lines, start, context, out) {
447
+ const emitRow = (line, header) => {
448
+ for (const cell of splitCells(stripIndent(line, 3))) {
449
+ if (cell.text.length > 0)
450
+ out.push(proseBlock("table-cell", [cell], context, 0, header));
451
+ }
452
+ };
453
+ emitRow(lines[start], true);
454
+ let i = start + 2;
455
+ while (i < lines.length) {
456
+ const line = lines[i];
457
+ if (isBlank(line.text) || !line.text.includes("|") || startsBlock(stripIndent(line, 3).text))
458
+ break;
459
+ emitRow(line, false);
460
+ i++;
461
+ }
462
+ return i;
463
+ }
464
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/source/blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Inline normalization. This step changes the text of a block into "clean"
3
+ * text that the tokenizer can read:
4
+ *
5
+ * - Each code span, `{@link ...}` tag, URL, MDX expression and quoted text
6
+ * becomes one placeholder character. STE Rule 8.6 counts quoted text and
7
+ * text in a different font as one word. The word rules do not examine the
8
+ * text in a placeholder.
9
+ * - Link text stays. Link destinations, images, footnote references, HTML
10
+ * tags, JSX tags and emphasis markers go away.
11
+ * - HTML entities become the characters that they show.
12
+ *
13
+ * Each character of the clean text keeps the file offset of its source
14
+ * character, so findings point to the correct line and column.
15
+ */
16
+ import type { Line } from "./lines.js";
17
+ /** The character that holds the place of a code span, link tag, URL or quoted text. */
18
+ export declare const PLACEHOLDER = "\uE000";
19
+ export type PlaceholderKind = "code" | "link" | "url" | "quote" | "expr";
20
+ export type Placeholder = {
21
+ readonly kind: PlaceholderKind;
22
+ /** The text in the placeholder, without its delimiters. */
23
+ readonly text: string;
24
+ /** The file offset of the first character. */
25
+ readonly start: number;
26
+ /** The file offset after the last character. */
27
+ readonly end: number;
28
+ };
29
+ export type InlineText = {
30
+ readonly clean: string;
31
+ /** The file offset of each character of `clean`. */
32
+ readonly offsets: readonly number[];
33
+ /** The placeholders, by their index in `clean`. */
34
+ readonly placeholders: ReadonlyMap<number, Placeholder>;
35
+ };
36
+ export type InlineOptions = {
37
+ readonly mdx: boolean;
38
+ readonly tsdoc: boolean;
39
+ };
40
+ /** This function normalizes the inline content of a block. Refer to the module comment. */
41
+ export declare function normalizeInline(lines: readonly Line[], options: InlineOptions): InlineText;
42
+ //# sourceMappingURL=inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/source/inline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,uFAAuF;AACvF,eAAO,MAAM,WAAW,WAAM,CAAC;AAE/B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAG,eAAe,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAG,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAG,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAG,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAG,SAAS,MAAM,EAAE,CAAC;IACrC,mDAAmD;IACnD,QAAQ,CAAC,YAAY,EAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,GAAG,EAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAG,OAAO,CAAC;CAC5B,CAAC;AA6CF,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,KAAK,EAAG,SAAS,IAAI,EAAE,EAAE,OAAO,EAAG,aAAa,GAAI,UAAU,CAkB7F"}