@retorquere/bibtex-parser 9.0.26 → 9.0.29
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/cjs/tokenizer.js +5 -5
- package/dist/cjs/tokenizer.js.map +2 -2
- package/dist/esm/tokenizer.js +5 -5
- package/dist/esm/tokenizer.js.map +2 -2
- package/package.json +12 -12
package/dist/cjs/tokenizer.js
CHANGED
|
@@ -85,7 +85,7 @@ const lexer = import_moo.default.compile({
|
|
|
85
85
|
other: { match: /[\s\S]/u, lineBreaks: true }
|
|
86
86
|
});
|
|
87
87
|
const Shape = new class {
|
|
88
|
-
shapes =
|
|
88
|
+
shapes = /* @__PURE__ */ new Map();
|
|
89
89
|
re = {
|
|
90
90
|
X: /[\p{Lu}\p{Lt}]/u,
|
|
91
91
|
x: /[\p{Ll}\p{Lm}\p{Lo}]/u,
|
|
@@ -102,12 +102,12 @@ const Shape = new class {
|
|
|
102
102
|
return c;
|
|
103
103
|
}
|
|
104
104
|
fetch(c) {
|
|
105
|
-
if (
|
|
106
|
-
return this.shapes
|
|
105
|
+
if (!this.shapes.has(c)) this.shapes.set(c, this.match(c));
|
|
106
|
+
return this.shapes.get(c);
|
|
107
107
|
}
|
|
108
108
|
shape(t) {
|
|
109
|
-
if (!this.shapes
|
|
110
|
-
return this.shapes
|
|
109
|
+
if (!this.shapes.has(t)) this.shapes.set(t, Array.from(t).map((c) => this.fetch(c)).join(""));
|
|
110
|
+
return this.shapes.get(t);
|
|
111
111
|
}
|
|
112
112
|
}();
|
|
113
113
|
function combine(tokens) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../tokenizer.ts"],
|
|
4
|
-
"sourcesContent": ["import moo from 'moo'\n\nimport prepositions from './prepositions.js'\n\n// const show = (obj: any): string => JSON.stringify(obj, null, 2).replace(/[\\u007F-\\uFFFF]/g, chr => `\\\\u${(`0000${chr.charCodeAt(0).toString(16)}`).substr(-4)}`)\n\nconst RE = new class {\n public Acronym: RegExp\n public Word: RegExp\n public Contraction: RegExp\n public Whitespace = /[ \\t\\n\\r\\u00A0]+/u\n public Ordinal: RegExp\n public Email: RegExp\n public Handle: RegExp\n public IntOrVersion: RegExp\n public Domain: RegExp\n public Website: RegExp\n public Preposition: RegExp\n public ComplexPreposition = /^([^ \\t\\n\\r\\u00A0]+)([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+)(?:([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+))?$/u\n public P = /\\p{P}/u\n\n constructor() {\n const B = '(?=(?:[^\\\\p{L}\\\\p{N}\\\\p{M}\\\\u00AD\\\\u2060]|$))'\n const LNM = '[\\\\p{L}\\\\p{N}\\\\p{M}\\u00AD\\u2060]'\n const W = `${LNM}*?\\\\p{L}${LNM}*`\n\n this.Acronym = new RegExp(`(?:(?:(?:[\\\\p{Lu}\\\\p{Lt}][.]){2,}${B})|(?:(?:vs?[.])(?=[ \\t\\n\\r\\u00A0])))`, 'u')\n this.Word = new RegExp(`${W}${B}`, 'u')\n\n this.Contraction = new RegExp(`${W}['\u2019]${W}${B}`, 'u')\n this.Ordinal = new RegExp(`\\\\d+(?:st|nd|rd|th)${B}`, 'u')\n this.Email = new RegExp(`[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:[.][A-Za-z0-9-]+)+${B}`, 'u')\n this.Handle = new RegExp(`@[A-Za-z0-9-]{2,}${B}`, 'u')\n this.IntOrVersion = new RegExp(`v?\\\\d+(?:\\\\.\\\\d+)*${B}`, 'u')\n this.Domain = new RegExp(`${W}(?:[.]${W})+${B}`, 'u')\n this.Website = new RegExp(`https?://${W}(?:[.]${W})+(?:[^.!? \\t\\n\\r\\u00A0]+|[.!?]${LNM})+`, 'u')\n\n const ci = (s: string): string =>\n s\n .replace(/[a-z]/ig, match => `[${match.toUpperCase()}${match.toLowerCase()}]`)\n .replace(' ', this.Whitespace.source)\n\n this.Preposition = new RegExp(`(?:${prepositions.sort().reverse().map(ci).join('|')})${B}`, 'u')\n }\n}()\n\nconst lexer = moo.compile({\n 'word-preposition': RE.Preposition,\n 'word-acronym': RE.Acronym,\n 'word-contraction': RE.Contraction,\n 'word-ordinal': RE.Ordinal,\n email: RE.Email,\n handle: RE.Handle,\n website: RE.Website,\n domain: RE.Domain,\n word: RE.Word,\n number: RE.IntOrVersion, // eslint-disable-line id-blacklist\n 'punctuation-end': /[?.!](?=[ \\t\\n\\r\\u00A0]|$)/u,\n 'punctuation-colon': /:(?=[ \\t\\n\\r\\u00A0])/u,\n 'punctuation-ellipsis': /[.][.][.]/u,\n punctuation: RE.P,\n whitespace: { match: /[ \\t\\n\\r\\u00A0]/u, lineBreaks: true },\n other: { match: /[\\s\\S]/u, lineBreaks: true },\n})\n\nconst Shape = new class {\n private shapes:
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAgB;AAEhB,0BAAyB;AAIzB,MAAM,KAAK,IAAI,MAAM;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,IAAI,WAAC,UAAM,GAAC;AAAA,EAEnB,cAAc;AACZ,UAAM,IAAI;AACV,UAAM,MAAM;AACZ,UAAM,IAAI,GAAG,GAAG,WAAW,GAAG;AAE9B,SAAK,UAAU,IAAI,OAAO,oCAAoC,CAAC;AAAA,aAAwC,GAAG;AAC1G,SAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG;AAEtC,SAAK,cAAc,IAAI,OAAO,GAAG,CAAC,YAAO,CAAC,GAAG,CAAC,IAAI,GAAG;AACrD,SAAK,UAAU,IAAI,OAAO,sBAAsB,CAAC,IAAI,GAAG;AACxD,SAAK,QAAQ,IAAI,OAAO,uDAAuD,CAAC,IAAI,GAAG;AACvF,SAAK,SAAS,IAAI,OAAO,oBAAoB,CAAC,IAAI,GAAG;AACrD,SAAK,eAAe,IAAI,OAAO,qBAAqB,CAAC,IAAI,GAAG;AAC5D,SAAK,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG;AACpD,SAAK,UAAU,IAAI,OAAO,YAAY,CAAC,SAAS,CAAC;AAAA,gBAAkC,GAAG,MAAM,GAAG;AAE/F,UAAM,KAAK,CAAC,MACV,EACG,QAAQ,WAAW,WAAS,IAAI,MAAM,YAAY,CAAC,GAAG,MAAM,YAAY,CAAC,GAAG,EAC5E,QAAQ,KAAK,KAAK,WAAW,MAAM;AAExC,SAAK,cAAc,IAAI,OAAO,MAAM,oBAAAA,QAAa,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG;AAAA,EACjG;AACF,EAAE;AAEF,MAAM,QAAQ,WAAAC,QAAI,QAAQ;AAAA,EACxB,oBAAoB,GAAG;AAAA,EACvB,gBAAgB,GAAG;AAAA,EACnB,oBAAoB,GAAG;AAAA,EACvB,gBAAgB,GAAG;AAAA,EACnB,OAAO,GAAG;AAAA,EACV,QAAQ,GAAG;AAAA,EACX,SAAS,GAAG;AAAA,EACZ,QAAQ,GAAG;AAAA,EACX,MAAM,GAAG;AAAA,EACT,QAAQ,GAAG;AAAA;AAAA,EACX,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,aAAa,GAAG;AAAA,EAChB,YAAY,EAAE,OAAO,oBAAoB,YAAY,KAAK;AAAA,EAC1D,OAAO,EAAE,OAAO,WAAW,YAAY,KAAK;AAC9C,CAAC;AAED,MAAM,QAAQ,IAAI,MAAM;AAAA,EACd,
|
|
4
|
+
"sourcesContent": ["import moo from 'moo'\n\nimport prepositions from './prepositions.js'\n\n// const show = (obj: any): string => JSON.stringify(obj, null, 2).replace(/[\\u007F-\\uFFFF]/g, chr => `\\\\u${(`0000${chr.charCodeAt(0).toString(16)}`).substr(-4)}`)\n\nconst RE = new class {\n public Acronym: RegExp\n public Word: RegExp\n public Contraction: RegExp\n public Whitespace = /[ \\t\\n\\r\\u00A0]+/u\n public Ordinal: RegExp\n public Email: RegExp\n public Handle: RegExp\n public IntOrVersion: RegExp\n public Domain: RegExp\n public Website: RegExp\n public Preposition: RegExp\n public ComplexPreposition = /^([^ \\t\\n\\r\\u00A0]+)([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+)(?:([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+))?$/u\n public P = /\\p{P}/u\n\n constructor() {\n const B = '(?=(?:[^\\\\p{L}\\\\p{N}\\\\p{M}\\\\u00AD\\\\u2060]|$))'\n const LNM = '[\\\\p{L}\\\\p{N}\\\\p{M}\\u00AD\\u2060]'\n const W = `${LNM}*?\\\\p{L}${LNM}*`\n\n this.Acronym = new RegExp(`(?:(?:(?:[\\\\p{Lu}\\\\p{Lt}][.]){2,}${B})|(?:(?:vs?[.])(?=[ \\t\\n\\r\\u00A0])))`, 'u')\n this.Word = new RegExp(`${W}${B}`, 'u')\n\n this.Contraction = new RegExp(`${W}['\u2019]${W}${B}`, 'u')\n this.Ordinal = new RegExp(`\\\\d+(?:st|nd|rd|th)${B}`, 'u')\n this.Email = new RegExp(`[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:[.][A-Za-z0-9-]+)+${B}`, 'u')\n this.Handle = new RegExp(`@[A-Za-z0-9-]{2,}${B}`, 'u')\n this.IntOrVersion = new RegExp(`v?\\\\d+(?:\\\\.\\\\d+)*${B}`, 'u')\n this.Domain = new RegExp(`${W}(?:[.]${W})+${B}`, 'u')\n this.Website = new RegExp(`https?://${W}(?:[.]${W})+(?:[^.!? \\t\\n\\r\\u00A0]+|[.!?]${LNM})+`, 'u')\n\n const ci = (s: string): string =>\n s\n .replace(/[a-z]/ig, match => `[${match.toUpperCase()}${match.toLowerCase()}]`)\n .replace(' ', this.Whitespace.source)\n\n this.Preposition = new RegExp(`(?:${prepositions.sort().reverse().map(ci).join('|')})${B}`, 'u')\n }\n}()\n\nconst lexer = moo.compile({\n 'word-preposition': RE.Preposition,\n 'word-acronym': RE.Acronym,\n 'word-contraction': RE.Contraction,\n 'word-ordinal': RE.Ordinal,\n email: RE.Email,\n handle: RE.Handle,\n website: RE.Website,\n domain: RE.Domain,\n word: RE.Word,\n number: RE.IntOrVersion, // eslint-disable-line id-blacklist\n 'punctuation-end': /[?.!](?=[ \\t\\n\\r\\u00A0]|$)/u,\n 'punctuation-colon': /:(?=[ \\t\\n\\r\\u00A0])/u,\n 'punctuation-ellipsis': /[.][.][.]/u,\n punctuation: RE.P,\n whitespace: { match: /[ \\t\\n\\r\\u00A0]/u, lineBreaks: true },\n other: { match: /[\\s\\S]/u, lineBreaks: true },\n})\n\nconst Shape = new class {\n private shapes: Map<string, string> = new Map()\n private re: Record<string, RegExp> = {\n X: /[\\p{Lu}\\p{Lt}]/u,\n x: /[\\p{Ll}\\p{Lm}\\p{Lo}]/u,\n d: /\\p{N}/u,\n }\n\n private match(c: string): string {\n if (c.match(this.re.d)) return 'd'\n if (c.toLowerCase() === c.toUpperCase()) return c\n if (c.match(this.re.X)) return 'X'\n if (c.match(this.re.x)) return 'x'\n if (c === '\u2019') return \"'\"\n if (c === '\u2013') return '-'\n if (c === '\\u2060' || c === '\\u00AD') return ''\n return c\n }\n\n private fetch(c: string): string {\n if (!this.shapes.has(c)) this.shapes.set(c, this.match(c))\n return this.shapes.get(c)\n }\n\n shape(t: string) {\n if (!this.shapes.has(t)) this.shapes.set(t, Array.from(t).map(c => this.fetch(c)).join(''))\n return this.shapes.get(t)\n }\n}()\n\nexport type Token = {\n type: 'word' | 'domain' | 'whitespace'\n subtype: '' | 'preposition' | 'acronym' | 'whitespace' | 'word' | 'domain'\n text: string\n start: number\n end: number\n shape: string\n sentenceStart: boolean\n subSentenceStart: boolean\n hyphenated?: Token[]\n}\n\nfunction combine(tokens: Token[]) {\n const combined = { ...tokens[0] }\n for (const t of tokens.slice(1)) {\n combined.text += t.text\n combined.end = t.end\n combined.shape += t.shape\n }\n return combined\n}\n\nfunction hyphenate(t: Token) {\n if (t.type === 'word') return 'w'\n if (t.text === '-' || t.text === '\u2013') return '-'\n return ' '\n}\n\nexport function tokenize(title: string, markup?: RegExp): Token[] {\n if (markup) title = title.replace(markup, match => '\\u2060'.repeat(match.length))\n\n lexer.reset(title)\n const tokens: Token[] = []\n let sentenceStart = true\n let subSentenceStart = false\n for (const token of lexer) {\n const [type, subtype] = (token.type.includes('-') ? token.type : `${token.type}-`).split('-')\n\n tokens.push({\n type,\n subtype,\n text: token.text,\n start: token.offset,\n end: token.offset + token.text.length - 1,\n shape: Shape.shape(<string> token.text),\n sentenceStart: type === 'word' && sentenceStart,\n subSentenceStart: type === 'word' && subSentenceStart,\n })\n\n switch (token.type) {\n case 'punctuation-end':\n sentenceStart = true\n break\n case 'punctuation-colon':\n subSentenceStart = true\n break\n default:\n if (type.match(/word|number|handle|domain|website/)) {\n sentenceStart = false\n subSentenceStart = false\n }\n break\n }\n }\n\n const stack = tokens.splice(0)\n\n let cpt: RegExpMatchArray\n let cps: RegExpMatchArray\n while (stack.length) {\n if (stack[0].subtype === 'preposition' && (cpt = stack[0].text.match(RE.ComplexPreposition)) && (cps = stack[0].shape.match(RE.ComplexPreposition))) {\n const complex = stack.shift()\n\n let start = complex.start\n let end\n for (const i of Array.from({ length: 5 }, (_, n) => n + 1)) {\n if (!cpt[i]) break\n\n end = start + cps[i].length - 1\n tokens.push({\n ...complex,\n text: cpt[i],\n shape: cps[i],\n start,\n end,\n type: i % 2 ? complex.type : 'whitespace',\n subtype: i % 2 ? complex.type : '',\n })\n start = end + 1\n }\n continue\n }\n\n // hyphenated words\n const pat = stack.map(t => hyphenate(t)).join('')\n if (cpt = pat.match(/^w(-w)+(?= |$)/)) {\n const hyphenated = stack.splice(0, cpt[0].length)\n tokens.push({ ...combine(hyphenated), hyphenated })\n continue\n }\n\n tokens.push(stack.shift())\n }\n\n return markup ? tokens.map(token => ({ ...token, text: title.substring(token.start, token.end + 1) })) : tokens\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["prepositions", "moo"]
|
|
7
7
|
}
|
package/dist/esm/tokenizer.js
CHANGED
|
@@ -57,7 +57,7 @@ const lexer = moo.compile({
|
|
|
57
57
|
});
|
|
58
58
|
const Shape = new class {
|
|
59
59
|
constructor() {
|
|
60
|
-
__publicField(this, "shapes",
|
|
60
|
+
__publicField(this, "shapes", /* @__PURE__ */ new Map());
|
|
61
61
|
__publicField(this, "re", {
|
|
62
62
|
X: /[\p{Lu}\p{Lt}]/u,
|
|
63
63
|
x: /[\p{Ll}\p{Lm}\p{Lo}]/u,
|
|
@@ -75,12 +75,12 @@ const Shape = new class {
|
|
|
75
75
|
return c;
|
|
76
76
|
}
|
|
77
77
|
fetch(c) {
|
|
78
|
-
if (
|
|
79
|
-
return this.shapes
|
|
78
|
+
if (!this.shapes.has(c)) this.shapes.set(c, this.match(c));
|
|
79
|
+
return this.shapes.get(c);
|
|
80
80
|
}
|
|
81
81
|
shape(t) {
|
|
82
|
-
if (!this.shapes
|
|
83
|
-
return this.shapes
|
|
82
|
+
if (!this.shapes.has(t)) this.shapes.set(t, Array.from(t).map((c) => this.fetch(c)).join(""));
|
|
83
|
+
return this.shapes.get(t);
|
|
84
84
|
}
|
|
85
85
|
}();
|
|
86
86
|
function combine(tokens) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../tokenizer.ts"],
|
|
4
|
-
"sourcesContent": ["import moo from 'moo'\n\nimport prepositions from './prepositions.js'\n\n// const show = (obj: any): string => JSON.stringify(obj, null, 2).replace(/[\\u007F-\\uFFFF]/g, chr => `\\\\u${(`0000${chr.charCodeAt(0).toString(16)}`).substr(-4)}`)\n\nconst RE = new class {\n public Acronym: RegExp\n public Word: RegExp\n public Contraction: RegExp\n public Whitespace = /[ \\t\\n\\r\\u00A0]+/u\n public Ordinal: RegExp\n public Email: RegExp\n public Handle: RegExp\n public IntOrVersion: RegExp\n public Domain: RegExp\n public Website: RegExp\n public Preposition: RegExp\n public ComplexPreposition = /^([^ \\t\\n\\r\\u00A0]+)([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+)(?:([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+))?$/u\n public P = /\\p{P}/u\n\n constructor() {\n const B = '(?=(?:[^\\\\p{L}\\\\p{N}\\\\p{M}\\\\u00AD\\\\u2060]|$))'\n const LNM = '[\\\\p{L}\\\\p{N}\\\\p{M}\\u00AD\\u2060]'\n const W = `${LNM}*?\\\\p{L}${LNM}*`\n\n this.Acronym = new RegExp(`(?:(?:(?:[\\\\p{Lu}\\\\p{Lt}][.]){2,}${B})|(?:(?:vs?[.])(?=[ \\t\\n\\r\\u00A0])))`, 'u')\n this.Word = new RegExp(`${W}${B}`, 'u')\n\n this.Contraction = new RegExp(`${W}['\u2019]${W}${B}`, 'u')\n this.Ordinal = new RegExp(`\\\\d+(?:st|nd|rd|th)${B}`, 'u')\n this.Email = new RegExp(`[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:[.][A-Za-z0-9-]+)+${B}`, 'u')\n this.Handle = new RegExp(`@[A-Za-z0-9-]{2,}${B}`, 'u')\n this.IntOrVersion = new RegExp(`v?\\\\d+(?:\\\\.\\\\d+)*${B}`, 'u')\n this.Domain = new RegExp(`${W}(?:[.]${W})+${B}`, 'u')\n this.Website = new RegExp(`https?://${W}(?:[.]${W})+(?:[^.!? \\t\\n\\r\\u00A0]+|[.!?]${LNM})+`, 'u')\n\n const ci = (s: string): string =>\n s\n .replace(/[a-z]/ig, match => `[${match.toUpperCase()}${match.toLowerCase()}]`)\n .replace(' ', this.Whitespace.source)\n\n this.Preposition = new RegExp(`(?:${prepositions.sort().reverse().map(ci).join('|')})${B}`, 'u')\n }\n}()\n\nconst lexer = moo.compile({\n 'word-preposition': RE.Preposition,\n 'word-acronym': RE.Acronym,\n 'word-contraction': RE.Contraction,\n 'word-ordinal': RE.Ordinal,\n email: RE.Email,\n handle: RE.Handle,\n website: RE.Website,\n domain: RE.Domain,\n word: RE.Word,\n number: RE.IntOrVersion, // eslint-disable-line id-blacklist\n 'punctuation-end': /[?.!](?=[ \\t\\n\\r\\u00A0]|$)/u,\n 'punctuation-colon': /:(?=[ \\t\\n\\r\\u00A0])/u,\n 'punctuation-ellipsis': /[.][.][.]/u,\n punctuation: RE.P,\n whitespace: { match: /[ \\t\\n\\r\\u00A0]/u, lineBreaks: true },\n other: { match: /[\\s\\S]/u, lineBreaks: true },\n})\n\nconst Shape = new class {\n private shapes:
|
|
5
|
-
"mappings": ";;;AAAA,OAAO,SAAS;AAEhB,OAAO,kBAAkB;AAIzB,MAAM,KAAK,IAAI,MAAM;AAAA,EAenB,cAAc;AAdd,wBAAO;AACP,wBAAO;AACP,wBAAO;AACP,wBAAO,cAAa;AACpB,wBAAO;AACP,wBAAO;AACP,wBAAO;AACP,wBAAO;AACP,wBAAO;AACP,wBAAO;AACP,wBAAO;AACP,wBAAO,sBAAqB;AAC5B,wBAAO,KAAI;AAGT,UAAM,IAAI;AACV,UAAM,MAAM;AACZ,UAAM,IAAI,GAAG,GAAG,WAAW,GAAG;AAE9B,SAAK,UAAU,IAAI,OAAO,oCAAoC,CAAC;AAAA,aAAwC,GAAG;AAC1G,SAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG;AAEtC,SAAK,cAAc,IAAI,OAAO,GAAG,CAAC,YAAO,CAAC,GAAG,CAAC,IAAI,GAAG;AACrD,SAAK,UAAU,IAAI,OAAO,sBAAsB,CAAC,IAAI,GAAG;AACxD,SAAK,QAAQ,IAAI,OAAO,uDAAuD,CAAC,IAAI,GAAG;AACvF,SAAK,SAAS,IAAI,OAAO,oBAAoB,CAAC,IAAI,GAAG;AACrD,SAAK,eAAe,IAAI,OAAO,qBAAqB,CAAC,IAAI,GAAG;AAC5D,SAAK,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG;AACpD,SAAK,UAAU,IAAI,OAAO,YAAY,CAAC,SAAS,CAAC;AAAA,gBAAkC,GAAG,MAAM,GAAG;AAE/F,UAAM,KAAK,CAAC,MACV,EACG,QAAQ,WAAW,WAAS,IAAI,MAAM,YAAY,CAAC,GAAG,MAAM,YAAY,CAAC,GAAG,EAC5E,QAAQ,KAAK,KAAK,WAAW,MAAM;AAExC,SAAK,cAAc,IAAI,OAAO,MAAM,aAAa,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG;AAAA,EACjG;AACF,EAAE;AAEF,MAAM,QAAQ,IAAI,QAAQ;AAAA,EACxB,oBAAoB,GAAG;AAAA,EACvB,gBAAgB,GAAG;AAAA,EACnB,oBAAoB,GAAG;AAAA,EACvB,gBAAgB,GAAG;AAAA,EACnB,OAAO,GAAG;AAAA,EACV,QAAQ,GAAG;AAAA,EACX,SAAS,GAAG;AAAA,EACZ,QAAQ,GAAG;AAAA,EACX,MAAM,GAAG;AAAA,EACT,QAAQ,GAAG;AAAA;AAAA,EACX,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,aAAa,GAAG;AAAA,EAChB,YAAY,EAAE,OAAO,oBAAoB,YAAY,KAAK;AAAA,EAC1D,OAAO,EAAE,OAAO,WAAW,YAAY,KAAK;AAC9C,CAAC;AAED,MAAM,QAAQ,IAAI,MAAM;AAAA,EAAN;AAChB,wBAAQ,
|
|
4
|
+
"sourcesContent": ["import moo from 'moo'\n\nimport prepositions from './prepositions.js'\n\n// const show = (obj: any): string => JSON.stringify(obj, null, 2).replace(/[\\u007F-\\uFFFF]/g, chr => `\\\\u${(`0000${chr.charCodeAt(0).toString(16)}`).substr(-4)}`)\n\nconst RE = new class {\n public Acronym: RegExp\n public Word: RegExp\n public Contraction: RegExp\n public Whitespace = /[ \\t\\n\\r\\u00A0]+/u\n public Ordinal: RegExp\n public Email: RegExp\n public Handle: RegExp\n public IntOrVersion: RegExp\n public Domain: RegExp\n public Website: RegExp\n public Preposition: RegExp\n public ComplexPreposition = /^([^ \\t\\n\\r\\u00A0]+)([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+)(?:([ \\t\\n\\r\\u00A0]+)([^ \\t\\n\\r\\u00A0]+))?$/u\n public P = /\\p{P}/u\n\n constructor() {\n const B = '(?=(?:[^\\\\p{L}\\\\p{N}\\\\p{M}\\\\u00AD\\\\u2060]|$))'\n const LNM = '[\\\\p{L}\\\\p{N}\\\\p{M}\\u00AD\\u2060]'\n const W = `${LNM}*?\\\\p{L}${LNM}*`\n\n this.Acronym = new RegExp(`(?:(?:(?:[\\\\p{Lu}\\\\p{Lt}][.]){2,}${B})|(?:(?:vs?[.])(?=[ \\t\\n\\r\\u00A0])))`, 'u')\n this.Word = new RegExp(`${W}${B}`, 'u')\n\n this.Contraction = new RegExp(`${W}['\u2019]${W}${B}`, 'u')\n this.Ordinal = new RegExp(`\\\\d+(?:st|nd|rd|th)${B}`, 'u')\n this.Email = new RegExp(`[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:[.][A-Za-z0-9-]+)+${B}`, 'u')\n this.Handle = new RegExp(`@[A-Za-z0-9-]{2,}${B}`, 'u')\n this.IntOrVersion = new RegExp(`v?\\\\d+(?:\\\\.\\\\d+)*${B}`, 'u')\n this.Domain = new RegExp(`${W}(?:[.]${W})+${B}`, 'u')\n this.Website = new RegExp(`https?://${W}(?:[.]${W})+(?:[^.!? \\t\\n\\r\\u00A0]+|[.!?]${LNM})+`, 'u')\n\n const ci = (s: string): string =>\n s\n .replace(/[a-z]/ig, match => `[${match.toUpperCase()}${match.toLowerCase()}]`)\n .replace(' ', this.Whitespace.source)\n\n this.Preposition = new RegExp(`(?:${prepositions.sort().reverse().map(ci).join('|')})${B}`, 'u')\n }\n}()\n\nconst lexer = moo.compile({\n 'word-preposition': RE.Preposition,\n 'word-acronym': RE.Acronym,\n 'word-contraction': RE.Contraction,\n 'word-ordinal': RE.Ordinal,\n email: RE.Email,\n handle: RE.Handle,\n website: RE.Website,\n domain: RE.Domain,\n word: RE.Word,\n number: RE.IntOrVersion, // eslint-disable-line id-blacklist\n 'punctuation-end': /[?.!](?=[ \\t\\n\\r\\u00A0]|$)/u,\n 'punctuation-colon': /:(?=[ \\t\\n\\r\\u00A0])/u,\n 'punctuation-ellipsis': /[.][.][.]/u,\n punctuation: RE.P,\n whitespace: { match: /[ \\t\\n\\r\\u00A0]/u, lineBreaks: true },\n other: { match: /[\\s\\S]/u, lineBreaks: true },\n})\n\nconst Shape = new class {\n private shapes: Map<string, string> = new Map()\n private re: Record<string, RegExp> = {\n X: /[\\p{Lu}\\p{Lt}]/u,\n x: /[\\p{Ll}\\p{Lm}\\p{Lo}]/u,\n d: /\\p{N}/u,\n }\n\n private match(c: string): string {\n if (c.match(this.re.d)) return 'd'\n if (c.toLowerCase() === c.toUpperCase()) return c\n if (c.match(this.re.X)) return 'X'\n if (c.match(this.re.x)) return 'x'\n if (c === '\u2019') return \"'\"\n if (c === '\u2013') return '-'\n if (c === '\\u2060' || c === '\\u00AD') return ''\n return c\n }\n\n private fetch(c: string): string {\n if (!this.shapes.has(c)) this.shapes.set(c, this.match(c))\n return this.shapes.get(c)\n }\n\n shape(t: string) {\n if (!this.shapes.has(t)) this.shapes.set(t, Array.from(t).map(c => this.fetch(c)).join(''))\n return this.shapes.get(t)\n }\n}()\n\nexport type Token = {\n type: 'word' | 'domain' | 'whitespace'\n subtype: '' | 'preposition' | 'acronym' | 'whitespace' | 'word' | 'domain'\n text: string\n start: number\n end: number\n shape: string\n sentenceStart: boolean\n subSentenceStart: boolean\n hyphenated?: Token[]\n}\n\nfunction combine(tokens: Token[]) {\n const combined = { ...tokens[0] }\n for (const t of tokens.slice(1)) {\n combined.text += t.text\n combined.end = t.end\n combined.shape += t.shape\n }\n return combined\n}\n\nfunction hyphenate(t: Token) {\n if (t.type === 'word') return 'w'\n if (t.text === '-' || t.text === '\u2013') return '-'\n return ' '\n}\n\nexport function tokenize(title: string, markup?: RegExp): Token[] {\n if (markup) title = title.replace(markup, match => '\\u2060'.repeat(match.length))\n\n lexer.reset(title)\n const tokens: Token[] = []\n let sentenceStart = true\n let subSentenceStart = false\n for (const token of lexer) {\n const [type, subtype] = (token.type.includes('-') ? token.type : `${token.type}-`).split('-')\n\n tokens.push({\n type,\n subtype,\n text: token.text,\n start: token.offset,\n end: token.offset + token.text.length - 1,\n shape: Shape.shape(<string> token.text),\n sentenceStart: type === 'word' && sentenceStart,\n subSentenceStart: type === 'word' && subSentenceStart,\n })\n\n switch (token.type) {\n case 'punctuation-end':\n sentenceStart = true\n break\n case 'punctuation-colon':\n subSentenceStart = true\n break\n default:\n if (type.match(/word|number|handle|domain|website/)) {\n sentenceStart = false\n subSentenceStart = false\n }\n break\n }\n }\n\n const stack = tokens.splice(0)\n\n let cpt: RegExpMatchArray\n let cps: RegExpMatchArray\n while (stack.length) {\n if (stack[0].subtype === 'preposition' && (cpt = stack[0].text.match(RE.ComplexPreposition)) && (cps = stack[0].shape.match(RE.ComplexPreposition))) {\n const complex = stack.shift()\n\n let start = complex.start\n let end\n for (const i of Array.from({ length: 5 }, (_, n) => n + 1)) {\n if (!cpt[i]) break\n\n end = start + cps[i].length - 1\n tokens.push({\n ...complex,\n text: cpt[i],\n shape: cps[i],\n start,\n end,\n type: i % 2 ? complex.type : 'whitespace',\n subtype: i % 2 ? complex.type : '',\n })\n start = end + 1\n }\n continue\n }\n\n // hyphenated words\n const pat = stack.map(t => hyphenate(t)).join('')\n if (cpt = pat.match(/^w(-w)+(?= |$)/)) {\n const hyphenated = stack.splice(0, cpt[0].length)\n tokens.push({ ...combine(hyphenated), hyphenated })\n continue\n }\n\n tokens.push(stack.shift())\n }\n\n return markup ? tokens.map(token => ({ ...token, text: title.substring(token.start, token.end + 1) })) : tokens\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retorquere/bibtex-parser",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.29",
|
|
4
4
|
"description": "BibTeX parser",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -52,24 +52,24 @@
|
|
|
52
52
|
"author": "Emiliano Heyns",
|
|
53
53
|
"license": "ISC",
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@types/node": "^
|
|
55
|
+
"@types/node": "^25.5.0",
|
|
56
56
|
"command-line-args": "^6.0.1",
|
|
57
57
|
"csv": "^6.4.1",
|
|
58
58
|
"digital-tree": "^2.0.4",
|
|
59
|
-
"dprint": "^0.
|
|
60
|
-
"ejs": "^
|
|
61
|
-
"esbuild": "^0.
|
|
62
|
-
"glob": "^
|
|
63
|
-
"js-yaml": "^4.1.
|
|
59
|
+
"dprint": "^0.52.0",
|
|
60
|
+
"ejs": "^5.0.1",
|
|
61
|
+
"esbuild": "^0.27.4",
|
|
62
|
+
"glob": "^13.0.6",
|
|
63
|
+
"js-yaml": "^4.1.1",
|
|
64
64
|
"minimist": "^1.2.8",
|
|
65
65
|
"mkdirp": "^3.0.1",
|
|
66
66
|
"node-fetch": "^3.3.2",
|
|
67
|
-
"piscina": "^5.1.
|
|
67
|
+
"piscina": "^5.1.4",
|
|
68
68
|
"slug": "^11.0.1",
|
|
69
|
-
"tap": "^21.
|
|
69
|
+
"tap": "^21.6.2",
|
|
70
70
|
"ts-node": "^10.9.2",
|
|
71
71
|
"tslib": "^2.8.1",
|
|
72
|
-
"typedoc": "^0.28.
|
|
72
|
+
"typedoc": "^0.28.17",
|
|
73
73
|
"typescript": "^5.9.3"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
"@unified-latex/unified-latex-util-visit": "^1.8.3",
|
|
80
80
|
"i": "^0.3.7",
|
|
81
81
|
"lodash.merge": "^4.6.2",
|
|
82
|
-
"moo": "^0.5.
|
|
82
|
+
"moo": "^0.5.3",
|
|
83
83
|
"nearley": "^2.20.1",
|
|
84
|
-
"unicode2latex": "^7.0.
|
|
84
|
+
"unicode2latex": "^7.0.30",
|
|
85
85
|
"wink-eng-lite-web-model": "^1.8.1",
|
|
86
86
|
"wink-nlp": "^2.4.0"
|
|
87
87
|
},
|