vietnamese-phonetic-transcript 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/phonetic_transcript/phonetic_transcript.ts"],"sourcesContent":["export type PhoneticTranscript = {\n main: string\n mainCharacter: string\n medial?: string\n medialCharacter?: string\n initial?: string\n initialCharacter?: string\n final?: string\n finalCharacter?: string\n toneMark: number\n}\n\nexport type Constraint = {\n phoneme: string\n character: string\n initial?: Array<string>\n notInitial?: Array<string>\n medial?: Array<string>\n notMedial?: Array<string>\n main?: Array<string>\n notMain?: Array<string>\n final?: Array<string>\n notFinal?: Array<string>\n}\n\n// NOTE: Check the character orders, because \"t\" might be matched before \"th\"\nconst initialList = [\n { phoneme: 'b-', character: 'b' },\n { phoneme: 'm-', character: 'm' },\n { phoneme: 'f-', character: 'ph' },\n\n { phoneme: 'v-', character: 'v' },\n\n { phoneme: 'tʼ-', character: 'th' },\n\n { phoneme: 'ʈ-', character: 'tr' },\n\n { phoneme: 't-', character: 't' },\n\n { phoneme: 'd-', character: 'đ' },\n\n { phoneme: 'ɲ-', character: 'nh' },\n\n { phoneme: 'ŋ-', character: 'ngh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ŋ-', character: 'ng' },\n\n { phoneme: 'n-', character: 'n' },\n\n { phoneme: 'z-', character: 'd' },\n { phoneme: 'z-', character: 'gi' },\n\n { phoneme: 'ʐ-', character: 'r' },\n\n { phoneme: 's-', character: 'x' },\n { phoneme: 'ʂ-', character: 's' },\n\n { phoneme: 'l-', character: 'l' },\n\n { phoneme: 'χ-', character: 'kh' },\n\n { phoneme: 'c-', character: 'ch' },\n\n { phoneme: 'k-', character: 'k', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'k-', character: 'q', medial: ['-u-'] },\n { phoneme: 'k-', character: 'c' },\n\n { phoneme: 'ɣ-', character: 'gh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ɣ-', character: 'g' },\n\n { phoneme: 'h-', character: 'h' },\n] satisfies Constraint[]\n\nconst medialList = [\n {\n phoneme: '-u-',\n character: 'u',\n initial: ['k-'],\n main: ['-i-', '-e-', '-ɤ-', '-ɤ-', '-ie-'],\n },\n {\n phoneme: '-u-',\n character: 'o',\n },\n] satisfies Constraint[]\n\nconst mainList = [\n {\n phoneme: '-i-',\n character: 'y',\n medial: ['-u-', 'zero'],\n initial: ['zero'],\n final: ['zero'],\n },\n { phoneme: '-i-', character: 'i' },\n\n { phoneme: '-e-', character: 'ê' },\n\n { phoneme: '-ɛ-', character: 'e' },\n\n { phoneme: '-ɯ-', character: 'ư' },\n\n { phoneme: '-ɤ-', character: 'ơ' },\n\n { phoneme: '-a-', character: 'a' },\n\n { phoneme: '-u-', character: 'u' },\n\n { phoneme: '-o-', character: 'ô' },\n { phoneme: '-o-', character: 'ôô' },\n\n { phoneme: '-ɔ-', character: 'o' },\n { phoneme: '-ɔ-', character: 'oo' },\n\n { phoneme: '-ɤ-', character: 'â' },\n\n { phoneme: '-ɛ-', character: 'a' },\n\n { phoneme: '-ă-', character: 'a', final: ['-w', '-j'] },\n { phoneme: '-ă-', character: 'ă' },\n\n { phoneme: '-ɔ-', character: 'o', final: ['-ŋ', '-k'] },\n\n { phoneme: '-ie-', character: 'iê', notFinal: ['zero'], medial: ['zero'] },\n {\n phoneme: '-ie-',\n character: 'yê',\n notFinal: ['zero'],\n medial: ['-u-'],\n initial: ['zero'],\n },\n { phoneme: '-ie-', character: 'ia', final: ['zero'], medial: ['zero'] },\n { phoneme: '-ie-', character: 'ya', final: ['zero'], medial: ['-u-'] },\n\n { phoneme: '-ɯɤ-', character: 'ươ', notFinal: ['zero'] },\n { phoneme: '-ɯɤ-', character: 'ưa', final: ['zero'] },\n\n { phoneme: '-uo-', character: 'uô', notFinal: ['zero'] },\n { phoneme: '-uo-', character: 'ua', final: ['zero'] },\n] satisfies Constraint[]\n\nconst finalList = [\n { phoneme: '-m', character: 'm' },\n\n { phoneme: '-n', character: 'n' },\n\n { phoneme: '-p', character: 'p' },\n\n { phoneme: '-t', character: 't' },\n\n { phoneme: '-ŋ', character: 'nh', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-ŋ', character: 'ng' },\n\n { phoneme: '-k', character: 'ch', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-k', character: 'c' },\n\n { phoneme: '-w', character: 'o', main: ['-a-', '-ɛ-'] },\n { phoneme: '-w', character: 'u' },\n\n { phoneme: '-j', character: 'y', main: ['-ă-', '-ɤ-'] },\n { phoneme: '-j', character: 'i' },\n] satisfies Constraint[]\n\nconst toneMarkList = [\n { character: 'a', originalCharacter: 'a', toneMark: 1 },\n { character: 'à', originalCharacter: 'a', toneMark: 2 },\n { character: 'ã', originalCharacter: 'a', toneMark: 3 },\n { character: 'ả', originalCharacter: 'a', toneMark: 4 },\n { character: 'á', originalCharacter: 'a', toneMark: 5 },\n { character: 'ạ', originalCharacter: 'a', toneMark: 6 },\n\n { character: 'ă', originalCharacter: 'ă', toneMark: 1 },\n { character: 'ằ', originalCharacter: 'ă', toneMark: 2 },\n { character: 'ẵ', originalCharacter: 'ă', toneMark: 3 },\n { character: 'ẳ', originalCharacter: 'ă', toneMark: 4 },\n { character: 'ắ', originalCharacter: 'ă', toneMark: 5 },\n { character: 'ặ', originalCharacter: 'ă', toneMark: 6 },\n\n { character: 'â', originalCharacter: 'â', toneMark: 1 },\n { character: 'ầ', originalCharacter: 'â', toneMark: 2 },\n { character: 'ẫ', originalCharacter: 'â', toneMark: 3 },\n { character: 'ẩ', originalCharacter: 'â', toneMark: 4 },\n { character: 'ấ', originalCharacter: 'â', toneMark: 5 },\n { character: 'ậ', originalCharacter: 'â', toneMark: 6 },\n\n { character: 'e', originalCharacter: 'e', toneMark: 1 },\n { character: 'è', originalCharacter: 'e', toneMark: 2 },\n { character: 'ẽ', originalCharacter: 'e', toneMark: 3 },\n { character: 'ẻ', originalCharacter: 'e', toneMark: 4 },\n { character: 'é', originalCharacter: 'e', toneMark: 5 },\n { character: 'ẹ', originalCharacter: 'e', toneMark: 6 },\n\n { character: 'ê', originalCharacter: 'ê', toneMark: 1 },\n { character: 'ề', originalCharacter: 'ê', toneMark: 2 },\n { character: 'ễ', originalCharacter: 'ê', toneMark: 3 },\n { character: 'ể', originalCharacter: 'ê', toneMark: 4 },\n { character: 'ế', originalCharacter: 'ê', toneMark: 5 },\n { character: 'ệ', originalCharacter: 'ê', toneMark: 6 },\n\n { character: 'i', originalCharacter: 'i', toneMark: 1 },\n { character: 'ì', originalCharacter: 'i', toneMark: 2 },\n { character: 'ĩ', originalCharacter: 'i', toneMark: 3 },\n { character: 'ỉ', originalCharacter: 'i', toneMark: 4 },\n { character: 'í', originalCharacter: 'i', toneMark: 5 },\n { character: 'ị', originalCharacter: 'i', toneMark: 6 },\n\n { character: 'o', originalCharacter: 'o', toneMark: 1 },\n { character: 'ò', originalCharacter: 'o', toneMark: 2 },\n { character: 'õ', originalCharacter: 'o', toneMark: 3 },\n { character: 'ỏ', originalCharacter: 'o', toneMark: 4 },\n { character: 'ó', originalCharacter: 'o', toneMark: 5 },\n { character: 'ọ', originalCharacter: 'o', toneMark: 6 },\n\n { character: 'ô', originalCharacter: 'ô', toneMark: 1 },\n { character: 'ồ', originalCharacter: 'ô', toneMark: 2 },\n { character: 'ỗ', originalCharacter: 'ô', toneMark: 3 },\n { character: 'ổ', originalCharacter: 'ô', toneMark: 4 },\n { character: 'ố', originalCharacter: 'ô', toneMark: 5 },\n { character: 'ộ', originalCharacter: 'ô', toneMark: 6 },\n\n { character: 'ơ', originalCharacter: 'ơ', toneMark: 1 },\n { character: 'ờ', originalCharacter: 'ơ', toneMark: 2 },\n { character: 'ỡ', originalCharacter: 'ơ', toneMark: 3 },\n { character: 'ở', originalCharacter: 'ơ', toneMark: 4 },\n { character: 'ớ', originalCharacter: 'ơ', toneMark: 5 },\n { character: 'ợ', originalCharacter: 'ơ', toneMark: 6 },\n\n { character: 'u', originalCharacter: 'u', toneMark: 1 },\n { character: 'ù', originalCharacter: 'u', toneMark: 2 },\n { character: 'ũ', originalCharacter: 'u', toneMark: 3 },\n { character: 'ủ', originalCharacter: 'u', toneMark: 4 },\n { character: 'ú', originalCharacter: 'u', toneMark: 5 },\n { character: 'ụ', originalCharacter: 'u', toneMark: 6 },\n\n { character: 'ư', originalCharacter: 'ư', toneMark: 1 },\n { character: 'ừ', originalCharacter: 'ư', toneMark: 2 },\n { character: 'ữ', originalCharacter: 'ư', toneMark: 3 },\n { character: 'ử', originalCharacter: 'ư', toneMark: 4 },\n { character: 'ứ', originalCharacter: 'ư', toneMark: 5 },\n { character: 'ự', originalCharacter: 'ư', toneMark: 6 },\n\n { character: 'y', originalCharacter: 'y', toneMark: 1 },\n { character: 'ỳ', originalCharacter: 'y', toneMark: 2 },\n { character: 'ỹ', originalCharacter: 'y', toneMark: 3 },\n { character: 'ỷ', originalCharacter: 'y', toneMark: 4 },\n { character: 'ý', originalCharacter: 'y', toneMark: 5 },\n { character: 'ỵ', originalCharacter: 'y', toneMark: 6 },\n]\n\nfunction transcriptToString(transcript: PhoneticTranscript): string {\n if (!transcript.main || !transcript.toneMark) {\n throw new Error('Invalid phonetic transcript')\n }\n\n return (\n (((transcript.initial?.replaceAll('-', '')) ?? '') || '')\n + (((transcript?.medial?.replaceAll('-', '')) ?? '') || '')\n + transcript.main.replaceAll('-', '')\n + (((transcript.final?.replaceAll('-', '')) ?? '') || '')\n + transcript.toneMark.toString()\n )\n}\n\nfunction buildPhoneticTranscript(word: string): PhoneticTranscript {\n word = word.toLowerCase()\n\n const transcript = {\n toneMark: 1,\n } as PhoneticTranscript\n\n // NOTE: Check tone mark\n toneMarkList.forEach((toneMark) => {\n if (toneMark.toneMark !== 1 && word.includes(toneMark.character)) {\n transcript.toneMark = toneMark.toneMark\n\n word = word.replace(toneMark.character, toneMark.originalCharacter)\n }\n })\n\n // NOTE: Check initial\n initialList.forEach((initial) => {\n if (\n word.startsWith(initial.character)\n && word.length - initial.character.length > 0\n ) {\n transcript.initial = initial.phoneme\n transcript.initialCharacter = initial.character\n\n word = word.slice(initial.character.length)\n }\n })\n\n // NOTE: Check final\n finalList.forEach((final) => {\n if (\n word.endsWith(final.character)\n && word.length - final.character.length > 0\n ) {\n transcript.final = final.phoneme\n transcript.finalCharacter = final.character\n\n word = word.slice(0, word.length - final.character.length)\n }\n })\n\n // NOTE: Check medial\n if (word.length > 1 && word !== 'oo') {\n if (\n word.startsWith('u')\n && (transcript.initialCharacter === 'q'\n || ['y', 'i', 'ê', 'ơ', 'â', 'iê', 'yê', 'ia', 'ya'].includes(\n word.slice(1),\n ))\n ) {\n transcript.medial = medialList[0]!.phoneme\n transcript.medialCharacter = medialList[0]!.character\n\n word = word.slice(1)\n }\n else if (word.startsWith('o')) {\n transcript.medial = medialList[1]!.phoneme\n transcript.medialCharacter = medialList[1]!.character\n\n word = word.slice(1)\n }\n }\n\n if (\n word === 'o'\n && (transcript.finalCharacter !== undefined)\n && ['nh', 'ng', 'ch', 'c'].includes(transcript.finalCharacter)\n ) {\n const main = mainList.filter(main => main.phoneme === '-ɔ-')\n\n transcript.main = main[0]!.phoneme\n transcript.mainCharacter = main[0]!.character\n\n word = word.slice(1)\n }\n else {\n // NOTE: Check main\n mainList.forEach((main) => {\n if (word === main.character) {\n transcript.main = main.phoneme\n transcript.mainCharacter = main.character\n\n word = word.slice(main.character.length)\n }\n })\n }\n\n return transcript\n}\n\nexport function phoneticTranscriptWord(word: string) {\n return word.replaceAll(/\\p{L}+/gu, (word) => {\n try {\n return transcriptToString(buildPhoneticTranscript(word))\n }\n catch {\n return word\n }\n })\n}\n\nexport function phoneticTranscriptSentence(sentence: string): string {\n return sentence\n .split(' ')\n .map(word => phoneticTranscriptWord(word))\n .join(' ')\n}\n"],"mappings":"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AAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CAEtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CAEtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CAEtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CAEtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UAAU;CAAE;CACtD;EAAE,WAAW;EAAK,mBAAmB;EAAK,UA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"}
package/package.json CHANGED
@@ -1,54 +1,55 @@
1
1
  {
2
2
  "name": "vietnamese-phonetic-transcript",
3
- "version": "1.0.0",
4
- "author": "DuckyMomo20012",
3
+ "type": "module",
4
+ "version": "1.0.1",
5
5
  "description": "A library for converting Vietnamese text to its phonetic transcription.",
6
+ "author": "DuckyMomo20012",
7
+ "license": "CC-BY-NC-SA-4.0",
6
8
  "repository": {
7
9
  "type": "git",
8
10
  "url": "git+https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript.git"
9
11
  },
10
- "type": "module",
11
- "main": "./dist/index.js",
12
- "module": "./dist/index.mjs",
13
- "types": "./dist/index.d.ts",
14
- "files": [
15
- "dist"
16
- ],
17
12
  "exports": {
18
- "./package.json": "./package.json",
19
13
  ".": {
14
+ "types": {
15
+ "import": "./dist/index.d.mts",
16
+ "require": "./dist/index.d.cts"
17
+ },
20
18
  "import": "./dist/index.js",
21
- "default": "./dist/index.cjs"
22
- }
19
+ "require": "./dist/index.cjs"
20
+ },
21
+ "./package.json": "./package.json"
23
22
  },
23
+ "main": "./dist/index.cjs",
24
+ "module": "./dist/index.js",
25
+ "types": "./dist/index.d.mts",
26
+ "files": [
27
+ "dist"
28
+ ],
24
29
  "devDependencies": {
25
- "@arethetypeswrong/cli": "0.18.2",
26
- "@commitlint/cli": "19.8.1",
27
- "@commitlint/config-conventional": "19.8.1",
28
- "@types/node": "24.3.1",
29
- "@typescript-eslint/eslint-plugin": "8.41.0",
30
- "@typescript-eslint/parser": "8.41.0",
31
- "eslint": "8.57.1",
32
- "eslint-config-airbnb-base": "15.0.0",
33
- "eslint-config-prettier": "9.1.2",
34
- "eslint-import-resolver-typescript": "3.10.1",
35
- "eslint-plugin-import": "2.32.0",
36
- "eslint-plugin-jsx-a11y": "6.10.2",
37
- "eslint-plugin-prettier": "5.5.4",
38
- "eslint-plugin-react": "7.37.5",
39
- "eslint-plugin-react-hooks": "5.2.0",
30
+ "@antfu/eslint-config": "9.3.0",
31
+ "@arethetypeswrong/cli": "0.18.5",
32
+ "@commitlint/cli": "21.2.2",
33
+ "@commitlint/config-conventional": "21.2.2",
34
+ "@types/node": "26.2.0",
35
+ "@vitest/eslint-plugin": "1.6.27",
36
+ "eslint": "10.9.0",
37
+ "eslint-plugin-format": "2.0.1",
40
38
  "husky": "9.1.7",
41
- "lint-staged": "16.1.6",
42
- "prettier": "3.6.2",
43
- "tsup": "8.5.0",
44
- "typescript": "5.9.2",
45
- "vitest": "3.2.4"
39
+ "lint-staged": "17.3.0",
40
+ "tsdown": "0.22.14",
41
+ "typescript": "6.0.3",
42
+ "vitest": "4.1.11"
46
43
  },
47
44
  "scripts": {
48
- "lint": "tsc",
49
- "build": "tsup",
50
- "test": "vitest run",
51
- "check-exports": "attw --pack . --ignore-rules=cjs-resolves-to-esm",
52
- "prepublish": "pnpm run build && pnpm run check-exports && pnpm run lint"
45
+ "lint": "eslint .",
46
+ "lint:fix": "eslint . --fix",
47
+ "build": "tsdown",
48
+ "typecheck": "tsc --noEmit",
49
+ "test": "vitest",
50
+ "test:ui": "vitest --ui",
51
+ "test:run": "vitest run",
52
+ "test:coverage": "vitest run --coverage",
53
+ "check-exports": "attw --pack . --ignore-rules=cjs-resolves-to-esm"
53
54
  }
54
55
  }
package/dist/index.d.ts DELETED
@@ -1,27 +0,0 @@
1
- type PhoneticTranscript = {
2
- main: string;
3
- mainCharacter: string;
4
- medial?: string;
5
- medialCharacter?: string;
6
- initial?: string;
7
- initialCharacter?: string;
8
- final?: string;
9
- finalCharacter?: string;
10
- toneMark: number;
11
- };
12
- type Constraint = {
13
- phoneme: string;
14
- character: string;
15
- initial?: Array<string>;
16
- notInitial?: Array<string>;
17
- medial?: Array<string>;
18
- notMedial?: Array<string>;
19
- main?: Array<string>;
20
- notMain?: Array<string>;
21
- final?: Array<string>;
22
- notFinal?: Array<string>;
23
- };
24
- declare const phoneticTranscriptWord: (word: string) => string;
25
- declare const phoneticTranscriptSentence: (sentence: string) => string;
26
-
27
- export { type Constraint, type PhoneticTranscript, phoneticTranscriptSentence, phoneticTranscriptWord };
package/dist/index.js DELETED
@@ -1,245 +0,0 @@
1
- // lib/phonetic_transcript/phonetic_transcript.ts
2
- var initialList = [
3
- { phoneme: "b-", character: "b" },
4
- { phoneme: "m-", character: "m" },
5
- { phoneme: "f-", character: "ph" },
6
- { phoneme: "v-", character: "v" },
7
- { phoneme: "t\u02BC-", character: "th" },
8
- { phoneme: "\u0288-", character: "tr" },
9
- { phoneme: "t-", character: "t" },
10
- { phoneme: "d-", character: "\u0111" },
11
- { phoneme: "\u0272-", character: "nh" },
12
- { phoneme: "\u014B-", character: "ngh", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
13
- { phoneme: "\u014B-", character: "ng" },
14
- { phoneme: "n-", character: "n" },
15
- { phoneme: "z-", character: "d" },
16
- { phoneme: "z-", character: "gi" },
17
- { phoneme: "\u0290-", character: "r" },
18
- { phoneme: "s-", character: "x" },
19
- { phoneme: "\u0282-", character: "s" },
20
- { phoneme: "l-", character: "l" },
21
- { phoneme: "\u03C7-", character: "kh" },
22
- { phoneme: "c-", character: "ch" },
23
- { phoneme: "k-", character: "k", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
24
- { phoneme: "k-", character: "q", medial: ["-u\uE608-"] },
25
- { phoneme: "k-", character: "c" },
26
- { phoneme: "\u0263-", character: "gh", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
27
- { phoneme: "\u0263-", character: "g" },
28
- { phoneme: "h-", character: "h" }
29
- ];
30
- var medialList = [
31
- {
32
- phoneme: "-u\uE608-",
33
- character: "u",
34
- initial: ["k-"],
35
- main: ["-i-", "-e-", "-\u0264-", "-\u0264\uE60C-", "-ie-"]
36
- },
37
- {
38
- phoneme: "-u\uE608-",
39
- character: "o"
40
- }
41
- ];
42
- var mainList = [
43
- {
44
- phoneme: "-i-",
45
- character: "y",
46
- medial: ["-u\uE608-", "zero"],
47
- initial: ["zero"],
48
- final: ["zero"]
49
- },
50
- { phoneme: "-i-", character: "i" },
51
- { phoneme: "-e-", character: "\xEA" },
52
- { phoneme: "-\u025B-", character: "e" },
53
- { phoneme: "-\u026F-", character: "\u01B0" },
54
- { phoneme: "-\u0264-", character: "\u01A1" },
55
- { phoneme: "-a-", character: "a" },
56
- { phoneme: "-u-", character: "u" },
57
- { phoneme: "-o-", character: "\xF4" },
58
- { phoneme: "-o-", character: "\xF4\xF4" },
59
- { phoneme: "-\u0254-", character: "o" },
60
- { phoneme: "-\u0254-", character: "oo" },
61
- { phoneme: "-\u0264\uE60C-", character: "\xE2" },
62
- { phoneme: "-\u025B\uE60C-", character: "a" },
63
- { phoneme: "-\u0103-", character: "a", final: ["-w", "-j"] },
64
- { phoneme: "-\u0103-", character: "\u0103" },
65
- { phoneme: "-\u0254\uE60C-", character: "o", final: ["-\u014B", "-k"] },
66
- { phoneme: "-ie-", character: "i\xEA", notFinal: ["zero"], medial: ["zero"] },
67
- {
68
- phoneme: "-ie-",
69
- character: "y\xEA",
70
- notFinal: ["zero"],
71
- medial: ["-u\uE608-"],
72
- initial: ["zero"]
73
- },
74
- { phoneme: "-ie-", character: "ia", final: ["zero"], medial: ["zero"] },
75
- { phoneme: "-ie-", character: "ya", final: ["zero"], medial: ["-u\uE608-"] },
76
- { phoneme: "-\u026F\u0264-", character: "\u01B0\u01A1", notFinal: ["zero"] },
77
- { phoneme: "-\u026F\u0264-", character: "\u01B0a", final: ["zero"] },
78
- { phoneme: "-uo-", character: "u\xF4", notFinal: ["zero"] },
79
- { phoneme: "-uo-", character: "ua", final: ["zero"] }
80
- ];
81
- var finalList = [
82
- { phoneme: "-m", character: "m" },
83
- { phoneme: "-n", character: "n" },
84
- { phoneme: "-p", character: "p" },
85
- { phoneme: "-t", character: "t" },
86
- { phoneme: "-\u014B", character: "nh", main: ["-i-", "-e-", "-\u025B\uE60C-"] },
87
- { phoneme: "-\u014B", character: "ng" },
88
- { phoneme: "-k", character: "ch", main: ["-i-", "-e-", "-\u025B\uE60C-"] },
89
- { phoneme: "-k", character: "c" },
90
- { phoneme: "-w", character: "o", main: ["-a-", "-\u025B-"] },
91
- { phoneme: "-w", character: "u" },
92
- { phoneme: "-j", character: "y", main: ["-\u0103-", "-\u0264\uE60C-"] },
93
- { phoneme: "-j", character: "i" }
94
- ];
95
- var toneMarkList = [
96
- { character: "a", originalCharacter: "a", toneMark: 1 },
97
- { character: "\xE0", originalCharacter: "a", toneMark: 2 },
98
- { character: "\xE3", originalCharacter: "a", toneMark: 3 },
99
- { character: "\u1EA3", originalCharacter: "a", toneMark: 4 },
100
- { character: "\xE1", originalCharacter: "a", toneMark: 5 },
101
- { character: "\u1EA1", originalCharacter: "a", toneMark: 6 },
102
- { character: "\u0103", originalCharacter: "\u0103", toneMark: 1 },
103
- { character: "\u1EB1", originalCharacter: "\u0103", toneMark: 2 },
104
- { character: "\u1EB5", originalCharacter: "\u0103", toneMark: 3 },
105
- { character: "\u1EB3", originalCharacter: "\u0103", toneMark: 4 },
106
- { character: "\u1EAF", originalCharacter: "\u0103", toneMark: 5 },
107
- { character: "\u1EB7", originalCharacter: "\u0103", toneMark: 6 },
108
- { character: "\xE2", originalCharacter: "\xE2", toneMark: 1 },
109
- { character: "\u1EA7", originalCharacter: "\xE2", toneMark: 2 },
110
- { character: "\u1EAB", originalCharacter: "\xE2", toneMark: 3 },
111
- { character: "\u1EA9", originalCharacter: "\xE2", toneMark: 4 },
112
- { character: "\u1EA5", originalCharacter: "\xE2", toneMark: 5 },
113
- { character: "\u1EAD", originalCharacter: "\xE2", toneMark: 6 },
114
- { character: "e", originalCharacter: "e", toneMark: 1 },
115
- { character: "\xE8", originalCharacter: "e", toneMark: 2 },
116
- { character: "\u1EBD", originalCharacter: "e", toneMark: 3 },
117
- { character: "\u1EBB", originalCharacter: "e", toneMark: 4 },
118
- { character: "\xE9", originalCharacter: "e", toneMark: 5 },
119
- { character: "\u1EB9", originalCharacter: "e", toneMark: 6 },
120
- { character: "\xEA", originalCharacter: "\xEA", toneMark: 1 },
121
- { character: "\u1EC1", originalCharacter: "\xEA", toneMark: 2 },
122
- { character: "\u1EC5", originalCharacter: "\xEA", toneMark: 3 },
123
- { character: "\u1EC3", originalCharacter: "\xEA", toneMark: 4 },
124
- { character: "\u1EBF", originalCharacter: "\xEA", toneMark: 5 },
125
- { character: "\u1EC7", originalCharacter: "\xEA", toneMark: 6 },
126
- { character: "i", originalCharacter: "i", toneMark: 1 },
127
- { character: "\xEC", originalCharacter: "i", toneMark: 2 },
128
- { character: "\u0129", originalCharacter: "i", toneMark: 3 },
129
- { character: "\u1EC9", originalCharacter: "i", toneMark: 4 },
130
- { character: "\xED", originalCharacter: "i", toneMark: 5 },
131
- { character: "\u1ECB", originalCharacter: "i", toneMark: 6 },
132
- { character: "o", originalCharacter: "o", toneMark: 1 },
133
- { character: "\xF2", originalCharacter: "o", toneMark: 2 },
134
- { character: "\xF5", originalCharacter: "o", toneMark: 3 },
135
- { character: "\u1ECF", originalCharacter: "o", toneMark: 4 },
136
- { character: "\xF3", originalCharacter: "o", toneMark: 5 },
137
- { character: "\u1ECD", originalCharacter: "o", toneMark: 6 },
138
- { character: "\xF4", originalCharacter: "\xF4", toneMark: 1 },
139
- { character: "\u1ED3", originalCharacter: "\xF4", toneMark: 2 },
140
- { character: "\u1ED7", originalCharacter: "\xF4", toneMark: 3 },
141
- { character: "\u1ED5", originalCharacter: "\xF4", toneMark: 4 },
142
- { character: "\u1ED1", originalCharacter: "\xF4", toneMark: 5 },
143
- { character: "\u1ED9", originalCharacter: "\xF4", toneMark: 6 },
144
- { character: "\u01A1", originalCharacter: "\u01A1", toneMark: 1 },
145
- { character: "\u1EDD", originalCharacter: "\u01A1", toneMark: 2 },
146
- { character: "\u1EE1", originalCharacter: "\u01A1", toneMark: 3 },
147
- { character: "\u1EDF", originalCharacter: "\u01A1", toneMark: 4 },
148
- { character: "\u1EDB", originalCharacter: "\u01A1", toneMark: 5 },
149
- { character: "\u1EE3", originalCharacter: "\u01A1", toneMark: 6 },
150
- { character: "u", originalCharacter: "u", toneMark: 1 },
151
- { character: "\xF9", originalCharacter: "u", toneMark: 2 },
152
- { character: "\u0169", originalCharacter: "u", toneMark: 3 },
153
- { character: "\u1EE7", originalCharacter: "u", toneMark: 4 },
154
- { character: "\xFA", originalCharacter: "u", toneMark: 5 },
155
- { character: "\u1EE5", originalCharacter: "u", toneMark: 6 },
156
- { character: "\u01B0", originalCharacter: "\u01B0", toneMark: 1 },
157
- { character: "\u1EEB", originalCharacter: "\u01B0", toneMark: 2 },
158
- { character: "\u1EEF", originalCharacter: "\u01B0", toneMark: 3 },
159
- { character: "\u1EED", originalCharacter: "\u01B0", toneMark: 4 },
160
- { character: "\u1EE9", originalCharacter: "\u01B0", toneMark: 5 },
161
- { character: "\u1EF1", originalCharacter: "\u01B0", toneMark: 6 },
162
- { character: "y", originalCharacter: "y", toneMark: 1 },
163
- { character: "\u1EF3", originalCharacter: "y", toneMark: 2 },
164
- { character: "\u1EF9", originalCharacter: "y", toneMark: 3 },
165
- { character: "\u1EF7", originalCharacter: "y", toneMark: 4 },
166
- { character: "\xFD", originalCharacter: "y", toneMark: 5 },
167
- { character: "\u1EF5", originalCharacter: "y", toneMark: 6 }
168
- ];
169
- var transcriptToString = (transcript) => {
170
- if (!transcript.main || !transcript.toneMark) {
171
- throw new Error("Invalid phonetic transcript");
172
- }
173
- return (transcript.initial?.replaceAll("-", "") || "") + (transcript?.medial?.replaceAll("-", "") || "") + transcript.main.replaceAll("-", "") + (transcript.final?.replaceAll("-", "") || "") + transcript.toneMark.toString();
174
- };
175
- var buildPhoneticTranscript = (word) => {
176
- word = word.toLowerCase();
177
- let transcript = {
178
- toneMark: 1
179
- };
180
- toneMarkList.forEach((toneMark) => {
181
- if (toneMark.toneMark !== 1 && word.includes(toneMark.character)) {
182
- transcript.toneMark = toneMark.toneMark;
183
- word = word.replace(toneMark.character, toneMark.originalCharacter);
184
- }
185
- });
186
- initialList.forEach((initial) => {
187
- if (word.startsWith(initial.character) && word.length - initial.character.length > 0) {
188
- transcript.initial = initial.phoneme;
189
- transcript.initialCharacter = initial.character;
190
- word = word.slice(initial.character.length);
191
- }
192
- });
193
- finalList.forEach((final) => {
194
- if (word.endsWith(final.character) && word.length - final.character.length > 0) {
195
- transcript.final = final.phoneme;
196
- transcript.finalCharacter = final.character;
197
- word = word.slice(0, word.length - final.character.length);
198
- }
199
- });
200
- if (word.length > 1 && word !== "oo") {
201
- if (word.startsWith("u") && (transcript.initialCharacter === "q" || ["y", "i", "\xEA", "\u01A1", "\xE2", "i\xEA", "y\xEA", "ia", "ya"].includes(
202
- word.slice(1)
203
- ))) {
204
- transcript.medial = medialList[0].phoneme;
205
- transcript.medialCharacter = medialList[0].character;
206
- word = word.slice(1);
207
- } else if (word.startsWith("o")) {
208
- transcript.medial = medialList[1].phoneme;
209
- transcript.medialCharacter = medialList[1].character;
210
- word = word.slice(1);
211
- }
212
- }
213
- if (word === "o" && transcript.finalCharacter && ["nh", "ng", "ch", "c"].includes(transcript.finalCharacter)) {
214
- const main = mainList.filter((main2) => main2.phoneme === "-\u0254\uE60C-");
215
- transcript.main = main[0].phoneme;
216
- transcript.mainCharacter = main[0].character;
217
- word = word.slice(1);
218
- } else {
219
- mainList.forEach((main) => {
220
- if (word === main.character) {
221
- transcript.main = main.phoneme;
222
- transcript.mainCharacter = main.character;
223
- word = word.slice(main.character.length);
224
- }
225
- });
226
- }
227
- return transcript;
228
- };
229
- var phoneticTranscriptWord = (word) => {
230
- return word.replaceAll(/[^\P{L}]+/gmu, (word2) => {
231
- try {
232
- return transcriptToString(buildPhoneticTranscript(word2));
233
- } catch (e) {
234
- return word2;
235
- }
236
- });
237
- };
238
- var phoneticTranscriptSentence = (sentence) => {
239
- return sentence.split(" ").map((word) => phoneticTranscriptWord(word)).join(" ");
240
- };
241
- export {
242
- phoneticTranscriptSentence,
243
- phoneticTranscriptWord
244
- };
245
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../lib/phonetic_transcript/phonetic_transcript.ts"],"sourcesContent":["export type PhoneticTranscript = {\n main: string;\n mainCharacter: string;\n medial?: string;\n medialCharacter?: string;\n initial?: string;\n initialCharacter?: string;\n final?: string;\n finalCharacter?: string;\n toneMark: number;\n};\n\nexport type Constraint = {\n phoneme: string;\n character: string;\n initial?: Array<string>;\n notInitial?: Array<string>;\n medial?: Array<string>;\n notMedial?: Array<string>;\n main?: Array<string>;\n notMain?: Array<string>;\n final?: Array<string>;\n notFinal?: Array<string>;\n};\n\n// NOTE: Check the character orders, because \"t\" might be matched before \"th\"\nconst initialList = [\n { phoneme: 'b-', character: 'b' },\n { phoneme: 'm-', character: 'm' },\n { phoneme: 'f-', character: 'ph' },\n\n { phoneme: 'v-', character: 'v' },\n\n { phoneme: 'tʼ-', character: 'th' },\n\n { phoneme: 'ʈ-', character: 'tr' },\n\n { phoneme: 't-', character: 't' },\n\n { phoneme: 'd-', character: 'đ' },\n\n { phoneme: 'ɲ-', character: 'nh' },\n\n { phoneme: 'ŋ-', character: 'ngh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ŋ-', character: 'ng' },\n\n { phoneme: 'n-', character: 'n' },\n\n { phoneme: 'z-', character: 'd' },\n { phoneme: 'z-', character: 'gi' },\n\n { phoneme: 'ʐ-', character: 'r' },\n\n { phoneme: 's-', character: 'x' },\n { phoneme: 'ʂ-', character: 's' },\n\n { phoneme: 'l-', character: 'l' },\n\n { phoneme: 'χ-', character: 'kh' },\n\n { phoneme: 'c-', character: 'ch' },\n\n { phoneme: 'k-', character: 'k', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'k-', character: 'q', medial: ['-u-'] },\n { phoneme: 'k-', character: 'c' },\n\n { phoneme: 'ɣ-', character: 'gh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ɣ-', character: 'g' },\n\n { phoneme: 'h-', character: 'h' },\n] satisfies Constraint[];\n\nconst medialList = [\n {\n phoneme: '-u-',\n character: 'u',\n initial: ['k-'],\n main: ['-i-', '-e-', '-ɤ-', '-ɤ-', '-ie-'],\n },\n {\n phoneme: '-u-',\n character: 'o',\n },\n] satisfies Constraint[];\n\nconst mainList = [\n {\n phoneme: '-i-',\n character: 'y',\n medial: ['-u-', 'zero'],\n initial: ['zero'],\n final: ['zero'],\n },\n { phoneme: '-i-', character: 'i' },\n\n { phoneme: '-e-', character: 'ê' },\n\n { phoneme: '-ɛ-', character: 'e' },\n\n { phoneme: '-ɯ-', character: 'ư' },\n\n { phoneme: '-ɤ-', character: 'ơ' },\n\n { phoneme: '-a-', character: 'a' },\n\n { phoneme: '-u-', character: 'u' },\n\n { phoneme: '-o-', character: 'ô' },\n { phoneme: '-o-', character: 'ôô' },\n\n { phoneme: '-ɔ-', character: 'o' },\n { phoneme: '-ɔ-', character: 'oo' },\n\n { phoneme: '-ɤ-', character: 'â' },\n\n { phoneme: '-ɛ-', character: 'a' },\n\n { phoneme: '-ă-', character: 'a', final: ['-w', '-j'] },\n { phoneme: '-ă-', character: 'ă' },\n\n { phoneme: '-ɔ-', character: 'o', final: ['-ŋ', '-k'] },\n\n { phoneme: '-ie-', character: 'iê', notFinal: ['zero'], medial: ['zero'] },\n {\n phoneme: '-ie-',\n character: 'yê',\n notFinal: ['zero'],\n medial: ['-u-'],\n initial: ['zero'],\n },\n { phoneme: '-ie-', character: 'ia', final: ['zero'], medial: ['zero'] },\n { phoneme: '-ie-', character: 'ya', final: ['zero'], medial: ['-u-'] },\n\n { phoneme: '-ɯɤ-', character: 'ươ', notFinal: ['zero'] },\n { phoneme: '-ɯɤ-', character: 'ưa', final: ['zero'] },\n\n { phoneme: '-uo-', character: 'uô', notFinal: ['zero'] },\n { phoneme: '-uo-', character: 'ua', final: ['zero'] },\n] satisfies Constraint[];\n\nconst finalList = [\n { phoneme: '-m', character: 'm' },\n\n { phoneme: '-n', character: 'n' },\n\n { phoneme: '-p', character: 'p' },\n\n { phoneme: '-t', character: 't' },\n\n { phoneme: '-ŋ', character: 'nh', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-ŋ', character: 'ng' },\n\n { phoneme: '-k', character: 'ch', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-k', character: 'c' },\n\n { phoneme: '-w', character: 'o', main: ['-a-', '-ɛ-'] },\n { phoneme: '-w', character: 'u' },\n\n { phoneme: '-j', character: 'y', main: ['-ă-', '-ɤ-'] },\n { phoneme: '-j', character: 'i' },\n] satisfies Constraint[];\n\nconst toneMarkList = [\n { character: 'a', originalCharacter: 'a', toneMark: 1 },\n { character: 'à', originalCharacter: 'a', toneMark: 2 },\n { character: 'ã', originalCharacter: 'a', toneMark: 3 },\n { character: 'ả', originalCharacter: 'a', toneMark: 4 },\n { character: 'á', originalCharacter: 'a', toneMark: 5 },\n { character: 'ạ', originalCharacter: 'a', toneMark: 6 },\n\n { character: 'ă', originalCharacter: 'ă', toneMark: 1 },\n { character: 'ằ', originalCharacter: 'ă', toneMark: 2 },\n { character: 'ẵ', originalCharacter: 'ă', toneMark: 3 },\n { character: 'ẳ', originalCharacter: 'ă', toneMark: 4 },\n { character: 'ắ', originalCharacter: 'ă', toneMark: 5 },\n { character: 'ặ', originalCharacter: 'ă', toneMark: 6 },\n\n { character: 'â', originalCharacter: 'â', toneMark: 1 },\n { character: 'ầ', originalCharacter: 'â', toneMark: 2 },\n { character: 'ẫ', originalCharacter: 'â', toneMark: 3 },\n { character: 'ẩ', originalCharacter: 'â', toneMark: 4 },\n { character: 'ấ', originalCharacter: 'â', toneMark: 5 },\n { character: 'ậ', originalCharacter: 'â', toneMark: 6 },\n\n { character: 'e', originalCharacter: 'e', toneMark: 1 },\n { character: 'è', originalCharacter: 'e', toneMark: 2 },\n { character: 'ẽ', originalCharacter: 'e', toneMark: 3 },\n { character: 'ẻ', originalCharacter: 'e', toneMark: 4 },\n { character: 'é', originalCharacter: 'e', toneMark: 5 },\n { character: 'ẹ', originalCharacter: 'e', toneMark: 6 },\n\n { character: 'ê', originalCharacter: 'ê', toneMark: 1 },\n { character: 'ề', originalCharacter: 'ê', toneMark: 2 },\n { character: 'ễ', originalCharacter: 'ê', toneMark: 3 },\n { character: 'ể', originalCharacter: 'ê', toneMark: 4 },\n { character: 'ế', originalCharacter: 'ê', toneMark: 5 },\n { character: 'ệ', originalCharacter: 'ê', toneMark: 6 },\n\n { character: 'i', originalCharacter: 'i', toneMark: 1 },\n { character: 'ì', originalCharacter: 'i', toneMark: 2 },\n { character: 'ĩ', originalCharacter: 'i', toneMark: 3 },\n { character: 'ỉ', originalCharacter: 'i', toneMark: 4 },\n { character: 'í', originalCharacter: 'i', toneMark: 5 },\n { character: 'ị', originalCharacter: 'i', toneMark: 6 },\n\n { character: 'o', originalCharacter: 'o', toneMark: 1 },\n { character: 'ò', originalCharacter: 'o', toneMark: 2 },\n { character: 'õ', originalCharacter: 'o', toneMark: 3 },\n { character: 'ỏ', originalCharacter: 'o', toneMark: 4 },\n { character: 'ó', originalCharacter: 'o', toneMark: 5 },\n { character: 'ọ', originalCharacter: 'o', toneMark: 6 },\n\n { character: 'ô', originalCharacter: 'ô', toneMark: 1 },\n { character: 'ồ', originalCharacter: 'ô', toneMark: 2 },\n { character: 'ỗ', originalCharacter: 'ô', toneMark: 3 },\n { character: 'ổ', originalCharacter: 'ô', toneMark: 4 },\n { character: 'ố', originalCharacter: 'ô', toneMark: 5 },\n { character: 'ộ', originalCharacter: 'ô', toneMark: 6 },\n\n { character: 'ơ', originalCharacter: 'ơ', toneMark: 1 },\n { character: 'ờ', originalCharacter: 'ơ', toneMark: 2 },\n { character: 'ỡ', originalCharacter: 'ơ', toneMark: 3 },\n { character: 'ở', originalCharacter: 'ơ', toneMark: 4 },\n { character: 'ớ', originalCharacter: 'ơ', toneMark: 5 },\n { character: 'ợ', originalCharacter: 'ơ', toneMark: 6 },\n\n { character: 'u', originalCharacter: 'u', toneMark: 1 },\n { character: 'ù', originalCharacter: 'u', toneMark: 2 },\n { character: 'ũ', originalCharacter: 'u', toneMark: 3 },\n { character: 'ủ', originalCharacter: 'u', toneMark: 4 },\n { character: 'ú', originalCharacter: 'u', toneMark: 5 },\n { character: 'ụ', originalCharacter: 'u', toneMark: 6 },\n\n { character: 'ư', originalCharacter: 'ư', toneMark: 1 },\n { character: 'ừ', originalCharacter: 'ư', toneMark: 2 },\n { character: 'ữ', originalCharacter: 'ư', toneMark: 3 },\n { character: 'ử', originalCharacter: 'ư', toneMark: 4 },\n { character: 'ứ', originalCharacter: 'ư', toneMark: 5 },\n { character: 'ự', originalCharacter: 'ư', toneMark: 6 },\n\n { character: 'y', originalCharacter: 'y', toneMark: 1 },\n { character: 'ỳ', originalCharacter: 'y', toneMark: 2 },\n { character: 'ỹ', originalCharacter: 'y', toneMark: 3 },\n { character: 'ỷ', originalCharacter: 'y', toneMark: 4 },\n { character: 'ý', originalCharacter: 'y', toneMark: 5 },\n { character: 'ỵ', originalCharacter: 'y', toneMark: 6 },\n];\n\nconst transcriptToString = (transcript: PhoneticTranscript): string => {\n if (!transcript.main || !transcript.toneMark) {\n throw new Error('Invalid phonetic transcript');\n }\n\n return (\n (transcript.initial?.replaceAll('-', '') || '') +\n (transcript?.medial?.replaceAll('-', '') || '') +\n transcript.main.replaceAll('-', '') +\n (transcript.final?.replaceAll('-', '') || '') +\n transcript.toneMark.toString()\n );\n};\n\nconst buildPhoneticTranscript = (word: string): PhoneticTranscript => {\n word = word.toLowerCase();\n\n let transcript = {\n toneMark: 1,\n } as PhoneticTranscript;\n\n // NOTE: Check tone mark\n toneMarkList.forEach((toneMark) => {\n if (toneMark.toneMark !== 1 && word.includes(toneMark.character)) {\n transcript.toneMark = toneMark.toneMark;\n\n word = word.replace(toneMark.character, toneMark.originalCharacter);\n }\n });\n\n // NOTE: Check initial\n initialList.forEach((initial) => {\n if (\n word.startsWith(initial.character) &&\n word.length - initial.character.length > 0\n ) {\n transcript.initial = initial.phoneme;\n transcript.initialCharacter = initial.character;\n\n word = word.slice(initial.character.length);\n }\n });\n\n // NOTE: Check final\n finalList.forEach((final) => {\n if (\n word.endsWith(final.character) &&\n word.length - final.character.length > 0\n ) {\n transcript.final = final.phoneme;\n transcript.finalCharacter = final.character;\n\n word = word.slice(0, word.length - final.character.length);\n }\n });\n\n // NOTE: Check medial\n if (word.length > 1 && word !== 'oo') {\n if (\n word.startsWith('u') &&\n (transcript.initialCharacter === 'q' ||\n ['y', 'i', 'ê', 'ơ', 'â', 'iê', 'yê', 'ia', 'ya'].includes(\n word.slice(1),\n ))\n ) {\n transcript.medial = medialList[0]!.phoneme;\n transcript.medialCharacter = medialList[0]!.character;\n\n word = word.slice(1);\n } else if (word.startsWith('o')) {\n transcript.medial = medialList[1]!.phoneme;\n transcript.medialCharacter = medialList[1]!.character;\n\n word = word.slice(1);\n }\n }\n\n if (\n word === 'o' &&\n transcript.finalCharacter &&\n ['nh', 'ng', 'ch', 'c'].includes(transcript.finalCharacter)\n ) {\n const main = mainList.filter((main) => main.phoneme === '-ɔ-');\n\n transcript.main = main[0]!.phoneme;\n transcript.mainCharacter = main[0]!.character;\n\n word = word.slice(1);\n } else {\n // NOTE: Check main\n mainList.forEach((main) => {\n if (word === main.character) {\n transcript.main = main.phoneme;\n transcript.mainCharacter = main.character;\n\n word = word.slice(main.character.length);\n }\n });\n }\n\n return transcript;\n};\n\nexport const phoneticTranscriptWord = (word: string) => {\n return word.replaceAll(/[^\\P{L}]+/gmu, (word) => {\n try {\n return transcriptToString(buildPhoneticTranscript(word));\n } catch (e) {\n return word;\n }\n });\n};\n\nexport const phoneticTranscriptSentence = (sentence: string): string => {\n return sentence\n .split(' ')\n .map((word) => phoneticTranscriptWord(word))\n .join(' ');\n};\n"],"mappings":"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","names":["main","word"]}