@lokascript/domain-learn 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/dist/generators/gloss-generator.d.ts +18 -0
- package/dist/generators/learn-renderer.d.ts +13 -0
- package/dist/generators/sentence-generator.d.ts +34 -0
- package/dist/index.cjs +6116 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +441 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.js +6056 -0
- package/dist/index.js.map +1 -0
- package/dist/profiles/ar.d.ts +2 -0
- package/dist/profiles/de.d.ts +2 -0
- package/dist/profiles/en.d.ts +2 -0
- package/dist/profiles/es.d.ts +2 -0
- package/dist/profiles/fr.d.ts +2 -0
- package/dist/profiles/index.d.ts +20 -0
- package/dist/profiles/ja.d.ts +2 -0
- package/dist/profiles/ko.d.ts +2 -0
- package/dist/profiles/pt.d.ts +2 -0
- package/dist/profiles/tr.d.ts +2 -0
- package/dist/profiles/zh.d.ts +2 -0
- package/dist/schemas/index.d.ts +31 -0
- package/dist/tokenizers/index.d.ts +23 -0
- package/dist/types.d.ts +266 -0
- package/package.json +63 -0
- package/src/__tests__/schemas.test.ts +145 -0
- package/src/__tests__/sentence-generation.test.ts +189 -0
- package/src/generators/gloss-generator.ts +145 -0
- package/src/generators/learn-renderer.ts +291 -0
- package/src/generators/sentence-generator.ts +501 -0
- package/src/index.ts +237 -0
- package/src/profiles/ar.ts +526 -0
- package/src/profiles/de.ts +481 -0
- package/src/profiles/en.ts +181 -0
- package/src/profiles/es.ts +829 -0
- package/src/profiles/fr.ts +466 -0
- package/src/profiles/index.ts +34 -0
- package/src/profiles/ja.ts +301 -0
- package/src/profiles/ko.ts +286 -0
- package/src/profiles/pt.ts +484 -0
- package/src/profiles/tr.ts +511 -0
- package/src/profiles/zh.ts +256 -0
- package/src/schemas/index.ts +576 -0
- package/src/tokenizers/index.ts +409 -0
- package/src/types.ts +321 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @lokascript/domain-learn — Multilingual Learning DSL
|
|
3
|
+
*
|
|
4
|
+
* A learning domain built on @lokascript/framework that formalizes
|
|
5
|
+
* the morphology engine: 15 verbs x 10 languages x 7 communicative
|
|
6
|
+
* functions, with sentence generation, interlinear glosses, and
|
|
7
|
+
* cross-language rendering.
|
|
8
|
+
*
|
|
9
|
+
* Unlike domain-sql (natural language -> SQL), domain-learn's "compiled
|
|
10
|
+
* output" IS natural language sentences with morphology applied. The
|
|
11
|
+
* standard CodeGenerator.generate() returns the commanding form in English.
|
|
12
|
+
* The extended generateForFunction() powers the exercise engine.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { createLearnDSL } from '@lokascript/domain-learn';
|
|
17
|
+
*
|
|
18
|
+
* const learn = createLearnDSL();
|
|
19
|
+
*
|
|
20
|
+
* // Parse multilingual command input
|
|
21
|
+
* const node = learn.parse('add .active to #button', 'en');
|
|
22
|
+
*
|
|
23
|
+
* // Generate sentence in any language x function
|
|
24
|
+
* import { generateForFunction } from '@lokascript/domain-learn';
|
|
25
|
+
* generateForFunction(node, 'narrating', 'ja');
|
|
26
|
+
* // -> { sentence: 'システムは #buttonに .activeを 追加しました', ... }
|
|
27
|
+
*
|
|
28
|
+
* // Cross-language translation
|
|
29
|
+
* learn.translate('add .active to #button', 'en', 'ja');
|
|
30
|
+
*
|
|
31
|
+
* // Interlinear gloss
|
|
32
|
+
* import { generateGloss } from '@lokascript/domain-learn';
|
|
33
|
+
* generateGloss(node, 'commanding', 'ja');
|
|
34
|
+
* // -> { tokens: ['#buttonに', '.activeを', '追加して'], roles: ['DEST', 'PAT', 'VERB'], ... }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
import { createMultilingualDSL, type MultilingualDSL } from '@lokascript/framework';
|
|
39
|
+
import { allSchemas } from './schemas';
|
|
40
|
+
import {
|
|
41
|
+
ALL_PROFILES,
|
|
42
|
+
enProfile,
|
|
43
|
+
jaProfile,
|
|
44
|
+
esProfile,
|
|
45
|
+
arProfile,
|
|
46
|
+
zhProfile,
|
|
47
|
+
koProfile,
|
|
48
|
+
frProfile,
|
|
49
|
+
trProfile,
|
|
50
|
+
deProfile,
|
|
51
|
+
ptProfile,
|
|
52
|
+
} from './profiles';
|
|
53
|
+
import {
|
|
54
|
+
EnglishLearnTokenizer,
|
|
55
|
+
JapaneseLearnTokenizer,
|
|
56
|
+
SpanishLearnTokenizer,
|
|
57
|
+
ArabicLearnTokenizer,
|
|
58
|
+
ChineseLearnTokenizer,
|
|
59
|
+
KoreanLearnTokenizer,
|
|
60
|
+
FrenchLearnTokenizer,
|
|
61
|
+
TurkishLearnTokenizer,
|
|
62
|
+
GermanLearnTokenizer,
|
|
63
|
+
PortugueseLearnTokenizer,
|
|
64
|
+
} from './tokenizers';
|
|
65
|
+
import { learnCodeGenerator, registerProfile } from './generators/sentence-generator';
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Create a multilingual learning DSL instance with all 10 supported languages.
|
|
69
|
+
* Also registers all language profiles with the sentence generator.
|
|
70
|
+
*/
|
|
71
|
+
export function createLearnDSL(): MultilingualDSL {
|
|
72
|
+
// Register all profiles with the sentence generator
|
|
73
|
+
for (const [code, profile] of Object.entries(ALL_PROFILES)) {
|
|
74
|
+
registerProfile(code, profile);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return createMultilingualDSL({
|
|
78
|
+
name: 'Learn',
|
|
79
|
+
schemas: allSchemas,
|
|
80
|
+
languages: [
|
|
81
|
+
{
|
|
82
|
+
code: 'en',
|
|
83
|
+
name: 'English',
|
|
84
|
+
nativeName: 'English',
|
|
85
|
+
tokenizer: EnglishLearnTokenizer,
|
|
86
|
+
patternProfile: enProfile.patternProfile,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
code: 'ja',
|
|
90
|
+
name: 'Japanese',
|
|
91
|
+
nativeName: '日本語',
|
|
92
|
+
tokenizer: JapaneseLearnTokenizer,
|
|
93
|
+
patternProfile: jaProfile.patternProfile,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
code: 'es',
|
|
97
|
+
name: 'Spanish',
|
|
98
|
+
nativeName: 'Español',
|
|
99
|
+
tokenizer: SpanishLearnTokenizer,
|
|
100
|
+
patternProfile: esProfile.patternProfile,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
code: 'ar',
|
|
104
|
+
name: 'Arabic',
|
|
105
|
+
nativeName: 'العربية',
|
|
106
|
+
tokenizer: ArabicLearnTokenizer,
|
|
107
|
+
patternProfile: arProfile.patternProfile,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
code: 'zh',
|
|
111
|
+
name: 'Chinese',
|
|
112
|
+
nativeName: '中文',
|
|
113
|
+
tokenizer: ChineseLearnTokenizer,
|
|
114
|
+
patternProfile: zhProfile.patternProfile,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
code: 'ko',
|
|
118
|
+
name: 'Korean',
|
|
119
|
+
nativeName: '한국어',
|
|
120
|
+
tokenizer: KoreanLearnTokenizer,
|
|
121
|
+
patternProfile: koProfile.patternProfile,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
code: 'fr',
|
|
125
|
+
name: 'French',
|
|
126
|
+
nativeName: 'Français',
|
|
127
|
+
tokenizer: FrenchLearnTokenizer,
|
|
128
|
+
patternProfile: frProfile.patternProfile,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
code: 'tr',
|
|
132
|
+
name: 'Turkish',
|
|
133
|
+
nativeName: 'Türkçe',
|
|
134
|
+
tokenizer: TurkishLearnTokenizer,
|
|
135
|
+
patternProfile: trProfile.patternProfile,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
code: 'de',
|
|
139
|
+
name: 'German',
|
|
140
|
+
nativeName: 'Deutsch',
|
|
141
|
+
tokenizer: GermanLearnTokenizer,
|
|
142
|
+
patternProfile: deProfile.patternProfile,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
code: 'pt',
|
|
146
|
+
name: 'Portuguese',
|
|
147
|
+
nativeName: 'Português',
|
|
148
|
+
tokenizer: PortugueseLearnTokenizer,
|
|
149
|
+
patternProfile: ptProfile.patternProfile,
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
codeGenerator: learnCodeGenerator,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// ─── Re-exports ──────────────────────────────────────────────────
|
|
157
|
+
|
|
158
|
+
// Types
|
|
159
|
+
export type {
|
|
160
|
+
CommunicativeFunction,
|
|
161
|
+
CoreVerb,
|
|
162
|
+
SemanticRole,
|
|
163
|
+
VerbValence,
|
|
164
|
+
CommandProfile,
|
|
165
|
+
SentenceFrame,
|
|
166
|
+
LanguageFrames,
|
|
167
|
+
RenderedSentence,
|
|
168
|
+
InterlinearGloss,
|
|
169
|
+
LearnLanguageProfile,
|
|
170
|
+
EnglishForms,
|
|
171
|
+
JapaneseForms,
|
|
172
|
+
SpanishForms,
|
|
173
|
+
ArabicForms,
|
|
174
|
+
ChineseForms,
|
|
175
|
+
KoreanForms,
|
|
176
|
+
FrenchForms,
|
|
177
|
+
TurkishForms,
|
|
178
|
+
GermanForms,
|
|
179
|
+
PortugueseForms,
|
|
180
|
+
AnyForms,
|
|
181
|
+
} from './types';
|
|
182
|
+
|
|
183
|
+
export { ALL_FUNCTIONS, ALL_VERBS } from './types';
|
|
184
|
+
|
|
185
|
+
// Schemas
|
|
186
|
+
export { allSchemas } from './schemas';
|
|
187
|
+
|
|
188
|
+
// Profiles
|
|
189
|
+
export {
|
|
190
|
+
ALL_PROFILES,
|
|
191
|
+
enProfile,
|
|
192
|
+
jaProfile,
|
|
193
|
+
esProfile,
|
|
194
|
+
arProfile,
|
|
195
|
+
zhProfile,
|
|
196
|
+
koProfile,
|
|
197
|
+
frProfile,
|
|
198
|
+
trProfile,
|
|
199
|
+
deProfile,
|
|
200
|
+
ptProfile,
|
|
201
|
+
} from './profiles';
|
|
202
|
+
|
|
203
|
+
// Tokenizers
|
|
204
|
+
export {
|
|
205
|
+
EnglishLearnTokenizer,
|
|
206
|
+
JapaneseLearnTokenizer,
|
|
207
|
+
SpanishLearnTokenizer,
|
|
208
|
+
ArabicLearnTokenizer,
|
|
209
|
+
ChineseLearnTokenizer,
|
|
210
|
+
KoreanLearnTokenizer,
|
|
211
|
+
FrenchLearnTokenizer,
|
|
212
|
+
TurkishLearnTokenizer,
|
|
213
|
+
GermanLearnTokenizer,
|
|
214
|
+
PortugueseLearnTokenizer,
|
|
215
|
+
} from './tokenizers';
|
|
216
|
+
|
|
217
|
+
// Generators
|
|
218
|
+
export {
|
|
219
|
+
learnCodeGenerator,
|
|
220
|
+
generateForFunction,
|
|
221
|
+
generateAllFunctions,
|
|
222
|
+
generateCrossLingual,
|
|
223
|
+
registerProfile,
|
|
224
|
+
getProfile,
|
|
225
|
+
resolveMarker,
|
|
226
|
+
attachMarker,
|
|
227
|
+
} from './generators/sentence-generator';
|
|
228
|
+
|
|
229
|
+
export { renderLearn } from './generators/learn-renderer';
|
|
230
|
+
export { generateGloss } from './generators/gloss-generator';
|
|
231
|
+
|
|
232
|
+
// Domain scan config (for AOT / Vite plugin integration)
|
|
233
|
+
export const learnScanConfig = {
|
|
234
|
+
attributes: ['data-learn', '_learn'] as const,
|
|
235
|
+
scriptTypes: ['text/learn-dsl'] as const,
|
|
236
|
+
defaultLanguage: 'en',
|
|
237
|
+
};
|