diff --git a/.agents/skills/livecodes/language-support/references/languages.md b/.agents/skills/livecodes/language-support/references/languages.md index cf010809be..fc139398d9 100644 --- a/.agents/skills/livecodes/language-support/references/languages.md +++ b/.agents/skills/livecodes/language-support/references/languages.md @@ -151,6 +151,7 @@ Enabled via `processors` config: | Swift (Wasm) | `swift-wasm`, `swift`, `wasm.swift` | Swift WASM | | Zig (Wasm) | `zig-wasm`, `zig` | Zig WASM | | V (Wasm) | `v-wasm`, `v`, `vlang`, `wasm.v`, `vsh` | V compiler in WASM | +| Janet (Wasm) | `janet-wasm`, `janet`, `wasm.janet` | Janet interpreter (WASM) | | Tcl | `tcl` | Tcl interpreter | | WebAssembly | `wat`, `wast`, `wasm`, `webassembly` | WAT format | | Assembly (Wasm) | `assembly-wasm`, `assembly`, `asm`, `asm-wasm`, `x86`, `x86-64`, `nasm`, `wasm.asm` | Keystone + Unicorn (WASM), x86-64 assembly | diff --git a/README.md b/README.md index b5c7177fe9..df5adff082 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ A [feature-rich](https://livecodes.io/docs/features/), open-source, **client-sid [![LiveCodes: npm version](https://img.shields.io/npm/v/livecodes)](https://www.npmjs.com/package/livecodes) [![LiveCodes: npm downloads](https://img.shields.io/npm/dm/livecodes)](https://www.npmjs.com/package/livecodes) [![LiveCodes: jsdelivr downloads](https://data.jsdelivr.com/v1/package/npm/livecodes/badge?style=rounded)](https://www.jsdelivr.com/package/npm/livecodes) -[![LiveCodes: languages](https://img.shields.io/badge/languages-118-blue)](https://livecodes.io/docs/languages/) +[![LiveCodes: languages](https://img.shields.io/badge/languages-119-blue)](https://livecodes.io/docs/languages/) [![LiveCodes: docs](https://img.shields.io/badge/Documentation-575757?logo=gitbook&logoColor=white)](https://livecodes.io/docs/) [![LiveCodes: llms.txt](https://img.shields.io/badge/llms.txt-575757?logo=googledocs&logoColor=white)](https://livecodes.io/docs/llms.txt) [![LiveCodes: llms-full.txt](https://img.shields.io/badge/llms--full.txt-575757?logo=googledocs&logoColor=white)](https://livecodes.io/docs/llms-full.txt) diff --git a/docs/docs/languages/janet-wasm.mdx b/docs/docs/languages/janet-wasm.mdx new file mode 100644 index 0000000000..da405c5c0c --- /dev/null +++ b/docs/docs/languages/janet-wasm.mdx @@ -0,0 +1,119 @@ +# Janet (Wasm) + +[Janet](https://janet-lang.org/) is a lightweight, embeddable, Lisp-like (Clojure-like), dynamically +typed programming language. + +In LiveCodes, Janet runs in the browser on the Janet interpreter compiled to WebAssembly, entirely +client-side. No server is involved. + +## Usage + +Demo: + +import LiveCodes from '../../src/components/LiveCodes.tsx'; + +export const janetConfig = { + activeEditor: 'script', + script: { + language: 'janet-wasm', + content: `(print "Hello, World!")`, + }, + mode: 'simple', + editor: 'auto', + tools: { + status: 'full', + }, +}; + + + +### Standard I/O + +The program runs on the [result page](../features/result.mdx). Anything it prints is captured and +shown in the [console](../features/console.mdx). Standard input is passed by setting the +`livecodes.janetWasm.input` property in JavaScript before the program runs. It is read in Janet with +`(file/read stdin :all)` and friends; a program that never reads never notices it was there. To run +again with new input, call `livecodes.janetWasm.run(input)`. + +### Communication with JavaScript + +A few helper properties and methods are available in the browser global `livecodes.janetWasm` +object: + +- `livecodes.janetWasm.input`: the standard input passed to the program. +- `livecodes.janetWasm.loaded`: a promise that resolves when the interpreter has downloaded and the + program has run once. It rejects if the runtime fails to load. Other helpers should be used after + it resolves. +- `livecodes.janetWasm.output`: the program's output, standard output and standard error in the + order the program wrote them. +- `livecodes.janetWasm.error`: the interpreter diagnostics, if the program failed. +- `livecodes.janetWasm.exitCode`: the exit code of the program (`0` ok, `1` runtime error, `2` + compile error, `4` parse error). +- `livecodes.janetWasm.run(input)`: runs the code again with new input, returning a promise that + resolves to `{ output, error, exitCode }`. + +Example: + + + +## Language Info + +### Name + +`janet-wasm` + +### Aliases / Extensions + +`janet`, `wasm.janet` + +### Editor + +`script` + +## Compiler + +The [Janet](https://janet-lang.org/) interpreter compiled to WebAssembly (built with Emscripten), packaged by +[@live-codes/janet-wasm](https://www.npmjs.com/package/@live-codes/janet-wasm). + +### Version + +Janet 1.42.1. + +## Code Formatting + +Not currently supported. + +## Live Reload + +By default, new code changes are sent to the result page for re-evaluation without a full page +reload, avoiding the need to reload the interpreter. This behavior can be disabled by adding the code +comment `# __livecodes_reload__` to the Janet code, which forces a full page reload. + +This comment can be added in the [`hiddenContent` property of the editor](../configuration/configuration-object.mdx#markup) for embedded playgrounds. + +## Example Usage + +```janet +(defn fib [n] + (if (< n 2) + n + (+ (fib (- n 1)) (fib (- n 2))))) + +(each n (range 10) + (prin (fib n) " ")) +(print) +``` + +Each run is independent: definitions from one run do not survive into the next. + +## Starter Template + +https://livecodes.io/?template=janet-wasm + +## Links + +- [Janet official website](https://janet-lang.org/) +- [Janet documentation](https://janet-lang.org/docs/index.html) +- [Learn X in Y minutes, where X=Janet](https://learnxinyminutes.com/janet/) +- [Janet for Mortals](https://janet.guide/) +- [@live-codes/janet-wasm](https://www.npmjs.com/package/@live-codes/janet-wasm) diff --git a/docs/src/components/LanguageSliders.tsx b/docs/src/components/LanguageSliders.tsx index 13dd3005a0..6116778a29 100644 --- a/docs/src/components/LanguageSliders.tsx +++ b/docs/src/components/LanguageSliders.tsx @@ -80,6 +80,7 @@ export default function Sliders() { { name: 'ocaml', title: 'OCaml' }, { name: 'nim', title: 'Nim' }, { name: 'nim-wasm', title: 'Nim (Wasm)' }, + { name: 'janet-wasm', title: 'Janet (Wasm)' }, { name: 'python', title: 'Python' }, { name: 'python-wasm', title: 'Python (Wasm)' }, { name: 'r', title: 'R' }, diff --git a/docs/src/components/TemplateList.tsx b/docs/src/components/TemplateList.tsx index 2bf4915b38..9b7916baf7 100644 --- a/docs/src/components/TemplateList.tsx +++ b/docs/src/components/TemplateList.tsx @@ -39,6 +39,7 @@ const templates = [ { name: 'ocaml', title: 'Ocaml Starter', thumbnail: 'ocaml.svg' }, { name: 'nim', title: 'Nim Starter', thumbnail: 'nim.svg' }, { name: 'nim-wasm', title: 'Nim (Wasm) Starter', thumbnail: 'nim.svg' }, + { name: 'janet-wasm', title: 'Janet (Wasm) Starter', thumbnail: 'janet.png' }, { name: 'python', title: 'Python Starter', thumbnail: 'python.svg' }, { name: 'python-wasm', title: 'Python (Wasm) Starter', thumbnail: 'python.svg' }, { name: 'r', title: 'R Starter', thumbnail: 'r.svg' }, diff --git a/e2e/specs/starter.spec.ts b/e2e/specs/starter.spec.ts index 1cd4c3b6a5..e284e5bec9 100644 --- a/e2e/specs/starter.spec.ts +++ b/e2e/specs/starter.spec.ts @@ -534,6 +534,32 @@ test.describe('Starter Templates from UI', () => { await expect(getResult().locator('h1')).toHaveText('Hello, Nim!'); await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); }); + test('janet-wasm Starter', async ({ page, getTestUrl }) => { + // the interpreter (~0.9 MB) is downloaded on the first run + test.slow(); + + await page.goto(getTestUrl()); + + const { app, getResult, waitForResultUpdate } = await getLoadedApp(page); + + await app.click('[aria-label="Project"]'); + await app.click('text=New'); + await app.click('text=Janet (Wasm) Starter'); + + await waitForEditorFocus(app); + await waitForResultUpdate(); + + // the counter stays disabled until the interpreter has loaded and run once + await expect(getResult().locator('#counter-button')).toBeEnabled({ timeout: 120_000 }); + + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + + await expect(getResult().locator('h1')).toHaveText('Hello, Janet!'); + await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); + }); + test('haskell Starter', async ({ page, getTestUrl }) => { test.slow(); @@ -1320,6 +1346,28 @@ test.describe('Starter Templates from URL', () => { await expect(getResult().locator('h1')).toHaveText('Hello, Nim!'); await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); }); + test('janet-wasm Starter (in URL)', async ({ page, getTestUrl }) => { + // the interpreter (~0.9 MB) is downloaded on the first run + test.slow(); + + await page.goto(getTestUrl({ template: 'janet-wasm' })); + + const { app, getResult, waitForResultUpdate } = await getLoadedApp(page); + + await waitForEditorFocus(app); + await waitForResultUpdate(); + + // the counter stays disabled until the interpreter has loaded and run once + await expect(getResult().locator('#counter-button')).toBeEnabled({ timeout: 120_000 }); + + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + + await expect(getResult().locator('h1')).toHaveText('Hello, Janet!'); + await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); + }); + test('haskell Starter (in URL)', async ({ page, getTestUrl }) => { test.slow(); diff --git a/functions/vendors/templates.js b/functions/vendors/templates.js index 9f4eaad59f..739552b506 100644 --- a/functions/vendors/templates.js +++ b/functions/vendors/templates.js @@ -39,6 +39,7 @@ export const starterTemplates = { "ocaml": "Ocaml Starter", "nim": "Nim Starter", "nim-wasm": "Nim (Wasm) Starter", + "janet-wasm": "Janet (Wasm) Starter", "python": "Python Starter", "python-wasm": "Python (Wasm) Starter", "r": "R Starter", diff --git a/scripts/build.js b/scripts/build.js index 3764c3832f..60cf2fc2da 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -229,6 +229,7 @@ const iifeBuild = () => 'languages/cpp/lang-cpp-script.ts', 'languages/clang-wasm/lang-clang-wasm-script.ts', 'languages/nim/lang-nim-wasm-script.ts', + 'languages/janet-wasm/lang-janet-wasm-script.ts', 'languages/fortran-wasm/lang-fortran-wasm-script.ts', 'languages/d-wasm/lang-d-wasm-script.ts', 'languages/cobol-wasm/lang-cobol-wasm-script.ts', diff --git a/server/php/inc/starter-templates.json b/server/php/inc/starter-templates.json index 068ab8c5fc..bc6c15a792 100644 --- a/server/php/inc/starter-templates.json +++ b/server/php/inc/starter-templates.json @@ -39,6 +39,7 @@ "ocaml": "Ocaml Starter", "nim": "Nim Starter", "nim-wasm": "Nim (Wasm) Starter", + "janet-wasm": "Janet (Wasm) Starter", "python": "Python Starter", "python-wasm": "Python (Wasm) Starter", "r": "R Starter", diff --git a/src/livecodes/UI/command-menu-actions.ts b/src/livecodes/UI/command-menu-actions.ts index ca1c7e9bf9..544e84566e 100644 --- a/src/livecodes/UI/command-menu-actions.ts +++ b/src/livecodes/UI/command-menu-actions.ts @@ -295,6 +295,7 @@ export const getCommandMenuActions = ({ 'ocaml', 'nim', 'nim-wasm', + 'janet-wasm', 'python', 'python-wasm', 'r', diff --git a/src/livecodes/assets/templates/janet.png b/src/livecodes/assets/templates/janet.png new file mode 100644 index 0000000000..ee9b99235d Binary files /dev/null and b/src/livecodes/assets/templates/janet.png differ diff --git a/src/livecodes/html/language-info.html b/src/livecodes/html/language-info.html index cdaa58ed3d..e1fa33fbca 100644 --- a/src/livecodes/html/language-info.html +++ b/src/livecodes/html/language-info.html @@ -1130,6 +1130,39 @@

Imba

  • Official website
  • +
    +

    Janet (Wasm)

    +
    + The Janet interpreter + compiled to WebAssembly, running entirely in the browser. It supports standard input and real + exit codes. +
    + +

    Java

    diff --git a/src/livecodes/i18n/locales/ar/language-info.lokalise.json b/src/livecodes/i18n/locales/ar/language-info.lokalise.json index 7ed13a665c..ecacb9d946 100644 --- a/src/livecodes/i18n/locales/ar/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ar/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "مفسر Janet المُجمَّع إلى WebAssembly يعمل بالكامل داخل المتصفح. يدعم الإدخال القياسي ورموز الخروج الحقيقية." + }, + "janetWasm.link": { + "translation": "الموقع الرسمي لـ Janet وثائق Janet تعلم X في Y دقيقة، حيث X = Janet وثائق LiveCodes تحميل قالب البدء " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM يعمل في المتصفح باستخدام DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/ar/language-info.ts b/src/livecodes/i18n/locales/ar/language-info.ts index 9db3590f7d..6ad5552db2 100644 --- a/src/livecodes/i18n/locales/ar/language-info.ts +++ b/src/livecodes/i18n/locales/ar/language-info.ts @@ -219,6 +219,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>الموقع الرسمي', name: 'Imba', }, + janetWasm: { + desc: 'مفسر <1>Janet المُجمَّع إلى WebAssembly يعمل بالكامل داخل المتصفح. يدعم الإدخال القياسي ورموز الخروج الحقيقية.', + link: '<1><2>الموقع الرسمي لـ Janet <3> <4>وثائق Janet <5> <6>تعلم X في Y دقيقة، حيث X = Janet <7> <8>وثائق LiveCodes <9> <10>تحميل قالب البدء ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM يعمل في المتصفح باستخدام DoppioJVM.', link: '<1> <2>موقع جافا الرسمي <3> <4> DoppioJVM <5> <6> تعلم X في دقائق Y، حيث X = جافا <7> <8>وثائق LiveCodes <9> <10> تحميل قالب البدء ', diff --git a/src/livecodes/i18n/locales/ar/translation.lokalise.json b/src/livecodes/i18n/locales/ar/translation.lokalise.json index 1d95e3dc68..2f8a40d5e6 100644 --- a/src/livecodes/i18n/locales/ar/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ar/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "قالب Imba" }, + "templates.starter.janet-wasm": { + "translation": "قالب Janet (Wasm)" + }, "templates.starter.java": { "translation": "قالب Java" }, diff --git a/src/livecodes/i18n/locales/ar/translation.ts b/src/livecodes/i18n/locales/ar/translation.ts index 0b0c2cb55a..827b955a0a 100644 --- a/src/livecodes/i18n/locales/ar/translation.ts +++ b/src/livecodes/i18n/locales/ar/translation.ts @@ -1013,6 +1013,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'قالب Haskell (Wasm)', heading: 'قوالب البداية', imba: 'قالب Imba', + 'janet-wasm': 'قالب Janet (Wasm)', java: 'قالب Java', javascript: 'قالب JavaScript', jest: 'قالب Jest', diff --git a/src/livecodes/i18n/locales/bn/language-info.lokalise.json b/src/livecodes/i18n/locales/bn/language-info.lokalise.json index b0003018c9..c67b5a33c6 100644 --- a/src/livecodes/i18n/locales/bn/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/bn/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Janet ইন্টারপ্রেটার WebAssembly-তে কম্পাইল করা হয়েছে এবং এটি সম্পূর্ণভাবে ব্রাউজারে চলে। এটি স্ট্যান্ডার্ড ইনপুট এবং প্রকৃত এক্সিট কোড সমর্থন করে।" + }, + "janetWasm.link": { + "translation": "Janet অফিসিয়াল ওয়েবসাইট Janet ডকুমেন্টেশন Y মিনিটে X শিখুন, যেখানে X=Janet লাইভকোড ডকুমেন্টেশন স্টার্টার টেমপ্লেট লোড করুন " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "DoppioJVM ব্যবহার করে ব্রাউজারে চলমান JVM।" }, diff --git a/src/livecodes/i18n/locales/bn/language-info.ts b/src/livecodes/i18n/locales/bn/language-info.ts index 80cd7b1ab3..4402c8a2ac 100644 --- a/src/livecodes/i18n/locales/bn/language-info.ts +++ b/src/livecodes/i18n/locales/bn/language-info.ts @@ -220,6 +220,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>অফিসিয়াল ওয়েবসাইট', name: 'Imba', }, + janetWasm: { + desc: '<1>Janet ইন্টারপ্রেটার WebAssembly-তে কম্পাইল করা হয়েছে এবং এটি সম্পূর্ণভাবে ব্রাউজারে চলে। এটি স্ট্যান্ডার্ড ইনপুট এবং প্রকৃত এক্সিট কোড সমর্থন করে।', + link: '<1><2>Janet অফিসিয়াল ওয়েবসাইট <3> <4>Janet ডকুমেন্টেশন <5> <6>Y মিনিটে X শিখুন, যেখানে X=Janet <7> <8>লাইভকোড ডকুমেন্টেশন <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', + name: 'Janet (Wasm)', + }, java: { desc: 'DoppioJVM ব্যবহার করে ব্রাউজারে চলমান JVM।', link: '<1> <2>Java অফিসিয়াল ওয়েবসাইট <3> <4>DoppioJVM <5> <6>Y মিনিটে X শিখুন, যেখানে X=java <7> <8>LiveCodes ডকুমেন্টেশন <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', diff --git a/src/livecodes/i18n/locales/bn/translation.lokalise.json b/src/livecodes/i18n/locales/bn/translation.lokalise.json index b7b2d0ff7a..b6d7131662 100644 --- a/src/livecodes/i18n/locales/bn/translation.lokalise.json +++ b/src/livecodes/i18n/locales/bn/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imba স্টার্টার" }, + "templates.starter.janet-wasm": { + "translation": "Janet (Wasm) স্টার্টার" + }, "templates.starter.java": { "translation": "Java স্টার্টার" }, diff --git a/src/livecodes/i18n/locales/bn/translation.ts b/src/livecodes/i18n/locales/bn/translation.ts index 95fe1623c2..6acfc6e34c 100644 --- a/src/livecodes/i18n/locales/bn/translation.ts +++ b/src/livecodes/i18n/locales/bn/translation.ts @@ -1013,6 +1013,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm) স্টার্টার', heading: 'স্টার্টার টেমপ্লেট', imba: 'Imba স্টার্টার', + 'janet-wasm': 'Janet (Wasm) স্টার্টার', java: 'Java স্টার্টার', javascript: 'JavaScript স্টার্টার', jest: 'Jest স্টার্টার', diff --git a/src/livecodes/i18n/locales/de/language-info.lokalise.json b/src/livecodes/i18n/locales/de/language-info.lokalise.json index 9cf76f4dfb..d0cf8bfaa0 100644 --- a/src/livecodes/i18n/locales/de/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/de/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Der Janet-Interpreter wird zu WebAssembly kompiliert und läuft vollständig im Browser. Er unterstützt Standardeingabe und echte Exit-Codes." + }, + "janetWasm.link": { + "translation": "Offizielle Janet-Website Janet-Dokumentation Lerne X in Y Minuten, wobei X = Janet LiveCodes-Dokumentation Startervorlage laden " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM läuft im Browser mit DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/de/language-info.ts b/src/livecodes/i18n/locales/de/language-info.ts index ae295de461..6bf452354a 100644 --- a/src/livecodes/i18n/locales/de/language-info.ts +++ b/src/livecodes/i18n/locales/de/language-info.ts @@ -222,6 +222,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Offizielle Website', name: 'Imba', }, + janetWasm: { + desc: 'Der <1>Janet-Interpreter wird zu WebAssembly kompiliert und läuft vollständig im Browser. Er unterstützt Standardeingabe und echte Exit-Codes.', + link: '<1><2>Offizielle Janet-Website <3> <4>Janet-Dokumentation <5> <6>Lerne X in Y Minuten, wobei X = Janet <7> <8>LiveCodes-Dokumentation <9> <10>Startervorlage laden ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM läuft im Browser mit DoppioJVM.', link: '<1> <2>Offizielle Java-Website <3> <4> DoppioJVM <5> <6> Lernen Sie X in Y Minuten, wobei X=java <7> <8>LiveCodes Dokumentation <9> <10> Laden Sie die Startvorlage ', diff --git a/src/livecodes/i18n/locales/de/translation.lokalise.json b/src/livecodes/i18n/locales/de/translation.lokalise.json index e731b522db..1ced5a1329 100644 --- a/src/livecodes/i18n/locales/de/translation.lokalise.json +++ b/src/livecodes/i18n/locales/de/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imba-Starter" }, + "templates.starter.janet-wasm": { + "translation": "Janet (Wasm)-Starter" + }, "templates.starter.java": { "translation": "Java-Starter" }, diff --git a/src/livecodes/i18n/locales/de/translation.ts b/src/livecodes/i18n/locales/de/translation.ts index c624316dec..c9a63f7039 100644 --- a/src/livecodes/i18n/locales/de/translation.ts +++ b/src/livecodes/i18n/locales/de/translation.ts @@ -1015,6 +1015,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm)-Starter', heading: 'Starter-Vorlagen', imba: 'Imba-Starter', + 'janet-wasm': 'Janet (Wasm)-Starter', java: 'Java-Starter', javascript: 'JavaScript-Starter', jest: 'Jest-Starter', diff --git a/src/livecodes/i18n/locales/en/language-info.lokalise.json b/src/livecodes/i18n/locales/en/language-info.lokalise.json index c0c2f4cc9f..4712dac76b 100644 --- a/src/livecodes/i18n/locales/en/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/en/language-info.lokalise.json @@ -516,6 +516,18 @@ "notes": "", "translation": "Imba" }, + "janetWasm.desc": { + "notes": "### ###\n\n\n", + "translation": "The Janet interpreter compiled to WebAssembly, running entirely in the browser. It supports standard input and real exit codes." + }, + "janetWasm.link": { + "notes": "### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n", + "translation": " Janet official website Janet documentation Learn X in Y minutes, where X=Janet LiveCodes Documentation Load starter template " + }, + "janetWasm.name": { + "notes": "", + "translation": "Janet (Wasm)" + }, "java.desc": { "notes": "", "translation": "JVM running in the browser using DoppioJVM." diff --git a/src/livecodes/i18n/locales/en/language-info.ts b/src/livecodes/i18n/locales/en/language-info.ts index 3d17c4a968..44e984bb7d 100644 --- a/src/livecodes/i18n/locales/en/language-info.ts +++ b/src/livecodes/i18n/locales/en/language-info.ts @@ -228,6 +228,11 @@ const languageInfo = { link: '<1><2>Official website', name: 'Imba', }, + janetWasm: { + desc: 'The <1>Janet interpreter compiled to WebAssembly, running entirely in the browser. It supports standard input and real exit codes.', + link: '<1> <2>Janet official website <3> <4>Janet documentation <5> <6>Learn X in Y minutes, where X=Janet <7> <8>LiveCodes Documentation <9> <10>Load starter template ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM running in the browser using DoppioJVM.', link: '<1> <2>Java official website <3> <4>DoppioJVM <5> <6>Learn X in Y minutes, where X=java <7> <8>LiveCodes Documentation <9> <10>Load starter template ', diff --git a/src/livecodes/i18n/locales/en/translation.lokalise.json b/src/livecodes/i18n/locales/en/translation.lokalise.json index d872d070f9..deeb09852c 100644 --- a/src/livecodes/i18n/locales/en/translation.lokalise.json +++ b/src/livecodes/i18n/locales/en/translation.lokalise.json @@ -2696,6 +2696,10 @@ "notes": "", "translation": "Imba Starter" }, + "templates.starter.janet-wasm": { + "notes": "", + "translation": "Janet (Wasm) Starter" + }, "templates.starter.java": { "notes": "", "translation": "Java Starter" diff --git a/src/livecodes/i18n/locales/en/translation.ts b/src/livecodes/i18n/locales/en/translation.ts index 9c5f207032..890397c767 100644 --- a/src/livecodes/i18n/locales/en/translation.ts +++ b/src/livecodes/i18n/locales/en/translation.ts @@ -1020,6 +1020,7 @@ const translation = { 'haskell-wasm': 'Haskell (Wasm) Starter', heading: 'Starter Templates', imba: 'Imba Starter', + 'janet-wasm': 'Janet (Wasm) Starter', java: 'Java Starter', javascript: 'JavaScript Starter', jest: 'Jest Starter', diff --git a/src/livecodes/i18n/locales/es/language-info.lokalise.json b/src/livecodes/i18n/locales/es/language-info.lokalise.json index 68b852c42d..b6836edd42 100644 --- a/src/livecodes/i18n/locales/es/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/es/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "El intérprete de Janet se compila a WebAssembly y se ejecuta íntegramente en el navegador. Admite entrada estándar y códigos de salida reales." + }, + "janetWasm.link": { + "translation": "Página web oficial de Janet Documentación de Janet Aprende X en Y minutos, donde X = Janet Documentación de LiveCodes Cargar plantilla de inicio " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM ejecutándose en el navegador utilizando DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/es/language-info.ts b/src/livecodes/i18n/locales/es/language-info.ts index dc99f54d31..8939677802 100644 --- a/src/livecodes/i18n/locales/es/language-info.ts +++ b/src/livecodes/i18n/locales/es/language-info.ts @@ -222,6 +222,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Sitio web oficial', name: 'Imba', }, + janetWasm: { + desc: 'El intérprete de <1>Janet se compila a WebAssembly y se ejecuta íntegramente en el navegador. Admite entrada estándar y códigos de salida reales.', + link: '<1><2>Página web oficial de Janet <3> <4>Documentación de Janet <5> <6>Aprende X en Y minutos, donde X = Janet <7> <8>Documentación de LiveCodes <9> <10>Cargar plantilla de inicio ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM ejecutándose en el navegador utilizando DoppioJVM.', link: '<1> <2>Sitio web oficial de Java <3> <4> DoppioJVM <5> <6> Aprenda X en Y minutos, donde X=java <7> <8>Documentación de LiveCodes <9> <10> Cargue la plantilla de inicio ', diff --git a/src/livecodes/i18n/locales/es/translation.lokalise.json b/src/livecodes/i18n/locales/es/translation.lokalise.json index fcca52e95f..6952ed5cbe 100644 --- a/src/livecodes/i18n/locales/es/translation.lokalise.json +++ b/src/livecodes/i18n/locales/es/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Inicio Imba" }, + "templates.starter.janet-wasm": { + "translation": "Inicio Janet (Wasm)" + }, "templates.starter.java": { "translation": "Inicio Java" }, diff --git a/src/livecodes/i18n/locales/es/translation.ts b/src/livecodes/i18n/locales/es/translation.ts index a480c758d3..beb2e5a3de 100644 --- a/src/livecodes/i18n/locales/es/translation.ts +++ b/src/livecodes/i18n/locales/es/translation.ts @@ -1013,6 +1013,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Inicio Haskell (Wasm)', heading: 'Plantillas de Inicio', imba: 'Inicio Imba', + 'janet-wasm': 'Inicio Janet (Wasm)', java: 'Inicio Java', javascript: 'Inicio JavaScript', jest: 'Inicio Jest', diff --git a/src/livecodes/i18n/locales/fa/language-info.lokalise.json b/src/livecodes/i18n/locales/fa/language-info.lokalise.json index e48b2a39a5..ad65cc88a6 100644 --- a/src/livecodes/i18n/locales/fa/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fa/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "مفسر Janet که به WebAssembly کامپایل شده و کاملاً در مرورگر اجرا می‌شود. از ورودی استاندارد و کدهای خروج واقعی پشتیبانی می‌کند." + }, + "janetWasm.link": { + "translation": "وب‌سایت رسمی Janet اسناد Janet یادگیری X در Y دقیقه، که X=Janet مستندات LiveCodes بارگیری قالب شروع " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "اجرای JVM در مرورگر با استفاده از DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/fa/language-info.ts b/src/livecodes/i18n/locales/fa/language-info.ts index 9fb2bf347b..7c7695ade0 100644 --- a/src/livecodes/i18n/locales/fa/language-info.ts +++ b/src/livecodes/i18n/locales/fa/language-info.ts @@ -221,6 +221,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>وب‌سایت رسمی', name: 'Imba', }, + janetWasm: { + desc: 'مفسر <1>Janet که به WebAssembly کامپایل شده و کاملاً در مرورگر اجرا می‌شود. از ورودی استاندارد و کدهای خروج واقعی پشتیبانی می‌کند.', + link: '<1><2>وب‌سایت رسمی Janet <3> <4>اسناد Janet <5> <6>یادگیری X در Y دقیقه، که X=Janet <7> <8>مستندات LiveCodes <9> <10>بارگیری قالب شروع ', + name: 'Janet (Wasm)', + }, java: { desc: 'اجرای JVM در مرورگر با استفاده از DoppioJVM.', link: '<1> <2>وب‌سایت رسمی جاوا <3> <4>DoppioJVM <5> <6>یادگیری X در Y دقیقه، جایی که X=java <7> <8>مستندات LiveCodes <9> <10>بارگذاری قالب شروع کننده ', diff --git a/src/livecodes/i18n/locales/fa/translation.lokalise.json b/src/livecodes/i18n/locales/fa/translation.lokalise.json index 1cce6702a1..9bc68e397b 100644 --- a/src/livecodes/i18n/locales/fa/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fa/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "شروع کننده Imba" }, + "templates.starter.janet-wasm": { + "translation": "شروع کننده Janet (Wasm)" + }, "templates.starter.java": { "translation": "شروع کننده جاوا" }, diff --git a/src/livecodes/i18n/locales/fa/translation.ts b/src/livecodes/i18n/locales/fa/translation.ts index d94657414a..40ea1e79f9 100644 --- a/src/livecodes/i18n/locales/fa/translation.ts +++ b/src/livecodes/i18n/locales/fa/translation.ts @@ -1014,6 +1014,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'شروع کننده Haskell (Wasm)', heading: 'قالب‌های شروع کننده', imba: 'شروع کننده Imba', + 'janet-wasm': 'شروع کننده Janet (Wasm)', java: 'شروع کننده جاوا', javascript: 'شروع کننده جاوااسکریپت', jest: 'شروع کننده Jest', diff --git a/src/livecodes/i18n/locales/fr/language-info.lokalise.json b/src/livecodes/i18n/locales/fr/language-info.lokalise.json index b7f7ce4e04..c1ff8041eb 100644 --- a/src/livecodes/i18n/locales/fr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fr/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "L'interpréteur Janet compilé en WebAssembly s'exécute entièrement dans le navigateur. Il prend en charge l'entrée standard et les véritables codes de sortie." + }, + "janetWasm.link": { + "translation": "Site officiel de Janet Documentation Janet Apprenez X en Y minutes, où X = Janet Documentation LiveCodes Charger un modèle de démarrage " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM fonctionnant dans le navigateur à l'aide de DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/fr/language-info.ts b/src/livecodes/i18n/locales/fr/language-info.ts index 557f68c3a8..da4179e002 100644 --- a/src/livecodes/i18n/locales/fr/language-info.ts +++ b/src/livecodes/i18n/locales/fr/language-info.ts @@ -222,6 +222,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Site officiel', name: 'Imba', }, + janetWasm: { + desc: "L'interpréteur <1>Janet compilé en WebAssembly s'exécute entièrement dans le navigateur. Il prend en charge l'entrée standard et les véritables codes de sortie.", + link: '<1><2>Site officiel de Janet <3> <4>Documentation Janet <5> <6>Apprenez X en Y minutes, où X = Janet <7> <8>Documentation LiveCodes <9> <10>Charger un modèle de démarrage ', + name: 'Janet (Wasm)', + }, java: { desc: "JVM fonctionnant dans le navigateur à l'aide de DoppioJVM.", link: '<1> <2>Site officiel de Java <3> <4> DoppioJVM <5> <6> Apprendre X en Y minutes, où X=java <7> <8>Documentation LiveCodes <9> <10> Charger le modèle de démarrage ', diff --git a/src/livecodes/i18n/locales/fr/translation.lokalise.json b/src/livecodes/i18n/locales/fr/translation.lokalise.json index 37d59bf56a..b79bae534f 100644 --- a/src/livecodes/i18n/locales/fr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fr/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Démarrage Imba" }, + "templates.starter.janet-wasm": { + "translation": "Démarrage Janet (Wasm)" + }, "templates.starter.java": { "translation": "Démarrage Java" }, diff --git a/src/livecodes/i18n/locales/fr/translation.ts b/src/livecodes/i18n/locales/fr/translation.ts index fc89cfbca4..215de327c3 100644 --- a/src/livecodes/i18n/locales/fr/translation.ts +++ b/src/livecodes/i18n/locales/fr/translation.ts @@ -1015,6 +1015,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Démarrage Haskell (Wasm)', heading: 'Modèles de Démarrage', imba: 'Démarrage Imba', + 'janet-wasm': 'Démarrage Janet (Wasm)', java: 'Démarrage Java', javascript: 'Démarrage JavaScript', jest: 'Démarrage Jest', diff --git a/src/livecodes/i18n/locales/hi/language-info.lokalise.json b/src/livecodes/i18n/locales/hi/language-info.lokalise.json index dfea82b146..5486e11bcb 100644 --- a/src/livecodes/i18n/locales/hi/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hi/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Janet इंटरप्रेटर को वेबअसेंबली में संकलित किया जाता है और यह पूरी तरह से ब्राउज़र में चलता है। यह मानक इनपुट और वास्तविक निकास कोड का समर्थन करता है।" + }, + "janetWasm.link": { + "translation": "Janet आधिकारिक वेबसाइट Janet दस्तावेज Y मिनट में X सीखें, जहाँ X=Janet लाइवकोड दस्तावेजीकरण स्टार्टर टेम्पलेट लोड करें " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "DoppioJVM का उपयोग करके ब्राउज़र में JVM चल रहा है।" }, diff --git a/src/livecodes/i18n/locales/hi/language-info.ts b/src/livecodes/i18n/locales/hi/language-info.ts index 0764c5d7da..6bc8749236 100644 --- a/src/livecodes/i18n/locales/hi/language-info.ts +++ b/src/livecodes/i18n/locales/hi/language-info.ts @@ -221,6 +221,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>आधिकारिक वेबसाइट', name: 'Imba', }, + janetWasm: { + desc: '<1>Janet इंटरप्रेटर को वेबअसेंबली में संकलित किया जाता है और यह पूरी तरह से ब्राउज़र में चलता है। यह मानक इनपुट और वास्तविक निकास कोड का समर्थन करता है।', + link: '<1><2>Janet आधिकारिक वेबसाइट <3> <4>Janet दस्तावेज <5> <6>Y मिनट में X सीखें, जहाँ X=Janet <7> <8>लाइवकोड दस्तावेजीकरण <9> <10>स्टार्टर टेम्पलेट लोड करें ', + name: 'Janet (Wasm)', + }, java: { desc: 'DoppioJVM का उपयोग करके ब्राउज़र में JVM चल रहा है।', link: '<1> <2>जावा आधिकारिक वेबसाइट <3> <4>DoppioJVM <5> <6>वाई मिनटों में एक्स सीखें, जहां एक्स=जावा <7> <8>LiveCodes दस्तावेज़ीकरण <9> <10>स्टार्टर टेम्पलेट लोड करें ', diff --git a/src/livecodes/i18n/locales/hi/translation.lokalise.json b/src/livecodes/i18n/locales/hi/translation.lokalise.json index dbda261870..fbc6ec10c2 100644 --- a/src/livecodes/i18n/locales/hi/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hi/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imba स्टार्टर" }, + "templates.starter.janet-wasm": { + "translation": "Janet (Wasm) स्टार्टर" + }, "templates.starter.java": { "translation": "Java स्टार्टर" }, diff --git a/src/livecodes/i18n/locales/hi/translation.ts b/src/livecodes/i18n/locales/hi/translation.ts index a022126adb..4727fb6fb3 100644 --- a/src/livecodes/i18n/locales/hi/translation.ts +++ b/src/livecodes/i18n/locales/hi/translation.ts @@ -1013,6 +1013,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm) स्टार्टर', heading: 'स्टार्टर टेम्पलेट्स', imba: 'Imba स्टार्टर', + 'janet-wasm': 'Janet (Wasm) स्टार्टर', java: 'Java स्टार्टर', javascript: 'JavaScript स्टार्टर', jest: 'Jest स्टार्टर', diff --git a/src/livecodes/i18n/locales/hu/language-info.lokalise.json b/src/livecodes/i18n/locales/hu/language-info.lokalise.json index 47d3b16a87..139778ef43 100644 --- a/src/livecodes/i18n/locales/hu/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hu/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "A Janet értelmező WebAssembly-re van fordítva, és teljes egészében a böngészőben fut. Támogatja a szabványos bemenetet és a valódi kilépési kódokat." + }, + "janetWasm.link": { + "translation": "Az Janet hivatalos weboldala Janet dokumentáció Tanulj meg X-et Y perc alatt, ahol X=Janet LiveCodes dokumentáció Kezdő sablon betöltése " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM fut a böngészőben a DoppioJVM használatával." }, diff --git a/src/livecodes/i18n/locales/hu/language-info.ts b/src/livecodes/i18n/locales/hu/language-info.ts index 83c1d7ba59..4b3b7083df 100644 --- a/src/livecodes/i18n/locales/hu/language-info.ts +++ b/src/livecodes/i18n/locales/hu/language-info.ts @@ -222,6 +222,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Hivatalos weboldal', name: 'Imba', }, + janetWasm: { + desc: 'A <1>Janet értelmező WebAssembly-re van fordítva, és teljes egészében a böngészőben fut. Támogatja a szabványos bemenetet és a valódi kilépési kódokat.', + link: '<1><2>Az Janet hivatalos weboldala <3> <4>Janet dokumentáció <5> <6>Tanulj meg X-et Y perc alatt, ahol X=Janet <7> <8>LiveCodes dokumentáció <9> <10>Kezdő sablon betöltése ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM fut a böngészőben a DoppioJVM használatával.', link: '<1> <2>Java hivatalos weboldal <3> <4>DoppioJVM <5> <6>Tanulj X-et Y perc alatt, ahol X=java <7> <8>LiveCodes dokumentáció <9> <10>Kezdő sablon betöltése ', diff --git a/src/livecodes/i18n/locales/hu/translation.lokalise.json b/src/livecodes/i18n/locales/hu/translation.lokalise.json index d6723871d6..e66a9aa7be 100644 --- a/src/livecodes/i18n/locales/hu/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hu/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imba kezdő" }, + "templates.starter.janet-wasm": { + "translation": "Janet (Wasm) kezdő" + }, "templates.starter.java": { "translation": "Java kezdő" }, diff --git a/src/livecodes/i18n/locales/hu/translation.ts b/src/livecodes/i18n/locales/hu/translation.ts index 17652c3700..81de979a54 100644 --- a/src/livecodes/i18n/locales/hu/translation.ts +++ b/src/livecodes/i18n/locales/hu/translation.ts @@ -1014,6 +1014,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm) kezdő', heading: 'Kezdő sablonok', imba: 'Imba kezdő', + 'janet-wasm': 'Janet (Wasm) kezdő', java: 'Java kezdő', javascript: 'JavaScript kezdő', jest: 'Jest kezdő', diff --git a/src/livecodes/i18n/locales/id/language-info.lokalise.json b/src/livecodes/i18n/locales/id/language-info.lokalise.json index 76e1aa8708..8f35ebb3a0 100644 --- a/src/livecodes/i18n/locales/id/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/id/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Interpreter Janet dikompilasi ke WebAssembly dan dijalankan sepenuhnya di dalam browser. Ini mendukung input standar dan kode keluar nyata." + }, + "janetWasm.link": { + "translation": "Situs web resmi Janet Dokumentasi Janet Belajar X dalam Y menit, di mana X = Janet Dokumentasi LiveCodes Muat templat awal " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM berjalan di browser menggunakan DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/id/language-info.ts b/src/livecodes/i18n/locales/id/language-info.ts index 94b7005c42..e4100378b7 100644 --- a/src/livecodes/i18n/locales/id/language-info.ts +++ b/src/livecodes/i18n/locales/id/language-info.ts @@ -222,6 +222,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Situs web resmi', name: 'Imba', }, + janetWasm: { + desc: 'Interpreter <1>Janet dikompilasi ke WebAssembly dan dijalankan sepenuhnya di dalam browser. Ini mendukung input standar dan kode keluar nyata.', + link: '<1><2>Situs web resmi Janet <3> <4>Dokumentasi Janet <5> <6>Belajar X dalam Y menit, di mana X = Janet <7> <8>Dokumentasi LiveCodes <9> <10>Muat templat awal ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM berjalan di browser menggunakan DoppioJVM.', link: '<1> <2>Situs web resmi Java <3> <4>DoppioJVM <5> <6>Pelajari X dalam Y menit, dengan X=java <7> <8>Dokumentasi LiveCodes <9> <10>Muat template pemula ', diff --git a/src/livecodes/i18n/locales/id/translation.lokalise.json b/src/livecodes/i18n/locales/id/translation.lokalise.json index 174adea164..58b18dbbf4 100644 --- a/src/livecodes/i18n/locales/id/translation.lokalise.json +++ b/src/livecodes/i18n/locales/id/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Pemula Imba" }, + "templates.starter.janet-wasm": { + "translation": "Pemula Janet (Wasm)" + }, "templates.starter.java": { "translation": "Pemula Java" }, diff --git a/src/livecodes/i18n/locales/id/translation.ts b/src/livecodes/i18n/locales/id/translation.ts index 9537fca7e6..21e6e191c1 100644 --- a/src/livecodes/i18n/locales/id/translation.ts +++ b/src/livecodes/i18n/locales/id/translation.ts @@ -1013,6 +1013,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Pemula Haskell (Wasm)', heading: 'Template Pemula', imba: 'Pemula Imba', + 'janet-wasm': 'Pemula Janet (Wasm)', java: 'Pemula Java', javascript: 'Pemula JavaScript', jest: 'Pemula Jest', diff --git a/src/livecodes/i18n/locales/it/language-info.lokalise.json b/src/livecodes/i18n/locales/it/language-info.lokalise.json index 8094c8577c..91307a3c73 100644 --- a/src/livecodes/i18n/locales/it/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/it/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "L'interprete di Janet è compilato in WebAssembly ed eseguito interamente nel browser. Supporta input standard e codici di uscita reali." + }, + "janetWasm.link": { + "translation": "Sito web ufficiale di Janet Documentazione di Janet Impara X in Y minuti, dove X = Janet Documentazione di LiveCodes Carica il modello di avvio " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM in esecuzione nel browser utilizzando DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/it/language-info.ts b/src/livecodes/i18n/locales/it/language-info.ts index 3dc3f898d3..98b9294ea7 100644 --- a/src/livecodes/i18n/locales/it/language-info.ts +++ b/src/livecodes/i18n/locales/it/language-info.ts @@ -221,6 +221,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Sito ufficiale', name: 'Imba', }, + janetWasm: { + desc: "L'interprete di <1>Janet è compilato in WebAssembly ed eseguito interamente nel browser. Supporta input standard e codici di uscita reali.", + link: '<1><2>Sito web ufficiale di Janet <3> <4>Documentazione di Janet <5> <6>Impara X in Y minuti, dove X = Janet <7> <8>Documentazione di LiveCodes <9> <10>Carica il modello di avvio ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM in esecuzione nel browser utilizzando DoppioJVM.', link: '<1> <2>Sito ufficiale di Java <3> <4> DoppioJVM <5> <6> Imparare X in Y minuti, dove X=java <7> <8>Documentazione LiveCodes <9> <10> Caricare il modello iniziale ', diff --git a/src/livecodes/i18n/locales/it/translation.lokalise.json b/src/livecodes/i18n/locales/it/translation.lokalise.json index f5afd03e95..ebcf14e187 100644 --- a/src/livecodes/i18n/locales/it/translation.lokalise.json +++ b/src/livecodes/i18n/locales/it/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Starter Imba" }, + "templates.starter.janet-wasm": { + "translation": "Starter Janet (Wasm)" + }, "templates.starter.java": { "translation": "Starter Java" }, diff --git a/src/livecodes/i18n/locales/it/translation.ts b/src/livecodes/i18n/locales/it/translation.ts index 5093d4a29a..bb9606bf8b 100644 --- a/src/livecodes/i18n/locales/it/translation.ts +++ b/src/livecodes/i18n/locales/it/translation.ts @@ -1014,6 +1014,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Starter Haskell (Wasm)', heading: 'Modelli di Partenza', imba: 'Starter Imba', + 'janet-wasm': 'Starter Janet (Wasm)', java: 'Starter Java', javascript: 'Starter JavaScript', jest: 'Starter Jest', diff --git a/src/livecodes/i18n/locales/ja/language-info.lokalise.json b/src/livecodes/i18n/locales/ja/language-info.lokalise.json index db15512843..133a486906 100644 --- a/src/livecodes/i18n/locales/ja/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ja/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Janet インタプリタは WebAssembly にコンパイルされ、完全にブラウザ内で実行されます。標準入力と実際の終了コードをサポートします。" + }, + "janetWasm.link": { + "translation": "Janet 公式サイト Janet ドキュメント 「Y分でXを学ぶ」(X=Janet) LiveCodes ドキュメント スターターテンプレートの読み込み " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "DoppioJVMを使ってブラウザで動作するJVM。" }, diff --git a/src/livecodes/i18n/locales/ja/language-info.ts b/src/livecodes/i18n/locales/ja/language-info.ts index 1c5364cebf..999218c62b 100644 --- a/src/livecodes/i18n/locales/ja/language-info.ts +++ b/src/livecodes/i18n/locales/ja/language-info.ts @@ -221,6 +221,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>公式ウェブサイト', name: 'Imba', }, + janetWasm: { + desc: '<1>Janet インタプリタは WebAssembly にコンパイルされ、完全にブラウザ内で実行されます。標準入力と実際の終了コードをサポートします。', + link: '<1><2>Janet 公式サイト <3> <4>Janet ドキュメント <5> <6>「Y分でXを学ぶ」(X=Janet) <7> <8>LiveCodes ドキュメント <9> <10>スターターテンプレートの読み込み ', + name: 'Janet (Wasm)', + }, java: { desc: 'DoppioJVMを使ってブラウザで動作するJVM。', link: '<1> <2>Java公式サイト <3> <4>DoppioJVM <5> <6>XをY分で学ぶ、X=Java <7> <8>LiveCodes ドキュメント <9> <10>スターターテンプレートのロード ', diff --git a/src/livecodes/i18n/locales/ja/translation.lokalise.json b/src/livecodes/i18n/locales/ja/translation.lokalise.json index 5f887c5989..2615fe58b2 100644 --- a/src/livecodes/i18n/locales/ja/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ja/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imbaスターター" }, + "templates.starter.janet-wasm": { + "translation": "Janet(Wasm)スターター" + }, "templates.starter.java": { "translation": "Javaスターター" }, diff --git a/src/livecodes/i18n/locales/ja/translation.ts b/src/livecodes/i18n/locales/ja/translation.ts index 571ff39811..36e8d5070f 100644 --- a/src/livecodes/i18n/locales/ja/translation.ts +++ b/src/livecodes/i18n/locales/ja/translation.ts @@ -1014,6 +1014,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm)スターター', heading: 'スターターテンプレート', imba: 'Imbaスターター', + 'janet-wasm': 'Janet(Wasm)スターター', java: 'Javaスターター', javascript: 'JavaScriptスターター', jest: 'Jestスターター', diff --git a/src/livecodes/i18n/locales/nl/language-info.lokalise.json b/src/livecodes/i18n/locales/nl/language-info.lokalise.json index ed38c74f7c..74218096e5 100644 --- a/src/livecodes/i18n/locales/nl/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/nl/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "De Janet-interpreter wordt gecompileerd naar WebAssembly en draait volledig in de browser. Het ondersteunt standaardinvoer en echte exitcodes." + }, + "janetWasm.link": { + "translation": "Officiële website van Janet Janet-documentatie Leer X in Y minuten, waarbij X = Janet LiveCodes-documentatie Startersjabloon laden " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM draaiend in de browser met DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/nl/language-info.ts b/src/livecodes/i18n/locales/nl/language-info.ts index 3ede32cef6..b802800959 100644 --- a/src/livecodes/i18n/locales/nl/language-info.ts +++ b/src/livecodes/i18n/locales/nl/language-info.ts @@ -221,6 +221,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Officiële website', name: 'Imba', }, + janetWasm: { + desc: 'De <1>Janet-interpreter wordt gecompileerd naar WebAssembly en draait volledig in de browser. Het ondersteunt standaardinvoer en echte exitcodes.', + link: '<1><2>Officiële website van Janet <3> <4>Janet-documentatie <5> <6>Leer X in Y minuten, waarbij X = Janet <7> <8>LiveCodes-documentatie <9> <10>Startersjabloon laden ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM draaiend in de browser met DoppioJVM.', link: '<1> <2>Java officiële website <3> <4>DoppioJVM <5> <6>Leer X in Y minuten, waarbij X=java <7> <8>LiveCodes Documentatie <9> <10>Startsjabloon laden ', diff --git a/src/livecodes/i18n/locales/nl/translation.lokalise.json b/src/livecodes/i18n/locales/nl/translation.lokalise.json index adcc4a3778..76b1e08323 100644 --- a/src/livecodes/i18n/locales/nl/translation.lokalise.json +++ b/src/livecodes/i18n/locales/nl/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imba-starter" }, + "templates.starter.janet-wasm": { + "translation": "Janet (Wasm)-starter" + }, "templates.starter.java": { "translation": "Java-starter" }, diff --git a/src/livecodes/i18n/locales/nl/translation.ts b/src/livecodes/i18n/locales/nl/translation.ts index 8cd1fcf5d8..328feb3819 100644 --- a/src/livecodes/i18n/locales/nl/translation.ts +++ b/src/livecodes/i18n/locales/nl/translation.ts @@ -1014,6 +1014,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm)-starter', heading: 'Startsjablonen', imba: 'Imba-starter', + 'janet-wasm': 'Janet (Wasm)-starter', java: 'Java-starter', javascript: 'JavaScript-starter', jest: 'Jest-starter', diff --git a/src/livecodes/i18n/locales/pt/language-info.lokalise.json b/src/livecodes/i18n/locales/pt/language-info.lokalise.json index cbba006288..1a1eabc06a 100644 --- a/src/livecodes/i18n/locales/pt/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/pt/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "O interpretador Janet é compilado para WebAssembly, sendo executado na íntegra no navegador. Ele suporta entrada padrão e códigos de saída reais." + }, + "janetWasm.link": { + "translation": "Site oficial do Janet Documentação do Janet Aprenda X em Y minutos, onde X = Janet Documentação do LiveCodes Carregar modelo inicial " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM em execução no navegador usando DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/pt/language-info.ts b/src/livecodes/i18n/locales/pt/language-info.ts index 1d2921ed6f..a769b646b8 100644 --- a/src/livecodes/i18n/locales/pt/language-info.ts +++ b/src/livecodes/i18n/locales/pt/language-info.ts @@ -221,6 +221,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Site oficial', name: 'Imba', }, + janetWasm: { + desc: 'O interpretador <1>Janet é compilado para WebAssembly, sendo executado na íntegra no navegador. Ele suporta entrada padrão e códigos de saída reais.', + link: '<1><2>Site oficial do Janet <3> <4>Documentação do Janet <5> <6>Aprenda X em Y minutos, onde X = Janet <7> <8>Documentação do LiveCodes <9> <10>Carregar modelo inicial ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM em execução no navegador usando DoppioJVM.', link: '<1> <2>Sítio Web oficial de Java <3> <4> DoppioJVM <5> <6> Aprender X em Y minutos, onde X=java <7> <8>Documentação do LiveCodes <9> <10> Carregar modelo inicial ', diff --git a/src/livecodes/i18n/locales/pt/translation.lokalise.json b/src/livecodes/i18n/locales/pt/translation.lokalise.json index d1f70b68a9..34d5a0ddeb 100644 --- a/src/livecodes/i18n/locales/pt/translation.lokalise.json +++ b/src/livecodes/i18n/locales/pt/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Iniciante Imba" }, + "templates.starter.janet-wasm": { + "translation": "Iniciante Janet (Wasm)" + }, "templates.starter.java": { "translation": "Iniciante Java" }, diff --git a/src/livecodes/i18n/locales/pt/translation.ts b/src/livecodes/i18n/locales/pt/translation.ts index ae36c8bf22..75179bf82f 100644 --- a/src/livecodes/i18n/locales/pt/translation.ts +++ b/src/livecodes/i18n/locales/pt/translation.ts @@ -1014,6 +1014,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Iniciante Haskell (Wasm)', heading: 'Modelos Iniciantes', imba: 'Iniciante Imba', + 'janet-wasm': 'Iniciante Janet (Wasm)', java: 'Iniciante Java', javascript: 'Iniciante JavaScript', jest: 'Iniciante Jest', diff --git a/src/livecodes/i18n/locales/ru/language-info.lokalise.json b/src/livecodes/i18n/locales/ru/language-info.lokalise.json index 211d2269dc..dcbe3be84e 100644 --- a/src/livecodes/i18n/locales/ru/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ru/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Интерпретатор Janet скомпилирован в WebAssembly и выполняется полностью в браузере. Поддерживает стандартный ввод и реальные коды выхода." + }, + "janetWasm.link": { + "translation": "Официальный сайт Janet Документация по Janet «Изучите X за Y минут», где X = Janet Документация LiveCodes Загрузить стартовый шаблон " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "JVM, работающая в браузере с помощью DoppioJVM." }, diff --git a/src/livecodes/i18n/locales/ru/language-info.ts b/src/livecodes/i18n/locales/ru/language-info.ts index 210da01c91..b12e0d175f 100644 --- a/src/livecodes/i18n/locales/ru/language-info.ts +++ b/src/livecodes/i18n/locales/ru/language-info.ts @@ -223,6 +223,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Официальный сайт', name: 'Imba', }, + janetWasm: { + desc: 'Интерпретатор <1>Janet скомпилирован в WebAssembly и выполняется полностью в браузере. Поддерживает стандартный ввод и реальные коды выхода.', + link: '<1><2>Официальный сайт Janet <3> <4>Документация по Janet <5> <6>«Изучите X за Y минут», где X = Janet <7> <8>Документация LiveCodes <9> <10>Загрузить стартовый шаблон ', + name: 'Janet (Wasm)', + }, java: { desc: 'JVM, работающая в браузере с помощью DoppioJVM.', link: '<1> <2>Официальный сайт Java <3> <4> DoppioJVM <5> <6> Узнай X за Y минут, где X=java <7> <8>Документация LiveCodes <9> <10> Загрузи стартовый шаблон ', diff --git a/src/livecodes/i18n/locales/ru/translation.lokalise.json b/src/livecodes/i18n/locales/ru/translation.lokalise.json index 8ad794a9c1..39febf5514 100644 --- a/src/livecodes/i18n/locales/ru/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ru/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Стартер Imba" }, + "templates.starter.janet-wasm": { + "translation": "Стартер Janet (Wasm)" + }, "templates.starter.java": { "translation": "Стартер Java" }, diff --git a/src/livecodes/i18n/locales/ru/translation.ts b/src/livecodes/i18n/locales/ru/translation.ts index d8cce61b19..d318c7a32e 100644 --- a/src/livecodes/i18n/locales/ru/translation.ts +++ b/src/livecodes/i18n/locales/ru/translation.ts @@ -1013,6 +1013,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Стартер Haskell (Wasm)', heading: 'Стартовые шаблоны', imba: 'Стартер Imba', + 'janet-wasm': 'Стартер Janet (Wasm)', java: 'Стартер Java', javascript: 'Стартер JavaScript', jest: 'Стартер Jest', diff --git a/src/livecodes/i18n/locales/tr/language-info.lokalise.json b/src/livecodes/i18n/locales/tr/language-info.lokalise.json index 639b33a252..9646b7f1b8 100644 --- a/src/livecodes/i18n/locales/tr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/tr/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Janet yorumlayıcısı WebAssembly'ye derlenir ve tamamen tarayıcı içinde çalışır. Standart girişi ve gerçek çıkış kodlarını destekler." + }, + "janetWasm.link": { + "translation": "Janet resmi web sitesi Janet belgeleri Y dakikada X'i öğrenin, burada X=Janet LiveCodes Belgeleri Başlangıç şablonunu yükle " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "DoppioJVM kullanılarak tarayıcıda çalışan JVM." }, diff --git a/src/livecodes/i18n/locales/tr/language-info.ts b/src/livecodes/i18n/locales/tr/language-info.ts index 31ae1a1b82..1748d35742 100644 --- a/src/livecodes/i18n/locales/tr/language-info.ts +++ b/src/livecodes/i18n/locales/tr/language-info.ts @@ -222,6 +222,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Resmi web sitesi', name: 'Imba', }, + janetWasm: { + desc: "<1>Janet yorumlayıcısı WebAssembly'ye derlenir ve tamamen tarayıcı içinde çalışır. Standart girişi ve gerçek çıkış kodlarını destekler.", + link: "<1><2>Janet resmi web sitesi <3> <4>Janet belgeleri <5> <6>Y dakikada X'i öğrenin, burada X=Janet <7> <8>LiveCodes Belgeleri <9> <10>Başlangıç şablonunu yükle ", + name: 'Janet (Wasm)', + }, java: { desc: 'DoppioJVM kullanılarak tarayıcıda çalışan JVM.', link: '<1> <2>Java resmi web sitesi <3> <4>DoppioJVM <5> <6>Y Dakikada X Öğrenin, X=java <7> <8>LiveCodes Dokümantasyonu <9> <10>Başlangıç şablonunu yükle ', diff --git a/src/livecodes/i18n/locales/tr/translation.lokalise.json b/src/livecodes/i18n/locales/tr/translation.lokalise.json index f8cc07260f..0f4f4d838e 100644 --- a/src/livecodes/i18n/locales/tr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/tr/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imba Başlangıç" }, + "templates.starter.janet-wasm": { + "translation": "Janet (Wasm) Başlangıç" + }, "templates.starter.java": { "translation": "Java Başlangıç" }, diff --git a/src/livecodes/i18n/locales/tr/translation.ts b/src/livecodes/i18n/locales/tr/translation.ts index 292f4fe710..c7db42fc4f 100644 --- a/src/livecodes/i18n/locales/tr/translation.ts +++ b/src/livecodes/i18n/locales/tr/translation.ts @@ -1014,6 +1014,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm) Başlangıç', heading: 'Başlangıç Şablonları', imba: 'Imba Başlangıç', + 'janet-wasm': 'Janet (Wasm) Başlangıç', java: 'Java Başlangıç', javascript: 'JavaScript Başlangıç', jest: 'Jest Başlangıç', diff --git a/src/livecodes/i18n/locales/ur/language-info.lokalise.json b/src/livecodes/i18n/locales/ur/language-info.lokalise.json index 4e3d1ec1e7..943ff62f7c 100644 --- a/src/livecodes/i18n/locales/ur/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ur/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "امبا" }, + "janetWasm.desc": { + "translation": "Janet انٹرپریٹر کو WebAssembly میں مرتب کیا گیا ہے جو مکمل طور پر براؤزر میں چلتا ہے۔ یہ معیاری ان پٹ اور حقیقی ایگزٹ کوڈز کی حمایت کرتا ہے۔" + }, + "janetWasm.link": { + "translation": "Janet آفیشل ویب سائٹ Janet دستاویزات Y منٹ میں X سیکھیں، جہاں X=Janet LiveCodes دستاویزی لوڈ اسٹارٹر ٹیمپلیٹ " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "DoppioJVM کا استعمال کرتے ہوئے براؤزر میں JVM چل رہا ہے۔" }, diff --git a/src/livecodes/i18n/locales/ur/language-info.ts b/src/livecodes/i18n/locales/ur/language-info.ts index 5d3799f7fe..dc8a0a0075 100644 --- a/src/livecodes/i18n/locales/ur/language-info.ts +++ b/src/livecodes/i18n/locales/ur/language-info.ts @@ -222,6 +222,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>سرکاری ویب سائٹ', name: 'امبا', }, + janetWasm: { + desc: '<1>Janet انٹرپریٹر کو WebAssembly میں مرتب کیا گیا ہے جو مکمل طور پر براؤزر میں چلتا ہے۔ یہ معیاری ان پٹ اور حقیقی ایگزٹ کوڈز کی حمایت کرتا ہے۔', + link: '<1><2>Janet آفیشل ویب سائٹ <3> <4>Janet دستاویزات <5> <6>Y منٹ میں X سیکھیں، جہاں X=Janet <7> <8>LiveCodes دستاویزی <9> <10>لوڈ اسٹارٹر ٹیمپلیٹ ', + name: 'Janet (Wasm)', + }, java: { desc: 'DoppioJVM کا استعمال کرتے ہوئے براؤزر میں JVM چل رہا ہے۔', link: '<1> <2>Java آفیشل ویب سائٹ <3> <4>DoppioJVM <5> <6>Y منٹ میں X سیکھیں، جہاں X=java <7> <8>LiveCodes دستاویزات <9> <10>ابتدائی سانچہ لوڈ کریں ', diff --git a/src/livecodes/i18n/locales/ur/translation.lokalise.json b/src/livecodes/i18n/locales/ur/translation.lokalise.json index 3eae8e410a..823e2d0ff6 100644 --- a/src/livecodes/i18n/locales/ur/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ur/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "امبا شروعاتی" }, + "templates.starter.janet-wasm": { + "translation": "Janet (واسم) شروعاتی" + }, "templates.starter.java": { "translation": "جاوا شروعاتی" }, diff --git a/src/livecodes/i18n/locales/ur/translation.ts b/src/livecodes/i18n/locales/ur/translation.ts index 12555e19db..987d390160 100644 --- a/src/livecodes/i18n/locales/ur/translation.ts +++ b/src/livecodes/i18n/locales/ur/translation.ts @@ -1013,6 +1013,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'ہاسکل (واسم) شروعاتی', heading: 'شروعاتی سانچے', imba: 'امبا شروعاتی', + 'janet-wasm': 'Janet (واسم) شروعاتی', java: 'جاوا شروعاتی', javascript: 'جاوا اسکرپٹ شروعاتی', jest: 'جیسٹ شروعاتی', diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json index 959c95c047..49c630ae7d 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json @@ -387,6 +387,15 @@ "imba.name": { "translation": "Imba" }, + "janetWasm.desc": { + "translation": "Janet 解释器编译为 WebAssembly,并在浏览器中完全运行。它支持标准输入和真实的退出代码。" + }, + "janetWasm.link": { + "translation": "Janet 官方网站 Janet 文档 《Y分钟学会X》,其中X=Janet LiveCodes 文档 加载入门模板 " + }, + "janetWasm.name": { + "translation": "Janet (Wasm)" + }, "java.desc": { "translation": "使用 DoppioJVM 在浏览器中运行的 JVM。" }, diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.ts b/src/livecodes/i18n/locales/zh-CN/language-info.ts index bed3b61ab8..0d84bf7e95 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.ts +++ b/src/livecodes/i18n/locales/zh-CN/language-info.ts @@ -217,6 +217,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>官方网站', name: 'Imba', }, + janetWasm: { + desc: '<1>Janet 解释器编译为 WebAssembly,并在浏览器中完全运行。它支持标准输入和真实的退出代码。', + link: '<1><2>Janet 官方网站 <3> <4>Janet 文档 <5> <6>《Y分钟学会X》,其中X=Janet <7> <8>LiveCodes 文档 <9> <10>加载入门模板 ', + name: 'Janet (Wasm)', + }, java: { desc: '使用 DoppioJVM 在浏览器中运行的 JVM。', link: '<1> <2>Java 官方网站 <3> <4>DoppioJVM <5> <6>在 Y 分钟内学习 X,其中 X=java <7> <8>LiveCodes 文档 <9> <10>加载启动模板 ', diff --git a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json index b905a7d816..a839b5dfd5 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json @@ -2022,6 +2022,9 @@ "templates.starter.imba": { "translation": "Imba 启动模板" }, + "templates.starter.janet-wasm": { + "translation": "Janet(Wasm)启动模板" + }, "templates.starter.java": { "translation": "Java 启动模板" }, diff --git a/src/livecodes/i18n/locales/zh-CN/translation.ts b/src/livecodes/i18n/locales/zh-CN/translation.ts index 9857c05d16..457f481eb3 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.ts +++ b/src/livecodes/i18n/locales/zh-CN/translation.ts @@ -1011,6 +1011,7 @@ const translation: I18nTranslation = { 'haskell-wasm': 'Haskell (Wasm) 启动模板', heading: '启动模板', imba: 'Imba 启动模板', + 'janet-wasm': 'Janet(Wasm)启动模板', java: 'Java 启动模板', javascript: 'JavaScript 启动模板', jest: 'Jest 启动模板', diff --git a/src/livecodes/languages/janet-wasm/__tests__/lang-janet-wasm.spec.ts b/src/livecodes/languages/janet-wasm/__tests__/lang-janet-wasm.spec.ts new file mode 100644 index 0000000000..57d3b3872e --- /dev/null +++ b/src/livecodes/languages/janet-wasm/__tests__/lang-janet-wasm.spec.ts @@ -0,0 +1,21 @@ +import { janetWasm } from '../lang-janet-wasm'; + +describe('Janet (Wasm) language spec', () => { + test('is registered as janet-wasm, with the wasm runner script', () => { + expect(janetWasm.name).toBe('janet-wasm'); + expect(janetWasm.title).toBe('Janet (Wasm)'); + expect(janetWasm.compiler).toMatchObject({ + scriptType: 'text/janet-wasm', + compiledCodeLanguage: 'janet-wasm', + liveReload: true, + }); + }); + + test('accepts the Janet extensions', () => { + expect(janetWasm.extensions).toEqual(expect.arrayContaining(['janet', 'wasm.janet'])); + }); + + test('uses the script editor', () => { + expect(janetWasm.editor).toBe('script'); + }); +}); diff --git a/src/livecodes/languages/janet-wasm/index.ts b/src/livecodes/languages/janet-wasm/index.ts new file mode 100644 index 0000000000..375dce7a6a --- /dev/null +++ b/src/livecodes/languages/janet-wasm/index.ts @@ -0,0 +1 @@ +export * from './lang-janet-wasm'; diff --git a/src/livecodes/languages/janet-wasm/lang-janet-wasm-script.ts b/src/livecodes/languages/janet-wasm/lang-janet-wasm-script.ts new file mode 100644 index 0000000000..6d5de0f114 --- /dev/null +++ b/src/livecodes/languages/janet-wasm/lang-janet-wasm-script.ts @@ -0,0 +1,190 @@ +/* eslint-disable no-console */ +import { janetWasmBaseUrl } from '../../vendors'; +import { createLoadingReporter, runCompiler } from '../wasm-runtime'; +import { createWorkerRunner, type Runner } from '../worker-runner'; + +// Janet runs on the Janet interpreter compiled to WebAssembly (@live-codes/janet-wasm), loaded from +// its CDN build. The IIFE defines `self.janetWasm`, which the worker reaches with importScripts. +// +// The interpreter is a single instance - one stdout, one stdin, one environment - so it runs in a +// worker of its own. A Janet program that never returns cannot be interrupted, so Stop discards the +// worker rather than trying to stop the run inside it. +const SCRIPT_TYPE = 'text/janet-wasm'; + +interface RunResult { + input: string; + output: string | null; + error: string | null; + exitCode: number | null; +} + +interface JanetWasmApi { + ready: boolean; + failed: boolean; + input: string; + output: string | null; + error: string | null; + exitCode: number | null; + loaded: Promise; + init: Promise | null; + runner: Runner | null; + run: (input?: string) => Promise; +} + +declare const window: Window & { + livecodes: Record; +}; + +const getWorkerSrc = () => ` +importScripts(${JSON.stringify(janetWasmBaseUrl + 'dist/janet-wasm.global.js')}); + +let interpreter = null; + +const getInterpreter = () => { + interpreter = + interpreter || + self.janetWasm.createInterpreter({ + // Absolute, because inside the worker a relative URL would resolve against the worker's own + // URL rather than the page. The interpreter loads its glue and wasm from here. + baseUrl: ${JSON.stringify(janetWasmBaseUrl + 'assets/janet/')}, + }); + return interpreter; +}; + +addEventListener('message', async (event) => { + const { id, code, input } = event.data; + try { + const result = await (await getInterpreter()).run(code, input); + postMessage({ + id, + result: { + output: result.output, + // The interpreter's diagnostics as a list of lines, empty when the program ran. + errors: result.errors || [], + exitCode: result.exitCode, + }, + }); + } catch (error) { + postMessage({ id, error: String((error && error.message) || error) }); + } +}); + +getInterpreter().then( + () => postMessage({ type: 'ready' }), + (error) => postMessage({ type: 'error', message: String((error && error.message) || error) }), +); +`; + +// A single run is normally quick; a long timeout guards against hangs (e.g. an infinite loop in the +// user program) by killing and respawning the worker. +const RUN_TIMEOUT_MS = 120000; + +/** + * Reads the program out of the result page. + * + * The result page writes the code inline as the `innerHTML` of a ` +`.trimStart(), + }, + style: { + language: 'css', + content: ` +.container, +.container button { + text-align: center; + font: 1em sans-serif; +} +.logo { + width: 150px; +} +`.trimStart(), + }, + script: { + language: 'janet-wasm', + content: ` +# Read the counter from standard input; a blank or missing value counts as zero. +(def raw (string/trim (or (file/read stdin :all) ""))) +(def n (or (scan-number raw) 0)) +(print "Janet") +(print (inc n)) +`.trimStart(), + }, +}; diff --git a/src/livecodes/vendors.ts b/src/livecodes/vendors.ts index 50d2057a63..3d1a8a63c2 100644 --- a/src/livecodes/vendors.ts +++ b/src/livecodes/vendors.ts @@ -108,7 +108,7 @@ export const codeiumProviderUrl = /* @__PURE__ */ getUrl( '@live-codes/monaco-codeium-provider@0.2.2/dist/index.js', ); -export const codeMirrorBaseUrl = /* @__PURE__ */ getUrl('@live-codes/codemirror@0.4.4/build/'); +export const codeMirrorBaseUrl = /* @__PURE__ */ getUrl('@live-codes/codemirror@0.4.5/build/'); export const codemirrorMinimapUrl = /* @__PURE__ */ getUrl( '@replit/codemirror-minimap@0.5.2/dist/index.js', @@ -313,6 +313,8 @@ export const jsUntarUrl = /* @__PURE__ */ getUrl('js-untar@2.0.0/build/dist/unta export const jsZipUrl = /* @__PURE__ */ getUrl('jszip@3.10.1/dist/jszip.js'); +export const janetWasmBaseUrl = /* @__PURE__ */ getUrl('@live-codes/janet-wasm@0.1.0/'); + export const juliaWasmBaseUrl = /* @__PURE__ */ getUrl('@chriskoch/julia-wasm@1.0.4'); export const keystoneJsUrl = /* @__PURE__ */ getUrl( diff --git a/src/sdk/models.ts b/src/sdk/models.ts index 139b6fb96c..73b6951463 100644 --- a/src/sdk/models.ts +++ b/src/sdk/models.ts @@ -321,6 +321,9 @@ export type Language = | 'wasm.nim' | 'nim-js' | 'js.nim' + | 'janet' + | 'janet-wasm' + | 'wasm.janet' | 'tcl' | 'wat' | 'wast' @@ -497,6 +500,7 @@ export type TemplateName = | 'ocaml' | 'nim' | 'nim-wasm' + | 'janet-wasm' | 'python' | 'python-wasm' | 'r' diff --git a/storybook/_stories/EmbedOptions/template.ts b/storybook/_stories/EmbedOptions/template.ts index 6c61101a0f..d515bfb6a4 100644 --- a/storybook/_stories/EmbedOptions/template.ts +++ b/storybook/_stories/EmbedOptions/template.ts @@ -41,6 +41,7 @@ const storyDef: StoryDef = { Ocaml: { props: { template: 'ocaml' } }, Nim: { props: { template: 'nim' } }, NimWasm: { props: { template: 'nim-wasm' } }, + JanetWasm: { props: { template: 'janet-wasm' } }, Python: { props: { template: 'python' } }, PythonWasm: { props: { template: 'python-wasm' } }, R: { props: { template: 'r' } }, diff --git a/storybook/preact/stories/EmbedOptions/template.stories.ts b/storybook/preact/stories/EmbedOptions/template.stories.ts index 51eecb58d4..529d6d0fca 100644 --- a/storybook/preact/stories/EmbedOptions/template.stories.ts +++ b/storybook/preact/stories/EmbedOptions/template.stories.ts @@ -52,6 +52,9 @@ export const ReScript = livecodesStory({ template: 'rescript' }); ReScript.storyName = 'ReScript'; export const Reason = livecodesStory({ template: 'reason' }); export const Ocaml = livecodesStory({ template: 'ocaml' }); +export const Nim = livecodesStory({ template: 'nim' }); +export const NimWasm = livecodesStory({ template: 'nim-wasm' }); +export const JanetWasm = livecodesStory({ template: 'janet-wasm' }); export const Python = livecodesStory({ template: 'python' }); export const PythonWasm = livecodesStory({ template: 'python-wasm' }); export const R = livecodesStory({ template: 'r' }); @@ -65,14 +68,19 @@ export const Cpp = livecodesStory({ template: 'cpp' }); export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); -export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); export const DWasm = livecodesStory({ template: 'd-wasm' }); +export const CobolWasm = livecodesStory({ template: 'cobol-wasm' }); +CobolWasm.storyName = 'COBOL (Wasm)'; +export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); +FortranWasm.storyName = 'Fortran (Wasm)'; export const VWasm = livecodesStory({ template: 'v-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); +export const BlazorWasm = livecodesStory({ template: 'blazor-wasm' }); +BlazorWasm.storyName = 'Blazor (Wasm)'; export const VbWasm = livecodesStory({ template: 'vb-wasm' }); export const FSharp = livecodesStory({ template: 'fsharp' }); export const FSharpWasm = livecodesStory({ template: 'fsharp-wasm' }); @@ -91,10 +99,14 @@ export const Teal = livecodesStory({ template: 'teal' }); export const Fennel = livecodesStory({ template: 'fennel' }); export const Julia = livecodesStory({ template: 'julia' }); export const Tcl = livecodesStory({ template: 'tcl' }); +export const AdaWasm = livecodesStory({ template: 'ada-wasm' }); +export const Pascal = livecodesStory({ template: 'pascal' }); export const AssemblyScript = livecodesStory({ template: 'assemblyscript' }); AssemblyScript.storyName = 'AssemblyScript'; export const WebAssemblyText = livecodesStory({ template: 'wat' }); WebAssemblyText.storyName = 'WebAssembly Text'; +export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); +AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); export const Prolog = livecodesStory({ template: 'prolog' }); diff --git a/storybook/react/stories/EmbedOptions/template.stories.ts b/storybook/react/stories/EmbedOptions/template.stories.ts index 51eecb58d4..529d6d0fca 100644 --- a/storybook/react/stories/EmbedOptions/template.stories.ts +++ b/storybook/react/stories/EmbedOptions/template.stories.ts @@ -52,6 +52,9 @@ export const ReScript = livecodesStory({ template: 'rescript' }); ReScript.storyName = 'ReScript'; export const Reason = livecodesStory({ template: 'reason' }); export const Ocaml = livecodesStory({ template: 'ocaml' }); +export const Nim = livecodesStory({ template: 'nim' }); +export const NimWasm = livecodesStory({ template: 'nim-wasm' }); +export const JanetWasm = livecodesStory({ template: 'janet-wasm' }); export const Python = livecodesStory({ template: 'python' }); export const PythonWasm = livecodesStory({ template: 'python-wasm' }); export const R = livecodesStory({ template: 'r' }); @@ -65,14 +68,19 @@ export const Cpp = livecodesStory({ template: 'cpp' }); export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); -export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); export const DWasm = livecodesStory({ template: 'd-wasm' }); +export const CobolWasm = livecodesStory({ template: 'cobol-wasm' }); +CobolWasm.storyName = 'COBOL (Wasm)'; +export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); +FortranWasm.storyName = 'Fortran (Wasm)'; export const VWasm = livecodesStory({ template: 'v-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); +export const BlazorWasm = livecodesStory({ template: 'blazor-wasm' }); +BlazorWasm.storyName = 'Blazor (Wasm)'; export const VbWasm = livecodesStory({ template: 'vb-wasm' }); export const FSharp = livecodesStory({ template: 'fsharp' }); export const FSharpWasm = livecodesStory({ template: 'fsharp-wasm' }); @@ -91,10 +99,14 @@ export const Teal = livecodesStory({ template: 'teal' }); export const Fennel = livecodesStory({ template: 'fennel' }); export const Julia = livecodesStory({ template: 'julia' }); export const Tcl = livecodesStory({ template: 'tcl' }); +export const AdaWasm = livecodesStory({ template: 'ada-wasm' }); +export const Pascal = livecodesStory({ template: 'pascal' }); export const AssemblyScript = livecodesStory({ template: 'assemblyscript' }); AssemblyScript.storyName = 'AssemblyScript'; export const WebAssemblyText = livecodesStory({ template: 'wat' }); WebAssemblyText.storyName = 'WebAssembly Text'; +export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); +AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); export const Prolog = livecodesStory({ template: 'prolog' }); diff --git a/storybook/solid/stories/EmbedOptions/template.stories.ts b/storybook/solid/stories/EmbedOptions/template.stories.ts index 51eecb58d4..529d6d0fca 100644 --- a/storybook/solid/stories/EmbedOptions/template.stories.ts +++ b/storybook/solid/stories/EmbedOptions/template.stories.ts @@ -52,6 +52,9 @@ export const ReScript = livecodesStory({ template: 'rescript' }); ReScript.storyName = 'ReScript'; export const Reason = livecodesStory({ template: 'reason' }); export const Ocaml = livecodesStory({ template: 'ocaml' }); +export const Nim = livecodesStory({ template: 'nim' }); +export const NimWasm = livecodesStory({ template: 'nim-wasm' }); +export const JanetWasm = livecodesStory({ template: 'janet-wasm' }); export const Python = livecodesStory({ template: 'python' }); export const PythonWasm = livecodesStory({ template: 'python-wasm' }); export const R = livecodesStory({ template: 'r' }); @@ -65,14 +68,19 @@ export const Cpp = livecodesStory({ template: 'cpp' }); export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); -export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); export const DWasm = livecodesStory({ template: 'd-wasm' }); +export const CobolWasm = livecodesStory({ template: 'cobol-wasm' }); +CobolWasm.storyName = 'COBOL (Wasm)'; +export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); +FortranWasm.storyName = 'Fortran (Wasm)'; export const VWasm = livecodesStory({ template: 'v-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); +export const BlazorWasm = livecodesStory({ template: 'blazor-wasm' }); +BlazorWasm.storyName = 'Blazor (Wasm)'; export const VbWasm = livecodesStory({ template: 'vb-wasm' }); export const FSharp = livecodesStory({ template: 'fsharp' }); export const FSharpWasm = livecodesStory({ template: 'fsharp-wasm' }); @@ -91,10 +99,14 @@ export const Teal = livecodesStory({ template: 'teal' }); export const Fennel = livecodesStory({ template: 'fennel' }); export const Julia = livecodesStory({ template: 'julia' }); export const Tcl = livecodesStory({ template: 'tcl' }); +export const AdaWasm = livecodesStory({ template: 'ada-wasm' }); +export const Pascal = livecodesStory({ template: 'pascal' }); export const AssemblyScript = livecodesStory({ template: 'assemblyscript' }); AssemblyScript.storyName = 'AssemblyScript'; export const WebAssemblyText = livecodesStory({ template: 'wat' }); WebAssemblyText.storyName = 'WebAssembly Text'; +export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); +AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); export const Prolog = livecodesStory({ template: 'prolog' }); diff --git a/storybook/svelte/stories/EmbedOptions/template.stories.ts b/storybook/svelte/stories/EmbedOptions/template.stories.ts index 51eecb58d4..529d6d0fca 100644 --- a/storybook/svelte/stories/EmbedOptions/template.stories.ts +++ b/storybook/svelte/stories/EmbedOptions/template.stories.ts @@ -52,6 +52,9 @@ export const ReScript = livecodesStory({ template: 'rescript' }); ReScript.storyName = 'ReScript'; export const Reason = livecodesStory({ template: 'reason' }); export const Ocaml = livecodesStory({ template: 'ocaml' }); +export const Nim = livecodesStory({ template: 'nim' }); +export const NimWasm = livecodesStory({ template: 'nim-wasm' }); +export const JanetWasm = livecodesStory({ template: 'janet-wasm' }); export const Python = livecodesStory({ template: 'python' }); export const PythonWasm = livecodesStory({ template: 'python-wasm' }); export const R = livecodesStory({ template: 'r' }); @@ -65,14 +68,19 @@ export const Cpp = livecodesStory({ template: 'cpp' }); export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); -export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); export const DWasm = livecodesStory({ template: 'd-wasm' }); +export const CobolWasm = livecodesStory({ template: 'cobol-wasm' }); +CobolWasm.storyName = 'COBOL (Wasm)'; +export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); +FortranWasm.storyName = 'Fortran (Wasm)'; export const VWasm = livecodesStory({ template: 'v-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); +export const BlazorWasm = livecodesStory({ template: 'blazor-wasm' }); +BlazorWasm.storyName = 'Blazor (Wasm)'; export const VbWasm = livecodesStory({ template: 'vb-wasm' }); export const FSharp = livecodesStory({ template: 'fsharp' }); export const FSharpWasm = livecodesStory({ template: 'fsharp-wasm' }); @@ -91,10 +99,14 @@ export const Teal = livecodesStory({ template: 'teal' }); export const Fennel = livecodesStory({ template: 'fennel' }); export const Julia = livecodesStory({ template: 'julia' }); export const Tcl = livecodesStory({ template: 'tcl' }); +export const AdaWasm = livecodesStory({ template: 'ada-wasm' }); +export const Pascal = livecodesStory({ template: 'pascal' }); export const AssemblyScript = livecodesStory({ template: 'assemblyscript' }); AssemblyScript.storyName = 'AssemblyScript'; export const WebAssemblyText = livecodesStory({ template: 'wat' }); WebAssemblyText.storyName = 'WebAssembly Text'; +export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); +AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); export const Prolog = livecodesStory({ template: 'prolog' }); diff --git a/storybook/vue/stories/EmbedOptions/template.stories.ts b/storybook/vue/stories/EmbedOptions/template.stories.ts index 51eecb58d4..529d6d0fca 100644 --- a/storybook/vue/stories/EmbedOptions/template.stories.ts +++ b/storybook/vue/stories/EmbedOptions/template.stories.ts @@ -52,6 +52,9 @@ export const ReScript = livecodesStory({ template: 'rescript' }); ReScript.storyName = 'ReScript'; export const Reason = livecodesStory({ template: 'reason' }); export const Ocaml = livecodesStory({ template: 'ocaml' }); +export const Nim = livecodesStory({ template: 'nim' }); +export const NimWasm = livecodesStory({ template: 'nim-wasm' }); +export const JanetWasm = livecodesStory({ template: 'janet-wasm' }); export const Python = livecodesStory({ template: 'python' }); export const PythonWasm = livecodesStory({ template: 'python-wasm' }); export const R = livecodesStory({ template: 'r' }); @@ -65,14 +68,19 @@ export const Cpp = livecodesStory({ template: 'cpp' }); export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); -export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); export const DWasm = livecodesStory({ template: 'd-wasm' }); +export const CobolWasm = livecodesStory({ template: 'cobol-wasm' }); +CobolWasm.storyName = 'COBOL (Wasm)'; +export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); +FortranWasm.storyName = 'Fortran (Wasm)'; export const VWasm = livecodesStory({ template: 'v-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); +export const BlazorWasm = livecodesStory({ template: 'blazor-wasm' }); +BlazorWasm.storyName = 'Blazor (Wasm)'; export const VbWasm = livecodesStory({ template: 'vb-wasm' }); export const FSharp = livecodesStory({ template: 'fsharp' }); export const FSharpWasm = livecodesStory({ template: 'fsharp-wasm' }); @@ -91,10 +99,14 @@ export const Teal = livecodesStory({ template: 'teal' }); export const Fennel = livecodesStory({ template: 'fennel' }); export const Julia = livecodesStory({ template: 'julia' }); export const Tcl = livecodesStory({ template: 'tcl' }); +export const AdaWasm = livecodesStory({ template: 'ada-wasm' }); +export const Pascal = livecodesStory({ template: 'pascal' }); export const AssemblyScript = livecodesStory({ template: 'assemblyscript' }); AssemblyScript.storyName = 'AssemblyScript'; export const WebAssemblyText = livecodesStory({ template: 'wat' }); WebAssemblyText.storyName = 'WebAssembly Text'; +export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); +AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); export const Prolog = livecodesStory({ template: 'prolog' }); diff --git a/storybook/web-components/stories/EmbedOptions/template.stories.ts b/storybook/web-components/stories/EmbedOptions/template.stories.ts index 51eecb58d4..529d6d0fca 100644 --- a/storybook/web-components/stories/EmbedOptions/template.stories.ts +++ b/storybook/web-components/stories/EmbedOptions/template.stories.ts @@ -52,6 +52,9 @@ export const ReScript = livecodesStory({ template: 'rescript' }); ReScript.storyName = 'ReScript'; export const Reason = livecodesStory({ template: 'reason' }); export const Ocaml = livecodesStory({ template: 'ocaml' }); +export const Nim = livecodesStory({ template: 'nim' }); +export const NimWasm = livecodesStory({ template: 'nim-wasm' }); +export const JanetWasm = livecodesStory({ template: 'janet-wasm' }); export const Python = livecodesStory({ template: 'python' }); export const PythonWasm = livecodesStory({ template: 'python-wasm' }); export const R = livecodesStory({ template: 'r' }); @@ -65,14 +68,19 @@ export const Cpp = livecodesStory({ template: 'cpp' }); export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); -export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); export const DWasm = livecodesStory({ template: 'd-wasm' }); +export const CobolWasm = livecodesStory({ template: 'cobol-wasm' }); +CobolWasm.storyName = 'COBOL (Wasm)'; +export const FortranWasm = livecodesStory({ template: 'fortran-wasm' }); +FortranWasm.storyName = 'Fortran (Wasm)'; export const VWasm = livecodesStory({ template: 'v-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); +export const BlazorWasm = livecodesStory({ template: 'blazor-wasm' }); +BlazorWasm.storyName = 'Blazor (Wasm)'; export const VbWasm = livecodesStory({ template: 'vb-wasm' }); export const FSharp = livecodesStory({ template: 'fsharp' }); export const FSharpWasm = livecodesStory({ template: 'fsharp-wasm' }); @@ -91,10 +99,14 @@ export const Teal = livecodesStory({ template: 'teal' }); export const Fennel = livecodesStory({ template: 'fennel' }); export const Julia = livecodesStory({ template: 'julia' }); export const Tcl = livecodesStory({ template: 'tcl' }); +export const AdaWasm = livecodesStory({ template: 'ada-wasm' }); +export const Pascal = livecodesStory({ template: 'pascal' }); export const AssemblyScript = livecodesStory({ template: 'assemblyscript' }); AssemblyScript.storyName = 'AssemblyScript'; export const WebAssemblyText = livecodesStory({ template: 'wat' }); WebAssemblyText.storyName = 'WebAssembly Text'; +export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); +AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); export const Prolog = livecodesStory({ template: 'prolog' }); diff --git a/vendor-licenses.md b/vendor-licenses.md index c6d56d4214..0cc46b5d6d 100644 --- a/vendor-licenses.md +++ b/vendor-licenses.md @@ -362,6 +362,10 @@ LFortran (Wasm): [BSD 3-Clause License](https://github.com/lfortran/lfortran/blo V (Wasm): [MIT License](https://github.com/vlang/v/blob/master/LICENSE) (the V compiler and its standard library, compiled to WebAssembly by @live-codes/v-wasm; the Clang toolchain it links through is covered by LLVM / LLD below) +@live-codes/janet-wasm: [MIT License](https://github.com/live-codes/browser-janet/blob/main/packages/janet-wasm/LICENSE) + +Janet (Wasm): [MIT License](https://github.com/janet-lang/janet/blob/master/LICENSE) (the Janet interpreter, compiled to WebAssembly by @live-codes/janet-wasm) + LLVM / LLD (Wasm): [Apache License 2.0 with LLVM-exception](https://github.com/llvm/llvm-project/blob/main/LICENSE.TXT) @wasm-fmt/clang-format: [MIT License](https://github.com/wasm-fmt/clang-format/blob/6a84f2d980e5ff4145bd9178a49cd5146e48df78/LICENSE)