@kensio/pinyinjs 1.10.3 → 1.10.5

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.
Files changed (53) hide show
  1. package/README.md +3 -3
  2. package/data/core.entries +20 -16
  3. package/data/core.freq +0 -0
  4. package/data/core.keys +4 -0
  5. package/data/full.counts +0 -0
  6. package/data/full.entries +33 -22
  7. package/data/full.freq +0 -0
  8. package/data/full.keys +11 -0
  9. package/data/manifest.json +12 -12
  10. package/data/standard.entries +29 -28
  11. package/data/standard.freq +0 -0
  12. package/data/standard.keys +13 -12
  13. package/dist/decode/particle-rule.d.ts +8 -10
  14. package/dist/decode/particle-rule.d.ts.map +1 -1
  15. package/dist/decode/particle-rule.js +67 -1
  16. package/dist/decode/particle-rule.js.map +1 -1
  17. package/dist/decode/reading-rules.d.ts +1 -0
  18. package/dist/decode/reading-rules.d.ts.map +1 -1
  19. package/dist/decode/reading-rules.js +3 -0
  20. package/dist/decode/reading-rules.js.map +1 -1
  21. package/dist/decode/wenshu-rule.d.ts +17 -0
  22. package/dist/decode/wenshu-rule.d.ts.map +1 -0
  23. package/dist/decode/wenshu-rule.js +44 -0
  24. package/dist/decode/wenshu-rule.js.map +1 -0
  25. package/dist/dictionary/given-names.d.ts +46 -0
  26. package/dist/dictionary/given-names.d.ts.map +1 -0
  27. package/dist/dictionary/given-names.js +65 -0
  28. package/dist/dictionary/given-names.js.map +1 -0
  29. package/dist/dictionary/merge-types.d.ts +6 -0
  30. package/dist/dictionary/merge-types.d.ts.map +1 -1
  31. package/dist/dictionary/merge-types.js.map +1 -1
  32. package/dist/dictionary/merge.d.ts.map +1 -1
  33. package/dist/dictionary/merge.js +9 -2
  34. package/dist/dictionary/merge.js.map +1 -1
  35. package/dist/dictionary/proper-noun.d.ts +3 -1
  36. package/dist/dictionary/proper-noun.d.ts.map +1 -1
  37. package/dist/dictionary/proper-noun.js +6 -2
  38. package/dist/dictionary/proper-noun.js.map +1 -1
  39. package/dist/dictionary/reference-readings.d.ts.map +1 -1
  40. package/dist/dictionary/reference-readings.js +24 -0
  41. package/dist/dictionary/reference-readings.js.map +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +1 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/orthography/capitals.d.ts +5 -0
  47. package/dist/orthography/capitals.d.ts.map +1 -1
  48. package/dist/orthography/capitals.js +20 -1
  49. package/dist/orthography/capitals.js.map +1 -1
  50. package/dist/orthography/punctuation.d.ts.map +1 -1
  51. package/dist/orthography/punctuation.js +45 -4
  52. package/dist/orthography/punctuation.js.map +1 -1
  53. package/package.json +1 -1
@@ -20,6 +20,25 @@ const LATIN_PUNCTUATION = new Map([
20
20
  * Marks that take a space after them but not before.
21
21
  */
22
22
  const SPACE_AFTER = new Set([".", ",", ";", ":", "?", "!"]);
23
+ /**
24
+ * Marks that close something, which take the space of a mark just inside them.
25
+ *
26
+ * 你好。” ends with the full stop inside the quotation, so `nǐ hǎo.”` keeps
27
+ * the two together, and whatever follows is spaced from the closing mark
28
+ * instead: “我会回来,”汤姆说 is `“Wǒ huì huílai,” Tāngmǔ shuō`.
29
+ */
30
+ const CLOSING = new Set([
31
+ "”",
32
+ "’",
33
+ "」",
34
+ "』",
35
+ ")",
36
+ ")",
37
+ "》",
38
+ "〉",
39
+ "】",
40
+ "]",
41
+ ]);
23
42
  /**
24
43
  * Rewrite Chinese punctuation in the Latin script.
25
44
  *
@@ -41,17 +60,39 @@ export function toLatinPunctuation(text) {
41
60
  export function toLatinPunctuationParts(parts) {
42
61
  return rewriteParts(parts, latinCharacters);
43
62
  }
63
+ /**
64
+ * Whether a space belongs after the character at a position, given what
65
+ * follows it.
66
+ */
67
+ function isSpacedBefore(next) {
68
+ return next !== undefined && next !== " " && !CLOSING.has(next);
69
+ }
70
+ /**
71
+ * Whether the closing marks ending at a position close straight after a
72
+ * full-width mark that takes a space.
73
+ */
74
+ function closesSpacedMark(characters, at) {
75
+ let before = at - 1;
76
+ while (CLOSING.has(characters[before] ?? "")) {
77
+ before--;
78
+ }
79
+ const latin = LATIN_PUNCTUATION.get(characters[before] ?? "");
80
+ return latin !== undefined && SPACE_AFTER.has(latin);
81
+ }
44
82
  /**
45
83
  * Rewrite each Chinese mark in the Latin script, character by character.
46
84
  */
47
85
  const latinCharacters = (characters) => characters.map((character, at) => {
86
+ const next = characters[at + 1];
87
+ if (CLOSING.has(character)) {
88
+ return closesSpacedMark(characters, at) && isSpacedBefore(next)
89
+ ? `${character} `
90
+ : character;
91
+ }
48
92
  const latin = LATIN_PUNCTUATION.get(character);
49
93
  if (latin === undefined) {
50
94
  return character;
51
95
  }
52
- const next = characters[at + 1];
53
- return SPACE_AFTER.has(latin) && next !== undefined && next !== " "
54
- ? `${latin} `
55
- : latin;
96
+ return SPACE_AFTER.has(latin) && isSpacedBefore(next) ? `${latin} ` : latin;
56
97
  });
57
98
  //# sourceMappingURL=punctuation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"punctuation.js","sourceRoot":"","sources":["../../src/orthography/punctuation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAE,MAAM,YAAY,CAAC;AAWlE;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAiB;IAChD,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;CACX,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,2EAA2E;IAC3E,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAwB;IAExB,OAAO,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,eAAe,GAAsB,CAAC,UAAU,EAAE,EAAE,CACxD,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE;IAC/B,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChC,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,GAAG;QACjE,CAAC,CAAC,GAAG,KAAK,GAAG;QACb,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"punctuation.js","sourceRoot":"","sources":["../../src/orthography/punctuation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAE,MAAM,YAAY,CAAC;AAWlE;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAiB;IAChD,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;CACX,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IACtB,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,2EAA2E;IAC3E,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAwB;IAExB,OAAO,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAwB;IAC9C,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,UAA6B,EAAE,EAAU;IACjE,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7C,MAAM,EAAE,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,OAAO,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,eAAe,GAAsB,CAAC,UAAU,EAAE,EAAE,CACxD,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE;IAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;YAC7D,CAAC,CAAC,GAAG,SAAS,GAAG;YACjB,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9E,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kensio/pinyinjs",
3
- "version": "1.10.3",
3
+ "version": "1.10.5",
4
4
  "description": "Chinese hanzi to pinyin conversion",
5
5
  "repository": "https://github.com/KensioSoftware/pinyinjs",
6
6
  "homepage": "https://pinyinjs.dev",