bayda-maghreb 1.1.15 → 1.1.17

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/README.md CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  North African dialect transliteration library - Kabyle, Libya, Tunisia, Algeria, Mauritania.
4
4
 
5
- ## v1.0 - 7 dialects green ✅
5
+ ## Dialects
6
6
 
7
- | Code | Name | File | Entries |
7
+ | Code | Name | File | Words |
8
8
  |------|------|------|-------|
9
- | kab | Kabyle | kabyle.json | 68 |
10
- | kab-lat | Kabyle Latin | kabyle-latin.json | 103 |
11
- | ly | Libya | libya.json | 245 |
12
- | mauritania | Mauritania | mauritania.json | 177 |
13
- | tn-latn | Tounsi | tunisia_franco.json | 188 |
14
- | dz | Dzair Arabic | algeria.json | 97 |
15
- | dz-latn | Dzair Franco | algeria_franco.json | 100 |
9
+ | kab | Kabyle | kabyle.json | 72 |
10
+ | kab-lat | Kabyle Latin | kabyle-latin.json | 104 |
11
+ | ly | Libya | libya.json | 337 |
12
+ | mauritania | Mauritania Gen Z | mauritania.json | 177 |
13
+ | tn-latn | Tounsi Franco | tunisia_franco.json | 205 |
14
+ | dz | Dzair | algeria.json | 110 |
15
+ | dz-latn | Dzair Franco | algeria_franco.json | 114 |
16
16
 
17
17
  ## Install
18
18
 
@@ -21,13 +21,19 @@ npm install bayda-maghreb
21
21
 
22
22
  ## Usage
23
23
 
24
- CLI:
24
+ Command line. The dialect comes from the file name (hello.kab.bayda), or from --dialect:
25
25
 
26
- npx bayda-maghreb file.bayda tn-latn
26
+ bayda init create hello.kab.bayda
27
+ bayda init --dialect tn-latn create hello.tn-latn.bayda
28
+ bayda hello.kab.bayda translate and run
29
+ bayda hello.kab.bayda --js print the JavaScript only
30
+ bayda prog.bayda --dialect ly choose the dialect by hand
31
+
32
+ If the file name has no dialect code, kab is used.
27
33
 
28
34
  Code:
29
35
 
30
36
  import { transpile } from "bayda-maghreb";
31
37
  console.log(transpile(source, "tn-latn"));
32
38
 
33
- Dialects: kab, kab-lat, ly, mauritania, tn-latn, dz, dz-latn
39
+ Only language words (if, else, function, console.log and so on) are translated. Text in quotes and comments stay as they are. The mauritania file is a word list, so it does not translate code.
package/bayda-bin CHANGED
@@ -8,7 +8,7 @@ const __dirname = dirname(__filename);
8
8
  const args = process.argv.slice(2);
9
9
  const isTermux = !!process.env.TERMUX_VERSION || (process.env.PREFIX && process.env.PREFIX.includes('com.termux'));
10
10
  if (args.includes('--version') || args.includes('-v')) {
11
- try { const pkg = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf8')); console.log(pkg.version); } catch { console.log('1.1.14'); }
11
+ try { const pkg = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf8')); console.log(pkg.version); } catch { console.log("unknown"); }
12
12
  process.exit(0);
13
13
  }
14
14
  if (args.includes('--help') || args.includes('-h')) {
@@ -36,4 +36,38 @@ bayda-maghreb - لغة بيضا بالدارجة
36
36
  process.exit(0);
37
37
  }
38
38
  const require = createRequire(import.meta.url);
39
- require('./bayda-transpile.cjs');
39
+ const transpile = require("./bayda-transpile.cjs");
40
+ const { dialects } = await import("./src/dialect-registry.js");
41
+ const { writeFileSync, existsSync, mkdtempSync, rmSync } = await import("fs");
42
+ const { basename } = await import("path");
43
+ const { tmpdir } = await import("os");
44
+ const { execFileSync } = await import("child_process");
45
+ const di = args.indexOf("--dialect");
46
+ let code = di >= 0 ? args[di + 1] : null;
47
+ const skip = di >= 0 ? di + 1 : -1;
48
+ const cmd = args.find((a, i) => !a.startsWith("-") && i !== skip);
49
+ if (!cmd) { console.error("usage: bayda <file> [--dialect code] [--js] | bayda init [--dialect code]"); process.exit(1); }
50
+ const pick = c => dialects.find(d => d.code === c);
51
+ const dataFile = d => join(__dirname, "data/dialects", d.file);
52
+ if (cmd === "init") {
53
+ const d = pick(code || "kab");
54
+ if (!d) { console.error("unknown dialect: " + code); process.exit(1); }
55
+ const kw = JSON.parse(readFileSync(dataFile(d), "utf8")).keywords;
56
+ const first = (...vs) => Object.keys(kw).find(k => vs.includes(kw[k]));
57
+ const fn = first("function"), pr = first("console.log", "print", "log");
58
+ if (!fn || !pr) { console.error("this dialect has no function/print word"); process.exit(1); }
59
+ const out = "hello." + d.code + ".bayda";
60
+ if (existsSync(out)) { console.error(out + " already exists"); process.exit(1); }
61
+ writeFileSync(out, fn + " hello() {\n " + pr + '("hello")\n}\nhello()\n');
62
+ console.log("created " + out);
63
+ process.exit(0);
64
+ }
65
+ if (!existsSync(cmd)) { console.error("file not found: " + cmd); process.exit(1); }
66
+ if (!code) { const parts = basename(cmd).split("."); code = parts.length > 2 ? parts[parts.length - 2] : "kab"; }
67
+ const dia = pick(code);
68
+ if (!dia) { console.error("unknown dialect: " + code + " (" + dialects.map(x => x.code).join(", ") + ")"); process.exit(1); }
69
+ const js = transpile(readFileSync(cmd, "utf8"), dataFile(dia));
70
+ if (args.includes("--js")) { console.log(js); process.exit(0); }
71
+ try { execFileSync(process.execPath, ["--input-type=module", "-e", js], { stdio: "inherit" }); }
72
+ catch (e) { process.exitCode = e.status || 1; }
73
+
@@ -40,12 +40,12 @@
40
40
  "ولّي": "return",
41
41
  "حاجة": "variable",
42
42
  "عفسة": "variable",
43
- "ثابت": "constant",
44
- "مسمار": "constant",
43
+ "ثابت": "const",
44
+ "مسمار": "const",
45
45
  "ليستة": "array_list",
46
- "خاوية": "null_empty",
47
- "مكاش": "null_empty",
48
- "والو": "null_empty",
46
+ "خاوية": "null",
47
+ "مكاش": "null",
48
+ "والو": "null",
49
49
  "مسح": "clear_delete",
50
50
  "نقي": "clear_delete",
51
51
  "خدمة": "function_method",
@@ -99,7 +99,20 @@
99
99
  "تعيط لروحها": "recursion",
100
100
  "صح ولا لا": "boolean",
101
101
  "رتّب": "sort",
102
- "صفّي": "filter"
102
+ "صفّي": "filter",
103
+ "ايلا": "if",
104
+ "دالة": "function",
105
+ "خلي": "let",
106
+ "بدل": "switch",
107
+ "خرج": "export",
108
+ "جديد": "new",
109
+ "جرب": "try",
110
+ "شد": "catch",
111
+ "فالاخر": "finally",
112
+ "ارمي": "throw",
113
+ "استنى": "await",
114
+ "مهل": "async",
115
+ "مستورد": "import"
103
116
  },
104
117
  "symbols": {}
105
118
  }
@@ -102,7 +102,21 @@
102
102
  "t3ayet_lro7ha": "recursion",
103
103
  "s7i7_wla_la": "boolean",
104
104
  "rateb": "sort",
105
- "safi": "filter"
105
+ "safi": "filter",
106
+ "دالة": "function",
107
+ "والو": "null",
108
+ "خلي": "let",
109
+ "ثابت": "const",
110
+ "بدل": "switch",
111
+ "جيب": "import",
112
+ "خرج": "export",
113
+ "جديد": "new",
114
+ "جرب": "try",
115
+ "شد": "catch",
116
+ "فالاخر": "finally",
117
+ "ارمي": "throw",
118
+ "استنى": "await",
119
+ "مهل": "async"
106
120
  },
107
121
  "symbols": {}
108
122
  }
@@ -104,6 +104,8 @@
104
104
  "ini": "say",
105
105
  "steqsi": "prompt",
106
106
  "wali": "check",
107
- "suɣel": "stringify"
108
- }
107
+ "suɣel": "stringify",
108
+ "asbeddel": "switch"
109
+ },
110
+ "script": "Latin"
109
111
  }
@@ -69,6 +69,11 @@
69
69
  "ini": "say",
70
70
  "steqsi": "prompt",
71
71
  "wali": "check",
72
- "suɣel": "stringify"
73
- }
72
+ "suɣel": "stringify",
73
+ "af": "for",
74
+ "sbedd": "let",
75
+ "sbedd_ur_nbeddal": "const",
76
+ "بدل": "switch"
77
+ },
78
+ "script": "Latin"
74
79
  }
@@ -247,7 +247,99 @@
247
247
  "دير": "for",
248
248
  "لين": "while",
249
249
  "خطأ": "false",
250
- "أو": "or"
250
+ "أو": "or",
251
+ "شراط ناذ": "if",
252
+ "law": "if",
253
+ "iza": "if",
254
+ "iza kan": "if",
255
+ "law kan": "if",
256
+ "kan": "if",
257
+ "آلاو": "else",
258
+ "wella": "else",
259
+ "illa": "else",
260
+ "رود": "for",
261
+ "فل": "for",
262
+ "يه ه ام لوط": "while",
263
+ "امل اط": "while",
264
+ "ون يوقف": "break",
265
+ "امبلع مرق": "break",
266
+ "اهتوف": "continue",
267
+ "مطخ": "continue",
268
+ "مروفال": "class",
269
+ "قل افضل": "class",
270
+ "ح ص": "true",
271
+ "غ 1": "true",
272
+ "م احت": "true",
273
+ "باهي": "true",
274
+ "طلع": "false",
275
+ "آل": "false",
276
+ "م احت فر م": "false",
277
+ "نم بوج": "import",
278
+ "دروتس 1": "import",
279
+ "هب نكلام لغد": "import",
280
+ "دالة": "function",
281
+ "قال اد": "function",
282
+ "صنعة": "function",
283
+ "رجع": "return",
284
+ "ج ع د": "return",
285
+ "فاضي": "null",
286
+ "ي ف ر اف": "null",
287
+ "خلي": "let",
288
+ "ي ل خ": "let",
289
+ "tawa": "let",
290
+ "taw": "let",
291
+ "ثابت": "const",
292
+ "خيّر": "switch",
293
+ "جديد": "new",
294
+ "جرّب": "try",
295
+ "أقفش": "catch",
296
+ "تاليتها": "finally",
297
+ "راجي": "await",
298
+ "مهّل": "async",
299
+ "صدّر": "export",
300
+ "توا": "now",
301
+ "hal wa9t": "now",
302
+ "الآن": "now",
303
+ "هلبا": "very",
304
+ "halba": "very",
305
+ "واجد": "very",
306
+ "wajed": "very",
307
+ "wajd": "very",
308
+ "عرم": "very",
309
+ "شنو": "what",
310
+ "شن": "what",
311
+ "shni": "what",
312
+ "shnu": "what",
313
+ "شن الجو": "what",
314
+ "shn al jaw": "what",
315
+ "shn jw": "what",
316
+ "ماذا": "what",
317
+ "bahi": "good",
318
+ "قنين": "good",
319
+ "قنينة": "good",
320
+ "gnen": "good",
321
+ "9nen": "good",
322
+ "لوز": "good",
323
+ "تمام بجودة": "good",
324
+ "talab": "require",
325
+ "جيب": "require",
326
+ "goul": "console.log",
327
+ "9ol": "console.log",
328
+ "فوته": "skip",
329
+ "فوت": "skip",
330
+ "fotha": "skip",
331
+ "fota": "skip",
332
+ "فوته برابعة": "skip",
333
+ "fotha bra4a": "skip",
334
+ "خط عليه": "skip",
335
+ "صقع عليك": "hard",
336
+ "sa9a3 3lik": "hard",
337
+ "sa9a3": "hard",
338
+ "صقع": "hard",
339
+ "حاجة صقع": "hard",
340
+ "دزلي طلب": "request",
341
+ "رد": "response",
342
+ "طيش": "throw"
251
343
  },
252
344
  "symbols": {}
253
345
  }
@@ -179,5 +179,7 @@
179
179
  "فيتشور": "feature",
180
180
  "فيكس بغ": "bug_fix",
181
181
  "حسانية - لغة الشباب و التقنية": "nativeName"
182
- }
182
+ },
183
+ "script": "Arabic",
184
+ "kind": "vocabulary"
183
185
  }
@@ -190,7 +190,24 @@
190
190
  "n7i": "pop",
191
191
  "hezz": "pop",
192
192
  "9adech": "length",
193
- "9dchfih": "length"
193
+ "9dchfih": "length",
194
+ "idha": "if",
195
+ "ella": "else",
196
+ "toulma": "while",
197
+ "mrigl": "true",
198
+ "function": "function",
199
+ "7atchay": "null",
200
+ "const": "const",
201
+ "baddel": "switch",
202
+ "5arrej": "export",
203
+ "jdid": "new",
204
+ "jarreb": "try",
205
+ "chedd": "catch",
206
+ "a5iran": "finally",
207
+ "lawa7": "throw",
208
+ "await": "await",
209
+ "async": "async",
210
+ "jib_import": "import"
194
211
  },
195
212
  "symbols": {}
196
213
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bayda-maghreb",
3
- "version": "1.1.15",
3
+ "version": "1.1.17",
4
4
  "description": "Bayda Maghreb - 7 dialects clean + Gen 2 Tech",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -41,7 +41,9 @@
41
41
  "lahjat",
42
42
  "data",
43
43
  "bayda-transpile.cjs",
44
- "cli.js",
45
44
  "bayda-bin"
46
- ]
45
+ ],
46
+ "engines": {
47
+ "node": ">=18"
48
+ }
47
49
  }
package/cli.js DELETED
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from "node:fs";
3
- import { transpile } from "./index.js";
4
-
5
- const [file, dialect] = process.argv.slice(2);
6
- if (!file) {
7
- console.error("usage: bayda <file> [dialect]");
8
- process.exit(1);
9
- }
10
- console.log(transpile(fs.readFileSync(file, "utf8"), dialect));