punctilio 5.0.10 → 5.1.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.
package/README.md CHANGED
@@ -35,14 +35,14 @@ I tested `punctilio` against [`smartypants`](https://www.npmjs.com/package/smart
35
35
 
36
36
  My [`benchmark.mjs`](https://github.com/alexander-turner/punctilio/blob/main/benchmark.mjs) measures how well libraries handle a [wide range of scenarios](https://github.com/alexander-turner/punctilio/blob/main/benchmark_cases.json). The benchmark normalizes stylistic differences (e.g. non-breaking vs regular space, British vs American dash spacing) for fair comparison.
37
37
 
38
- | Package | Passed (of 151) |
38
+ | Package | Passed (of 160) |
39
39
  | -------------------: | :-------------- |
40
- | `punctilio` | 150 (99%) |
41
- | `tipograph` | 89 (59%) |
42
- | `smartquotes` | 77 (51%) |
43
- | `smartypants` | 72 (48%) |
44
- | `retext-smartypants` | 69 (46%) |
45
- | `typograf` | 64 (42%) |
40
+ | `punctilio` | 158 (99%) |
41
+ | `tipograph` | 94 (59%) |
42
+ | `smartquotes` | 82 (51%) |
43
+ | `smartypants` | 76 (48%) |
44
+ | `retext-smartypants` | 74 (46%) |
45
+ | `typograf` | 69 (43%) |
46
46
 
47
47
  _Note on benchmark construction: I assembled the initial cases myself. I then sought out cases where `punctilio` failed and competitors succeeded, and improved `punctilio` to succeed there as well. The benchmark may nonetheless remain biased towards `punctilio`._
48
48
 
@@ -72,6 +72,7 @@ _Note on benchmark construction: I assembled the initial cases myself. I then so
72
72
  | Input | Behavior | Why |
73
73
  | :--- | :--- | :--- |
74
74
  | `'99 but 5' clearance` | `5'` stays straight | A leading apostrophe and an opening quote are indistinguishable without semantics |
75
+ | `Anthropic-Pentagon news cycle` | hyphen stays a hyphen | The relational en dash (“between Anthropic and the Pentagon”) is orthographically identical to a hyphenated proper-noun compound (`Merriam-Webster`, `Sarbanes-Oxley`); telling them apart needs named-entity knowledge, not typography |
75
76
 
76
77
 
77
78
  ## Test suite
@@ -230,7 +231,7 @@ A `.pre-commit-hooks.yaml` ships in the package, so [pre-commit](https://pre-com
230
231
  # .pre-commit-config.yaml
231
232
  repos:
232
233
  - repo: https://github.com/alexander-turner/punctilio
233
- rev: v5.0.9
234
+ rev: v5.0.10
234
235
  hooks:
235
236
  - id: punctilio # rewrites *.md / *.html in place
236
237
  - id: punctilio-check # or: fail without writing (CI-friendly)
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAsBA,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;CAC9B;AAkXD,4EAA4E;AAC5E,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBvE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAsBA,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;CAC9B;AA6YD,4EAA4E;AAC5E,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBvE"}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createHash } from "node:crypto";
3
3
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
- import { readFile, writeFile } from "node:fs/promises";
4
+ import { readFile, rename, writeFile } from "node:fs/promises";
5
5
  import { dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { parseArgs } from "node:util";
@@ -203,21 +203,32 @@ function loadIgnore(cwd, ignorePath) {
203
203
  ig.add(readFileSync(effective, "utf8"));
204
204
  return ig;
205
205
  }
206
- function isGlobPattern(pattern) {
206
+ function hasGlobMetacharacters(pattern) {
207
207
  return /[*?[\]{}]/.test(pattern);
208
208
  }
209
- // Non-glob positionals pass through as literal paths so they error loudly if missing.
210
- async function discoverFiles(patterns, cwd, ig) {
211
- const literals = patterns.filter((p) => !isGlobPattern(p));
212
- const globs = patterns.filter(isGlobPattern);
209
+ // A positional is a literal path when it has no glob metacharacters, or when a
210
+ // file with that exact name exists on disk (so a real file named `note[1].md`
211
+ // is not mistaken for a glob).
212
+ function isLiteralPath(pattern, cwd) {
213
+ return !hasGlobMetacharacters(pattern) || existsSync(resolve(cwd, pattern));
214
+ }
215
+ // Literal positionals pass through untouched so they error loudly if missing and
216
+ // bypass ignore rules (naming a file explicitly is an intent to format it).
217
+ // Ignore rules and the zero-match warning apply only to glob-expanded paths.
218
+ async function discoverFiles(patterns, cwd, ig, stderr) {
219
+ const literals = patterns.filter((p) => isLiteralPath(p, cwd));
220
+ const globs = patterns.filter((p) => !isLiteralPath(p, cwd));
213
221
  const expanded = globs.length > 0
214
222
  ? await glob(globs, { cwd, absolute: true, onlyFiles: true })
215
223
  : [];
216
- const all = [...new Set([...literals.map((p) => resolve(cwd, p)), ...expanded])];
217
- return all.filter((file) => {
224
+ const kept = expanded.filter((file) => {
218
225
  const rel = relative(cwd, file);
219
226
  return rel.startsWith("..") || !ig.ignores(rel);
220
227
  });
228
+ if (globs.length > 0 && kept.length === 0) {
229
+ stderr.write(`Warning: no files matched: ${globs.join(" ")}\n`);
230
+ }
231
+ return [...new Set([...literals.map((p) => resolve(cwd, p)), ...kept])];
221
232
  }
222
233
  const DEFAULT_CACHE_LOCATION = join("node_modules", ".cache", "punctilio", "cache.json");
223
234
  function hashString(s) {
@@ -254,6 +265,13 @@ function saveCache(location, cache) {
254
265
  mkdirSync(dirname(location), { recursive: true });
255
266
  writeFileSync(location, JSON.stringify(cache));
256
267
  }
268
+ // Replace a file's contents atomically: write a sibling temp file, then rename
269
+ // it over the target so an interrupted run can never leave a half-written file.
270
+ async function atomicWriteFile(path, contents) {
271
+ const tmpPath = `${path}.${process.pid}.tmp`;
272
+ await writeFile(tmpPath, contents);
273
+ await rename(tmpPath, path);
274
+ }
257
275
  // cwd-relative so the cache survives directory moves and cross-machine syncs.
258
276
  function cacheKey(filePath, cwd) {
259
277
  return relative(cwd, filePath);
@@ -304,15 +322,19 @@ async function transformContent(input, type, opts) {
304
322
  ? transformMarkdown(input, omitKeys(opts, HTML_ONLY_OPTION_KEYS))
305
323
  : transformHtml(input, omitKeys(opts, MARKDOWN_ONLY_OPTION_KEYS));
306
324
  }
307
- // Unified pipelines unconditionally append a trailing newline; undo if original lacked one.
308
- function matchTrailingNewline(original, formatted) {
309
- const originalHas = original.endsWith("\n");
310
- const formattedHas = formatted.endsWith("\n");
311
- if (originalHas === formattedHas)
312
- return formatted;
313
- if (originalHas)
314
- return formatted + "\n";
315
- return formatted.replace(/\n$/, "");
325
+ // The unified pipelines emit LF-only output and unconditionally append a
326
+ // trailing newline. Restore the source's line-ending style and trailing-newline
327
+ // presence so a CRLF file doesn't gain mixed endings (which would make --check
328
+ // report a change forever and --write churn on every run).
329
+ function matchLineEndings(original, formatted) {
330
+ // Normalize the LF output back to CRLF when the source used it.
331
+ let out = original.includes("\r\n")
332
+ ? formatted.replace(/\r\n/g, "\n").replace(/\n/g, "\r\n")
333
+ : formatted;
334
+ // Drop the appended trailing newline if the original had none.
335
+ if (!/\n$/.test(original))
336
+ out = out.replace(/\r?\n$/, "");
337
+ return out;
316
338
  }
317
339
  async function readStdin(stdin) {
318
340
  const chunks = [];
@@ -382,7 +404,7 @@ async function runValidated(flags, positionals, io, version) {
382
404
  throw new UsageError("Reading from stdin requires --type md|html or --stdin-filepath <path>.");
383
405
  }
384
406
  const input = await readStdin(io.stdin);
385
- const output = matchTrailingNewline(input, await transformContent(input, type, opts));
407
+ const output = matchLineEndings(input, await transformContent(input, type, opts));
386
408
  if (check)
387
409
  return input === output ? 0 : 1;
388
410
  io.stdout.write(output);
@@ -393,7 +415,7 @@ async function runValidated(flags, positionals, io, version) {
393
415
  return 2;
394
416
  }
395
417
  const ig = loadIgnore(cwd, flags.ignorePath);
396
- const files = await discoverFiles(positionals, cwd, ig);
418
+ const files = await discoverFiles(positionals, cwd, ig, io.stderr);
397
419
  // In stdout mode every file's content must be produced, so a cache hit
398
420
  // could never skip work; only --write and --check use the cache.
399
421
  const cacheLocation = flags.cache === false || (!write && !check)
@@ -411,10 +433,11 @@ async function runValidated(flags, positionals, io, version) {
411
433
  if (entry !== undefined &&
412
434
  entry.contentHash === hashString(original) &&
413
435
  entry.optionsHash === optionsHash &&
436
+ entry.type === type &&
414
437
  entry.version === version)
415
438
  continue;
416
439
  }
417
- const formatted = matchTrailingNewline(original, await transformContent(original, type, opts));
440
+ const formatted = matchLineEndings(original, await transformContent(original, type, opts));
418
441
  if (!write && !check) {
419
442
  io.stdout.write(formatted);
420
443
  continue;
@@ -426,12 +449,12 @@ async function runValidated(flags, positionals, io, version) {
426
449
  io.stderr.write(`Would reformat: ${path}\n`);
427
450
  }
428
451
  else {
429
- await writeFile(path, formatted);
452
+ await atomicWriteFile(path, formatted);
430
453
  io.stdout.write(`Reformatted: ${path}\n`);
431
454
  }
432
455
  }
433
456
  if (cache && (unchanged || !check)) {
434
- cache.files[key] = { contentHash: hashString(formatted), optionsHash, version };
457
+ cache.files[key] = { contentHash: hashString(formatted), optionsHash, type, version };
435
458
  }
436
459
  }
437
460
  if (cacheLocation && cache)
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/dashes.d.ts CHANGED
@@ -18,8 +18,10 @@ export declare function hyphenReplace(input: ProseView, options?: DashOptions):
18
18
  /**
19
19
  * Insert a word joiner (U+2060) immediately before each unspaced em or en
20
20
  * dash that has preceding content, preventing the dash from appearing as the
21
- * first glyph on a wrapped line. Both dashes share Unicode line-break class
22
- * B2, which permits a break before them. Does not insert before line-leading
21
+ * first glyph on a wrapped line. The em dash (U+2014) is Unicode line-break
22
+ * class B2, which permits a break on either side; the en dash (U+2013) is
23
+ * class BA (break after). The word joiner glues either dash to the preceding
24
+ * word so it cannot start a wrapped line. Does not insert before line-leading
23
25
  * dashes (preceded by whitespace or start-of-string) or dashes already glued
24
26
  * with a word joiner — including British-style spaced en dashes ("word – word"),
25
27
  * which are already protected by the surrounding spaces.
@@ -1 +1 @@
1
- {"version":3,"file":"dashes.d.ts","sourceRoot":"","sources":["../src/dashes.ts"],"names":[],"mappings":"AACA,OAAO,EAAoE,KAAK,SAAS,EAA4C,MAAM,iBAAiB,CAAA;AAG5J,eAAO,MAAM,WAAW,0CAA2C,CAAA;AACnE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAQD,eAAO,MAAM,6BAA6B,+BAA0C,CAAA;AA0JpF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,qCAG5B,CAAA;AA2aF,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;AAwE9E,8EAA8E;AAC9E,eAAO,MAAM,YAAY,qCAIvB,CAAA;AAmiBF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;AAe5E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,qCAGzB,CAAA"}
1
+ {"version":3,"file":"dashes.d.ts","sourceRoot":"","sources":["../src/dashes.ts"],"names":[],"mappings":"AACA,OAAO,EAA+G,KAAK,SAAS,EAA4C,MAAM,iBAAiB,CAAA;AAEvM,eAAO,MAAM,WAAW,0CAA2C,CAAA;AACnE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAQD,eAAO,MAAM,6BAA6B,+BAA0C,CAAA;AA0JpF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,qCAG5B,CAAA;AAsdF,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;AAoE9E,8EAA8E;AAC9E,eAAO,MAAM,YAAY,qCAIvB,CAAA;AA2hBF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;AAe5E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,qCAGzB,CAAA"}
package/dist/dashes.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { cachedRegExp, FOLDED_WORD_CHARS, isWordLike, LATIN_LETTER_RE, LATIN_LETTERS, MAX_BOUNDARY_SEPARATORS, NBSP_CHARS, SPACE_CHAR_RE, UNICODE_SYMBOLS } from "./constants.js";
2
- import { boundaryCountAt, exceedsSingleBoundary, makeProsePass, overInput, replaceAllInView } from "./prose-view.js";
3
- import { namedGroups } from "./utils.js";
2
+ import { boundaryCountAt, exceedsSingleBoundary, firstInteriorBoundary, lastBoundaryBefore, makeProsePass, overInput, replaceAllInView } from "./prose-view.js";
4
3
  export const DASH_STYLES = ["american", "british", "none"];
5
4
  const { EN_DASH, EM_DASH, MINUS, MULTIPLICATION, PLUS_MINUS, LEFT_DOUBLE_QUOTE, RIGHT_DOUBLE_QUOTE, LEFT_SINGLE_QUOTE, RIGHT_SINGLE_QUOTE, } = UNICODE_SYMBOLS;
6
5
  // Prevents false-positive ranges in model names like "Llama-2-7B".
@@ -14,7 +13,7 @@ const months = [
14
13
  "July", "August", "September", "October", "November", "December",
15
14
  // Abbreviated "May" omitted — the full name is already 3 letters
16
15
  "Jan", "Feb", "Mar", "Apr", "Jun",
17
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
16
+ "Jul", "Aug", "Sept", "Sep", "Oct", "Nov", "Dec",
18
17
  ];
19
18
  const monthPattern = months.join("|");
20
19
  /**
@@ -160,11 +159,50 @@ function convertPositiveRanges(view) {
160
159
  const text = view.text;
161
160
  let i = 0;
162
161
  while (i < text.length) {
162
+ // A structural match can only begin at a digit, `p`, or `(` (the area-code
163
+ // and start-run readers reject every other first character), so other
164
+ // offsets skip the match attempt entirely.
165
+ if (!RANGE_START_CHAR_RE.test(text[i])) {
166
+ i++;
167
+ continue;
168
+ }
163
169
  const span = matchPositiveRangeAt(view, i);
164
- i = span === null ? i + 1 : Math.max(span, i + 1);
170
+ i = span === null ? failedRangeStartSkip(view, i) : Math.max(span, i + 1);
165
171
  }
166
172
  view.commit();
167
173
  }
174
+ const RANGE_START_CHAR_RE = /[\dp(]/;
175
+ /**
176
+ * Advance past a failed candidate at `i`. Advancing one character at a time
177
+ * re-reads the digit run at every offset — O(n²) on inputs like "1.1.1.…" or
178
+ * "111…1-x", a denial-of-service vector — so the scan jumps wherever a
179
+ * failure at `i` provably rules out interior starts:
180
+ *
181
+ * - A start-dependent failure (`\b`, not-after-dash — checked first in
182
+ * matchRangeBody, before any run read) says nothing about interior starts;
183
+ * advance one character. The gate order makes each such attempt cheap.
184
+ * - Otherwise the failure came after the gates, and everything there depends
185
+ * only on the run end, not the run start: every interior digit start reads
186
+ * to the same boundary-free run end and fails the same wall, `.`/`,` cannot
187
+ * start a run, and no dash-at-run-end fallback (dash extent, boundary
188
+ * counts, end run, tail resolution) sees a different picture. The single
189
+ * escape is the phone-area-code reading, which restarts a fresh match past
190
+ * a dash at the run end and therefore only exists at `runEnd - 3` — so
191
+ * jump straight there (or to the run end when no dash follows).
192
+ */
193
+ function failedRangeStartSkip(view, i) {
194
+ const text = view.text;
195
+ if (!/\d/.test(text[i]))
196
+ return i + 1;
197
+ if (!wordBoundaryStartOk(view, i) || !notAfterDashOk(view, i))
198
+ return i + 1;
199
+ let runEnd = i + 1;
200
+ while (/[\d.,]/.test(text[runEnd] ?? "") && !view.hasBoundary(runEnd))
201
+ runEnd++;
202
+ if (text[runEnd] !== "-")
203
+ return runEnd;
204
+ return Math.max(i + 1, runEnd - 3);
205
+ }
168
206
  /**
169
207
  * Attempts the `phoneAreaCode? \b rangeStart -{1,3} rangeEnd following* suffix?
170
208
  * \b` structural match beginning at clean offset `i`, converting the dash when
@@ -209,6 +247,14 @@ function readPhoneAreaCode(view, i) {
209
247
  */
210
248
  function matchRangeBody(view, startStart) {
211
249
  const text = view.text;
250
+ // Start-dependent gates first: they need no run read, and their position in
251
+ // the conjunction lets the scanner classify a failure — everything after
252
+ // them depends only on where the boundary-free start run ends, not on where
253
+ // it begins (see failedRangeStartSkip).
254
+ if (!wordBoundaryStartOk(view, startStart))
255
+ return null;
256
+ if (!notAfterDashOk(view, startStart))
257
+ return null;
212
258
  // rangeStart = `(?:p\.?|[currency])?\d[\d.,]*`, anchored at a `\b`.
213
259
  const start = readStartRun(view, startStart);
214
260
  if (start === null)
@@ -228,17 +274,21 @@ function matchRangeBody(view, startStart) {
228
274
  return null;
229
275
  // `readStartRun` already stops at the first interior boundary, so the start
230
276
  // span is boundary-free and its clean digits are the whole run.
277
+ //
278
+ // INVARIANT (load-bearing for failedRangeStartSkip): past the gates above,
279
+ // `startDigits` is the ONLY value derived from where the run begins, and it
280
+ // feeds only the conversion decision, never the null/non-null return. The
281
+ // skip's jump is sound precisely because every interior start shares this
282
+ // function's post-gate outcome; threading the start position into the
283
+ // end/tail logic would silently break it.
231
284
  const startDigits = text.slice(startStart, startSpanEnd);
232
- if (!wordBoundaryStartOk(view, startStart))
233
- return null;
234
- if (!notAfterDashOk(view, startStart))
235
- return null;
236
285
  const end = readEndRun(view, dashEnd);
237
286
  if (end === null)
238
287
  return null;
239
288
  // The greedy end `[\d.,]*` and greedy `following*` backtrack together; the
240
- // structural match commits at the longest end whose tail completes.
241
- for (let len = end.length; len >= end.minLen; len--) {
289
+ // structural match commits at the longest end whose tail completes. The
290
+ // mandatory `\d` caps the backtrack at one digit.
291
+ for (let len = end.length; len >= 1; len--) {
242
292
  const endPos = end.firstDigitStart + len;
243
293
  const tail = resolvePositiveTail(view, endPos);
244
294
  if (tail === null)
@@ -299,7 +349,7 @@ function readEndRun(view, pos) {
299
349
  i++;
300
350
  while (/[\d.,]/.test(text[i] ?? "") && !view.hasBoundary(i))
301
351
  i++;
302
- return { firstDigitStart, length: i - firstDigitStart, minLen: 1 };
352
+ return { firstDigitStart, length: i - firstDigitStart };
303
353
  }
304
354
  /**
305
355
  * Resolves the tail at `endPos`: finds the longest `following` whose
@@ -566,6 +616,12 @@ function rangeNumbersConvert(startNum, endNum) {
566
616
  export function enDashDateRange(input, options = {}) {
567
617
  return overInput(input, (view) => enDashDateRangeOverView(view, options.dashStyle ?? "american"));
568
618
  }
619
+ /** Clean offsets of the `[preSpace]-[postSpace]` span inside a date-range match. */
620
+ function dateRangeDashSpan(match) {
621
+ const groups = match.groups;
622
+ const dashStart = match.index + groups.startMonth.length + (groups.startYear?.length ?? 0);
623
+ return { dashStart, dashEnd: dashStart + groups.preSpace.length + 1 + groups.postSpace.length };
624
+ }
569
625
  function enDashDateRangeOverView(view, dashStyle) {
570
626
  if (dashStyle === "none")
571
627
  return;
@@ -586,22 +642,16 @@ function enDashDateRangeOverView(view, dashStyle) {
586
642
  // boundary fold-stably.
587
643
  if (!wordBoundaryEndOk(v, match.index + match[0].length))
588
644
  return null;
589
- const groups = namedGroups(matchArgs(match));
590
645
  // Replace `[preSpace]-[postSpace]` (the dash and its spaces) with the
591
646
  // styled en-dash, leaving the months and any boundaries around them.
592
- const startLen = groups.startMonth.length + (groups.startYear?.length ?? 0);
593
- const dashSpan = groups.preSpace.length + 1 + groups.postSpace.length;
594
- const dashStart = match.index + startLen;
595
- v.replace(dashStart, dashStart + dashSpan, `${pre}${EN_DASH}${post}`);
647
+ const { dashStart, dashEnd } = dateRangeDashSpan(match);
648
+ v.replace(dashStart, dashEnd, `${pre}${EN_DASH}${post}`);
596
649
  return null;
597
650
  }, {
598
651
  allowBoundaries: (match, v) => {
599
- const groups = namedGroups(matchArgs(match));
600
- const startLen = groups.startMonth.length + (groups.startYear?.length ?? 0);
601
652
  // One boundary is tolerated after the start year and one before the end
602
653
  // month, bracketing the dash and spaces.
603
- const dashStart = match.index + startLen;
604
- const dashEnd = dashStart + groups.preSpace.length + 1 + groups.postSpace.length;
654
+ const { dashStart, dashEnd } = dateRangeDashSpan(match);
605
655
  const tolerated = new Map();
606
656
  tolerated.set(dashStart, 1);
607
657
  tolerated.set(dashEnd, 1);
@@ -660,25 +710,16 @@ function minusSubtractionPrefixOk(match, view, prefixLen) {
660
710
  if (exceedsSingleBoundary(view, match.index))
661
711
  return false;
662
712
  const numStart = match.index + prefixLen;
663
- for (const b of view.boundaries) {
664
- if (b > match.index && b < numStart)
665
- return false;
666
- }
713
+ if (firstInteriorBoundary(view, match.index, numStart) >= 0)
714
+ return false;
667
715
  // The slot before `num` tolerates at most one boundary at the num head.
668
716
  if (exceedsSingleBoundary(view, numStart))
669
717
  return false;
670
718
  // `num` stops at the first interior boundary; the clean run up to it must
671
719
  // still satisfy `\d*\.?\d+` (the mandatory trailing `\d+`).
672
720
  const numEnd = match.index + match[0].length;
673
- let truncatedEnd = numEnd;
674
- for (const b of view.boundaries) {
675
- if (b > numStart && b < numEnd) {
676
- truncatedEnd = b;
677
- break;
678
- }
679
- if (b >= numEnd)
680
- break;
681
- }
721
+ const interior = firstInteriorBoundary(view, numStart, numEnd);
722
+ const truncatedEnd = interior >= 0 ? interior : numEnd;
682
723
  return NUM_BODY_RE.test(view.text.slice(numStart, truncatedEnd));
683
724
  }
684
725
  const MINUS_BEFORE_CLASS_RE = new RegExp(`[\\s("'${LEFT_DOUBLE_QUOTE}${RIGHT_DOUBLE_QUOTE}${LEFT_SINGLE_QUOTE}${RIGHT_SINGLE_QUOTE}]`);
@@ -712,15 +753,8 @@ function minusDirectNegative(view) {
712
753
  // ("-{b}5"), and one that strips the mandatory `\d+` ("-.{b}1") breaks the
713
754
  // match, but one past a valid number ("-5{b}5") leaves it intact.
714
755
  const numEnd = start + match[0].length;
715
- let numTruncEnd = numEnd;
716
- for (const b of v.boundaries) {
717
- if (b > start && b < numEnd) {
718
- numTruncEnd = b;
719
- break;
720
- }
721
- if (b >= numEnd)
722
- break;
723
- }
756
+ const interior = firstInteriorBoundary(v, start, numEnd);
757
+ const numTruncEnd = interior >= 0 ? interior : numEnd;
724
758
  if (!NUM_BODY_RE.test(v.text.slice(start + 1, numTruncEnd)))
725
759
  return null;
726
760
  // A boundary directly before the hyphen routes to Pattern 2b; otherwise
@@ -790,7 +824,7 @@ function convertSpacedDashes(view, rendered) {
790
824
  let consumedThrough = -1;
791
825
  pass(view, cachedRegExp(pattern, "g"), (match, v) => {
792
826
  const text = v.text;
793
- const groups = namedGroups(matchArgs(match));
827
+ const groups = match.groups;
794
828
  const firstDash = match.index + match[0].length - groups.dashStart.length;
795
829
  // The greedy `[ ]+` starts at the leftmost position whose `(?<=[^\s]|^)`
796
830
  // holds: line/text start, a non-whitespace clean char, or a boundary. A
@@ -799,12 +833,11 @@ function convertSpacedDashes(view, rendered) {
799
833
  // consumed span is also a floor: leading spaces it already consumed are not
800
834
  // re-used.
801
835
  let matchStart = Math.max(match.index, consumedThrough);
802
- for (const b of view.boundaries) {
803
- if (b > matchStart && b <= firstDash - 1)
804
- matchStart = b;
805
- else if (b > firstDash)
806
- break;
807
- }
836
+ // The greatest boundary strictly left of the dash restarts the match just
837
+ // after it (binary search, not a per-match scan of every boundary).
838
+ const boundaryBeforeDash = lastBoundaryBefore(view, firstDash);
839
+ if (boundaryBeforeDash > matchStart)
840
+ matchStart = boundaryBeforeDash;
808
841
  /* istanbul ignore if -- defensive: the previous match's trailing `(?=\S|$)`
809
842
  stops at this dash, so `consumedThrough` never reaches past `firstDash`. */
810
843
  if (matchStart >= firstDash + 1)
@@ -1152,7 +1185,7 @@ function preserveLineLeadingEmDashSpace(view) {
1152
1185
  // more exceed that slot and block the match.
1153
1186
  if (exceedsSingleBoundary(v, match.index))
1154
1187
  return null;
1155
- const groups = namedGroups(matchArgs(match));
1188
+ const groups = match.groups;
1156
1189
  return `${EM_DASH} ${groups.after}`;
1157
1190
  });
1158
1191
  }
@@ -1173,8 +1206,10 @@ const { WORD_JOINER } = UNICODE_SYMBOLS;
1173
1206
  /**
1174
1207
  * Insert a word joiner (U+2060) immediately before each unspaced em or en
1175
1208
  * dash that has preceding content, preventing the dash from appearing as the
1176
- * first glyph on a wrapped line. Both dashes share Unicode line-break class
1177
- * B2, which permits a break before them. Does not insert before line-leading
1209
+ * first glyph on a wrapped line. The em dash (U+2014) is Unicode line-break
1210
+ * class B2, which permits a break on either side; the en dash (U+2013) is
1211
+ * class BA (break after). The word joiner glues either dash to the preceding
1212
+ * word so it cannot start a wrapped line. Does not insert before line-leading
1178
1213
  * dashes (preceded by whitespace or start-of-string) or dashes already glued
1179
1214
  * with a word joiner — including British-style spaced en dashes ("word – word"),
1180
1215
  * which are already protected by the surrounding spaces.
@@ -1189,8 +1224,4 @@ export const dashWordJoiner = makeProsePass((view) => {
1189
1224
  const re = cachedRegExp(`(?<=[^\\s${WORD_JOINER}])[${EM_DASH}${EN_DASH}]`, "gu");
1190
1225
  replaceAllInView(view, re, (match) => `${WORD_JOINER}${match[0]}`);
1191
1226
  });
1192
- /** Reconstructs `.replace()`-style callback args from a RegExpExecArray. */
1193
- function matchArgs(match) {
1194
- return [...match, match.index, match.input, match.groups];
1195
- }
1196
1227
  //# sourceMappingURL=dashes.js.map