@sharpee/lang-en-us 1.5.0 → 2.1.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/actions/about.d.ts +1 -0
- package/actions/about.d.ts.map +1 -1
- package/actions/about.js +15 -8
- package/actions/about.js.map +1 -1
- package/actions/again.d.ts.map +1 -1
- package/actions/again.js.map +1 -1
- package/actions/answering.d.ts.map +1 -1
- package/actions/answering.js.map +1 -1
- package/actions/asking.d.ts.map +1 -1
- package/actions/asking.js +14 -14
- package/actions/asking.js.map +1 -1
- package/actions/attacking.d.ts.map +1 -1
- package/actions/attacking.js +51 -51
- package/actions/attacking.js.map +1 -1
- package/actions/climbing.d.ts.map +1 -1
- package/actions/climbing.js +4 -4
- package/actions/climbing.js.map +1 -1
- package/actions/closing.d.ts.map +1 -1
- package/actions/closing.js +5 -5
- package/actions/closing.js.map +1 -1
- package/actions/drinking.d.ts.map +1 -1
- package/actions/drinking.js +20 -20
- package/actions/drinking.js.map +1 -1
- package/actions/dropping.d.ts.map +1 -1
- package/actions/dropping.js +3 -3
- package/actions/dropping.js.map +1 -1
- package/actions/eating.d.ts.map +1 -1
- package/actions/eating.js +20 -20
- package/actions/eating.js.map +1 -1
- package/actions/entering.d.ts.map +1 -1
- package/actions/entering.js +10 -10
- package/actions/entering.js.map +1 -1
- package/actions/examining.d.ts.map +1 -1
- package/actions/examining.js +28 -23
- package/actions/examining.js.map +1 -1
- package/actions/exiting.d.ts.map +1 -1
- package/actions/exiting.js +4 -4
- package/actions/exiting.js.map +1 -1
- package/actions/giving.d.ts.map +1 -1
- package/actions/giving.js +12 -12
- package/actions/giving.js.map +1 -1
- package/actions/going.d.ts.map +1 -1
- package/actions/going.js +7 -7
- package/actions/going.js.map +1 -1
- package/actions/help.d.ts +3 -3
- package/actions/help.d.ts.map +1 -1
- package/actions/help.js +9 -7
- package/actions/help.js.map +1 -1
- package/actions/hiding.d.ts.map +1 -1
- package/actions/hiding.js.map +1 -1
- package/actions/index.d.ts +5 -3
- package/actions/index.d.ts.map +1 -1
- package/actions/index.js.map +1 -1
- package/actions/inserting.d.ts.map +1 -1
- package/actions/inserting.js +8 -8
- package/actions/inserting.js.map +1 -1
- package/actions/inventory.d.ts.map +1 -1
- package/actions/inventory.js.map +1 -1
- package/actions/listening.d.ts.map +1 -1
- package/actions/listening.js +7 -7
- package/actions/listening.js.map +1 -1
- package/actions/locking.d.ts.map +1 -1
- package/actions/locking.js +8 -8
- package/actions/locking.js.map +1 -1
- package/actions/looking.d.ts.map +1 -1
- package/actions/looking.js +5 -5
- package/actions/looking.js.map +1 -1
- package/actions/lowering.d.ts.map +1 -1
- package/actions/lowering.js +2 -2
- package/actions/lowering.js.map +1 -1
- package/actions/opening.d.ts.map +1 -1
- package/actions/opening.js +7 -7
- package/actions/opening.js.map +1 -1
- package/actions/pulling.d.ts.map +1 -1
- package/actions/pulling.js +19 -19
- package/actions/pulling.js.map +1 -1
- package/actions/pushing.d.ts.map +1 -1
- package/actions/pushing.js +14 -14
- package/actions/pushing.js.map +1 -1
- package/actions/putting.d.ts.map +1 -1
- package/actions/putting.js +12 -12
- package/actions/putting.js.map +1 -1
- package/actions/quitting.d.ts.map +1 -1
- package/actions/quitting.js.map +1 -1
- package/actions/raising.d.ts.map +1 -1
- package/actions/raising.js +2 -2
- package/actions/raising.js.map +1 -1
- package/actions/reading.d.ts.map +1 -1
- package/actions/reading.js +10 -8
- package/actions/reading.js.map +1 -1
- package/actions/removing.d.ts.map +1 -1
- package/actions/removing.js +8 -8
- package/actions/removing.js.map +1 -1
- package/actions/restoring.d.ts.map +1 -1
- package/actions/restoring.js +6 -6
- package/actions/restoring.js.map +1 -1
- package/actions/saving.d.ts.map +1 -1
- package/actions/saving.js +6 -6
- package/actions/saving.js.map +1 -1
- package/actions/scoring.d.ts.map +1 -1
- package/actions/scoring.js.map +1 -1
- package/actions/searching.d.ts.map +1 -1
- package/actions/searching.js +7 -7
- package/actions/searching.js.map +1 -1
- package/actions/showing.d.ts.map +1 -1
- package/actions/showing.js +11 -11
- package/actions/showing.js.map +1 -1
- package/actions/sleeping.d.ts.map +1 -1
- package/actions/sleeping.js.map +1 -1
- package/actions/smelling.d.ts.map +1 -1
- package/actions/smelling.js +10 -10
- package/actions/smelling.js.map +1 -1
- package/actions/switching-off.d.ts.map +1 -1
- package/actions/switching-off.js +12 -12
- package/actions/switching-off.js.map +1 -1
- package/actions/switching-on.d.ts.map +1 -1
- package/actions/switching-on.js +12 -12
- package/actions/switching-on.js.map +1 -1
- package/actions/taking-off.d.ts.map +1 -1
- package/actions/taking-off.js +4 -4
- package/actions/taking-off.js.map +1 -1
- package/actions/taking.d.ts +1 -0
- package/actions/taking.d.ts.map +1 -1
- package/actions/taking.js +7 -5
- package/actions/taking.js.map +1 -1
- package/actions/talking.d.ts.map +1 -1
- package/actions/talking.js +15 -15
- package/actions/talking.js.map +1 -1
- package/actions/telling.d.ts.map +1 -1
- package/actions/telling.js +13 -13
- package/actions/telling.js.map +1 -1
- package/actions/throwing.d.ts.map +1 -1
- package/actions/throwing.js +21 -21
- package/actions/throwing.js.map +1 -1
- package/actions/touching.d.ts.map +1 -1
- package/actions/touching.js +20 -20
- package/actions/touching.js.map +1 -1
- package/actions/turning.d.ts.map +1 -1
- package/actions/turning.js +24 -24
- package/actions/turning.js.map +1 -1
- package/actions/undoing.d.ts.map +1 -1
- package/actions/undoing.js.map +1 -1
- package/actions/unlocking.d.ts.map +1 -1
- package/actions/unlocking.js +8 -8
- package/actions/unlocking.js.map +1 -1
- package/actions/version.d.ts.map +1 -1
- package/actions/version.js +3 -3
- package/actions/version.js.map +1 -1
- package/actions/waiting.d.ts.map +1 -1
- package/actions/waiting.js +1 -1
- package/actions/waiting.js.map +1 -1
- package/actions/wearing.d.ts.map +1 -1
- package/actions/wearing.js +5 -5
- package/actions/wearing.js.map +1 -1
- package/assembler/english-assembler.d.ts +66 -0
- package/assembler/english-assembler.d.ts.map +1 -0
- package/assembler/english-assembler.js +806 -0
- package/assembler/english-assembler.js.map +1 -0
- package/assembler/errors.d.ts +23 -0
- package/assembler/errors.d.ts.map +1 -0
- package/assembler/errors.js +35 -0
- package/assembler/errors.js.map +1 -0
- package/assembler/index.d.ts +10 -0
- package/assembler/index.d.ts.map +1 -0
- package/assembler/index.js +17 -0
- package/assembler/index.js.map +1 -0
- package/data/events.d.ts.map +1 -1
- package/data/events.js +11 -11
- package/data/events.js.map +1 -1
- package/data/messages.d.ts.map +1 -1
- package/data/messages.js +1 -1
- package/data/messages.js.map +1 -1
- package/data/verbs.d.ts.map +1 -1
- package/data/verbs.js.map +1 -1
- package/data/words.d.ts.map +1 -1
- package/data/words.js.map +1 -1
- package/grammar.d.ts.map +1 -1
- package/grammar.js.map +1 -1
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +4 -1
- package/index.js.map +1 -1
- package/language-provider.d.ts +50 -24
- package/language-provider.d.ts.map +1 -1
- package/language-provider.js +96 -40
- package/language-provider.js.map +1 -1
- package/npc/conversation.d.ts +5 -0
- package/npc/conversation.d.ts.map +1 -1
- package/npc/conversation.js +24 -19
- package/npc/conversation.js.map +1 -1
- package/npc/index.d.ts.map +1 -1
- package/npc/index.js.map +1 -1
- package/npc/influence.d.ts.map +1 -1
- package/npc/influence.js +4 -4
- package/npc/influence.js.map +1 -1
- package/npc/npc.d.ts +6 -0
- package/npc/npc.d.ts.map +1 -1
- package/npc/npc.js +39 -33
- package/npc/npc.js.map +1 -1
- package/npc/propagation.d.ts.map +1 -1
- package/npc/propagation.js +6 -6
- package/npc/propagation.js.map +1 -1
- package/number-words.d.ts +18 -0
- package/number-words.d.ts.map +1 -1
- package/number-words.js +77 -0
- package/number-words.js.map +1 -1
- package/package.json +3 -3
- package/parser/index.d.ts +8 -0
- package/parser/index.d.ts.map +1 -0
- package/parser/index.js +13 -0
- package/parser/index.js.map +1 -0
- package/parser/parse-phrase-template.d.ts +62 -0
- package/parser/parse-phrase-template.d.ts.map +1 -0
- package/parser/parse-phrase-template.js +384 -0
- package/parser/parse-phrase-template.js.map +1 -0
- package/perspective/index.d.ts.map +1 -1
- package/perspective/index.js.map +1 -1
- package/perspective/placeholder-resolver.d.ts +1 -1
- package/perspective/placeholder-resolver.d.ts.map +1 -1
- package/perspective/placeholder-resolver.js +12 -1
- package/perspective/placeholder-resolver.js.map +1 -1
- package/platform-messages.d.ts +26 -0
- package/platform-messages.d.ts.map +1 -0
- package/platform-messages.js +31 -0
- package/platform-messages.js.map +1 -0
- package/pluralize.d.ts.map +1 -1
- package/pluralize.js.map +1 -1
- package/sound-messages.d.ts +8 -8
- package/sound-messages.d.ts.map +1 -1
- package/sound-messages.js +8 -8
- package/sound-messages.js.map +1 -1
- package/formatters/article.d.ts +0 -41
- package/formatters/article.d.ts.map +0 -1
- package/formatters/article.js +0 -143
- package/formatters/article.js.map +0 -1
- package/formatters/index.d.ts +0 -19
- package/formatters/index.d.ts.map +0 -1
- package/formatters/index.js +0 -42
- package/formatters/index.js.map +0 -1
- package/formatters/list.d.ts +0 -56
- package/formatters/list.d.ts.map +0 -1
- package/formatters/list.js +0 -178
- package/formatters/list.js.map +0 -1
- package/formatters/registry.d.ts +0 -49
- package/formatters/registry.d.ts.map +0 -1
- package/formatters/registry.js +0 -136
- package/formatters/registry.js.map +0 -1
- package/formatters/text.d.ts +0 -33
- package/formatters/text.d.ts.map +0 -1
- package/formatters/text.js +0 -80
- package/formatters/text.js.map +0 -1
- package/formatters/types.d.ts +0 -52
- package/formatters/types.d.ts.map +0 -1
- package/formatters/types.js +0 -14
- package/formatters/types.js.map +0 -1
- package/formatters/verb.d.ts +0 -30
- package/formatters/verb.d.ts.map +0 -1
- package/formatters/verb.js +0 -59
- package/formatters/verb.js.map +0 -1
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file parsePhraseTemplate — the phrase-tree template parser (ADR-192 §5).
|
|
4
|
+
*
|
|
5
|
+
* Purpose: parse an author template string into a `Phrase` tree, binding each
|
|
6
|
+
* placeholder to a producer/param value. Replaces `parsePlaceholder` and the
|
|
7
|
+
* `:`-chain formatter grammar. Placeholders are producer references, never
|
|
8
|
+
* formatter chains.
|
|
9
|
+
*
|
|
10
|
+
* Public interface: `parsePhraseTemplate(template, params)` and
|
|
11
|
+
* `PhraseParseError`.
|
|
12
|
+
*
|
|
13
|
+
* Owner context: `@sharpee/lang-en-us`. The grammar is English-locale authoring
|
|
14
|
+
* surface; the produced `Phrase` tree is language-neutral.
|
|
15
|
+
*
|
|
16
|
+
* Grammar (ADR-192 §5):
|
|
17
|
+
* - `{item}` / `{the item}` / `{a item}` / `{an item}` / `{some item}` /
|
|
18
|
+
* `{capitalize the item}` → `NounPhrase` (last bare token = param name,
|
|
19
|
+
* leading bare tokens = reserved hints).
|
|
20
|
+
* - `{verb:is target}` / `{verb:has target}` / `{verb:opens door}` → a `Verb`
|
|
21
|
+
* atom (ADR-199): leading bare token is the lemma, last bare token is the
|
|
22
|
+
* subject param to agree with. The subject must be a bound param.
|
|
23
|
+
* - `{verbatim:name}` → a `Verbatim` atom (ADR-200): the param's value rendered
|
|
24
|
+
* as opaque, whitespace-exempt text. The param must be bound.
|
|
25
|
+
* - `{number:coins}` / `{number:coins words}` / `{number:floor ordinal}` → a
|
|
26
|
+
* `Numeral` atom (ADR-198): the numeric param, optional format. Must be bound.
|
|
27
|
+
* - `{pronoun:subject}` / `{pronoun:object}` / `{pronoun:possessive}` → a `Pronoun`
|
|
28
|
+
* atom (ADR-197): a grammatical case; the referent is the last-mentioned entity.
|
|
29
|
+
* - `{contents:box}` → a `Contents` atom (ADR-194): the container's live contents
|
|
30
|
+
* as a grouped list, read at realize time. The container must be bound.
|
|
31
|
+
* - `{slot:here}` / `{slot:detail clause}` / `{slot:detail clause or}` → a `Slot`
|
|
32
|
+
* combinator (ADR-195): the first bare token is the contribution channel key;
|
|
33
|
+
* optional trailing hints set `mode` (`sentence` default | `clause`) and the
|
|
34
|
+
* `clause` conjunction (`and` default | `or`). The key need NOT be a bound param
|
|
35
|
+
* — an unfilled slot is valid (AC-7); a keyless `{slot:}` is a parse error (AC-9).
|
|
36
|
+
* - No `:`-chain, `?`, `|`, `#`. A `:` head whose prefix is not a known kind,
|
|
37
|
+
* an unknown leading hint, or an unbound param all raise `PhraseParseError`
|
|
38
|
+
* AT PARSE TIME (never a silent `Empty` at realize time). (AC-8, AC-11)
|
|
39
|
+
*/
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.PhraseParseError = void 0;
|
|
42
|
+
exports.parsePhraseTemplate = parsePhraseTemplate;
|
|
43
|
+
/** Leading hint → the article it selects on a `NounPhrase`. */
|
|
44
|
+
const ARTICLE_HINTS = {
|
|
45
|
+
the: 'definite',
|
|
46
|
+
a: 'indefinite',
|
|
47
|
+
an: 'indefinite',
|
|
48
|
+
some: 'some',
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Recognized `kind:` heads → the reserved (stub) `Phrase` kind they route to.
|
|
52
|
+
* Empty for now: `slot` parses through `parseSlot`; the remaining stubs
|
|
53
|
+
* (`optional` / `choice`, ADR-196) populate this when their parse rules land.
|
|
54
|
+
*/
|
|
55
|
+
const KIND_PREFIXES = {};
|
|
56
|
+
/** Recognized `{number:param format?}` formats (ADR-198). */
|
|
57
|
+
const NUMERAL_FORMATS = new Set(['digits', 'words', 'ordinal']);
|
|
58
|
+
/** Recognized `{pronoun:case}` cases (ADR-197). */
|
|
59
|
+
const PRONOUN_CASES = new Set(['subject', 'object', 'possessive', 'possessive-pronoun', 'reflexive']);
|
|
60
|
+
/**
|
|
61
|
+
* Raised when a template cannot be parsed: a legacy `:`-chain, an unknown
|
|
62
|
+
* kind-prefix, an unknown leading hint, or a reference to an unbound param.
|
|
63
|
+
* Carries the offending token and the full template so the author sees both.
|
|
64
|
+
*/
|
|
65
|
+
class PhraseParseError extends Error {
|
|
66
|
+
offendingToken;
|
|
67
|
+
template;
|
|
68
|
+
reason;
|
|
69
|
+
constructor(offendingToken, template, reason) {
|
|
70
|
+
super(`Cannot parse template "${template}": ${reason} (at "${offendingToken}").`);
|
|
71
|
+
this.name = 'PhraseParseError';
|
|
72
|
+
this.offendingToken = offendingToken;
|
|
73
|
+
this.template = template;
|
|
74
|
+
this.reason = reason;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.PhraseParseError = PhraseParseError;
|
|
78
|
+
/** True if a param value is already a phrase (rather than a scalar to wrap). */
|
|
79
|
+
function isPhraseValue(value) {
|
|
80
|
+
return typeof value === 'object' && value !== null && typeof value.kind === 'string';
|
|
81
|
+
}
|
|
82
|
+
/** Build the phrase for a NounPhrase-default placeholder from its bound value. */
|
|
83
|
+
function bindNounPhrase(value, articleType, capitalize) {
|
|
84
|
+
if (isPhraseValue(value)) {
|
|
85
|
+
// A producer already supplied a phrase. Hints apply only to noun phrases;
|
|
86
|
+
// other kinds (e.g. a bound PhraseList) pass through untouched.
|
|
87
|
+
if (value.kind === 'noun') {
|
|
88
|
+
const np = { ...value };
|
|
89
|
+
if (articleType !== undefined)
|
|
90
|
+
np.articleType = articleType;
|
|
91
|
+
if (capitalize)
|
|
92
|
+
np.capitalize = true;
|
|
93
|
+
return np;
|
|
94
|
+
}
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
// Numbers/booleans with no hint render as literal text (not "a 42").
|
|
98
|
+
if ((typeof value === 'number' || typeof value === 'boolean') && articleType === undefined && !capitalize) {
|
|
99
|
+
return { kind: 'literal', text: String(value) };
|
|
100
|
+
}
|
|
101
|
+
// Strings (and hinted scalars) become the unprefixed NounPhrase default.
|
|
102
|
+
const np = {
|
|
103
|
+
kind: 'noun',
|
|
104
|
+
name: String(value),
|
|
105
|
+
number: 'singular',
|
|
106
|
+
articleType: articleType ?? 'indefinite',
|
|
107
|
+
};
|
|
108
|
+
if (capitalize)
|
|
109
|
+
np.capitalize = true;
|
|
110
|
+
return np;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Parse a `{verb:lemma subject}` head into a `Verb` atom (ADR-199 §2). Leading
|
|
114
|
+
* bare token(s) are the lemma; the last bare token is the subject param to agree
|
|
115
|
+
* with. The subject must be bound — an unbound subject is an authoring error and
|
|
116
|
+
* fails here at parse time (AC-11), matching the NounPhrase unbound-param rule.
|
|
117
|
+
*/
|
|
118
|
+
function parseVerb(inner, template, params) {
|
|
119
|
+
const rest = inner.slice(inner.indexOf(':') + 1).trim();
|
|
120
|
+
const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
|
|
121
|
+
if (tokens.length < 2) {
|
|
122
|
+
throw new PhraseParseError(inner, template, 'a verb needs a lemma and a subject, e.g. {verb:is target}');
|
|
123
|
+
}
|
|
124
|
+
const subjectRef = tokens.pop();
|
|
125
|
+
const lemma = tokens.join(' ');
|
|
126
|
+
if (!(subjectRef in params)) {
|
|
127
|
+
throw new PhraseParseError(subjectRef, template, `verb subject '${subjectRef}' is not bound`);
|
|
128
|
+
}
|
|
129
|
+
return { kind: 'verb', lemma, subjectRef };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Parse a `{verbatim:x}` head into a `Verbatim` atom (ADR-200): the last bare
|
|
133
|
+
* token is the param whose value is rendered as opaque text. The param must be
|
|
134
|
+
* bound — an unbound param fails at parse time (ADR-192 AC-11).
|
|
135
|
+
*/
|
|
136
|
+
function parseVerbatim(inner, template, params) {
|
|
137
|
+
const rest = inner.slice(inner.indexOf(':') + 1).trim();
|
|
138
|
+
const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
|
|
139
|
+
if (tokens.length !== 1) {
|
|
140
|
+
throw new PhraseParseError(inner, template, 'verbatim takes a single param, e.g. {verbatim:name}');
|
|
141
|
+
}
|
|
142
|
+
const name = tokens[0];
|
|
143
|
+
if (!(name in params)) {
|
|
144
|
+
throw new PhraseParseError(name, template, `verbatim param '${name}' is not bound`);
|
|
145
|
+
}
|
|
146
|
+
return { kind: 'verbatim', text: String(params[name]) };
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Parse a `{number:param format?}` head into a `Numeral` atom (ADR-198). The
|
|
150
|
+
* first bare token is the numeric param; an optional trailing token is the format
|
|
151
|
+
* (`digits` default | `words` | `ordinal`). The param must be bound (AC-11).
|
|
152
|
+
*/
|
|
153
|
+
function parseNumber(inner, template, params) {
|
|
154
|
+
const rest = inner.slice(inner.indexOf(':') + 1).trim();
|
|
155
|
+
const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
|
|
156
|
+
if (tokens.length < 1 || tokens.length > 2) {
|
|
157
|
+
throw new PhraseParseError(inner, template, 'a number takes a param and an optional format, e.g. {number:coins words}');
|
|
158
|
+
}
|
|
159
|
+
const name = tokens[0];
|
|
160
|
+
const format = tokens[1] ?? 'digits';
|
|
161
|
+
if (!NUMERAL_FORMATS.has(format)) {
|
|
162
|
+
throw new PhraseParseError(format, template, `'${format}' is not a number format (digits | words | ordinal)`);
|
|
163
|
+
}
|
|
164
|
+
if (!(name in params)) {
|
|
165
|
+
throw new PhraseParseError(name, template, `number param '${name}' is not bound`);
|
|
166
|
+
}
|
|
167
|
+
return { kind: 'number', value: Number(params[name]), format: format };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Parse a `{pronoun:case}` head into a `Pronoun` atom (ADR-197). The referent is
|
|
171
|
+
* the last-mentioned entity (resolved at realize time); the single token is the
|
|
172
|
+
* grammatical case. An unknown case fails at parse time (AC-11).
|
|
173
|
+
*
|
|
174
|
+
* `capitalize` (ADR-201 §2, from a `{capitalize pronoun:…}` head) sets the S40
|
|
175
|
+
* explicit override so the pronoun caps regardless of position.
|
|
176
|
+
*/
|
|
177
|
+
function parsePronoun(inner, template, capitalize = false) {
|
|
178
|
+
const rest = inner.slice(inner.indexOf(':') + 1).trim();
|
|
179
|
+
const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
|
|
180
|
+
if (tokens.length !== 1 || !PRONOUN_CASES.has(tokens[0])) {
|
|
181
|
+
throw new PhraseParseError(inner, template, 'a pronoun takes one case: {pronoun:subject|object|possessive|possessive-pronoun|reflexive}');
|
|
182
|
+
}
|
|
183
|
+
const cased = tokens[0];
|
|
184
|
+
return capitalize ? { kind: 'pronoun', case: cased, capitalize: true } : { kind: 'pronoun', case: cased };
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Parse a `{quote:utterance [terminal]}` head into a `Quote` atom (ADR-201 §5).
|
|
188
|
+
* The first bare token is the utterance param (must be bound); an optional second
|
|
189
|
+
* token sets the terminal placed inside the closing quote (`.` default | `?` | `!`).
|
|
190
|
+
* A bound `Phrase` value is used as the utterance directly; a scalar becomes a
|
|
191
|
+
* `Literal` (quoted speech, not an article-bearing noun phrase). An unbound param
|
|
192
|
+
* or a missing utterance fails at parse time (AC-10).
|
|
193
|
+
*/
|
|
194
|
+
function parseQuote(inner, template, params) {
|
|
195
|
+
const rest = inner.slice(inner.indexOf(':') + 1).trim();
|
|
196
|
+
const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
|
|
197
|
+
if (tokens.length < 1) {
|
|
198
|
+
throw new PhraseParseError(inner, template, 'a quote needs an utterance param, e.g. {quote:line}');
|
|
199
|
+
}
|
|
200
|
+
if (tokens.length > 2) {
|
|
201
|
+
throw new PhraseParseError(inner, template, 'a quote takes an utterance param and an optional terminal, e.g. {quote:line !}');
|
|
202
|
+
}
|
|
203
|
+
const name = tokens[0];
|
|
204
|
+
const terminal = tokens[1];
|
|
205
|
+
if (terminal !== undefined && terminal !== '.' && terminal !== '?' && terminal !== '!') {
|
|
206
|
+
throw new PhraseParseError(terminal, template, `'${terminal}' is not a terminal (. | ? | !)`);
|
|
207
|
+
}
|
|
208
|
+
if (!(name in params)) {
|
|
209
|
+
throw new PhraseParseError(name, template, `quote utterance '${name}' is not bound`);
|
|
210
|
+
}
|
|
211
|
+
const value = params[name];
|
|
212
|
+
const utterance = isPhraseValue(value) ? value : { kind: 'literal', text: String(value) };
|
|
213
|
+
return terminal ? { kind: 'quote', utterance, terminal } : { kind: 'quote', utterance };
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Parse a `{contents:container [or]}` head into a `Contents` atom (ADR-194). The
|
|
217
|
+
* first bare token is the container param (must be bound); an optional `or`/`and`
|
|
218
|
+
* sets the conjunction (default `and`). The contents are read at realize time.
|
|
219
|
+
*/
|
|
220
|
+
function parseContents(inner, template, params) {
|
|
221
|
+
const rest = inner.slice(inner.indexOf(':') + 1).trim();
|
|
222
|
+
const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
|
|
223
|
+
if (tokens.length < 1 || tokens.length > 2) {
|
|
224
|
+
throw new PhraseParseError(inner, template, 'contents takes a container and an optional conjunction, e.g. {contents:box}');
|
|
225
|
+
}
|
|
226
|
+
const name = tokens[0];
|
|
227
|
+
const conj = tokens[1];
|
|
228
|
+
if (conj !== undefined && conj !== 'and' && conj !== 'or') {
|
|
229
|
+
throw new PhraseParseError(conj, template, `'${conj}' is not a conjunction (and | or)`);
|
|
230
|
+
}
|
|
231
|
+
if (!(name in params)) {
|
|
232
|
+
throw new PhraseParseError(name, template, `contents container '${name}' is not bound`);
|
|
233
|
+
}
|
|
234
|
+
return conj === 'or'
|
|
235
|
+
? { kind: 'contents', containerRef: name, conj: 'or' }
|
|
236
|
+
: { kind: 'contents', containerRef: name };
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Parse a `{slot:key [mode] [conj]}` head into a `Slot` combinator (ADR-195 §5).
|
|
240
|
+
* The first bare token is the contribution channel key; optional trailing hints
|
|
241
|
+
* set `mode` (`sentence` | `clause`) and the `clause` conjunction (`and` | `or`).
|
|
242
|
+
*
|
|
243
|
+
* The key is a channel name, NOT a param binding — an unfilled slot is valid and
|
|
244
|
+
* renders to nothing (AC-7), so there is no `in params` check. A keyless `{slot:}`
|
|
245
|
+
* is an authoring error and fails here at parse time (AC-9).
|
|
246
|
+
*/
|
|
247
|
+
function parseSlot(inner, template) {
|
|
248
|
+
const rest = inner.slice(inner.indexOf(':') + 1).trim();
|
|
249
|
+
const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
|
|
250
|
+
if (tokens.length === 0) {
|
|
251
|
+
throw new PhraseParseError(inner, template, 'a slot needs a key, e.g. {slot:here}');
|
|
252
|
+
}
|
|
253
|
+
if (tokens.length > 3) {
|
|
254
|
+
throw new PhraseParseError(inner, template, 'a slot takes a key and optional mode/conj, e.g. {slot:detail clause or}');
|
|
255
|
+
}
|
|
256
|
+
const slot = { kind: 'slot', slotKey: tokens[0] };
|
|
257
|
+
for (const hint of tokens.slice(1)) {
|
|
258
|
+
if (hint === 'sentence' || hint === 'clause') {
|
|
259
|
+
slot.mode = hint;
|
|
260
|
+
}
|
|
261
|
+
else if (hint === 'and' || hint === 'or') {
|
|
262
|
+
slot.conj = hint;
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
throw new PhraseParseError(hint, template, `'${hint}' is not a slot hint (sentence | clause | and | or)`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return slot;
|
|
269
|
+
}
|
|
270
|
+
/** Parse one placeholder's inner text into a phrase, binding against params. */
|
|
271
|
+
function parsePlaceholder(inner, template, params) {
|
|
272
|
+
// A ':' marks a kind head. Its prefix must be a known kind — anything else
|
|
273
|
+
// (a legacy chain like `cap:the:item`, or an unknown kind) fails here.
|
|
274
|
+
if (inner.includes(':')) {
|
|
275
|
+
// A leading `capitalize` modifier on a kind head — only `pronoun` accepts it
|
|
276
|
+
// (ADR-201 §2). NounPhrase `{capitalize the item}` is handled in the no-`:`
|
|
277
|
+
// branch below; `{capitalize number:…}` / `verb` / `quote` etc. are authoring
|
|
278
|
+
// errors that throw at parse time (AC-10).
|
|
279
|
+
let capitalize = false;
|
|
280
|
+
let body = inner;
|
|
281
|
+
const trimmedStart = inner.trimStart();
|
|
282
|
+
if (trimmedStart.startsWith('capitalize ')) {
|
|
283
|
+
capitalize = true;
|
|
284
|
+
body = trimmedStart.slice('capitalize '.length).trimStart();
|
|
285
|
+
}
|
|
286
|
+
const prefix = body.slice(0, body.indexOf(':')).trim();
|
|
287
|
+
if (capitalize && prefix !== 'pronoun') {
|
|
288
|
+
throw new PhraseParseError(inner, template, `capitalize is not a valid modifier for '${prefix}'`);
|
|
289
|
+
}
|
|
290
|
+
// Verb atom (ADR-199): parses its own lemma + subject and binds the subject.
|
|
291
|
+
if (prefix === 'verb') {
|
|
292
|
+
return parseVerb(body, template, params);
|
|
293
|
+
}
|
|
294
|
+
// Verbatim atom (ADR-200): binds a single param, rendered as opaque text.
|
|
295
|
+
if (prefix === 'verbatim') {
|
|
296
|
+
return parseVerbatim(body, template, params);
|
|
297
|
+
}
|
|
298
|
+
// Numeral atom (ADR-198): binds a numeric param + optional format.
|
|
299
|
+
if (prefix === 'number') {
|
|
300
|
+
return parseNumber(body, template, params);
|
|
301
|
+
}
|
|
302
|
+
// Pronoun atom (ADR-197): a grammatical case; referent is last-mentioned.
|
|
303
|
+
if (prefix === 'pronoun') {
|
|
304
|
+
return parsePronoun(body, template, capitalize);
|
|
305
|
+
}
|
|
306
|
+
// Quote atom (ADR-201): a bound utterance wrapped in locale quote glyphs.
|
|
307
|
+
if (prefix === 'quote') {
|
|
308
|
+
return parseQuote(body, template, params);
|
|
309
|
+
}
|
|
310
|
+
// Contents atom (ADR-194): binds a container; contents read at realize time.
|
|
311
|
+
if (prefix === 'contents') {
|
|
312
|
+
return parseContents(body, template, params);
|
|
313
|
+
}
|
|
314
|
+
// Slot combinator (ADR-195): a contribution channel key + optional mode/conj.
|
|
315
|
+
if (prefix === 'slot') {
|
|
316
|
+
return parseSlot(body, template);
|
|
317
|
+
}
|
|
318
|
+
// Sentence (ADR-201) is emitted by message structure / Quote, not authored.
|
|
319
|
+
if (prefix === 'sentence') {
|
|
320
|
+
throw new PhraseParseError(inner, template, 'sentence is not an author-facing kind prefix — it is emitted by message structure / quote');
|
|
321
|
+
}
|
|
322
|
+
const kind = KIND_PREFIXES[prefix];
|
|
323
|
+
if (kind === undefined) {
|
|
324
|
+
throw new PhraseParseError(inner, template, `'${prefix}' is not a known kind prefix — legacy ':' chains are not supported`);
|
|
325
|
+
}
|
|
326
|
+
// Stub kinds reserve only their discriminant in ADR-192; their binding and
|
|
327
|
+
// fields are parsed by the follow-on ADR. Route to the bare kind for now.
|
|
328
|
+
return { kind };
|
|
329
|
+
}
|
|
330
|
+
const tokens = inner.trim().split(/\s+/).filter((t) => t.length > 0);
|
|
331
|
+
if (tokens.length === 0) {
|
|
332
|
+
throw new PhraseParseError(inner, template, 'empty placeholder');
|
|
333
|
+
}
|
|
334
|
+
const name = tokens.pop();
|
|
335
|
+
let articleType;
|
|
336
|
+
let capitalize = false;
|
|
337
|
+
for (const hint of tokens) {
|
|
338
|
+
if (hint in ARTICLE_HINTS) {
|
|
339
|
+
articleType = ARTICLE_HINTS[hint];
|
|
340
|
+
}
|
|
341
|
+
else if (hint === 'capitalize') {
|
|
342
|
+
capitalize = true;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
throw new PhraseParseError(hint, template, `'${hint}' is not a recognized hint`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (!(name in params)) {
|
|
349
|
+
throw new PhraseParseError(name, template, `param '${name}' is not bound`);
|
|
350
|
+
}
|
|
351
|
+
return bindNounPhrase(params[name], articleType, capitalize);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Parse a template into a phrase tree.
|
|
355
|
+
*
|
|
356
|
+
* @param template author template, e.g. "You take {the item}."
|
|
357
|
+
* @param params param/producer bindings keyed by placeholder name
|
|
358
|
+
* @returns the parsed phrase (a `Sequence` when the template mixes literal text
|
|
359
|
+
* and placeholders; the bare phrase when it is a single placeholder)
|
|
360
|
+
* @throws PhraseParseError on a legacy `:`-chain, unknown kind-prefix, unknown
|
|
361
|
+
* hint, or unbound param — synchronously, at parse time (AC-8, AC-11)
|
|
362
|
+
*/
|
|
363
|
+
function parsePhraseTemplate(template, params = {}) {
|
|
364
|
+
const parts = [];
|
|
365
|
+
const placeholder = /\{([^}]*)\}/g;
|
|
366
|
+
let lastIndex = 0;
|
|
367
|
+
let match;
|
|
368
|
+
while ((match = placeholder.exec(template)) !== null) {
|
|
369
|
+
if (match.index > lastIndex) {
|
|
370
|
+
parts.push({ kind: 'literal', text: template.slice(lastIndex, match.index) });
|
|
371
|
+
}
|
|
372
|
+
parts.push(parsePlaceholder(match[1], template, params));
|
|
373
|
+
lastIndex = match.index + match[0].length;
|
|
374
|
+
}
|
|
375
|
+
if (lastIndex < template.length) {
|
|
376
|
+
parts.push({ kind: 'literal', text: template.slice(lastIndex) });
|
|
377
|
+
}
|
|
378
|
+
if (parts.length === 0)
|
|
379
|
+
return { kind: 'literal', text: '' };
|
|
380
|
+
if (parts.length === 1)
|
|
381
|
+
return parts[0];
|
|
382
|
+
return { kind: 'seq', parts };
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=parse-phrase-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-phrase-template.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/parser/parse-phrase-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,yBAAyB,EACzB,aAAa,EACb,8BAA8B,GAC/B,MAAM,wBAAwB,CAAC"}
|
package/perspective/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+DAQgC;AAN9B,gHAAA,QAAQ,OAAA;AAGR,iIAAA,yBAAyB,OAAA;AACzB,qHAAA,aAAa,OAAA;AACb,sIAAA,8BAA8B,OAAA"}
|
|
@@ -98,5 +98,5 @@ export declare function conjugateVerb(verb: string, context: NarrativeContext):
|
|
|
98
98
|
* @param context Narrative context
|
|
99
99
|
* @returns Message with resolved placeholders
|
|
100
100
|
*/
|
|
101
|
-
export declare function resolvePerspectivePlaceholders(message: string, context?: NarrativeContext): string;
|
|
101
|
+
export declare function resolvePerspectivePlaceholders(message: string, context?: NarrativeContext, params?: Record<string, unknown>): string;
|
|
102
102
|
//# sourceMappingURL=placeholder-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeholder-resolver.d.ts","sourceRoot":"","sources":["../../../../../../../repos/
|
|
1
|
+
{"version":3,"file":"placeholder-resolver.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/placeholder-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;CAaX,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,gBAEvC,CAAC;AA0GF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA4B7E;AA0BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAA4C,EACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAoFR"}
|
|
@@ -203,7 +203,7 @@ function addThirdPersonS(verb) {
|
|
|
203
203
|
* @param context Narrative context
|
|
204
204
|
* @returns Message with resolved placeholders
|
|
205
205
|
*/
|
|
206
|
-
function resolvePerspectivePlaceholders(message, context = exports.DEFAULT_NARRATIVE_CONTEXT) {
|
|
206
|
+
function resolvePerspectivePlaceholders(message, context = exports.DEFAULT_NARRATIVE_CONTEXT, params) {
|
|
207
207
|
// Subject pronoun
|
|
208
208
|
message = message.replace(/\{You\}/g, getSubjectPronoun(context));
|
|
209
209
|
message = message.replace(/\{you\}/g, getSubjectPronoun(context).toLowerCase());
|
|
@@ -233,6 +233,17 @@ function resolvePerspectivePlaceholders(message, context = exports.DEFAULT_NARRA
|
|
|
233
233
|
if (nonVerbPlaceholders.has(lowerVerb)) {
|
|
234
234
|
return match; // Leave unchanged for regular param substitution
|
|
235
235
|
}
|
|
236
|
+
// Params-aware discrimination (ADR-192 phrase path): a bare {word} that is a
|
|
237
|
+
// bound param is left for the parser; anything else bare is a perspective
|
|
238
|
+
// verb to conjugate. This replaces the fragile verb allowlist when params
|
|
239
|
+
// are known, so story/action verbs need no central registration.
|
|
240
|
+
if (params) {
|
|
241
|
+
if (verb in params || lowerVerb in params) {
|
|
242
|
+
return match; // a bound param — the parser realizes it
|
|
243
|
+
}
|
|
244
|
+
const conjugated = conjugateVerb(verb, context);
|
|
245
|
+
return verb[0] === verb[0].toUpperCase() ? capitalize(conjugated) : conjugated;
|
|
246
|
+
}
|
|
236
247
|
// Check if it looks like a verb (common patterns)
|
|
237
248
|
// Verbs we want to conjugate: take, open, close, lift, see, hear, etc.
|
|
238
249
|
const verbPatterns = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../../../../../../repos/
|
|
1
|
+
{"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/placeholder-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language content for platform events (save/restore/undo lifecycle).
|
|
3
|
+
*
|
|
4
|
+
* The engine's prose pipeline renders a `platform.*` event by looking up a
|
|
5
|
+
* message registered under the event type itself (the event type IS the
|
|
6
|
+
* messageId) and binding params from the event payload. Only events with a
|
|
7
|
+
* registered message produce text — request-phase events (save_requested,
|
|
8
|
+
* quit_requested, ...) and quit/restart outcomes stay silent by default.
|
|
9
|
+
*
|
|
10
|
+
* Stories override any of these by registering the same id:
|
|
11
|
+
* `language.addMessage('platform.undo_completed', ...)`.
|
|
12
|
+
*
|
|
13
|
+
* Public interface: `platformLanguage`. Owner context: lang-en-us
|
|
14
|
+
* (user-facing text for engine platform operations).
|
|
15
|
+
*/
|
|
16
|
+
export declare const platformLanguage: {
|
|
17
|
+
messages: {
|
|
18
|
+
'platform.save_completed': string;
|
|
19
|
+
'platform.save_failed': string;
|
|
20
|
+
'platform.restore_completed': string;
|
|
21
|
+
'platform.restore_failed': string;
|
|
22
|
+
'platform.undo_completed': string;
|
|
23
|
+
'platform.undo_failed': string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=platform-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-messages.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/platform-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;CAY5B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Language content for platform events (save/restore/undo lifecycle).
|
|
4
|
+
*
|
|
5
|
+
* The engine's prose pipeline renders a `platform.*` event by looking up a
|
|
6
|
+
* message registered under the event type itself (the event type IS the
|
|
7
|
+
* messageId) and binding params from the event payload. Only events with a
|
|
8
|
+
* registered message produce text — request-phase events (save_requested,
|
|
9
|
+
* quit_requested, ...) and quit/restart outcomes stay silent by default.
|
|
10
|
+
*
|
|
11
|
+
* Stories override any of these by registering the same id:
|
|
12
|
+
* `language.addMessage('platform.undo_completed', ...)`.
|
|
13
|
+
*
|
|
14
|
+
* Public interface: `platformLanguage`. Owner context: lang-en-us
|
|
15
|
+
* (user-facing text for engine platform operations).
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.platformLanguage = void 0;
|
|
19
|
+
exports.platformLanguage = {
|
|
20
|
+
messages: {
|
|
21
|
+
// Save / restore outcomes
|
|
22
|
+
'platform.save_completed': 'Saved.',
|
|
23
|
+
'platform.save_failed': 'Save failed.',
|
|
24
|
+
'platform.restore_completed': 'Restored.',
|
|
25
|
+
'platform.restore_failed': 'Restore failed.',
|
|
26
|
+
// Undo outcomes
|
|
27
|
+
'platform.undo_completed': 'Previous turn undone.',
|
|
28
|
+
'platform.undo_failed': 'Nothing to undo.',
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=platform-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-messages.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/platform-messages.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEU,QAAA,gBAAgB,GAAG;IAC9B,QAAQ,EAAE;QACR,0BAA0B;QAC1B,yBAAyB,EAAE,QAAQ;QACnC,sBAAsB,EAAE,cAAc;QACtC,4BAA4B,EAAE,WAAW;QACzC,yBAAyB,EAAE,iBAAiB;QAE5C,gBAAgB;QAChB,yBAAyB,EAAE,uBAAuB;QAClD,sBAAsB,EAAE,kBAAkB;KAC3C;CACF,CAAC"}
|
package/pluralize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluralize.d.ts","sourceRoot":"","sources":["../../../../../../repos/
|
|
1
|
+
{"version":3,"file":"pluralize.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/pluralize.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B9C"}
|
package/pluralize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluralize.js","sourceRoot":"","sources":["../../../../../../repos/
|
|
1
|
+
{"version":3,"file":"pluralize.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/pluralize.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,wEAAwE;;AAWxE,8BA4BC;AArCD,wCAAgD;AAEhD;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,4EAA4E;IAC5E,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,wBAAgB,EAAE,CAAC;QAClD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxF,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAE1D,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC"}
|
package/sound-messages.d.ts
CHANGED
|
@@ -31,17 +31,17 @@
|
|
|
31
31
|
* @see ADR-172 — Spatial Sound Propagation §Audibility tier, §Channel routing
|
|
32
32
|
*/
|
|
33
33
|
export declare const soundMessages: {
|
|
34
|
-
readonly 'sound.heard.default.full': "{You} {hear} {kind}.";
|
|
35
|
-
readonly 'sound.heard.default.muffled': "{You} {hear} a muffled {kind}.";
|
|
36
|
-
readonly 'sound.heard.default.fragments': "{You} {catch} broken {kind}.";
|
|
34
|
+
readonly 'sound.heard.default.full': "{You} {hear} {verbatim:kind}.";
|
|
35
|
+
readonly 'sound.heard.default.muffled': "{You} {hear} a muffled {verbatim:kind}.";
|
|
36
|
+
readonly 'sound.heard.default.fragments': "{You} {catch} broken {verbatim:kind}.";
|
|
37
37
|
readonly 'sound.heard.default.presence-only': "{You} {hear} something distant.";
|
|
38
|
-
readonly 'sound.heard.speech.full': "{You} {hear}: \"{content}\"";
|
|
39
|
-
readonly 'sound.heard.speech.muffled': "{You} {catch} a muffled voice: \"{content}\"";
|
|
38
|
+
readonly 'sound.heard.speech.full': "{You} {hear}: \"{verbatim:content}\"";
|
|
39
|
+
readonly 'sound.heard.speech.muffled': "{You} {catch} a muffled voice: \"{verbatim:content}\"";
|
|
40
40
|
readonly 'sound.heard.speech.fragments': "{You} {catch} fragments of speech.";
|
|
41
41
|
readonly 'sound.heard.speech.presence-only': "{You} {hear} voices nearby.";
|
|
42
|
-
readonly 'sound.heard.ambient.full': "{You} {hear} {kind}.";
|
|
43
|
-
readonly 'sound.heard.ambient.muffled': "{You} {hear} a muffled {kind}.";
|
|
44
|
-
readonly 'sound.heard.ambient.fragments': "{You} {catch} the faint sound of {kind}.";
|
|
42
|
+
readonly 'sound.heard.ambient.full': "{You} {hear} {verbatim:kind}.";
|
|
43
|
+
readonly 'sound.heard.ambient.muffled': "{You} {hear} a muffled {verbatim:kind}.";
|
|
44
|
+
readonly 'sound.heard.ambient.fragments': "{You} {catch} the faint sound of {verbatim:kind}.";
|
|
45
45
|
readonly 'sound.heard.ambient.presence-only': "{You} {hear} something at the edge of hearing.";
|
|
46
46
|
};
|
|
47
47
|
export type SoundMessageId = keyof typeof soundMessages;
|
package/sound-messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sound-messages.d.ts","sourceRoot":"","sources":["../../../../../../repos/
|
|
1
|
+
{"version":3,"file":"sound-messages.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/sound-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CA2BhB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,aAAa,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAAC;AAE1F;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAE7E"}
|