punctilio 4.0.0 → 4.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.
- package/README.md +3 -7
- package/dist/dashes.js +4 -4
- package/dist/dashes.js.map +1 -1
- package/dist/quotes.d.ts.map +1 -1
- package/dist/quotes.js +143 -35
- package/dist/quotes.js.map +1 -1
- package/dist/rehype.d.ts +11 -1
- package/dist/rehype.d.ts.map +1 -1
- package/dist/rehype.js +26 -7
- package/dist/rehype.js.map +1 -1
- package/package.json +1 -1
- package/src/dashes.ts +4 -4
- package/src/quotes.ts +151 -44
- package/src/rehype.ts +41 -6
package/README.md
CHANGED
|
@@ -74,14 +74,7 @@ _Note on benchmark construction: I assembled the initial cases myself. I then so
|
|
|
74
74
|
| Input | Behavior | Why |
|
|
75
75
|
| :--- | :--- | :--- |
|
|
76
76
|
| `'99 but 5' clearance` | `5'` stays straight | A leading apostrophe and an opening quote are indistinguishable without semantics |
|
|
77
|
-
| Single-quoted passage over 1,000 chars | Opener becomes an apostrophe | The opener-vs-apostrophe test scans only 1,000 characters ahead for the closing quote |
|
|
78
|
-
| `"?"` with a distant closer | Quote stays straight | Quoted-punctuation detection looks only 50 characters ahead for the closing quote |
|
|
79
|
-
| `word’”’”’.` (5+ nested closers) | 5th-level punctuation not moved | Punctuation placement handles at most 4 consecutive closing quotes |
|
|
80
|
-
| `1-850` | Hyphen kept, not en-dashed | Ranges of the form `1-8XX` are assumed to be US toll-free numbers |
|
|
81
|
-
| `(c) MegaCorp` | `(c)` stays literal | `(c) → ©` requires a nearby year or the word “copyright” |
|
|
82
|
-
| `<textarea>`, other non-allowlisted tags | Left untouched | The rehype plugin transforms only an allowlist of elements (plus custom elements) |
|
|
83
77
|
|
|
84
|
-
Several of these bounds (the 1,000- and 50-character lookaheads, the 4-quote nesting cap) exist to keep the quote regexes provably linear-time; they could be lifted by a single-pass quote scanner.
|
|
85
78
|
|
|
86
79
|
## Test suite
|
|
87
80
|
|
|
@@ -155,9 +148,12 @@ The `rehype` plugin accepts additional options. Elements matching any `skipTags`
|
|
|
155
148
|
rehypePunctilio({
|
|
156
149
|
skipTags: ["code", "pre", "script", "style", "kbd", "var", "samp", "template", "math", "svg"],
|
|
157
150
|
skipClasses: ["no-formatting"],
|
|
151
|
+
transformAllElements: false, // see below
|
|
158
152
|
});
|
|
159
153
|
```
|
|
160
154
|
|
|
155
|
+
By default the plugin transforms text only inside a curated allowlist of prose-bearing elements (plus custom elements). Set `transformAllElements: true` to invert the model and transform text inside *every* element except those in `skipTags`/`skipClasses` and the form-value elements `<textarea>` and `<input>` (whose text is a literal control value, not prose). `<select>` is skipped as a container, but its `<option>` labels are still transformed. `skipTags` and `skipClasses` continue to take precedence in this mode.
|
|
156
|
+
|
|
161
157
|
For finer-grained control, `shouldSkipText` opts specific text nodes out of transformation without skipping their enclosing element. The predicate receives the text node and its ancestor chain (root first, nearest last); returning `true` leaves the node’s value untouched. `shouldSkipText` runs after element-level skipping—it is never called for text inside an already-skipped element.
|
|
162
158
|
|
|
163
159
|
```typescript
|
package/dist/dashes.js
CHANGED
|
@@ -55,10 +55,10 @@ export function enDashNumberRange(text, options = {}) {
|
|
|
55
55
|
// range regex, so those variants currently aren't affected here.
|
|
56
56
|
if (/^\d{3}$/.test(startNum) && /^\d{4}$/.test(endNum))
|
|
57
57
|
return args[0];
|
|
58
|
-
// Skip US toll-free prefix pattern: 1-800, 1-888, 1-877, etc.
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
if (/^1$/.test(startNum) && /^8
|
|
58
|
+
// Skip US toll-free prefix pattern: 1-800, 1-888, 1-877, etc. Only the
|
|
59
|
+
// seven real toll-free codes (800, 888, 877, 866, 855, 844, 833) are
|
|
60
|
+
// blocked, so genuine ranges like 1-850 or 1-810 still en-dash.
|
|
61
|
+
if (/^1$/.test(startNum) && /^8(?:00|88|77|66|55|44|33)$/.test(endNum))
|
|
62
62
|
return args[0];
|
|
63
63
|
return `${groups.precedingAreaCode ?? ""}${groups.start}${EN_DASH}${groups.end}${groups.suffix ?? ""}`;
|
|
64
64
|
});
|
package/dist/dashes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashes.js","sourceRoot":"","sources":["../src/dashes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dashes.js","sourceRoot":"","sources":["../src/dashes.ts"],"names":[],"mappings":"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"}
|
package/dist/quotes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../src/quotes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../src/quotes.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,kBAAkB,8DAA+D,CAAA;AAC9F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAElE,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC;AAgZD,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAK3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAEpF"}
|
package/dist/quotes.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { cachedRegExp, DEFAULT_SEPARATOR, escapeStringRegexp, getEscapedSeparator, LATIN_LETTERS, TERMINAL_PUNCTUATION, UNICODE_SYMBOLS } from "./constants.js";
|
|
2
2
|
const { EM_DASH, LEFT_DOUBLE_QUOTE, RIGHT_DOUBLE_QUOTE, LEFT_SINGLE_QUOTE, RIGHT_SINGLE_QUOTE, MODIFIER_LETTER_APOSTROPHE, } = UNICODE_SYMBOLS;
|
|
3
|
-
const TERMINAL_PUNCTUATION_CLASS = TERMINAL_PUNCTUATION.join("");
|
|
4
|
-
// Bounded to keep punctuation-placement regexes linear on pathological inputs.
|
|
5
|
-
const MAX_NESTED_QUOTES = 4;
|
|
6
3
|
export const PUNCTUATION_STYLES = ["american", "british", "german", "french", "none"];
|
|
7
4
|
function convertSingleQuotes(text, sep) {
|
|
8
5
|
const escapedSep = getEscapedSeparator({ separator: sep });
|
|
@@ -13,7 +10,7 @@ function convertSingleQuotes(text, sep) {
|
|
|
13
10
|
text = text.replace(cachedRegExp(`(?<!${singleQuoteOrWord})''(?!${singleQuoteOrWord})`, "g"), `${LEFT_SINGLE_QUOTE}${RIGHT_SINGLE_QUOTE}`);
|
|
14
11
|
text = text.replace(cachedRegExp(`(?<!${singleQuoteOrWord})'(?<ws>\\s+)'(?!${singleQuoteOrWord})`, "g"), `${LEFT_SINGLE_QUOTE}$<ws>${RIGHT_SINGLE_QUOTE}`);
|
|
15
12
|
const afterEndingSinglePatterns = `\\s\\.!?;,\\)${EM_DASH}\\-\\]"`;
|
|
16
|
-
//
|
|
13
|
+
// Ending context with optional 's', for the leading-apostrophe closer scan.
|
|
17
14
|
const afterEndingSingle = `(?=${escapedSep}?(?:s${escapedSep}?)?(?:[${afterEndingSinglePatterns}]|$))`;
|
|
18
15
|
// Handle 'n' abbreviation (Rock 'n' Roll). Before MLA this wasn't needed —
|
|
19
16
|
// the general rules produced LSQ+n+RSQ which was fine. But MLA requires both
|
|
@@ -30,11 +27,8 @@ function convertSingleQuotes(text, sep) {
|
|
|
30
27
|
text = text.replace(cachedRegExp(closingSingle, "gm"), RIGHT_SINGLE_QUOTE);
|
|
31
28
|
const contraction = `(?<=[${LATIN_LETTERS}])['${RIGHT_SINGLE_QUOTE}${MODIFIER_LETTER_APOSTROPHE}](?=${escapedSep}?[${LATIN_LETTERS}])`;
|
|
32
29
|
text = text.replace(cachedRegExp(contraction, "gm"), MODIFIER_LETTER_APOSTROPHE);
|
|
33
|
-
const apostropheWhitelist = `(?=n${MODIFIER_LETTER_APOSTROPHE} )`;
|
|
34
30
|
const endQuoteNotContraction = `(?!${contraction})[${RIGHT_SINGLE_QUOTE}${MODIFIER_LETTER_APOSTROPHE}]${afterEndingSingle}`;
|
|
35
|
-
|
|
36
|
-
const apostropheRegex = cachedRegExp(`(?<=^|[^\\w])['](?:${apostropheWhitelist}|(?![^${LEFT_SINGLE_QUOTE}'\\n]{0,1000}${endQuoteNotContraction}))`, "gm");
|
|
37
|
-
text = text.replace(apostropheRegex, MODIFIER_LETTER_APOSTROPHE);
|
|
31
|
+
text = convertLeadingApostrophes(text, endQuoteNotContraction);
|
|
38
32
|
const beginningSingle = `(?<beforeContext>(?:^|[\\s${LEFT_DOUBLE_QUOTE}${RIGHT_DOUBLE_QUOTE}${EM_DASH}\\-\\(])${escapedSep}?)['](?=${escapedSep}?\\S)`;
|
|
39
33
|
text = text.replace(cachedRegExp(beginningSingle, "gm"), `$<beforeContext>${LEFT_SINGLE_QUOTE}`);
|
|
40
34
|
text = convertUnmatchedPluralPossessives(text, sep);
|
|
@@ -63,22 +57,97 @@ function convertUnmatchedPluralPossessives(text, sep) {
|
|
|
63
57
|
return match;
|
|
64
58
|
});
|
|
65
59
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
// Classifies a leading straight quote (start of line, or after a non-word char)
|
|
61
|
+
// as either an apostrophe/elision (U+02BC) or an opening single quote (left as a
|
|
62
|
+
// straight quote for `beginningSingle` to convert). A left-to-right scan replaces
|
|
63
|
+
// the former distance-bounded lookahead: a leading quote is an apostrophe unless
|
|
64
|
+
// an unbounded forward scan finds a closing single quote (RSQ/MLA in ending
|
|
65
|
+
// context) before reaching a line break or another single-quote opener.
|
|
66
|
+
function convertLeadingApostrophes(text, endQuoteNotContraction) {
|
|
67
|
+
const closerAhead = cachedRegExp(endQuoteNotContraction, "y");
|
|
68
|
+
// `Rock 'n' Roll` already produced `n${MLA} `; a leading quote before it is an
|
|
69
|
+
// apostrophe even though a closing single quote may follow later in the line.
|
|
70
|
+
const nAbbreviationAhead = cachedRegExp(`n${MODIFIER_LETTER_APOSTROPHE} `, "y");
|
|
71
|
+
// High-precision decade elision: a leading quote before two digits (optionally
|
|
72
|
+
// followed by `s`), as in `'90s` or `'99`, is always an apostrophe.
|
|
73
|
+
const decadeElision = cachedRegExp(`\\d\\ds?(?![${LATIN_LETTERS}\\d])`, "y");
|
|
74
|
+
let result = "";
|
|
75
|
+
for (let i = 0; i < text.length; i++) {
|
|
76
|
+
const char = text[i];
|
|
77
|
+
if (char !== "'" || (i > 0 && /\w/.test(text[i - 1]))) {
|
|
78
|
+
result += char;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
decadeElision.lastIndex = i + 1;
|
|
82
|
+
nAbbreviationAhead.lastIndex = i + 1;
|
|
83
|
+
const isApostrophe = decadeElision.test(text) ||
|
|
84
|
+
nAbbreviationAhead.test(text) ||
|
|
85
|
+
!hasClosingSingleAhead(text, i + 1, closerAhead);
|
|
86
|
+
result += isApostrophe ? MODIFIER_LETTER_APOSTROPHE : char;
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
// Scans forward from `start` for a closing single quote, stopping (no closer) at
|
|
91
|
+
// a line break or another single-quote opener. Separators and other characters
|
|
92
|
+
// are transparent. O(n) amortized: each scan halts at the next single-quote char.
|
|
93
|
+
function hasClosingSingleAhead(text, start, closerAhead) {
|
|
94
|
+
for (let position = start; position < text.length; position++) {
|
|
95
|
+
const char = text[position];
|
|
96
|
+
if (char === "\n" || char === LEFT_SINGLE_QUOTE || char === "'")
|
|
97
|
+
return false;
|
|
98
|
+
closerAhead.lastIndex = position;
|
|
99
|
+
if (closerAhead.test(text))
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
// Matches an opening-position straight double quote: a boundary (start of line,
|
|
105
|
+
// whitespace, bracket, dash, or separator — consumed and re-emitted, since a
|
|
106
|
+
// variable-width alternation lookbehind would be ReDoS-prone) and an optional
|
|
107
|
+
// separator before the quote.
|
|
108
|
+
function doubleOpenerPrefix(escapedSep) {
|
|
69
109
|
const boundary = `(?<boundary>^|[\\s\\(\\/\\[\\{\\-${EM_DASH}]|${escapedSep})`;
|
|
70
110
|
const beforeCapture = `(?<beforeChr>${escapedSep}?)`;
|
|
111
|
+
return `${boundary}${beforeCapture}["]`;
|
|
112
|
+
}
|
|
113
|
+
function buildBeginningDoublePattern(escapedSep, rawEscSep) {
|
|
71
114
|
// Characters that signal an ending-quote position (not valid openers)
|
|
72
115
|
const endingChars = `\\s\\)${EM_DASH},!?;:.\\}${rawEscSep}`;
|
|
73
116
|
const afterConditions = [
|
|
74
117
|
`(?=${escapedSep}[ .,])`,
|
|
75
118
|
`(?=${escapedSep}?\\.{3}|${escapedSep}?[^${endingChars}])`,
|
|
76
|
-
// Lookahead for a closing straight quote within 50 chars — handles
|
|
77
|
-
// quoted punctuation like "?" and "!" where the first char after the
|
|
78
|
-
// opening quote would otherwise look like an ending-quote context
|
|
79
|
-
`(?=[^"]{1,50}")`,
|
|
80
119
|
];
|
|
81
|
-
return `${
|
|
120
|
+
return `${doubleOpenerPrefix(escapedSep)}(?:${afterConditions.join("|")})`;
|
|
121
|
+
}
|
|
122
|
+
// Quoted-punctuation openers like "?" or "!", where the character right after the
|
|
123
|
+
// opening quote looks like an ending-quote context. A left-to-right scan replaces
|
|
124
|
+
// the former 50-char lookahead: a boundary-position straight double quote is an
|
|
125
|
+
// opener when a closing straight double quote appears anywhere ahead, with at
|
|
126
|
+
// least one non-quote character between them.
|
|
127
|
+
function convertQuotedPunctuationOpeners(text, escapedSep) {
|
|
128
|
+
const candidate = cachedRegExp(doubleOpenerPrefix(escapedSep), "gm");
|
|
129
|
+
let result = "";
|
|
130
|
+
let copiedUpTo = 0;
|
|
131
|
+
for (const match of text.matchAll(candidate)) {
|
|
132
|
+
// The boundary and optional separator are left in place; only the straight
|
|
133
|
+
// quote (the final character of the match) is rewritten to an opener.
|
|
134
|
+
const quoteIndex = match.index + match[0].length - 1;
|
|
135
|
+
if (!hasClosingDoubleAhead(text, quoteIndex + 1))
|
|
136
|
+
continue;
|
|
137
|
+
result += text.slice(copiedUpTo, quoteIndex) + LEFT_DOUBLE_QUOTE;
|
|
138
|
+
copiedUpTo = quoteIndex + 1;
|
|
139
|
+
}
|
|
140
|
+
return result + text.slice(copiedUpTo);
|
|
141
|
+
}
|
|
142
|
+
// Scans forward for a closing straight double quote, requiring at least one
|
|
143
|
+
// non-quote character between `start` and it. O(n) amortized: the scan halts at
|
|
144
|
+
// the next double-quote character.
|
|
145
|
+
function hasClosingDoubleAhead(text, start) {
|
|
146
|
+
for (let position = start; position < text.length; position++) {
|
|
147
|
+
if (text[position] === '"')
|
|
148
|
+
return position > start;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
82
151
|
}
|
|
83
152
|
function convertDoubleQuotes(text, sep) {
|
|
84
153
|
const rawEscSep = escapeStringRegexp(sep);
|
|
@@ -90,6 +159,7 @@ function convertDoubleQuotes(text, sep) {
|
|
|
90
159
|
text = text.replace(/(?<=^|[\s([{])"(?<whitespace>\s+)"(?=$|[\s)\]}.!?,;:])/g, `${LEFT_DOUBLE_QUOTE}$<whitespace>${RIGHT_DOUBLE_QUOTE}`);
|
|
91
160
|
const beginningDouble = cachedRegExp(buildBeginningDoublePattern(escapedSep, rawEscSep), "gm");
|
|
92
161
|
text = text.replace(beginningDouble, `$<boundary>$<beforeChr>${LEFT_DOUBLE_QUOTE}`);
|
|
162
|
+
text = convertQuotedPunctuationOpeners(text, escapedSep);
|
|
93
163
|
text = text.replace(cachedRegExp(`(?<=\\{)(?<sepSpace>${escapedSep}? )?["]`, "g"), `$<sepSpace>${LEFT_DOUBLE_QUOTE}`);
|
|
94
164
|
const endingDouble = `(?<beforeQuote>[^\\s\\(])["](?<sepAfter>${escapedSep})?(?=${escapedSep}|[\\s/\\).,;${EM_DASH}:\\-\\}!?s]|$)`;
|
|
95
165
|
text = text.replace(cachedRegExp(endingDouble, "g"), `$<beforeQuote>${RIGHT_DOUBLE_QUOTE}$<sepAfter>`);
|
|
@@ -97,32 +167,70 @@ function convertDoubleQuotes(text, sep) {
|
|
|
97
167
|
text = text.replace(cachedRegExp(`'(?=${RIGHT_DOUBLE_QUOTE})`, "gu"), RIGHT_SINGLE_QUOTE);
|
|
98
168
|
return text;
|
|
99
169
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
170
|
+
const CLOSING_QUOTES = new Set([RIGHT_SINGLE_QUOTE, RIGHT_DOUBLE_QUOTE]);
|
|
171
|
+
const TERMINAL_PUNCTUATION_SET = new Set(TERMINAL_PUNCTUATION);
|
|
172
|
+
// Consumes a run of consecutive closing quotes (RSQ/RDQ) of arbitrary depth,
|
|
173
|
+
// each optionally preceded by a separator, starting at `start`. Returns the
|
|
174
|
+
// index just past the last closing quote, or -1 if there is no run.
|
|
175
|
+
function scanClosingQuoteRun(text, start, sep) {
|
|
176
|
+
if (!CLOSING_QUOTES.has(text[start]))
|
|
177
|
+
return -1;
|
|
178
|
+
let runEnd = start + 1;
|
|
179
|
+
for (;;) {
|
|
180
|
+
let next = runEnd;
|
|
181
|
+
if (sep.length > 0 && text.startsWith(sep, next))
|
|
182
|
+
next += sep.length;
|
|
183
|
+
if (!CLOSING_QUOTES.has(text[next]))
|
|
184
|
+
break;
|
|
185
|
+
runEnd = next + 1;
|
|
186
|
+
}
|
|
187
|
+
return runEnd;
|
|
188
|
+
}
|
|
189
|
+
function separatorLengthAt(text, index, sep) {
|
|
190
|
+
return sep.length > 0 && text.startsWith(sep, index) ? sep.length : 0;
|
|
191
|
+
}
|
|
192
|
+
// Moves a period or comma from just after a run of closing quotes to just
|
|
193
|
+
// before it (American style: punctuation inside the quotes). A single
|
|
194
|
+
// left-to-right pass collects each closing-quote run of arbitrary depth — no
|
|
195
|
+
// nesting cap — then relocates an adjacent period/comma, treating separators as
|
|
196
|
+
// transparent (re-emitted in place). The move is skipped when the character
|
|
197
|
+
// before the run is terminal punctuation (`"Stop!".` keeps its period outside).
|
|
198
|
+
function movePunctuationInside(text, sep, isMovablePunctuation) {
|
|
199
|
+
let result = "";
|
|
200
|
+
let position = 0;
|
|
201
|
+
while (position < text.length) {
|
|
202
|
+
const sepBeforeLength = separatorLengthAt(text, position, sep);
|
|
203
|
+
const runStart = position + sepBeforeLength;
|
|
204
|
+
const runEnd = scanClosingQuoteRun(text, runStart, sep);
|
|
205
|
+
const sepAfterLength = runEnd === -1 ? 0 : separatorLengthAt(text, runEnd, sep);
|
|
206
|
+
const punctuationIndex = runEnd + sepAfterLength;
|
|
207
|
+
const precededByTerminal = position > 0 && TERMINAL_PUNCTUATION_SET.has(text[position - 1]);
|
|
208
|
+
if (runEnd === -1 || precededByTerminal || !isMovablePunctuation(text, punctuationIndex)) {
|
|
209
|
+
result += text[position];
|
|
210
|
+
position++;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
const sepBefore = text.slice(position, runStart);
|
|
214
|
+
const run = text.slice(runStart, runEnd);
|
|
215
|
+
const sepAfter = text.slice(runEnd, punctuationIndex);
|
|
216
|
+
result += sepBefore + text[punctuationIndex] + run + sepAfter;
|
|
217
|
+
position = punctuationIndex + 1;
|
|
218
|
+
}
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
function isMovablePeriod(text, index) {
|
|
222
|
+
return text[index] === "." && !text.startsWith("...", index);
|
|
114
223
|
}
|
|
115
|
-
function
|
|
116
|
-
|
|
117
|
-
return text.replace(regex, `$<sepBefore>${replacementChar}$<quotes>$<sepAfter>`);
|
|
224
|
+
function isMovableComma(text, index) {
|
|
225
|
+
return text[index] === ",";
|
|
118
226
|
}
|
|
119
227
|
function applyPunctuationStyle(text, sep, style) {
|
|
120
228
|
const escapedSep = getEscapedSeparator({ separator: sep });
|
|
121
229
|
if (style === "american") {
|
|
122
230
|
// Period outside → inside: Hello". → Hello." (and Hello'". → Hello.'")
|
|
123
|
-
text =
|
|
231
|
+
text = movePunctuationInside(text, sep, isMovablePeriod);
|
|
124
232
|
// Comma outside → inside: Hello", → Hello,"
|
|
125
|
-
text =
|
|
233
|
+
text = movePunctuationInside(text, sep, isMovableComma);
|
|
126
234
|
}
|
|
127
235
|
else {
|
|
128
236
|
// Every non-"american" non-"none" style (british/german/french) places
|
package/dist/quotes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../src/quotes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../src/quotes.ts"],"names":[],"mappings":"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"}
|
package/dist/rehype.d.ts
CHANGED
|
@@ -30,6 +30,16 @@ export interface RehypePunctilioOptions extends TransformOptions, ElementTransfo
|
|
|
30
30
|
* Default: []
|
|
31
31
|
*/
|
|
32
32
|
skipClasses?: string[];
|
|
33
|
+
/**
|
|
34
|
+
* Invert the element model: transform text inside every element except the
|
|
35
|
+
* skip-list (`skipTags`/`skipClasses`) plus `textarea`/`input`/`select`,
|
|
36
|
+
* whose text is a literal form-control value rather than prose. The default
|
|
37
|
+
* (`false`) keeps the `TRANSFORMABLE_ELEMENTS` allowlist, transforming only
|
|
38
|
+
* known prose-bearing tags (and custom elements).
|
|
39
|
+
*
|
|
40
|
+
* Default: false
|
|
41
|
+
*/
|
|
42
|
+
transformAllElements?: boolean;
|
|
33
43
|
}
|
|
34
44
|
/** Option keys handled by `rehypePunctilio` itself rather than `transform()`. */
|
|
35
45
|
export declare const REHYPE_ONLY_OPTION_KEYS: readonly string[];
|
|
@@ -45,7 +55,7 @@ export declare function assertSmartQuotesMatch(input: string): void;
|
|
|
45
55
|
* transform(stripMarkers(text))` for debugging marker interactions.
|
|
46
56
|
*/
|
|
47
57
|
export declare function transformElement(node: Element, transformFn: TextTransformer, shouldSkip: ElementPredicate, separator: string, checkInvariance?: boolean, options?: ElementTransformOptions): void;
|
|
48
|
-
export declare function collectTransformableElements(node: Element, shouldSkip: ElementPredicate, depth?: number, alreadyTransformed?: ReadonlySet<Element
|
|
58
|
+
export declare function collectTransformableElements(node: Element, shouldSkip: ElementPredicate, depth?: number, alreadyTransformed?: ReadonlySet<Element>, isTransformable?: (tagName: string) => boolean): Element[];
|
|
49
59
|
export declare function rehypePunctilio(options?: RehypePunctilioOptions): Transformer<Root, Root>;
|
|
50
60
|
export default rehypePunctilio;
|
|
51
61
|
//# sourceMappingURL=rehype.d.ts.map
|
package/dist/rehype.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehype.d.ts","sourceRoot":"","sources":["../src/rehype.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAIpF,KAAK,gBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;AAElD,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;AAEhD,6EAA6E;AAC7E,MAAM,MAAM,qBAAqB,GAAG,CAClC,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,SAAS,OAAO,EAAE,KAC1B,OAAO,CAAA;AAEZ,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAA;CACvC;AAED,MAAM,WAAW,sBACf,SAAQ,gBAAgB,EACtB,uBAAuB;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"rehype.d.ts","sourceRoot":"","sources":["../src/rehype.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAIpF,KAAK,gBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;AAElD,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;AAEhD,6EAA6E;AAC7E,MAAM,MAAM,qBAAqB,GAAG,CAClC,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,SAAS,OAAO,EAAE,KAC1B,OAAO,CAAA;AAEZ,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAA;CACvC;AAED,MAAM,WAAW,sBACf,SAAQ,gBAAgB,EACtB,uBAAuB;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IAEtB;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAiBD,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAA0E,CAAA;AAE/H,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAA2D,CAAA;AAE3G,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GAAG,cAAc,EAC9B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,CAAC,EAAE,uBAAuB,GAChC,IAAI,EAAE,CAMR;AAuCD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,UAAU,GAAE,gBAA8B,GACzC,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,EAC1B,KAAK,GAAE,MAAU,GAChB,IAAI,GAAG,IAAI,CAeb;AAOD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAoB1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,MAAM,EACjB,eAAe,GAAE,OAAe,EAChC,OAAO,CAAC,EAAE,uBAAuB,GAChC,IAAI,CAgCN;AAuGD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,gBAAgB,EAC5B,KAAK,GAAE,MAAU,EACjB,kBAAkB,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EACzC,eAAe,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAgC,GACrE,OAAO,EAAE,CAsCX;AAgBD,wBAAgB,eAAe,CAC7B,OAAO,GAAE,sBAA2B,GACnC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CA8EzB;AAED,eAAe,eAAe,CAAA"}
|
package/dist/rehype.js
CHANGED
|
@@ -3,8 +3,19 @@ import { transform, TRANSFORM_OPTION_KEYS } from "./index.js";
|
|
|
3
3
|
import { DEFAULT_SEPARATOR, MAX_RECURSION_DEPTH } from "./constants.js";
|
|
4
4
|
import { assertKnownOptionKeys, formatErrorString, transformTextNodes } from "./utils.js";
|
|
5
5
|
const DEFAULT_SKIP_TAGS = ["code", "pre", "script", "style", "kbd", "var", "samp", "template", "math", "svg"];
|
|
6
|
+
// Form elements whose text content is a literal control value, not prose.
|
|
7
|
+
// Hard-skipped (whole subtree) under `transformAllElements`, on top of the
|
|
8
|
+
// user skip-list, so their values are protected even when nested inside a
|
|
9
|
+
// transformable element.
|
|
10
|
+
const FORM_VALUE_TAGS = ["textarea", "input"];
|
|
11
|
+
// `<select>` is not prose itself, but its `<option>` children are (and are
|
|
12
|
+
// transformed under the default allowlist). Under `transformAllElements` we
|
|
13
|
+
// exclude `select` as a transform *unit* while still recursing into — and
|
|
14
|
+
// transforming — its options, so the inverted mode never transforms less than
|
|
15
|
+
// the allowlist.
|
|
16
|
+
const NON_PROSE_CONTAINER_TAGS = new Set(["select"]);
|
|
6
17
|
/** Option keys handled by `rehypePunctilio` itself rather than `transform()`. */
|
|
7
|
-
export const REHYPE_ONLY_OPTION_KEYS = ["skipTags", "skipClasses", "shouldSkipText"];
|
|
18
|
+
export const REHYPE_ONLY_OPTION_KEYS = ["skipTags", "skipClasses", "shouldSkipText", "transformAllElements"];
|
|
8
19
|
/** Runtime list of valid `rehypePunctilio` option keys. */
|
|
9
20
|
export const REHYPE_OPTION_KEYS = [...TRANSFORM_OPTION_KEYS, ...REHYPE_ONLY_OPTION_KEYS];
|
|
10
21
|
export function flattenTextNodes(node, shouldSkip, options) {
|
|
@@ -205,7 +216,7 @@ function hasTextDescendant(node, shouldSkip, depth = 0) {
|
|
|
205
216
|
}
|
|
206
217
|
return false;
|
|
207
218
|
}
|
|
208
|
-
export function collectTransformableElements(node, shouldSkip, depth = 0, alreadyTransformed) {
|
|
219
|
+
export function collectTransformableElements(node, shouldSkip, depth = 0, alreadyTransformed, isTransformable = isTransformableElement) {
|
|
209
220
|
/* istanbul ignore if -- defensive: prevents stack overflow from malicious HTML */
|
|
210
221
|
if (depth > MAX_RECURSION_DEPTH) {
|
|
211
222
|
return [];
|
|
@@ -220,7 +231,7 @@ export function collectTransformableElements(node, shouldSkip, depth = 0, alread
|
|
|
220
231
|
const hasBlockChildren = !hasDirectText && node.children.some((child) => child.type === "element" && BLOCK_ELEMENTS.has(child.tagName));
|
|
221
232
|
const hasTextDescendants = !hasDirectText && !hasBlockChildren &&
|
|
222
233
|
hasTextDescendant(node, shouldSkip);
|
|
223
|
-
if (
|
|
234
|
+
if (isTransformable(node.tagName) &&
|
|
224
235
|
(hasDirectText || hasTextDescendants)) {
|
|
225
236
|
results.push(node);
|
|
226
237
|
}
|
|
@@ -229,7 +240,7 @@ export function collectTransformableElements(node, shouldSkip, depth = 0, alread
|
|
|
229
240
|
// children that should be independent, or has no text to transform.
|
|
230
241
|
for (const child of node.children) {
|
|
231
242
|
if (child.type === "element") {
|
|
232
|
-
const childResults = collectTransformableElements(child, shouldSkip, depth + 1, alreadyTransformed);
|
|
243
|
+
const childResults = collectTransformableElements(child, shouldSkip, depth + 1, alreadyTransformed, isTransformable);
|
|
233
244
|
for (const r of childResults)
|
|
234
245
|
results.push(r);
|
|
235
246
|
}
|
|
@@ -251,9 +262,17 @@ function markDescendants(node, set, depth = 0) {
|
|
|
251
262
|
}
|
|
252
263
|
export function rehypePunctilio(options = {}) {
|
|
253
264
|
assertKnownOptionKeys(options, REHYPE_OPTION_KEYS, "rehypePunctilio");
|
|
254
|
-
const { skipTags = DEFAULT_SKIP_TAGS, skipClasses = [], separator = DEFAULT_SEPARATOR, shouldSkipText, ...transformOptions } = options;
|
|
255
|
-
|
|
265
|
+
const { skipTags = DEFAULT_SKIP_TAGS, skipClasses = [], separator = DEFAULT_SEPARATOR, shouldSkipText, transformAllElements = false, ...transformOptions } = options;
|
|
266
|
+
// In inverted mode, form-value elements join the skip-list so their literal
|
|
267
|
+
// values are neither transformed nor flattened into a transformable ancestor.
|
|
268
|
+
const skipTagSet = new Set(transformAllElements ? [...skipTags, ...FORM_VALUE_TAGS] : skipTags);
|
|
256
269
|
const skipClassSet = new Set(skipClasses);
|
|
270
|
+
// Inverted mode transforms every non-skipped element except non-prose
|
|
271
|
+
// containers; the default keeps the `TRANSFORMABLE_ELEMENTS` allowlist (plus
|
|
272
|
+
// custom elements).
|
|
273
|
+
const isTransformable = transformAllElements
|
|
274
|
+
? (tagName) => !NON_PROSE_CONTAINER_TAGS.has(tagName)
|
|
275
|
+
: isTransformableElement;
|
|
257
276
|
const hasSkipClass = (node) => {
|
|
258
277
|
if (skipClassSet.size === 0)
|
|
259
278
|
return false;
|
|
@@ -289,7 +308,7 @@ export function rehypePunctilio(options = {}) {
|
|
|
289
308
|
return SKIP;
|
|
290
309
|
}
|
|
291
310
|
// Collect and transform elements with text content
|
|
292
|
-
const elementsToTransform = collectTransformableElements(node, shouldSkip, 0, transformed);
|
|
311
|
+
const elementsToTransform = collectTransformableElements(node, shouldSkip, 0, transformed, isTransformable);
|
|
293
312
|
for (const elt of elementsToTransform) {
|
|
294
313
|
if (!transformed.has(elt)) {
|
|
295
314
|
transformElement(elt, transformFn, shouldSkip, separator, false, elementOptions);
|
package/dist/rehype.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehype.js","sourceRoot":"","sources":["../src/rehype.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rehype.js","sourceRoot":"","sources":["../src/rehype.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/dashes.ts
CHANGED
|
@@ -79,10 +79,10 @@ export function enDashNumberRange(text: string, options: DashOptions = {}): stri
|
|
|
79
79
|
// as ranges. Space/NNBSP/thin-space grouping isn't captured by the outer
|
|
80
80
|
// range regex, so those variants currently aren't affected here.
|
|
81
81
|
if (/^\d{3}$/.test(startNum) && /^\d{4}$/.test(endNum)) return args[0] as string
|
|
82
|
-
// Skip US toll-free prefix pattern: 1-800, 1-888, 1-877, etc.
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
if (/^1$/.test(startNum) && /^8
|
|
82
|
+
// Skip US toll-free prefix pattern: 1-800, 1-888, 1-877, etc. Only the
|
|
83
|
+
// seven real toll-free codes (800, 888, 877, 866, 855, 844, 833) are
|
|
84
|
+
// blocked, so genuine ranges like 1-850 or 1-810 still en-dash.
|
|
85
|
+
if (/^1$/.test(startNum) && /^8(?:00|88|77|66|55|44|33)$/.test(endNum)) return args[0] as string
|
|
86
86
|
return `${groups.precedingAreaCode ?? ""}${groups.start}${EN_DASH}${groups.end}${groups.suffix ?? ""}`
|
|
87
87
|
}
|
|
88
88
|
)
|
package/src/quotes.ts
CHANGED
|
@@ -9,11 +9,6 @@ const {
|
|
|
9
9
|
MODIFIER_LETTER_APOSTROPHE,
|
|
10
10
|
} = UNICODE_SYMBOLS
|
|
11
11
|
|
|
12
|
-
const TERMINAL_PUNCTUATION_CLASS = TERMINAL_PUNCTUATION.join("")
|
|
13
|
-
|
|
14
|
-
// Bounded to keep punctuation-placement regexes linear on pathological inputs.
|
|
15
|
-
const MAX_NESTED_QUOTES = 4
|
|
16
|
-
|
|
17
12
|
export const PUNCTUATION_STYLES = ["american", "british", "german", "french", "none"] as const
|
|
18
13
|
export type PunctuationStyle = (typeof PUNCTUATION_STYLES)[number]
|
|
19
14
|
|
|
@@ -35,7 +30,7 @@ function convertSingleQuotes(text: string, sep: string): string {
|
|
|
35
30
|
text = text.replace(cachedRegExp(`(?<!${singleQuoteOrWord})'(?<ws>\\s+)'(?!${singleQuoteOrWord})`, "g"), `${LEFT_SINGLE_QUOTE}$<ws>${RIGHT_SINGLE_QUOTE}`)
|
|
36
31
|
|
|
37
32
|
const afterEndingSinglePatterns = `\\s\\.!?;,\\)${EM_DASH}\\-\\]"`
|
|
38
|
-
//
|
|
33
|
+
// Ending context with optional 's', for the leading-apostrophe closer scan.
|
|
39
34
|
const afterEndingSingle = `(?=${escapedSep}?(?:s${escapedSep}?)?(?:[${afterEndingSinglePatterns}]|$))`
|
|
40
35
|
|
|
41
36
|
// Handle 'n' abbreviation (Rock 'n' Roll). Before MLA this wasn't needed —
|
|
@@ -57,14 +52,8 @@ function convertSingleQuotes(text: string, sep: string): string {
|
|
|
57
52
|
const contraction = `(?<=[${LATIN_LETTERS}])['${RIGHT_SINGLE_QUOTE}${MODIFIER_LETTER_APOSTROPHE}](?=${escapedSep}?[${LATIN_LETTERS}])`
|
|
58
53
|
text = text.replace(cachedRegExp(contraction, "gm"), MODIFIER_LETTER_APOSTROPHE)
|
|
59
54
|
|
|
60
|
-
const apostropheWhitelist = `(?=n${MODIFIER_LETTER_APOSTROPHE} )`
|
|
61
55
|
const endQuoteNotContraction = `(?!${contraction})[${RIGHT_SINGLE_QUOTE}${MODIFIER_LETTER_APOSTROPHE}]${afterEndingSingle}`
|
|
62
|
-
|
|
63
|
-
const apostropheRegex = cachedRegExp(
|
|
64
|
-
`(?<=^|[^\\w])['](?:${apostropheWhitelist}|(?![^${LEFT_SINGLE_QUOTE}'\\n]{0,1000}${endQuoteNotContraction}))`,
|
|
65
|
-
"gm"
|
|
66
|
-
)
|
|
67
|
-
text = text.replace(apostropheRegex, MODIFIER_LETTER_APOSTROPHE)
|
|
56
|
+
text = convertLeadingApostrophes(text, endQuoteNotContraction)
|
|
68
57
|
|
|
69
58
|
const beginningSingle = `(?<beforeContext>(?:^|[\\s${LEFT_DOUBLE_QUOTE}${RIGHT_DOUBLE_QUOTE}${EM_DASH}\\-\\(])${escapedSep}?)['](?=${escapedSep}?\\S)`
|
|
70
59
|
text = text.replace(cachedRegExp(beginningSingle, "gm"), `$<beforeContext>${LEFT_SINGLE_QUOTE}`)
|
|
@@ -101,25 +90,102 @@ function convertUnmatchedPluralPossessives(text: string, sep: string): string {
|
|
|
101
90
|
)
|
|
102
91
|
}
|
|
103
92
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
93
|
+
// Classifies a leading straight quote (start of line, or after a non-word char)
|
|
94
|
+
// as either an apostrophe/elision (U+02BC) or an opening single quote (left as a
|
|
95
|
+
// straight quote for `beginningSingle` to convert). A left-to-right scan replaces
|
|
96
|
+
// the former distance-bounded lookahead: a leading quote is an apostrophe unless
|
|
97
|
+
// an unbounded forward scan finds a closing single quote (RSQ/MLA in ending
|
|
98
|
+
// context) before reaching a line break or another single-quote opener.
|
|
99
|
+
function convertLeadingApostrophes(text: string, endQuoteNotContraction: string): string {
|
|
100
|
+
const closerAhead = cachedRegExp(endQuoteNotContraction, "y")
|
|
101
|
+
// `Rock 'n' Roll` already produced `n${MLA} `; a leading quote before it is an
|
|
102
|
+
// apostrophe even though a closing single quote may follow later in the line.
|
|
103
|
+
const nAbbreviationAhead = cachedRegExp(`n${MODIFIER_LETTER_APOSTROPHE} `, "y")
|
|
104
|
+
// High-precision decade elision: a leading quote before two digits (optionally
|
|
105
|
+
// followed by `s`), as in `'90s` or `'99`, is always an apostrophe.
|
|
106
|
+
const decadeElision = cachedRegExp(`\\d\\ds?(?![${LATIN_LETTERS}\\d])`, "y")
|
|
107
|
+
|
|
108
|
+
let result = ""
|
|
109
|
+
for (let i = 0; i < text.length; i++) {
|
|
110
|
+
const char = text[i]
|
|
111
|
+
if (char !== "'" || (i > 0 && /\w/.test(text[i - 1]))) {
|
|
112
|
+
result += char
|
|
113
|
+
continue
|
|
114
|
+
}
|
|
115
|
+
decadeElision.lastIndex = i + 1
|
|
116
|
+
nAbbreviationAhead.lastIndex = i + 1
|
|
117
|
+
const isApostrophe =
|
|
118
|
+
decadeElision.test(text) ||
|
|
119
|
+
nAbbreviationAhead.test(text) ||
|
|
120
|
+
!hasClosingSingleAhead(text, i + 1, closerAhead)
|
|
121
|
+
result += isApostrophe ? MODIFIER_LETTER_APOSTROPHE : char
|
|
122
|
+
}
|
|
123
|
+
return result
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Scans forward from `start` for a closing single quote, stopping (no closer) at
|
|
127
|
+
// a line break or another single-quote opener. Separators and other characters
|
|
128
|
+
// are transparent. O(n) amortized: each scan halts at the next single-quote char.
|
|
129
|
+
function hasClosingSingleAhead(text: string, start: number, closerAhead: RegExp): boolean {
|
|
130
|
+
for (let position = start; position < text.length; position++) {
|
|
131
|
+
const char = text[position]
|
|
132
|
+
if (char === "\n" || char === LEFT_SINGLE_QUOTE || char === "'") return false
|
|
133
|
+
closerAhead.lastIndex = position
|
|
134
|
+
if (closerAhead.test(text)) return true
|
|
135
|
+
}
|
|
136
|
+
return false
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Matches an opening-position straight double quote: a boundary (start of line,
|
|
140
|
+
// whitespace, bracket, dash, or separator — consumed and re-emitted, since a
|
|
141
|
+
// variable-width alternation lookbehind would be ReDoS-prone) and an optional
|
|
142
|
+
// separator before the quote.
|
|
143
|
+
function doubleOpenerPrefix(escapedSep: string): string {
|
|
107
144
|
const boundary = `(?<boundary>^|[\\s\\(\\/\\[\\{\\-${EM_DASH}]|${escapedSep})`
|
|
108
145
|
const beforeCapture = `(?<beforeChr>${escapedSep}?)`
|
|
146
|
+
return `${boundary}${beforeCapture}["]`
|
|
147
|
+
}
|
|
109
148
|
|
|
149
|
+
function buildBeginningDoublePattern(escapedSep: string, rawEscSep: string): string {
|
|
110
150
|
// Characters that signal an ending-quote position (not valid openers)
|
|
111
151
|
const endingChars = `\\s\\)${EM_DASH},!?;:.\\}${rawEscSep}`
|
|
112
152
|
|
|
113
153
|
const afterConditions = [
|
|
114
154
|
`(?=${escapedSep}[ .,])`,
|
|
115
155
|
`(?=${escapedSep}?\\.{3}|${escapedSep}?[^${endingChars}])`,
|
|
116
|
-
// Lookahead for a closing straight quote within 50 chars — handles
|
|
117
|
-
// quoted punctuation like "?" and "!" where the first char after the
|
|
118
|
-
// opening quote would otherwise look like an ending-quote context
|
|
119
|
-
`(?=[^"]{1,50}")`,
|
|
120
156
|
]
|
|
121
157
|
|
|
122
|
-
return `${
|
|
158
|
+
return `${doubleOpenerPrefix(escapedSep)}(?:${afterConditions.join("|")})`
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Quoted-punctuation openers like "?" or "!", where the character right after the
|
|
162
|
+
// opening quote looks like an ending-quote context. A left-to-right scan replaces
|
|
163
|
+
// the former 50-char lookahead: a boundary-position straight double quote is an
|
|
164
|
+
// opener when a closing straight double quote appears anywhere ahead, with at
|
|
165
|
+
// least one non-quote character between them.
|
|
166
|
+
function convertQuotedPunctuationOpeners(text: string, escapedSep: string): string {
|
|
167
|
+
const candidate = cachedRegExp(doubleOpenerPrefix(escapedSep), "gm")
|
|
168
|
+
let result = ""
|
|
169
|
+
let copiedUpTo = 0
|
|
170
|
+
for (const match of text.matchAll(candidate)) {
|
|
171
|
+
// The boundary and optional separator are left in place; only the straight
|
|
172
|
+
// quote (the final character of the match) is rewritten to an opener.
|
|
173
|
+
const quoteIndex = match.index + match[0].length - 1
|
|
174
|
+
if (!hasClosingDoubleAhead(text, quoteIndex + 1)) continue
|
|
175
|
+
result += text.slice(copiedUpTo, quoteIndex) + LEFT_DOUBLE_QUOTE
|
|
176
|
+
copiedUpTo = quoteIndex + 1
|
|
177
|
+
}
|
|
178
|
+
return result + text.slice(copiedUpTo)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Scans forward for a closing straight double quote, requiring at least one
|
|
182
|
+
// non-quote character between `start` and it. O(n) amortized: the scan halts at
|
|
183
|
+
// the next double-quote character.
|
|
184
|
+
function hasClosingDoubleAhead(text: string, start: number): boolean {
|
|
185
|
+
for (let position = start; position < text.length; position++) {
|
|
186
|
+
if (text[position] === '"') return position > start
|
|
187
|
+
}
|
|
188
|
+
return false
|
|
123
189
|
}
|
|
124
190
|
|
|
125
191
|
function convertDoubleQuotes(text: string, sep: string): string {
|
|
@@ -135,6 +201,8 @@ function convertDoubleQuotes(text: string, sep: string): string {
|
|
|
135
201
|
const beginningDouble = cachedRegExp(buildBeginningDoublePattern(escapedSep, rawEscSep), "gm")
|
|
136
202
|
text = text.replace(beginningDouble, `$<boundary>$<beforeChr>${LEFT_DOUBLE_QUOTE}`)
|
|
137
203
|
|
|
204
|
+
text = convertQuotedPunctuationOpeners(text, escapedSep)
|
|
205
|
+
|
|
138
206
|
text = text.replace(cachedRegExp(`(?<=\\{)(?<sepSpace>${escapedSep}? )?["]`, "g"), `$<sepSpace>${LEFT_DOUBLE_QUOTE}`)
|
|
139
207
|
|
|
140
208
|
const endingDouble = `(?<beforeQuote>[^\\s\\(])["](?<sepAfter>${escapedSep})?(?=${escapedSep}|[\\s/\\).,;${EM_DASH}:\\-\\}!?s]|$)`
|
|
@@ -146,31 +214,70 @@ function convertDoubleQuotes(text: string, sep: string): string {
|
|
|
146
214
|
return text
|
|
147
215
|
}
|
|
148
216
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
217
|
+
const CLOSING_QUOTES = new Set<string>([RIGHT_SINGLE_QUOTE, RIGHT_DOUBLE_QUOTE])
|
|
218
|
+
const TERMINAL_PUNCTUATION_SET = new Set<string>(TERMINAL_PUNCTUATION)
|
|
219
|
+
|
|
220
|
+
// Consumes a run of consecutive closing quotes (RSQ/RDQ) of arbitrary depth,
|
|
221
|
+
// each optionally preceded by a separator, starting at `start`. Returns the
|
|
222
|
+
// index just past the last closing quote, or -1 if there is no run.
|
|
223
|
+
function scanClosingQuoteRun(text: string, start: number, sep: string): number {
|
|
224
|
+
if (!CLOSING_QUOTES.has(text[start])) return -1
|
|
225
|
+
let runEnd = start + 1
|
|
226
|
+
for (;;) {
|
|
227
|
+
let next = runEnd
|
|
228
|
+
if (sep.length > 0 && text.startsWith(sep, next)) next += sep.length
|
|
229
|
+
if (!CLOSING_QUOTES.has(text[next])) break
|
|
230
|
+
runEnd = next + 1
|
|
231
|
+
}
|
|
232
|
+
return runEnd
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function separatorLengthAt(text: string, index: number, sep: string): number {
|
|
236
|
+
return sep.length > 0 && text.startsWith(sep, index) ? sep.length : 0
|
|
164
237
|
}
|
|
165
238
|
|
|
166
|
-
|
|
239
|
+
// Moves a period or comma from just after a run of closing quotes to just
|
|
240
|
+
// before it (American style: punctuation inside the quotes). A single
|
|
241
|
+
// left-to-right pass collects each closing-quote run of arbitrary depth — no
|
|
242
|
+
// nesting cap — then relocates an adjacent period/comma, treating separators as
|
|
243
|
+
// transparent (re-emitted in place). The move is skipped when the character
|
|
244
|
+
// before the run is terminal punctuation (`"Stop!".` keeps its period outside).
|
|
245
|
+
function movePunctuationInside(
|
|
167
246
|
text: string,
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
punctuationPattern: string,
|
|
247
|
+
sep: string,
|
|
248
|
+
isMovablePunctuation: (text: string, index: number) => boolean,
|
|
171
249
|
): string {
|
|
172
|
-
|
|
173
|
-
|
|
250
|
+
let result = ""
|
|
251
|
+
let position = 0
|
|
252
|
+
while (position < text.length) {
|
|
253
|
+
const sepBeforeLength = separatorLengthAt(text, position, sep)
|
|
254
|
+
const runStart = position + sepBeforeLength
|
|
255
|
+
const runEnd = scanClosingQuoteRun(text, runStart, sep)
|
|
256
|
+
const sepAfterLength = runEnd === -1 ? 0 : separatorLengthAt(text, runEnd, sep)
|
|
257
|
+
const punctuationIndex = runEnd + sepAfterLength
|
|
258
|
+
|
|
259
|
+
const precededByTerminal = position > 0 && TERMINAL_PUNCTUATION_SET.has(text[position - 1])
|
|
260
|
+
if (runEnd === -1 || precededByTerminal || !isMovablePunctuation(text, punctuationIndex)) {
|
|
261
|
+
result += text[position]
|
|
262
|
+
position++
|
|
263
|
+
continue
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const sepBefore = text.slice(position, runStart)
|
|
267
|
+
const run = text.slice(runStart, runEnd)
|
|
268
|
+
const sepAfter = text.slice(runEnd, punctuationIndex)
|
|
269
|
+
result += sepBefore + text[punctuationIndex] + run + sepAfter
|
|
270
|
+
position = punctuationIndex + 1
|
|
271
|
+
}
|
|
272
|
+
return result
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function isMovablePeriod(text: string, index: number): boolean {
|
|
276
|
+
return text[index] === "." && !text.startsWith("...", index)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function isMovableComma(text: string, index: number): boolean {
|
|
280
|
+
return text[index] === ","
|
|
174
281
|
}
|
|
175
282
|
|
|
176
283
|
function applyPunctuationStyle(text: string, sep: string, style: PunctuationStyle): string {
|
|
@@ -178,9 +285,9 @@ function applyPunctuationStyle(text: string, sep: string, style: PunctuationStyl
|
|
|
178
285
|
|
|
179
286
|
if (style === "american") {
|
|
180
287
|
// Period outside → inside: Hello". → Hello." (and Hello'". → Hello.'")
|
|
181
|
-
text =
|
|
288
|
+
text = movePunctuationInside(text, sep, isMovablePeriod)
|
|
182
289
|
// Comma outside → inside: Hello", → Hello,"
|
|
183
|
-
text =
|
|
290
|
+
text = movePunctuationInside(text, sep, isMovableComma)
|
|
184
291
|
} else {
|
|
185
292
|
// Every non-"american" non-"none" style (british/german/french) places
|
|
186
293
|
// punctuation outside the quotes.
|
package/src/rehype.ts
CHANGED
|
@@ -46,12 +46,36 @@ export interface RehypePunctilioOptions
|
|
|
46
46
|
* Default: []
|
|
47
47
|
*/
|
|
48
48
|
skipClasses?: string[]
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Invert the element model: transform text inside every element except the
|
|
52
|
+
* skip-list (`skipTags`/`skipClasses`) plus `textarea`/`input`/`select`,
|
|
53
|
+
* whose text is a literal form-control value rather than prose. The default
|
|
54
|
+
* (`false`) keeps the `TRANSFORMABLE_ELEMENTS` allowlist, transforming only
|
|
55
|
+
* known prose-bearing tags (and custom elements).
|
|
56
|
+
*
|
|
57
|
+
* Default: false
|
|
58
|
+
*/
|
|
59
|
+
transformAllElements?: boolean
|
|
49
60
|
}
|
|
50
61
|
|
|
51
62
|
const DEFAULT_SKIP_TAGS = ["code", "pre", "script", "style", "kbd", "var", "samp", "template", "math", "svg"]
|
|
52
63
|
|
|
64
|
+
// Form elements whose text content is a literal control value, not prose.
|
|
65
|
+
// Hard-skipped (whole subtree) under `transformAllElements`, on top of the
|
|
66
|
+
// user skip-list, so their values are protected even when nested inside a
|
|
67
|
+
// transformable element.
|
|
68
|
+
const FORM_VALUE_TAGS = ["textarea", "input"]
|
|
69
|
+
|
|
70
|
+
// `<select>` is not prose itself, but its `<option>` children are (and are
|
|
71
|
+
// transformed under the default allowlist). Under `transformAllElements` we
|
|
72
|
+
// exclude `select` as a transform *unit* while still recursing into — and
|
|
73
|
+
// transforming — its options, so the inverted mode never transforms less than
|
|
74
|
+
// the allowlist.
|
|
75
|
+
const NON_PROSE_CONTAINER_TAGS = new Set(["select"])
|
|
76
|
+
|
|
53
77
|
/** Option keys handled by `rehypePunctilio` itself rather than `transform()`. */
|
|
54
|
-
export const REHYPE_ONLY_OPTION_KEYS: readonly string[] = ["skipTags", "skipClasses", "shouldSkipText"]
|
|
78
|
+
export const REHYPE_ONLY_OPTION_KEYS: readonly string[] = ["skipTags", "skipClasses", "shouldSkipText", "transformAllElements"]
|
|
55
79
|
|
|
56
80
|
/** Runtime list of valid `rehypePunctilio` option keys. */
|
|
57
81
|
export const REHYPE_OPTION_KEYS: readonly string[] = [...TRANSFORM_OPTION_KEYS, ...REHYPE_ONLY_OPTION_KEYS]
|
|
@@ -312,7 +336,8 @@ export function collectTransformableElements(
|
|
|
312
336
|
node: Element,
|
|
313
337
|
shouldSkip: ElementPredicate,
|
|
314
338
|
depth: number = 0,
|
|
315
|
-
alreadyTransformed?: ReadonlySet<Element
|
|
339
|
+
alreadyTransformed?: ReadonlySet<Element>,
|
|
340
|
+
isTransformable: (tagName: string) => boolean = isTransformableElement
|
|
316
341
|
): Element[] {
|
|
317
342
|
/* istanbul ignore if -- defensive: prevents stack overflow from malicious HTML */
|
|
318
343
|
if (depth > MAX_RECURSION_DEPTH) {
|
|
@@ -335,7 +360,7 @@ export function collectTransformableElements(
|
|
|
335
360
|
hasTextDescendant(node, shouldSkip)
|
|
336
361
|
|
|
337
362
|
if (
|
|
338
|
-
|
|
363
|
+
isTransformable(node.tagName) &&
|
|
339
364
|
(hasDirectText || hasTextDescendants)
|
|
340
365
|
) {
|
|
341
366
|
results.push(node)
|
|
@@ -344,7 +369,7 @@ export function collectTransformableElements(
|
|
|
344
369
|
// children that should be independent, or has no text to transform.
|
|
345
370
|
for (const child of node.children) {
|
|
346
371
|
if (child.type === "element") {
|
|
347
|
-
const childResults = collectTransformableElements(child, shouldSkip, depth + 1, alreadyTransformed)
|
|
372
|
+
const childResults = collectTransformableElements(child, shouldSkip, depth + 1, alreadyTransformed, isTransformable)
|
|
348
373
|
for (const r of childResults) results.push(r)
|
|
349
374
|
}
|
|
350
375
|
}
|
|
@@ -377,12 +402,22 @@ export function rehypePunctilio(
|
|
|
377
402
|
skipClasses = [],
|
|
378
403
|
separator = DEFAULT_SEPARATOR,
|
|
379
404
|
shouldSkipText,
|
|
405
|
+
transformAllElements = false,
|
|
380
406
|
...transformOptions
|
|
381
407
|
} = options
|
|
382
408
|
|
|
383
|
-
|
|
409
|
+
// In inverted mode, form-value elements join the skip-list so their literal
|
|
410
|
+
// values are neither transformed nor flattened into a transformable ancestor.
|
|
411
|
+
const skipTagSet = new Set(transformAllElements ? [...skipTags, ...FORM_VALUE_TAGS] : skipTags)
|
|
384
412
|
const skipClassSet = new Set(skipClasses)
|
|
385
413
|
|
|
414
|
+
// Inverted mode transforms every non-skipped element except non-prose
|
|
415
|
+
// containers; the default keeps the `TRANSFORMABLE_ELEMENTS` allowlist (plus
|
|
416
|
+
// custom elements).
|
|
417
|
+
const isTransformable = transformAllElements
|
|
418
|
+
? (tagName: string) => !NON_PROSE_CONTAINER_TAGS.has(tagName)
|
|
419
|
+
: isTransformableElement
|
|
420
|
+
|
|
386
421
|
const hasSkipClass = (node: Element): boolean => {
|
|
387
422
|
if (skipClassSet.size === 0) return false
|
|
388
423
|
const classNames = node.properties?.className
|
|
@@ -426,7 +461,7 @@ export function rehypePunctilio(
|
|
|
426
461
|
}
|
|
427
462
|
|
|
428
463
|
// Collect and transform elements with text content
|
|
429
|
-
const elementsToTransform = collectTransformableElements(node, shouldSkip, 0, transformed)
|
|
464
|
+
const elementsToTransform = collectTransformableElements(node, shouldSkip, 0, transformed, isTransformable)
|
|
430
465
|
for (const elt of elementsToTransform) {
|
|
431
466
|
if (!transformed.has(elt)) {
|
|
432
467
|
transformElement(elt, transformFn, shouldSkip, separator, false, elementOptions)
|