@datamoc/mw_games 0.5.2 → 0.5.4

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 (75) hide show
  1. package/README.md +7 -4
  2. package/dist/i18n/EditSession.d.ts +101 -0
  3. package/dist/i18n/EditSession.d.ts.map +1 -0
  4. package/dist/i18n/EditSession.js +150 -0
  5. package/dist/i18n/EditSession.js.map +1 -0
  6. package/dist/i18n/Fluent.js +9 -1
  7. package/dist/i18n/Fluent.js.map +1 -1
  8. package/dist/i18n/FormatSpec.d.ts +75 -0
  9. package/dist/i18n/FormatSpec.d.ts.map +1 -0
  10. package/dist/i18n/FormatSpec.js +303 -0
  11. package/dist/i18n/FormatSpec.js.map +1 -0
  12. package/dist/i18n/SemanticMessage.d.ts +15 -2
  13. package/dist/i18n/SemanticMessage.d.ts.map +1 -1
  14. package/dist/i18n/SemanticMessage.js +16 -2
  15. package/dist/i18n/SemanticMessage.js.map +1 -1
  16. package/dist/i18n/SoundMarkers.d.ts +38 -0
  17. package/dist/i18n/SoundMarkers.d.ts.map +1 -0
  18. package/dist/i18n/SoundMarkers.js +48 -0
  19. package/dist/i18n/SoundMarkers.js.map +1 -0
  20. package/dist/i18n/Validate.d.ts +26 -0
  21. package/dist/i18n/Validate.d.ts.map +1 -1
  22. package/dist/i18n/Validate.js +33 -0
  23. package/dist/i18n/Validate.js.map +1 -1
  24. package/dist/i18n/index.d.ts +34 -2
  25. package/dist/i18n/index.d.ts.map +1 -1
  26. package/dist/i18n/index.js +80 -10
  27. package/dist/i18n/index.js.map +1 -1
  28. package/dist/mw_games.global.js +42 -35
  29. package/dist/two-d/render/AnimatedSprite.d.ts +4 -0
  30. package/dist/two-d/render/AnimatedSprite.d.ts.map +1 -1
  31. package/dist/two-d/render/AnimatedSprite.js +4 -0
  32. package/dist/two-d/render/AnimatedSprite.js.map +1 -1
  33. package/dist/two-d/render/LayeredSprite.d.ts +8 -0
  34. package/dist/two-d/render/LayeredSprite.d.ts.map +1 -1
  35. package/dist/two-d/render/LayeredSprite.js +8 -0
  36. package/dist/two-d/render/LayeredSprite.js.map +1 -1
  37. package/dist/two-d/render/TileMap.d.ts +7 -0
  38. package/dist/two-d/render/TileMap.d.ts.map +1 -1
  39. package/dist/two-d/render/TileMap.js +7 -0
  40. package/dist/two-d/render/TileMap.js.map +1 -1
  41. package/dist/two-d/render/TintedSprite.d.ts +12 -0
  42. package/dist/two-d/render/TintedSprite.d.ts.map +1 -1
  43. package/dist/two-d/render/TintedSprite.js +12 -0
  44. package/dist/two-d/render/TintedSprite.js.map +1 -1
  45. package/dist/two-d/ui/Label.d.ts +14 -0
  46. package/dist/two-d/ui/Label.d.ts.map +1 -1
  47. package/dist/two-d/ui/Label.js +40 -0
  48. package/dist/two-d/ui/Label.js.map +1 -1
  49. package/dist/two-d/ui/MessageBox.d.ts +10 -2
  50. package/dist/two-d/ui/MessageBox.d.ts.map +1 -1
  51. package/dist/two-d/ui/MessageBox.js +30 -9
  52. package/dist/two-d/ui/MessageBox.js.map +1 -1
  53. package/dist/two-d/ui/NinePatch.d.ts +2 -0
  54. package/dist/two-d/ui/NinePatch.d.ts.map +1 -1
  55. package/dist/two-d/ui/NinePatch.js +2 -0
  56. package/dist/two-d/ui/NinePatch.js.map +1 -1
  57. package/dist/two-d/ui/RichLabel.d.ts +56 -0
  58. package/dist/two-d/ui/RichLabel.d.ts.map +1 -0
  59. package/dist/two-d/ui/RichLabel.js +135 -0
  60. package/dist/two-d/ui/RichLabel.js.map +1 -0
  61. package/dist/two-d/ui/index.d.ts +6 -0
  62. package/dist/two-d/ui/index.d.ts.map +1 -1
  63. package/dist/two-d/ui/index.js +3 -0
  64. package/dist/two-d/ui/index.js.map +1 -1
  65. package/dist/two-d/ui/markdown.d.ts +55 -0
  66. package/dist/two-d/ui/markdown.d.ts.map +1 -0
  67. package/dist/two-d/ui/markdown.js +145 -0
  68. package/dist/two-d/ui/markdown.js.map +1 -0
  69. package/dist/two-d/ui/reveal.d.ts +41 -0
  70. package/dist/two-d/ui/reveal.d.ts.map +1 -0
  71. package/dist/two-d/ui/reveal.js +22 -0
  72. package/dist/two-d/ui/reveal.js.map +1 -0
  73. package/dist/version.d.ts +1 -1
  74. package/dist/version.js +1 -1
  75. package/package.json +5 -1
@@ -76,9 +76,34 @@ export interface MessageParams {
76
76
  count?: number;
77
77
  [token: string]: string | number | undefined;
78
78
  }
79
+ /**
80
+ * Resolves a message by key, interpolating `{token}` placeholders from `params`, without
81
+ * any display-text decoration: no `typographic` spacing, no right-to-left isolate wrapping.
82
+ * This is the resolver for catalog values that are not shown to the player - a sound path
83
+ * behind the semantic formatter's `audio` channel, an icon id, a font name - where a
84
+ * narrow no-break space or a bidi control character would corrupt the value rather than
85
+ * improve it.
86
+ *
87
+ * A key present in neither language returns itself, the same as `t()`.
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * import { setBase, tRaw } from '@datamoc/mw_games/i18n';
92
+ *
93
+ * setBase({ locale: 'fr', direction: 'ltr', messages: { 'ui.click.audio': 'sounds/hit!.wav' } });
94
+ * tRaw('ui.click.audio'); // 'sounds/hit!.wav', with no extra spacing before the '!'
95
+ * ```
96
+ */
97
+ export declare function tRaw(key: string, params?: MessageParams): string;
79
98
  /**
80
99
  * Resolves a message by key, interpolating `{token}` placeholders from `params`.
81
100
  *
101
+ * Placeholders also take Python f-string-style fitting-out: `{dmg:03d}`, `{hp:.1%}`,
102
+ * `{name:>12}`, plus `!s`/`!r`/`!a` conversions and `=` debugging (`{dmg=}` renders as
103
+ * `dmg=42`), all resolved through `formatSpec`. A placeholder whose token is missing, or
104
+ * whose spec fits neither the value nor the supported subset, is left untouched rather
105
+ * than throwing or rendering half-formatted.
106
+ *
82
107
  * A key present in neither language returns itself, which is the only case where a raw key
83
108
  * can reach the player - and it means the key was never translated anywhere, not merely
84
109
  * missing from one language.
@@ -126,11 +151,18 @@ export declare function has(key: string): boolean;
126
151
  export declare function reset(): void;
127
152
  export { parseFTL } from './Fluent.ts';
128
153
  export type { FluentOptions } from './Fluent.ts';
154
+ export { parseSoundMarkers, stripSoundMarkers } from './SoundMarkers.ts';
155
+ export type { InlineSoundCue, ParsedSoundText } from './SoundMarkers.ts';
129
156
  export { createCatalogFormatter } from './SemanticMessage.ts';
130
157
  export type { SemanticMessage, EntityTextResolver, GrammaticalEntity, MessageChannel, MessageFormatter } from './SemanticMessage.ts';
131
158
  export { formatNumber, formatDate, formatList } from './Format.ts';
132
- export { diffCatalogKeys, validateCatalog } from './Validate.ts';
133
- export type { CatalogKeyDiff, CatalogIssue } from './Validate.ts';
159
+ import { formatSpec, tokenizeMessage, diffPlaceholders } from './FormatSpec.ts';
160
+ export { formatSpec, tokenizeMessage, diffPlaceholders };
161
+ export type { Placeholder, MessagePart, PlaceholderDiff } from './FormatSpec.ts';
162
+ export { diffCatalogKeys, validateCatalog, validateMessageAudio } from './Validate.ts';
163
+ export type { CatalogKeyDiff, CatalogIssue, AudioIssue } from './Validate.ts';
164
+ export { AUDIO_SUFFIX, copyFromBase, createEditSession, cueKeyFor, deleteTargetKey, isAudioKey, sessionCompleteness, sessionKeys, sessionRow, sessionRows, setTargetSound, setTargetText, swapSession, } from './EditSession.ts';
165
+ export type { EditRow, EditSession, RowFilter } from './EditSession.ts';
134
166
  export { messageText, levenshteinDistance, findSimilarMessages, catalogUsage, catalogCompleteness, pluralFormCoverage, mergeCatalogKeys, } from './Content.ts';
135
167
  export type { SimilarMessagePair, CatalogUsageStats, PluralCoverage } from './Content.ts';
136
168
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,6FAA6F;AAC7F,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAEtC,oFAAoF;AACpF,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;AAEhE,MAAM,WAAW,OAAO;IACvB,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,4FAA4F;IAC5F,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAOD,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAGvD;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,6CAA6C;AAC7C,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED,MAAM,WAAW,aAAa;IAC7B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,CAkB7D;AAoBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAW,GAAG,MAAM,CAYrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAW,GAAG,MAAM,CAIjG;AAiCD,kFAAkF;AAClF,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExC;AAsBD,gFAAgF;AAChF,wBAAgB,KAAK,IAAI,IAAI,CAI5B;AAED,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErI,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EACN,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"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"}
@@ -68,19 +68,48 @@ export function locale() {
68
68
  export function direction() {
69
69
  return (active ?? base)?.direction ?? 'ltr';
70
70
  }
71
+ /**
72
+ * Resolves a message by key, interpolating `{token}` placeholders from `params`, without
73
+ * any display-text decoration: no `typographic` spacing, no right-to-left isolate wrapping.
74
+ * This is the resolver for catalog values that are not shown to the player - a sound path
75
+ * behind the semantic formatter's `audio` channel, an icon id, a font name - where a
76
+ * narrow no-break space or a bidi control character would corrupt the value rather than
77
+ * improve it.
78
+ *
79
+ * A key present in neither language returns itself, the same as `t()`.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * import { setBase, tRaw } from '@datamoc/mw_games/i18n';
84
+ *
85
+ * setBase({ locale: 'fr', direction: 'ltr', messages: { 'ui.click.audio': 'sounds/hit!.wav' } });
86
+ * tRaw('ui.click.audio'); // 'sounds/hit!.wav', with no extra spacing before the '!'
87
+ * ```
88
+ */
89
+ export function tRaw(key, params) {
90
+ const entry = active?.messages[key] ?? base?.messages[key];
91
+ if (entry === undefined)
92
+ return key;
93
+ const text = typeof entry === 'string' ? entry : isFluentMessage(entry) ? entry.format(params) : resolvePlural(entry, params?.count);
94
+ return params ? interpolate(text, params) : text;
95
+ }
71
96
  /**
72
97
  * Resolves a message by key, interpolating `{token}` placeholders from `params`.
73
98
  *
99
+ * Placeholders also take Python f-string-style fitting-out: `{dmg:03d}`, `{hp:.1%}`,
100
+ * `{name:>12}`, plus `!s`/`!r`/`!a` conversions and `=` debugging (`{dmg=}` renders as
101
+ * `dmg=42`), all resolved through `formatSpec`. A placeholder whose token is missing, or
102
+ * whose spec fits neither the value nor the supported subset, is left untouched rather
103
+ * than throwing or rendering half-formatted.
104
+ *
74
105
  * A key present in neither language returns itself, which is the only case where a raw key
75
106
  * can reach the player - and it means the key was never translated anywhere, not merely
76
107
  * missing from one language.
77
108
  */
78
109
  export function t(key, params) {
79
- const entry = active?.messages[key] ?? base?.messages[key];
80
- if (entry === undefined)
110
+ if (!has(key))
81
111
  return key;
82
- const text = typeof entry === 'string' ? entry : isFluentMessage(entry) ? entry.format(params) : resolvePlural(entry, params?.count);
83
- const translated = params ? interpolate(text, params) : text;
112
+ const translated = tRaw(key, params);
84
113
  const resolved = (active ?? base)?.typography === false ? translated : typographic(translated, locale());
85
114
  // Canvas 2D's fillText (what every renderer here draws text through) always resolves
86
115
  // bidi runs against an 'ltr' paragraph base, since nothing sets the context's own
@@ -169,7 +198,9 @@ function frenchSpacing(text) {
169
198
  // `:` is excluded from clock times ("12:30") and URLs ("https://") by requiring a letter,
170
199
  // not a digit, immediately before it - a heuristic good enough for translated dialogue/UI
171
200
  // text, not a general-purpose text parser
172
- result = result.replace(/(\p{L})\s?:/gu, `$1${THIN_NBSP}:`);
201
+ // Keep the colon in an inline `{sound:path}` marker byte-for-byte intact so the
202
+ // presentation layer can still recognize it after locale formatting.
203
+ result = result.replace(/(?<!\{soun)(\p{L})\s?:/gu, `$1${THIN_NBSP}:`);
173
204
  const numbering = new RegExp(`\\b(${FR_NUMBERING_WORDS.join('|')})\\s+(?=\\d)`, 'g');
174
205
  return result.replace(numbering, `$1${NBSP}`);
175
206
  }
@@ -199,10 +230,45 @@ function isFluentMessage(value) {
199
230
  return 'format' in value;
200
231
  }
201
232
  function interpolate(text, params) {
202
- return text.replace(/\{(\w+)\}/g, (whole, token) => {
203
- const value = params[token];
204
- return value === undefined ? whole : String(value);
205
- });
233
+ return tokenizeMessage(text)
234
+ .map((part) => (typeof part === 'string' ? part : resolvePlaceholder(part, params)))
235
+ .join('');
236
+ }
237
+ function resolvePlaceholder(part, params) {
238
+ const value = params[part.token];
239
+ if (value === undefined)
240
+ return part.raw;
241
+ try {
242
+ const converted = part.conv === undefined ? value : convertValue(value, part.conv);
243
+ const formatted = part.spec === undefined ? String(converted) : formatSpec(converted, part.spec, locale());
244
+ if (formatted === undefined)
245
+ return part.raw;
246
+ return part.debug ? `${part.token}=${formatted}` : formatted;
247
+ }
248
+ catch {
249
+ //an absurd width (or anything else down in the formatter that throws) leaves
250
+ //the placeholder readable rather than aborting the whole message
251
+ return part.raw;
252
+ }
253
+ }
254
+ /** `!s`/`!r`/`!a` before any `:spec`, the way CPython applies the conversion first */
255
+ function convertValue(value, conv) {
256
+ if (conv === 's')
257
+ return String(value);
258
+ if (typeof value === 'number') {
259
+ const text = formatSpec(value, '', 'en') ?? String(value);
260
+ return conv === 'a' ? escapeAscii(text) : text;
261
+ }
262
+ const quoted = `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t')}'`;
263
+ return conv === 'a' ? escapeAscii(quoted) : quoted;
264
+ }
265
+ function escapeAscii(text) {
266
+ let out = '';
267
+ for (const char of text) {
268
+ const code = char.codePointAt(0) ?? 0;
269
+ out += code > 127 ? (code > 0xffff ? `\\U${code.toString(16).padStart(8, '0')}` : `\\u${code.toString(16).padStart(4, '0')}`) : char;
270
+ }
271
+ return out;
206
272
  }
207
273
  /** clears both languages, mainly so tests do not leak state into one another */
208
274
  export function reset() {
@@ -211,8 +277,12 @@ export function reset() {
211
277
  activeRules = null;
212
278
  }
213
279
  export { parseFTL } from './Fluent.js';
280
+ export { parseSoundMarkers, stripSoundMarkers } from './SoundMarkers.js';
214
281
  export { createCatalogFormatter } from './SemanticMessage.js';
215
282
  export { formatNumber, formatDate, formatList } from './Format.js';
216
- export { diffCatalogKeys, validateCatalog } from './Validate.js';
283
+ import { formatSpec, tokenizeMessage, diffPlaceholders } from './FormatSpec.js';
284
+ export { formatSpec, tokenizeMessage, diffPlaceholders };
285
+ export { diffCatalogKeys, validateCatalog, validateMessageAudio } from './Validate.js';
286
+ export { AUDIO_SUFFIX, copyFromBase, createEditSession, cueKeyFor, deleteTargetKey, isAudioKey, sessionCompleteness, sessionKeys, sessionRow, sessionRows, setTargetSound, setTargetText, swapSession, } from './EditSession.js';
217
287
  export { messageText, levenshteinDistance, findSimilarMessages, catalogUsage, catalogCompleteness, pluralFormCoverage, mergeCatalogKeys, } from './Content.js';
218
288
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"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"}