@chaffjs/lang-en 0.12.0 → 0.14.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/dist/apostrophe.d.ts +2 -0
- package/dist/apostrophe.d.ts.map +1 -0
- package/dist/apostrophe.js +8 -0
- package/dist/apostrophe.js.map +1 -0
- package/dist/citation.d.ts +2 -0
- package/dist/citation.d.ts.map +1 -1
- package/dist/citation.js +37 -12
- package/dist/citation.js.map +1 -1
- package/dist/closing-quote.d.ts +6 -0
- package/dist/closing-quote.d.ts.map +1 -0
- package/dist/closing-quote.js +50 -0
- package/dist/closing-quote.js.map +1 -0
- package/dist/dates.js +1 -1
- package/dist/dates.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/item-style.d.ts +29 -0
- package/dist/item-style.d.ts.map +1 -0
- package/dist/item-style.js +124 -0
- package/dist/item-style.js.map +1 -0
- package/dist/lexicons.d.ts.map +1 -1
- package/dist/lexicons.js +5 -6
- package/dist/lexicons.js.map +1 -1
- package/dist/long-runs.d.ts +6 -0
- package/dist/long-runs.d.ts.map +1 -0
- package/dist/long-runs.js +6 -0
- package/dist/long-runs.js.map +1 -0
- package/dist/pos.d.ts.map +1 -1
- package/dist/pos.js +40 -6
- package/dist/pos.js.map +1 -1
- package/dist/proper-noun.d.ts +21 -0
- package/dist/proper-noun.d.ts.map +1 -1
- package/dist/proper-noun.js +37 -0
- package/dist/proper-noun.js.map +1 -1
- package/dist/quoted-stop.d.ts +13 -0
- package/dist/quoted-stop.d.ts.map +1 -0
- package/dist/quoted-stop.js +45 -0
- package/dist/quoted-stop.js.map +1 -0
- package/dist/sentence-split.d.ts +2 -0
- package/dist/sentence-split.d.ts.map +1 -1
- package/dist/sentence-split.js +4 -2
- package/dist/sentence-split.js.map +1 -1
- package/dist/structure.d.ts.map +1 -1
- package/dist/structure.js +26 -67
- package/dist/structure.js.map +1 -1
- package/lexicons/common-acronym.yaml +4 -0
- package/lexicons/date-time-unit.yaml +6 -0
- package/lexicons/emphasis-word.yaml +1 -0
- package/lexicons/excessive-hedging.yaml +6 -0
- package/lexicons/fixed-phrase.yaml +14 -0
- package/lexicons/hedge-frame.yaml +9 -0
- package/lexicons/hedge-scope.yaml +7 -0
- package/lexicons/honorific.yaml +15 -0
- package/lexicons/http-method.yaml +14 -0
- package/lexicons/participle-word.yaml +8 -0
- package/lexicons/quantity-noun.yaml +6 -0
- package/lexicons/relative-word.yaml +10 -0
- package/lexicons/subject-pronoun.yaml +13 -0
- package/lexicons/superlative-amount.yaml +7 -0
- package/lexicons/superlative-bound.yaml +8 -0
- package/package.json +1 -1
- package/src/apostrophe.ts +8 -0
- package/src/citation.ts +41 -13
- package/src/closing-quote.ts +52 -0
- package/src/dates.ts +1 -1
- package/src/index.ts +5 -2
- package/src/item-style.ts +130 -0
- package/src/lexicons.ts +9 -8
- package/src/long-runs.ts +6 -0
- package/src/pos.ts +47 -6
- package/src/proper-noun.ts +43 -0
- package/src/quoted-stop.ts +52 -0
- package/src/sentence-split.ts +4 -2
- package/src/structure.ts +25 -69
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apostrophe.d.ts","sourceRoot":"","sources":["../src/apostrophe.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAAuC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 解析器(wink)は ' しかアポストロフィと読まず、that’s を that / ’ / s に割る。’ を ' に置き換えてから渡す。
|
|
3
|
+
* ’ は閉じの一重引用符でもあるので、字と字に挟まれたとき(don’t, team’s, 1990’s)だけ置き換える。閉じの引用符の後ろに字は続かない。
|
|
4
|
+
* ʼ(U+02BC)は引用符には使わないので、いつも置き換える。一字を一字に置き換えるので、位置は本文のまま。
|
|
5
|
+
*/
|
|
6
|
+
const APOSTROPHE = /(?<=[\p{L}\p{N}])’(?=\p{L})|ʼ/gu;
|
|
7
|
+
export const straightApostrophes = (text) => text.replace(APOSTROPHE, "'");
|
|
8
|
+
//# sourceMappingURL=apostrophe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apostrophe.js","sourceRoot":"","sources":["../src/apostrophe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC"}
|
package/dist/citation.d.ts
CHANGED
|
@@ -14,4 +14,6 @@ export declare const citedDocumentBefore: (text: string, start: number) => strin
|
|
|
14
14
|
* "of this Agreement" and "of the Agreement" are this document; "of the Master Agreement" is another.
|
|
15
15
|
*/
|
|
16
16
|
export declare const citedDocumentAfter: (text: string, end: number) => string | undefined;
|
|
17
|
+
/** A hyphenated tag right after a reference ("Section 4.2.3 of [HTTP-CACHING]") or just before it ("[HTTP-CACHING], Section 4"). */
|
|
18
|
+
export declare const hyphenatedTagAround: (text: string, start: number, end: number) => string | undefined;
|
|
17
19
|
//# sourceMappingURL=citation.d.ts.map
|
package/dist/citation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation.d.ts","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"citation.d.ts","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAmB3E;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,QAAQ,OAAO,KAAG,UAAU,EAGtB,CAAC;AAwBjD,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,SAAiD,CAAC;AAoC7H;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,SASvE,CAAC;AAEF,oIAAoI;AACpI,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,SAIvF,CAAC"}
|
package/dist/citation.js
CHANGED
|
@@ -3,8 +3,11 @@ const OF = /^,? of (?:the |that |those )?/u;
|
|
|
3
3
|
/** "section 4(2)(a) (exception to liability …) of the Damages (Scotland) Act 2011": the gloss sits between the number and the name. */
|
|
4
4
|
const GLOSS = /^ \([^()]{1,100}\)/u;
|
|
5
5
|
const CONNECTOR = /^(?:,? (?:to|and|or)|,) /u;
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* "9", "29(2)", "(g)", and a roman "V" for a list of Articles. The roman numeral must end the word: "VIII", not "Vendor".
|
|
8
|
+
* A dotted "310.5" is not read: its "310" alone is not the section the list names.
|
|
9
|
+
*/
|
|
10
|
+
const LISTED_NUMBERS = [/^\d{1,3}(?!\.?\d)[A-Z]{0,2}(?:\([a-z0-9]{1,4}\))*/u, /^(?:\([a-z0-9]{1,4}\))+/u, /^[IVXLC]{1,7}\b/u];
|
|
8
11
|
const listedNumber = (text) => LISTED_NUMBERS.map((pattern) => pattern.exec(text)?.[0]).find((found) => found !== undefined);
|
|
9
12
|
/**
|
|
10
13
|
* A listed number is a reference only where the list goes on or ends: "Sections 1, 2 and 9 of" or "Section 3 and 4." —
|
|
@@ -39,11 +42,22 @@ export const listMembers = (rest, plural) => listed(rest)
|
|
|
39
42
|
* word of a contract ("[Company]", "[Reserved]") is not taken for another document and still has to exist here.
|
|
40
43
|
*/
|
|
41
44
|
const TAG = "(?<tag>[A-Z][A-Z0-9]{1,30})";
|
|
42
|
-
|
|
45
|
+
/**
|
|
46
|
+
* "[HTTP-CACHING]" is written like a contract's placeholder "[BUYER-1]". Only the document tells them apart, by listing
|
|
47
|
+
* the tag or not, so this tag is a candidate that the core checks against the document (attrs.citedTag).
|
|
48
|
+
*/
|
|
49
|
+
const HYPHENATED_TAG = "(?<tag>[A-Z][A-Z0-9]{0,30}(?:-[A-Z0-9]{1,30}){1,4})";
|
|
50
|
+
const tagAfter = (tag) => new RegExp(`^\\[${tag}\\]`, "u");
|
|
43
51
|
/** "[HTTP], Section 12.1": the tag written just before the reference. */
|
|
44
|
-
const
|
|
52
|
+
const tagBefore = (tag) => new RegExp(`\\[${tag}\\],?\\s?$`, "u");
|
|
53
|
+
const TAG_AFTER = tagAfter(TAG);
|
|
54
|
+
const TAG_BEFORE = tagBefore(TAG);
|
|
55
|
+
const HYPHENATED_AFTER = tagAfter(HYPHENATED_TAG);
|
|
56
|
+
const HYPHENATED_BEFORE = tagBefore(HYPHENATED_TAG);
|
|
57
|
+
const TAG_REACH = 40;
|
|
58
|
+
const tagEndingAt = (pattern, text, start) => pattern.exec(text.slice(Math.max(0, start - TAG_REACH), start))?.groups?.["tag"];
|
|
45
59
|
/** The document cited by a tag just before a reference, as in "see [HTTP], Section 12.1". */
|
|
46
|
-
export const citedDocumentBefore = (text, start) => TAG_BEFORE
|
|
60
|
+
export const citedDocumentBefore = (text, start) => tagEndingAt(TAG_BEFORE, text, start);
|
|
47
61
|
const CAPITALISED = /^[A-Z][\w'’-]*/u;
|
|
48
62
|
/**
|
|
49
63
|
* How a document names itself. "Section 3 of the Agreement" in an agreement means this one.
|
|
@@ -69,24 +83,35 @@ const titleWords = (rest) => {
|
|
|
69
83
|
}
|
|
70
84
|
return words;
|
|
71
85
|
};
|
|
86
|
+
/** What follows the "of" after a reference and its list, or undefined when no "of" follows. */
|
|
87
|
+
const afterOf = (text, end) => {
|
|
88
|
+
const rest = text.slice(end, end + 200);
|
|
89
|
+
const afterList = listEnd(rest);
|
|
90
|
+
const afterGloss = afterList + (GLOSS.exec(rest.slice(afterList))?.[0].length ?? 0);
|
|
91
|
+
const of = OF.exec(rest.slice(afterGloss));
|
|
92
|
+
return of === null ? undefined : rest.slice(afterGloss + of[0].length);
|
|
93
|
+
};
|
|
72
94
|
/**
|
|
73
95
|
* The document named right after a reference, or undefined when the reference is into this document.
|
|
74
96
|
* "of this Agreement" and "of the Agreement" are this document; "of the Master Agreement" is another.
|
|
75
97
|
*/
|
|
76
98
|
export const citedDocumentAfter = (text, end) => {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
const listed = afterList + (GLOSS.exec(rest.slice(afterList))?.[0].length ?? 0);
|
|
80
|
-
const of = OF.exec(rest.slice(listed));
|
|
81
|
-
if (of === null)
|
|
99
|
+
const named = afterOf(text, end);
|
|
100
|
+
if (named === undefined)
|
|
82
101
|
return undefined;
|
|
83
|
-
const tag = TAG_AFTER.exec(
|
|
102
|
+
const tag = TAG_AFTER.exec(named)?.groups?.["tag"];
|
|
84
103
|
if (tag !== undefined)
|
|
85
104
|
return tag;
|
|
86
|
-
const words = titleWords(
|
|
105
|
+
const words = titleWords(named);
|
|
87
106
|
if (words.length === 0)
|
|
88
107
|
return undefined;
|
|
89
108
|
const name = words.join(" ");
|
|
90
109
|
return words.length === 1 && SELF.has(name) ? undefined : name;
|
|
91
110
|
};
|
|
111
|
+
/** A hyphenated tag right after a reference ("Section 4.2.3 of [HTTP-CACHING]") or just before it ("[HTTP-CACHING], Section 4"). */
|
|
112
|
+
export const hyphenatedTagAround = (text, start, end) => {
|
|
113
|
+
const named = afterOf(text, end);
|
|
114
|
+
const following = named === undefined ? undefined : HYPHENATED_AFTER.exec(named)?.groups?.["tag"];
|
|
115
|
+
return following ?? tagEndingAt(HYPHENATED_BEFORE, text, start);
|
|
116
|
+
};
|
|
92
117
|
//# sourceMappingURL=citation.js.map
|
package/dist/citation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation.js","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G,MAAM,EAAE,GAAG,gCAAgC,CAAC;AAC5C,uIAAuI;AACvI,MAAM,KAAK,GAAG,qBAAqB,CAAC;AACpC,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAC9C
|
|
1
|
+
{"version":3,"file":"citation.js","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Span } from "chaffjs/plugin";
|
|
2
|
+
/** 文頭の閉じ引用符の並びの長さ。後ろに字が続けば開き引用符かアポストロフィなので 0。 */
|
|
3
|
+
export declare const closingRunLength: (sentence: string) => number;
|
|
4
|
+
/** 文の span の並び(text 上の位置)で、文頭に取り残された閉じ引用符を前の文へ戻したもの。 */
|
|
5
|
+
export declare const reattachClosingQuotes: (text: string, spans: readonly Span[]) => Span[];
|
|
6
|
+
//# sourceMappingURL=closing-quote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closing-quote.d.ts","sourceRoot":"","sources":["../src/closing-quote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAmB3C,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,MAGnD,CAAC;AAoBF,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,OAAO,SAAS,IAAI,EAAE,KAAG,IAAI,EAOzE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { NEXT_SENTENCE_HEAD } from "./quoted-stop.js";
|
|
2
|
+
/**
|
|
3
|
+
* sentence-splitter は疑問符・感嘆符の後の曲がった閉じ引用符(“Is it done?” Nobody …)と直線の一重引用符の手前で文を切る。
|
|
4
|
+
* 次の文が「”」で始まり、前の文は引用符が開いたまま終わる。
|
|
5
|
+
*
|
|
6
|
+
* 前の文が句点で終わり、次の文がそこから間を置かずに閉じ引用符(閉じ括弧も)で始まるとき、それを前の文の末尾へ戻す。
|
|
7
|
+
* 戻した後に空白と大文字が続けば文は二つのまま、何も続かなければ前の文だけ、
|
|
8
|
+
* 小文字・数字・句読点が続けば引用は文の途中にあるので一つの文につなぐ(直線の二重引用符で分割器がそうするのと同じ)。
|
|
9
|
+
* 開き引用符(“ ‘)は閉じの分類に入らない。語頭のアポストロフィ(’Tis ’90s)は後ろに字が続くので閉じと読まない。
|
|
10
|
+
*/
|
|
11
|
+
const CLOSING_RUN = /^[\p{Pf}\p{Pe}"']+/u;
|
|
12
|
+
const WORD_CHARACTER = /^[\p{L}\p{N}]/u;
|
|
13
|
+
const STOP_AT_END = /[.?!]$/u;
|
|
14
|
+
// 語頭のアポストロフィの後の大文字(’Tis)も次の文の頭。
|
|
15
|
+
const NEXT_SENTENCE = new RegExp(String.raw `^(?:${NEXT_SENTENCE_HEAD}|\s+’\p{Lu})`, "u");
|
|
16
|
+
const LEADING_SPACE = /^\s*/u;
|
|
17
|
+
/** 文頭の閉じ引用符の並びの長さ。後ろに字が続けば開き引用符かアポストロフィなので 0。 */
|
|
18
|
+
export const closingRunLength = (sentence) => {
|
|
19
|
+
const run = CLOSING_RUN.exec(sentence)?.[0].length ?? 0;
|
|
20
|
+
return run > 0 && !WORD_CHARACTER.test(sentence.slice(run)) ? run : 0;
|
|
21
|
+
};
|
|
22
|
+
const follows = (text, previous, span) => previous.end === span.start && STOP_AT_END.test(text.slice(previous.start, previous.end));
|
|
23
|
+
/** previous と span を置き換える文。閉じ引用符が戻らなければ undefined。 */
|
|
24
|
+
const reattached = (text, previous, span) => {
|
|
25
|
+
const run = follows(text, previous, span) ? closingRunLength(text.slice(span.start, span.end)) : 0;
|
|
26
|
+
if (run === 0)
|
|
27
|
+
return undefined;
|
|
28
|
+
const quoteEnd = span.start + run;
|
|
29
|
+
const rest = text.slice(quoteEnd, span.end);
|
|
30
|
+
if (rest.trim() === "")
|
|
31
|
+
return [{ start: previous.start, end: quoteEnd }];
|
|
32
|
+
if (!NEXT_SENTENCE.test(rest))
|
|
33
|
+
return [{ start: previous.start, end: span.end }];
|
|
34
|
+
const next = quoteEnd + (LEADING_SPACE.exec(rest)?.[0].length ?? 0);
|
|
35
|
+
return [
|
|
36
|
+
{ start: previous.start, end: quoteEnd },
|
|
37
|
+
{ start: next, end: span.end },
|
|
38
|
+
];
|
|
39
|
+
};
|
|
40
|
+
/** 文の span の並び(text 上の位置)で、文頭に取り残された閉じ引用符を前の文へ戻したもの。 */
|
|
41
|
+
export const reattachClosingQuotes = (text, spans) => spans.reduce((sentences, span) => {
|
|
42
|
+
const previous = sentences.at(-1);
|
|
43
|
+
const replaced = previous === undefined ? undefined : reattached(text, previous, span);
|
|
44
|
+
if (replaced === undefined)
|
|
45
|
+
sentences.push(span);
|
|
46
|
+
else
|
|
47
|
+
sentences.splice(-1, 1, ...replaced);
|
|
48
|
+
return sentences;
|
|
49
|
+
}, []);
|
|
50
|
+
//# sourceMappingURL=closing-quote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closing-quote.js","sourceRoot":"","sources":["../src/closing-quote.ts"],"names":[],"mappings":"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"}
|
package/dist/dates.js
CHANGED
|
@@ -79,6 +79,6 @@ const withWeekday = (text, date) => {
|
|
|
79
79
|
return weekday === undefined ? date : { ...date, attrs: { ...date.attrs, weekday } };
|
|
80
80
|
};
|
|
81
81
|
export const dates = (text) => [...[...text.matchAll(MONTH_WORD)].flatMap((match) => namedDate(text, match) ?? []), ...[...text.matchAll(ISO_DATE)].map(isoDate)]
|
|
82
|
-
.
|
|
82
|
+
.toSorted((left, right) => left.start - right.start)
|
|
83
83
|
.map((date) => withWeekday(text, date));
|
|
84
84
|
//# sourceMappingURL=dates.js.map
|
package/dist/dates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../src/dates.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { LanguageAdapter } from "chaffjs/plugin";
|
|
2
2
|
/**
|
|
3
3
|
* 英語は sentence-splitter の既定にほぼ任せる。"Dr." "e.g." "U.S." "$3.50" を
|
|
4
|
-
*
|
|
4
|
+
* いずれも文末と誤認しない。前処理は行の途中の番号を箇条書きと読ませること、後処理は閉じ引用符の内側で閉じた文を切ることと、文頭に取り残された閉じ引用符を前の文へ戻すこと。spec §7.2。
|
|
5
5
|
*/
|
|
6
6
|
export declare const adapter: LanguageAdapter;
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAgB,eAAe,EAA0B,MAAM,gBAAgB,CAAC;AAoB5F;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,eA6BrB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { loadLexicons } from "./lexicons.js";
|
|
2
2
|
import { unmarkNumberStops } from "./number-stop.js";
|
|
3
3
|
import { sentenceSpans } from "./sentence-split.js";
|
|
4
|
+
import { splitAtQuotedStops } from "./quoted-stop.js";
|
|
5
|
+
import { reattachClosingQuotes } from "./closing-quote.js";
|
|
4
6
|
import { structure } from "./structure.js";
|
|
5
7
|
import { isReady, prepare, tokenize } from "./pos.js";
|
|
6
8
|
// chaff からは型だけを取る。実行時の値依存を作らない。アダプタは単体で動く。
|
|
@@ -21,7 +23,7 @@ const withTokens = (sentence) => {
|
|
|
21
23
|
};
|
|
22
24
|
/**
|
|
23
25
|
* 英語は sentence-splitter の既定にほぼ任せる。"Dr." "e.g." "U.S." "$3.50" を
|
|
24
|
-
*
|
|
26
|
+
* いずれも文末と誤認しない。前処理は行の途中の番号を箇条書きと読ませること、後処理は閉じ引用符の内側で閉じた文を切ることと、文頭に取り残された閉じ引用符を前の文へ戻すこと。spec §7.2。
|
|
25
27
|
*/
|
|
26
28
|
export const adapter = {
|
|
27
29
|
kind: "language",
|
|
@@ -50,7 +52,8 @@ export const adapter = {
|
|
|
50
52
|
lexicons: loadLexicons(),
|
|
51
53
|
structure,
|
|
52
54
|
segment: (text) => {
|
|
53
|
-
const
|
|
55
|
+
const quotedStops = sentenceSpans(unmarkNumberStops(text)).flatMap((span) => splitAtQuotedStops(text, span));
|
|
56
|
+
const sentences = reattachClosingQuotes(text, quotedStops).map((span) => ({ span, text: text.slice(span.start, span.end) }));
|
|
54
57
|
return { sentences: isReady() ? sentences.map(withTokens) : sentences };
|
|
55
58
|
},
|
|
56
59
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGtD,2CAA2C;AAE3C,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAY,EAAE;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC1C,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KAClJ,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAoB;IACtC,IAAI,EAAE,UAAU;IAChB,EAAE,EAAE,IAAI;IACR,UAAU,EAAE,CAAC;IACb,YAAY,EAAE;QACZ,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,IAAI;QACf,6CAA6C;QAC7C,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,MAAM;KACnB;IACD,OAAO,EAAE,CAAC,IAAkB,EAAiB,EAAE;QAC7C,0CAA0C;QAC1C,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,EAAE,CAAC,MAAc,EAAU,EAAE;QACjC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;IAC3D,CAAC;IACD,QAAQ,EAAE,YAAY,EAAE;IACxB,SAAS;IACT,OAAO,EAAE,CAAC,IAAY,EAAgB,EAAE;QACtC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { NumberedLine, NumberingContext } from "chaffjs/plugin";
|
|
2
|
+
/**
|
|
3
|
+
* An amendment inserts a subsection between two others and numbers it "(A1)" or "(2A)". It is a subsection, written
|
|
4
|
+
* outside the sequence: it has no ordinal, so "(1)" after "(A1)" is still the first.
|
|
5
|
+
*/
|
|
6
|
+
export declare const INSERTED = "\\d{1,3}[A-Z]{1,2}|[A-Z]{1,2}\\d{1,3}";
|
|
7
|
+
export type Style = "letter" | "roman" | "digit" | "capital" | "capital-roman";
|
|
8
|
+
/** 開いている項目の書き方。"(ii)" はローマ数字、"(b)" は英字、"(B)" は大文字の英字。 */
|
|
9
|
+
export declare const styleOfOpen: (open: NumberedLine) => Style | undefined;
|
|
10
|
+
/** "(b)" と "(B)" は 2 番目、"(ii)" と "(II)" も 2 番目。二文字以上の英字("(aa)")は並びが決まらないので付けない。 */
|
|
11
|
+
export declare const ordinalOf: (raw: string, style: Style) => number | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* "(i)" is a roman numeral right under "(a)" or "(1)", or when a roman list is already open; the letter i otherwise.
|
|
14
|
+
* A capital "(A)" is an item only where a US regulation puts it, under a roman item; undefined elsewhere.
|
|
15
|
+
*/
|
|
16
|
+
export declare const styleOf: (raw: string, context: NumberingContext) => Style | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* A sibling has the depth of the open item written the same way. A new way of numbering goes one deeper than whatever
|
|
19
|
+
* is open, and so does a first item right under a capital, or a first capital right under a roman item.
|
|
20
|
+
*/
|
|
21
|
+
export declare const depthFor: (style: Style, context: NumberingContext, ordinal?: number) => number;
|
|
22
|
+
/**
|
|
23
|
+
* 参照の "(A)" や "(I)" は、ローマ数字の "(iii)" の次に書かれたときだけ番地の続き。木も、大文字はローマ数字の下でしか読まない。
|
|
24
|
+
* "section 5(A)" の "(A)" は番地に入れず、これまでどおり "section 5" を引く。"(h)(i)" や番号のすぐ後の "(i)" は、木と同じく英字と読む。
|
|
25
|
+
*/
|
|
26
|
+
export declare const continuesAddress: (part: string, before: readonly string[]) => boolean;
|
|
27
|
+
/** 番号だけの行 "(5)" は、開いている "(4)" の次のときだけ項目。本文は次の行から始まる。 */
|
|
28
|
+
export declare const continuesOpen: (style: Style, ordinal: number | undefined, context: NumberingContext) => boolean;
|
|
29
|
+
//# sourceMappingURL=item-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-style.d.ts","sourceRoot":"","sources":["../src/item-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGrE;;;GAGG;AACH,eAAO,MAAM,QAAQ,0CAA0C,CAAC;AAQhE,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,CAAC;AAW/E,yDAAyD;AACzD,eAAO,MAAM,WAAW,GAAI,MAAM,YAAY,KAAG,KAAK,GAAG,SAMxD,CAAC;AAIF,mFAAmF;AACnF,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,OAAO,KAAK,KAAG,MAAM,GAAG,SAI9D,CAAC;AAiCF;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,SAAS,gBAAgB,KAAG,KAAK,GAAG,SAOxE,CAAC;AAiBF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,EAAE,SAAS,gBAAgB,EAAE,UAAU,MAAM,KAAG,MAKpF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,SAAS,MAAM,EAAE,KAAG,OAK1E,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,SAAS,MAAM,GAAG,SAAS,EAAE,SAAS,gBAAgB,KAAG,OAGpG,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { parseRoman } from "./roman.js";
|
|
2
|
+
/**
|
|
3
|
+
* An amendment inserts a subsection between two others and numbers it "(A1)" or "(2A)". It is a subsection, written
|
|
4
|
+
* outside the sequence: it has no ordinal, so "(1)" after "(A1)" is still the first.
|
|
5
|
+
*/
|
|
6
|
+
export const INSERTED = "\\d{1,3}[A-Z]{1,2}|[A-Z]{1,2}\\d{1,3}";
|
|
7
|
+
const IS_INSERTED = new RegExp(`^(?:${INSERTED})$`, "u");
|
|
8
|
+
const MULTI_ROMAN = /^(?:ii|iii|iv|vi|vii|viii|ix)$/u;
|
|
9
|
+
const AMBIGUOUS = /^[ivx]$/u;
|
|
10
|
+
const DIGITS = /^\d+$/u;
|
|
11
|
+
const CAPITALS = /^[A-Z]+$/u;
|
|
12
|
+
const ONE_CAPITAL = /^[A-Z]$/u;
|
|
13
|
+
/** 大文字で書いた同じ並び。"(B)" は英字の、"(II)" はローマ数字の大文字。 */
|
|
14
|
+
const CAPITAL_OF = { letter: "capital", roman: "capital-roman" };
|
|
15
|
+
/** 小文字にした番号を形で読む。一文字の "i" は、開いたときに付けた並びの位置で見分ける。ローマ数字なら 1、英字なら 9。 */
|
|
16
|
+
const shapeOf = (lower, ordinal) => {
|
|
17
|
+
if (MULTI_ROMAN.test(lower))
|
|
18
|
+
return "roman";
|
|
19
|
+
return AMBIGUOUS.test(lower) && ordinal === parseRoman(lower) ? "roman" : "letter";
|
|
20
|
+
};
|
|
21
|
+
/** 開いている項目の書き方。"(ii)" はローマ数字、"(b)" は英字、"(B)" は大文字の英字。 */
|
|
22
|
+
export const styleOfOpen = (open) => {
|
|
23
|
+
const inner = /^\((?<n>[A-Za-z0-9]{1,5})\)$/u.exec(open.label)?.groups?.["n"];
|
|
24
|
+
if (inner === undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
if (DIGITS.test(inner) || IS_INSERTED.test(inner))
|
|
27
|
+
return "digit";
|
|
28
|
+
const shape = shapeOf(inner.toLowerCase(), open.ordinal);
|
|
29
|
+
return CAPITALS.test(inner) ? CAPITAL_OF[shape] : shape;
|
|
30
|
+
};
|
|
31
|
+
const LETTER_BEFORE_A = "a".charCodeAt(0) - 1;
|
|
32
|
+
/** "(b)" と "(B)" は 2 番目、"(ii)" と "(II)" も 2 番目。二文字以上の英字("(aa)")は並びが決まらないので付けない。 */
|
|
33
|
+
export const ordinalOf = (raw, style) => {
|
|
34
|
+
if (style === "digit")
|
|
35
|
+
return IS_INSERTED.test(raw) ? undefined : Number(raw);
|
|
36
|
+
if (style === "roman" || style === "capital-roman")
|
|
37
|
+
return parseRoman(raw);
|
|
38
|
+
return raw.length === 1 ? raw.toLowerCase().charCodeAt(0) - LETTER_BEFORE_A : undefined;
|
|
39
|
+
};
|
|
40
|
+
const styles = (context) => context.open.map(styleOfOpen);
|
|
41
|
+
/** "(h)" の次の "(i)"、"(H)" の次の "(I)" は英字。同じ書き方で開いている英字の次の文字なら、ローマ数字とは読まない。 */
|
|
42
|
+
const follows = (raw, style, context) => context.open.some((open, index) => styles(context)[index] === style && open.number.charCodeAt(0) + 1 === raw.charCodeAt(0));
|
|
43
|
+
/**
|
|
44
|
+
* 英字の並びは (a) から始まるので、"(a)" や "(1)" のすぐ下に来た "(i)" は一段深いローマ数字。
|
|
45
|
+
* 米国の規則は (a)(1)(i) の順に下る。見出しのすぐ下の "(i)" は、どちらとも決まらないので英字。
|
|
46
|
+
*/
|
|
47
|
+
const OPENS_ROMAN = new Set(["letter", "digit"]);
|
|
48
|
+
/** "(I)" は米国の法典で (i) の一段下の大文字ローマ数字。"(H)" の次なら英字。 */
|
|
49
|
+
const capitalRoman = (raw, open, context) => {
|
|
50
|
+
const lower = raw.toLowerCase();
|
|
51
|
+
if (MULTI_ROMAN.test(lower))
|
|
52
|
+
return open.includes("capital-roman");
|
|
53
|
+
if (!AMBIGUOUS.test(lower) || follows(raw, "capital", context))
|
|
54
|
+
return false;
|
|
55
|
+
return open.includes("capital-roman") || (raw === "I" && open.at(-1) === "roman");
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* 米国の規則は (a)(1)(i)(A) と下る。大文字の "(A)" は、開いているローマ数字のすぐ下で始まるか、開いている大文字の続きのときだけ項目。
|
|
59
|
+
* 英国の法令や契約書が一段目に使う "(A)" は、何の下とも決まらないので本文のまま読む。
|
|
60
|
+
*/
|
|
61
|
+
const capitalStyleOf = (raw, context) => {
|
|
62
|
+
const open = styles(context);
|
|
63
|
+
if (capitalRoman(raw, open, context))
|
|
64
|
+
return "capital-roman";
|
|
65
|
+
if (!ONE_CAPITAL.test(raw))
|
|
66
|
+
return undefined;
|
|
67
|
+
return open.includes("capital") || (raw === "A" && open.at(-1) === "roman") ? "capital" : undefined;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* "(i)" is a roman numeral right under "(a)" or "(1)", or when a roman list is already open; the letter i otherwise.
|
|
71
|
+
* A capital "(A)" is an item only where a US regulation puts it, under a roman item; undefined elsewhere.
|
|
72
|
+
*/
|
|
73
|
+
export const styleOf = (raw, context) => {
|
|
74
|
+
if (DIGITS.test(raw) || IS_INSERTED.test(raw))
|
|
75
|
+
return "digit";
|
|
76
|
+
if (CAPITALS.test(raw))
|
|
77
|
+
return capitalStyleOf(raw, context);
|
|
78
|
+
if (MULTI_ROMAN.test(raw))
|
|
79
|
+
return "roman";
|
|
80
|
+
if (!AMBIGUOUS.test(raw) || follows(raw, "letter", context))
|
|
81
|
+
return "letter";
|
|
82
|
+
const open = styles(context);
|
|
83
|
+
return open.includes("roman") || OPENS_ROMAN.has(open.at(-1)) ? "roman" : "letter";
|
|
84
|
+
};
|
|
85
|
+
/** The nearest open item written the same way: "(b)" closes "(i)" and sits beside "(a)". */
|
|
86
|
+
const siblingOf = (style, context) => {
|
|
87
|
+
const open = styles(context);
|
|
88
|
+
return context.open.findLast((_item, index) => open[index] === style);
|
|
89
|
+
};
|
|
90
|
+
const IS_CAPITAL = new Set(["capital", "capital-roman"]);
|
|
91
|
+
/**
|
|
92
|
+
* "(A)" の下の "(1)" や "(i)"、"(i)" の下の "(A)" は、上に開いている同じ書き方の項目の続きではなく、一段深い並びの始まり。
|
|
93
|
+
* 米国の規則は (a)(1)(i)(A) の下を、もう一度 (1) や (i) で数える。
|
|
94
|
+
*/
|
|
95
|
+
const startsBelow = (style, ordinal, innermost) => ordinal === 1 && style !== innermost && (IS_CAPITAL.has(innermost) || (IS_CAPITAL.has(style) && innermost === "roman"));
|
|
96
|
+
/**
|
|
97
|
+
* A sibling has the depth of the open item written the same way. A new way of numbering goes one deeper than whatever
|
|
98
|
+
* is open, and so does a first item right under a capital, or a first capital right under a roman item.
|
|
99
|
+
*/
|
|
100
|
+
export const depthFor = (style, context, ordinal) => {
|
|
101
|
+
const innermost = context.open.at(-1);
|
|
102
|
+
const deeper = (innermost?.depth ?? 0) + 1;
|
|
103
|
+
if (innermost !== undefined && startsBelow(style, ordinal, styleOfOpen(innermost)))
|
|
104
|
+
return deeper;
|
|
105
|
+
return siblingOf(style, context)?.depth ?? deeper;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* 参照の "(A)" や "(I)" は、ローマ数字の "(iii)" の次に書かれたときだけ番地の続き。木も、大文字はローマ数字の下でしか読まない。
|
|
109
|
+
* "section 5(A)" の "(A)" は番地に入れず、これまでどおり "section 5" を引く。"(h)(i)" や番号のすぐ後の "(i)" は、木と同じく英字と読む。
|
|
110
|
+
*/
|
|
111
|
+
export const continuesAddress = (part, before) => {
|
|
112
|
+
if (!CAPITALS.test(part))
|
|
113
|
+
return true;
|
|
114
|
+
const [previous, earlier] = [before.at(-1) ?? "", before.at(-2) ?? ""];
|
|
115
|
+
if (MULTI_ROMAN.test(previous))
|
|
116
|
+
return true;
|
|
117
|
+
return AMBIGUOUS.test(previous) && earlier !== "" && earlier.charCodeAt(0) + 1 !== previous.charCodeAt(0);
|
|
118
|
+
};
|
|
119
|
+
/** 番号だけの行 "(5)" は、開いている "(4)" の次のときだけ項目。本文は次の行から始まる。 */
|
|
120
|
+
export const continuesOpen = (style, ordinal, context) => {
|
|
121
|
+
const previous = siblingOf(style, context)?.ordinal;
|
|
122
|
+
return ordinal !== undefined && previous !== undefined && ordinal === previous + 1;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=item-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-style.js","sourceRoot":"","sources":["../src/item-style.ts"],"names":[],"mappings":"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"}
|
package/dist/lexicons.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicons.d.ts","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;AAoB5D;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAK,MAAY,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"lexicons.d.ts","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;AAoB5D;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAK,MAAY,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CASpE,CAAC"}
|
package/dist/lexicons.js
CHANGED
|
@@ -21,13 +21,12 @@ const toEntry = (raw) => {
|
|
|
21
21
|
* 語彙表はアダプタが持つ。detector は共通で、これだけが言語別。spec §11。
|
|
22
22
|
* 新しい言語のサポートは、ここを書くところから始まる。
|
|
23
23
|
*/
|
|
24
|
-
export const loadLexicons = (dir = DIR) => readdirSync(dir)
|
|
24
|
+
export const loadLexicons = (dir = DIR) => Object.fromEntries(readdirSync(dir)
|
|
25
25
|
.filter((file) => file.endsWith(".yaml"))
|
|
26
|
-
.
|
|
26
|
+
.flatMap((file) => {
|
|
27
27
|
const raw = parse(readFileSync(join(dir, file), "utf8"));
|
|
28
28
|
if (!isRecord(raw) || typeof raw["id"] !== "string" || !Array.isArray(raw["entries"]))
|
|
29
|
-
return
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}, {});
|
|
29
|
+
return [];
|
|
30
|
+
return [[raw["id"], raw["entries"].map(toEntry).filter((entry) => entry !== undefined)]];
|
|
31
|
+
}));
|
|
33
32
|
//# sourceMappingURL=lexicons.js.map
|
package/dist/lexicons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicons.js","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAE5I,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAE/C,MAAM,OAAO,GAAG,CAAC,GAAY,EAA4B,EAAE;IACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;QACvB,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvD,UAAU,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC7D,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC;KACrE,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,GAAG,EAA2B,EAAE,CACzE,WAAW,CAAC,GAAG,CAAC;KACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACxC,
|
|
1
|
+
{"version":3,"file":"lexicons.js","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAE5I,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAE/C,MAAM,OAAO,GAAG,CAAC,GAAY,EAA4B,EAAE;IACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;QACvB,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvD,UAAU,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC7D,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC;KACrE,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,GAAG,EAA2B,EAAE,CACzE,MAAM,CAAC,WAAW,CAChB,WAAW,CAAC,GAAG,CAAC;KACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACxC,OAAO,CAAC,CAAC,IAAI,EAAuB,EAAE;IACrC,MAAM,GAAG,GAAY,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACjG,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC,CAAC,CACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-runs.d.ts","sourceRoot":"","sources":["../src/long-runs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,MACmC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 空白の無いまま limit 文字を超える並びを、同じ長さの空白で覆う。語ではなく(base64、ハッシュ、区切りの無い記号の列)、
|
|
3
|
+
* 解析器(wink)はその長さの二乗で遅くなる。長さを変えないので、残りの語の位置はそのまま。
|
|
4
|
+
*/
|
|
5
|
+
export const blankLongRuns = (text, limit) => text.replace(new RegExp(`\\S{${String(limit + 1)},}`, "gu"), (run) => " ".repeat(run.length));
|
|
6
|
+
//# sourceMappingURL=long-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-runs.js","sourceRoot":"","sources":["../src/long-runs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CACnE,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
package/dist/pos.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../src/pos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../src/pos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAiF5C,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,KAAG,MAAiE,CAAC;AAgHrG,eAAO,MAAM,OAAO,QAAO,IAI1B,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,OAAoC,CAAC;AAoChE,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,KAAK,EAAE,GAAG,SAMjD,CAAC"}
|