@gondola-lyrics/kit 0.5.0 → 0.6.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/formats.d.ts +224 -6
- package/dist/formats.js +952 -169
- package/dist/formats.js.map +1 -1
- package/dist/generator.d.ts +1 -1
- package/dist/index.d.ts +92 -4
- package/dist/index.js +2 -2
- package/dist/parser.d.ts +92 -4
- package/dist/parser.js +2 -2
- package/dist/{language.js → rules.js} +51 -2
- package/dist/rules.js.map +1 -0
- package/dist/transforms.d.ts +10 -2
- package/dist/transforms.js +47 -87
- package/dist/transforms.js.map +1 -1
- package/package.json +1 -1
- package/dist/language.js.map +0 -1
package/package.json
CHANGED
package/dist/language.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"language.js","names":[],"sources":["../src/utils/array.ts","../src/utils/language.ts"],"sourcesContent":["/**\n * Preserves the input array when every element keeps its identity, so unchanged parent nodes can also be reused.\n *\n * The callback must leave inputs untouched and return the original element when unchanged.\n */\nexport const mapShared = <T>(items: T[], transform: (item: T) => T): T[] => {\n let result = items\n for (const [index, item] of items.entries()) {\n const transformed = transform(item)\n if (transformed !== item) {\n if (result === items) {\n result = [...items]\n }\n result[index] = transformed\n }\n }\n return result\n}\n\n/**\n * Finds the first value meeting a lower bound so range queries can skip earlier candidates.\n *\n * @param values Values sorted in ascending order.\n * @param target Inclusive lower bound.\n *\n * @returns The first matching index, or the array length when every value is smaller.\n */\nexport const lowerBound = (values: readonly number[], target: number): number => {\n let left = 0\n let right = values.length\n while (left < right) {\n const middle = Math.floor((left + right) / 2)\n if (values[middle]! < target) {\n left = middle + 1\n } else {\n right = middle\n }\n }\n return left\n}\n","const enum ScriptGroup {\n NEUTRAL,\n EAST_ASIAN,\n LATIN,\n HANGUL,\n CYRILLIC,\n GREEK,\n ARABIC,\n HEBREW,\n DEVANAGARI,\n THAI,\n}\n\nconst SCRIPT_PATTERNS: readonly (readonly [RegExp, ScriptGroup])[] = [\n [/[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}]/u, ScriptGroup.EAST_ASIAN],\n [/\\p{Script=Latin}/u, ScriptGroup.LATIN],\n [/\\p{Script=Hangul}/u, ScriptGroup.HANGUL],\n [/\\p{Script=Cyrillic}/u, ScriptGroup.CYRILLIC],\n [/\\p{Script=Greek}/u, ScriptGroup.GREEK],\n [/\\p{Script=Arabic}/u, ScriptGroup.ARABIC],\n [/\\p{Script=Hebrew}/u, ScriptGroup.HEBREW],\n [/\\p{Script=Devanagari}/u, ScriptGroup.DEVANAGARI],\n [/\\p{Script=Thai}/u, ScriptGroup.THAI],\n]\n\nconst getOtherScript = (text: string, start: number, width: number): ScriptGroup => {\n const unit = text.charCodeAt(start)\n if (unit === 0x30fb || unit === 0x30fc) {\n return ScriptGroup.NEUTRAL\n }\n if ((unit >= 0x0400 && unit <= 0x0481) || (unit >= 0x048a && unit <= 0x052f)) {\n return ScriptGroup.CYRILLIC\n }\n if (unit >= 0x03a3 && unit <= 0x03e1) {\n return ScriptGroup.GREEK\n }\n if ((unit >= 0x0620 && unit <= 0x063f) || (unit >= 0x0641 && unit <= 0x064a)) {\n return ScriptGroup.ARABIC\n }\n if (unit >= 0x05d0 && unit <= 0x05ea) {\n return ScriptGroup.HEBREW\n }\n if ((unit >= 0x0900 && unit <= 0x0950) || (unit >= 0x0955 && unit <= 0x0963) || (unit >= 0x0966 && unit <= 0x097f)) {\n return ScriptGroup.DEVANAGARI\n }\n if ((unit >= 0x0e01 && unit <= 0x0e3a) || (unit >= 0x0e40 && unit <= 0x0e5b)) {\n return ScriptGroup.THAI\n }\n\n const character = text.slice(start, start + width)\n for (const [pattern, script] of SCRIPT_PATTERNS) {\n if (pattern.test(character)) {\n return script\n }\n }\n return ScriptGroup.NEUTRAL\n}\n\n/**\n * Finds a boundary between supported scripts without allocating a segment list.\n * Han and kana share a group so Japanese labels stay intact; Hangul, Latin, Cyrillic, Greek, Arabic, Hebrew, Devanagari and Thai remain separate.\n * Punctuation, digits, inherited marks and unsupported scripts stay in the surrounding run.\n *\n * @param start A UTF-16 offset at a code-point boundary, usually the end returned by the previous call.\n *\n * @returns The exclusive UTF-16 end of the run, or text.length when no later boundary exists.\n */\nexport const findScriptRunEnd = (text: string, start = 0): number => {\n let script = ScriptGroup.NEUTRAL\n let index = start\n\n while (index < text.length) {\n const unit = text.charCodeAt(index)\n let nextScript = ScriptGroup.NEUTRAL\n let width = 1\n\n if (unit <= 0x7f) {\n const letter = unit | 0x20\n if (letter >= 0x61 && letter <= 0x7a) {\n if (script !== ScriptGroup.NEUTRAL && script !== ScriptGroup.LATIN) {\n return index\n }\n script = ScriptGroup.LATIN\n do {\n index += 1\n const nextLetter = text.charCodeAt(index) | 0x20\n if (nextLetter < 0x61 || nextLetter > 0x7a) {\n break\n }\n } while (index < text.length)\n continue\n }\n } else if (unit >= 0x4e00 && unit <= 0x9fff) {\n nextScript = ScriptGroup.EAST_ASIAN\n } else if ((unit >= 0x3041 && unit <= 0x3096) || (unit >= 0x30a1 && unit <= 0x30fa)) {\n nextScript = ScriptGroup.EAST_ASIAN\n } else if (unit >= 0xac00 && unit <= 0xd7a3) {\n nextScript = ScriptGroup.HANGUL\n } else {\n width = unit >= 0xd800 && unit <= 0xdbff && text.codePointAt(index)! > 0xffff ? 2 : 1\n nextScript = getOtherScript(text, index, width)\n }\n\n if (nextScript !== ScriptGroup.NEUTRAL) {\n if (script !== ScriptGroup.NEUTRAL && script !== nextScript) {\n return index\n }\n script = nextScript\n }\n index += width\n }\n return text.length\n}\n\n/**\n * Returns a language tag in the canonical form the model stores, which is lower case.\n *\n * This mirrors the model's own helper, which it does not export.\n * Comparing tags stays with the consumer, since BCP 47 matches by subtag prefix rather than by string equality.\n */\nexport const lowerTag = (tag: string | undefined): string | undefined => {\n return tag ? tag.toLowerCase() : undefined\n}\n"],"mappings":"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"}
|