From 387dd74763269b1e144755f326188c2af1037080 Mon Sep 17 00:00:00 2001 From: Hatem Hosny Date: Sat, 3 Oct 2026 02:31:09 +0300 Subject: [PATCH 1/5] feat(Compilers): add Ada language support --- .../language-support/references/languages.md | 81 +-- README.md | 2 +- docs/docs/languages/ada-wasm.mdx | 129 ++++ docs/src/components/LanguageSliders.tsx | 3 +- docs/src/components/TemplateList.tsx | 3 +- e2e/specs/starter.spec.ts | 26 + functions/vendors/templates.js | 3 +- scripts/build.js | 1 + server/php/inc/starter-templates.json | 3 +- src/livecodes/UI/command-menu-actions.ts | 3 +- src/livecodes/assets/templates/ada.png | Bin 0 -> 10104 bytes src/livecodes/html/language-info.html | 571 +++++++++--------- .../locales/en/language-info.lokalise.json | 12 + .../i18n/locales/en/language-info.ts | 5 + .../i18n/locales/en/translation.lokalise.json | 4 + src/livecodes/i18n/locales/en/translation.ts | 1 + .../ada-wasm/__tests__/lang-ada-wasm.spec.ts | 34 ++ src/livecodes/languages/ada-wasm/index.ts | 1 + .../ada-wasm/lang-ada-wasm-script.ts | 295 +++++++++ .../languages/ada-wasm/lang-ada-wasm.ts | 25 + src/livecodes/languages/languages.ts | 4 +- src/livecodes/models.ts | 2 + .../templates/starter/ada-wasm-starter.ts | 96 +++ src/livecodes/templates/starter/index.ts | 4 +- src/livecodes/vendors.ts | 4 +- src/sdk/models.ts | 7 + storybook/_stories/EmbedOptions/template.ts | 2 + vendor-licenses.md | 2 + 28 files changed, 1003 insertions(+), 320 deletions(-) create mode 100644 docs/docs/languages/ada-wasm.mdx create mode 100644 src/livecodes/assets/templates/ada.png create mode 100644 src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts create mode 100644 src/livecodes/languages/ada-wasm/index.ts create mode 100644 src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts create mode 100644 src/livecodes/languages/ada-wasm/lang-ada-wasm.ts create mode 100644 src/livecodes/templates/starter/ada-wasm-starter.ts diff --git a/.agents/skills/livecodes/language-support/references/languages.md b/.agents/skills/livecodes/language-support/references/languages.md index 12df9d3b6d..ec7ad2679a 100644 --- a/.agents/skills/livecodes/language-support/references/languages.md +++ b/.agents/skills/livecodes/language-support/references/languages.md @@ -108,46 +108,47 @@ Enabled via `processors` config: ### Backend Languages -| Name | Aliases | Notes | -| --------------------------- | ---------------------------------------------- | ----------------------------------------------------- | -| Python | `python`, `py` | Brython (Python -> JS) | -| Python (Wasm) | `pyodide`, `python-wasm`, `py-wasm` | Pyodide runtime (~15MB) | -| Ruby | `ruby`, `rb` | Opal (Ruby -> JS) | -| Ruby (Wasm) | `ruby-wasm`, `wasm.rb` | Ruby WASM | -| Go | `go`, `golang` | Gopherjs (Go -> JS) | -| Go (Wasm) | `go-wasm`, `wasm.go` | Go WASM | -| PHP | `php` | Uniter (PHP -> JS) | -| PHP | `php`, `php-wasm`, `wasm.php` | PHP WASM | -| C (Wasm) | `c-wasm`, `cwasm`, `wasm.c`, `c` | Clang WASM | -| C++ | `cpp`, | JSCPP interpreter | -| C++ (Wasm) | `cpp-wasm`, `clang`, `wasm.cpp` | Clang WASM | -| Objective-C | `objc-wasm`, `objc`, `wasm.m` | Clang WASM | -| Objective-C++ | `objcpp-wasm`, `objcpp`, `wasm.mm` | Clang WASM | -| Java | `java` | Java runtime | -| C# | `csharp-wasm`, `cs`, `cs-wasm`, `wasm.cs` | C# WASM | -| VB.NET | `vb-wasm`, `vb`, `vbnet`, `wasm.vb` | VB.NET WASM | -| F# | `fsharp`, `fs`, `fsx` | Fable (F# -> JS) | -| F# (Wasm) | `fsharp-wasm`, `fs-wasm`, `wasm.fs` | .NET WASM | -| R | `r`, `rlang`, `rstats`, `r-wasm` | R WASM | -| Lua | `lua`, `lua-wasm`, `luawasm`, `wasm.lua` | Lua WASM | -| Teal | `teal`, `tl` | Typed Lua | -| Fennel | `fennel`, `fnl` | Lua lisp | -| Julia | `julia`, `jl` | Julia runtime | -| Scheme | `scheme`, `scm` | BiwaScheme | -| Common Lisp | `commonlisp`, `common-lisp`, `lisp` | Common Lisp | -| ClojureScript (Cherry) | `clojurescript-cherry`, `cljs-cherry` | Cherry transpiler; imports npm packages as ES modules | -| ClojureScript (self-hosted) | `clojurescript-selfhosted`, `cljs-selfhosted` | Official ClojureScript compiler; no npm imports | -| Perl | `perl`, `pl`, `pm` | Perl runtime | -| Pascal | `pascal`, `pas`, `pp`, `pas2js` | pas2js (Pascal -> JS, WASM) | -| Gleam | `gleam` | Gleam language | -| Elm | `elm` | Elm compiler (WASM) | -| Haskell | `haskell`, `hs`, `lhs` | MicroHs (not GHC) | -| Haskell (Wasm) | `haskell-wasm`, `hs-wasm`, `wasm.hs`, `hswasm` | GHC WASM | -| Rust (Wasm) | `rust-wasm`, `rs-wasm`, `wasm.rs` | Rust WASM | -| Swift (Wasm) | `swift-wasm`, `swift`, `wasm.swift` | Swift WASM | -| Zig (Wasm) | `zig-wasm`, `zig` | Zig WASM | -| Tcl | `tcl` | Tcl interpreter | -| WebAssembly | `wat`, `wast`, `wasm`, `webassembly` | WAT format | +| Name | Aliases | Notes | +| --------------------------- | -------------------------------------------------- | ----------------------------------------------------- | +| Python | `python`, `py` | Brython (Python -> JS) | +| Python (Wasm) | `pyodide`, `python-wasm`, `py-wasm` | Pyodide runtime (~15MB) | +| Ruby | `ruby`, `rb` | Opal (Ruby -> JS) | +| Ruby (Wasm) | `ruby-wasm`, `wasm.rb` | Ruby WASM | +| Go | `go`, `golang` | Gopherjs (Go -> JS) | +| Go (Wasm) | `go-wasm`, `wasm.go` | Go WASM | +| PHP | `php` | Uniter (PHP -> JS) | +| PHP | `php`, `php-wasm`, `wasm.php` | PHP WASM | +| C (Wasm) | `c-wasm`, `cwasm`, `wasm.c`, `c` | Clang WASM | +| C++ | `cpp`, | JSCPP interpreter | +| C++ (Wasm) | `cpp-wasm`, `clang`, `wasm.cpp` | Clang WASM | +| Objective-C | `objc-wasm`, `objc`, `wasm.m` | Clang WASM | +| Objective-C++ | `objcpp-wasm`, `objcpp`, `wasm.mm` | Clang WASM | +| Java | `java` | Java runtime | +| C# | `csharp-wasm`, `cs`, `cs-wasm`, `wasm.cs` | C# WASM | +| VB.NET | `vb-wasm`, `vb`, `vbnet`, `wasm.vb` | VB.NET WASM | +| F# | `fsharp`, `fs`, `fsx` | Fable (F# -> JS) | +| F# (Wasm) | `fsharp-wasm`, `fs-wasm`, `wasm.fs` | .NET WASM | +| R | `r`, `rlang`, `rstats`, `r-wasm` | R WASM | +| Lua | `lua`, `lua-wasm`, `luawasm`, `wasm.lua` | Lua WASM | +| Teal | `teal`, `tl` | Typed Lua | +| Fennel | `fennel`, `fnl` | Lua lisp | +| Julia | `julia`, `jl` | Julia runtime | +| Scheme | `scheme`, `scm` | BiwaScheme | +| Common Lisp | `commonlisp`, `common-lisp`, `lisp` | Common Lisp | +| ClojureScript (Cherry) | `clojurescript-cherry`, `cljs-cherry` | Cherry transpiler; imports npm packages as ES modules | +| ClojureScript (self-hosted) | `clojurescript-selfhosted`, `cljs-selfhosted` | Official ClojureScript compiler; no npm imports | +| Perl | `perl`, `pl`, `pm` | Perl runtime | +| Pascal | `pascal`, `pas`, `pp`, `pas2js` | pas2js (Pascal -> JS, WASM) | +| Ada (Wasm) | `ada`, `ada-wasm`, `adb`, `ads`, `hac`, `wasm.ada` | HAC (Ada -> WASM) | +| Gleam | `gleam` | Gleam language | +| Elm | `elm` | Elm compiler (WASM) | +| Haskell | `haskell`, `hs`, `lhs` | MicroHs (not GHC) | +| Haskell (Wasm) | `haskell-wasm`, `hs-wasm`, `wasm.hs`, `hswasm` | GHC WASM | +| Rust (Wasm) | `rust-wasm`, `rs-wasm`, `wasm.rs` | Rust WASM | +| Swift (Wasm) | `swift-wasm`, `swift`, `wasm.swift` | Swift WASM | +| Zig (Wasm) | `zig-wasm`, `zig` | Zig WASM | +| Tcl | `tcl` | Tcl interpreter | +| WebAssembly | `wat`, `wast`, `wasm`, `webassembly` | WAT format | ### Data & Logic Languages diff --git a/README.md b/README.md index 29b061bfdb..dff28ff934 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-111-blue)](https://livecodes.io/docs/languages/) +[![LiveCodes: languages](https://img.shields.io/badge/languages-112-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/ada-wasm.mdx b/docs/docs/languages/ada-wasm.mdx new file mode 100644 index 0000000000..73e239bf83 --- /dev/null +++ b/docs/docs/languages/ada-wasm.mdx @@ -0,0 +1,129 @@ +# Ada (Wasm) + +[Ada](https://www.adaic.org/) is a statically typed, high-level programming language designed for safety, reliability and maintainability. + +In LiveCodes, Ada is compiled and run entirely in the browser by [HAC](https://github.com/zertovitch/hac), an Ada compiler written in Ada and compiled to WebAssembly. No backend is involved. + +:::info Note + +HAC implements a subset of Ada 2022 (roughly the "Pascal subset" plus packages): no access types (pointers), no generics, and only constrained types. I/O is provided by the built-in `HAT` package. + +::: + +## Usage + +Demo: + +import LiveCodes from '../../src/components/LiveCodes.tsx'; + +export const adaConfig = { + activeEditor: 'script', + script: { + language: 'ada-wasm', + content: `with HAT; use HAT;\n +procedure Ada_Demo is + function Fibonacci (N : Natural) return Natural is + begin + if N < 2 then + return N; + else + return Fibonacci (N - 1) + Fibonacci (N - 2); + end if; + end Fibonacci; +begin + Put_Line ("Hello from Ada, running in your browser!"); + for I in 0 .. 10 loop + Put ("Fib ("); + Put (I, 1); + Put (") = "); + Put_Line (Fibonacci (I), 1); + end loop; +end Ada_Demo;`, + }, + mode: 'simple', + editor: 'auto', + tools: { + status: 'full', + }, +}; + + + +### Standard I/O + +Ada code runs in the context of the [result page](../features/result.mdx). Standard output (e.g. `HAT.Put` and `HAT.Put_Line`) is captured and displayed in the [console](../features/console.mdx). Standard input is passed by setting the `livecodes.ada.input` property in JavaScript and is read in Ada using `HAT.Get`/`HAT.Get_Line`. + +### Communication with JavaScript + +The Ada code runs in the context of the result page. A few helper properties and methods are available in the browser global `livecodes.ada` object: + +- `livecodes.ada.input`: The standard input passed to the Ada program. It can be set before the initial run, or passed to `run` for subsequent runs. +- `livecodes.ada.loaded`: A promise that resolves when the Ada compiler is fully loaded (and rejects if it fails to load). Other helpers should be used after this promise resolves. +- `livecodes.ada.output`: The standard output of the last run. +- `livecodes.ada.error`: The compiler diagnostics or runtime error of the last run, if any. +- `livecodes.ada.exitCode`: The exit code of the last run. +- `livecodes.ada.run(input)`: Runs the code in the editor, optionally passing standard input, and returns a promise that resolves to `{ output, error, exitCode }`. + +```js +await livecodes.ada.loaded; +const { output, error, exitCode } = await livecodes.ada.run(livecodes.ada.input); +console.log(output); +``` + +## Language Info + +### Name + +`ada-wasm` + +### Aliases / Extensions + +`ada`, `adb`, `ads`, `hac`, `wasm.ada` + +### Editor + +`script` + +## Compiler + +[HAC](https://github.com/zertovitch/hac) (HAC Ada Compiler), an Ada compiler and p-code virtual machine written in Ada, compiled to WebAssembly. It is packaged for the browser by [`@live-codes/ada-wasm`](https://www.npmjs.com/package/@live-codes/ada-wasm). + +### Version + +HAC 0.45 + +## Code Formatting + +Not supported. + +## Limitations + +HAC implements a subset of Ada, so not all Ada programs compile: + +- No access types (pointers), no generics, and only constrained types. +- `String` support is limited; use `HAT.VString` for variable-length strings. +- Tasking is partially implemented. +- Programs are single-file. Use the `HAT` package for input/output. + +## Example Usage + +This example passes standard input and runs the code again on each click, using the browser global `livecodes.ada` (also check the code in the HTML editor): + + + +## 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 reinitialize the Ada WebAssembly compiler. This behavior can be disabled by adding the code comment `-- __livecodes_reload__` to the Ada 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. + +## Starter Template + +https://livecodes.io/?template=ada-wasm + +## Links + +- [Ada Information Clearinghouse](https://www.adaic.org/) +- [Ada Programming (Wikibooks)](https://en.wikibooks.org/wiki/Ada_Programming) +- [HAC Ada Compiler](https://github.com/zertovitch/hac) +- [@live-codes/ada-wasm](https://www.npmjs.com/package/@live-codes/ada-wasm) diff --git a/docs/src/components/LanguageSliders.tsx b/docs/src/components/LanguageSliders.tsx index 88dbd76c58..68fcdd031d 100644 --- a/docs/src/components/LanguageSliders.tsx +++ b/docs/src/components/LanguageSliders.tsx @@ -97,7 +97,6 @@ export default function Sliders() { { name: 'haskell', title: 'Haskell' }, { name: 'haskell-wasm', title: 'Haskell (Wasm)' }, { name: 'zig-wasm', title: 'Zig (Wasm)' }, - { name: 'pascal', title: 'Pascal' }, { name: 'java', title: 'Java' }, { name: 'csharp-wasm', title: 'C# (Wasm)' }, { name: 'vb-wasm', title: 'VB.NET (Wasm)' }, @@ -116,6 +115,8 @@ export default function Sliders() { { name: 'fennel', title: 'Fennel' }, { name: 'julia', title: 'Julia' }, { name: 'tcl', title: 'Tcl' }, + { name: 'ada-wasm', title: 'Ada (Wasm)' }, + { name: 'pascal', title: 'Pascal' }, { name: 'assemblyscript', title: 'AssemblyScript' }, { name: 'wat', title: 'WAT' }, { name: 'sql', title: 'SQL' }, diff --git a/docs/src/components/TemplateList.tsx b/docs/src/components/TemplateList.tsx index c5eed9f3fb..d28479e831 100644 --- a/docs/src/components/TemplateList.tsx +++ b/docs/src/components/TemplateList.tsx @@ -55,7 +55,6 @@ const templates = [ { name: 'haskell', title: 'Haskell Starter', thumbnail: 'haskell.svg' }, { name: 'haskell-wasm', title: 'Haskell (Wasm) Starter', thumbnail: 'haskell.svg' }, { name: 'zig-wasm', title: 'Zig (Wasm) Starter', thumbnail: 'zig.svg' }, - { name: 'pascal', title: 'Pascal Starter', thumbnail: 'pascal.png' }, { name: 'java', title: 'Java Starter', thumbnail: 'java.svg' }, { name: 'csharp-wasm', title: 'C# (Wasm)', thumbnail: 'csharp.svg' }, { name: 'vb-wasm', title: 'VB.NET (Wasm)', thumbnail: 'vb.svg' }, @@ -74,6 +73,8 @@ const templates = [ { name: 'fennel', title: 'Fennel Starter', thumbnail: 'fennel.svg' }, { name: 'julia', title: 'Julia Starter', thumbnail: 'julia.svg' }, { name: 'tcl', title: 'Tcl Starter', thumbnail: 'tcl.svg' }, + { name: 'ada-wasm', title: 'Ada (Wasm) Starter', thumbnail: 'ada.svg' }, + { name: 'pascal', title: 'Pascal Starter', thumbnail: 'pascal.png' }, { name: 'markdown', title: 'Markdown Starter', thumbnail: 'markdown.svg' }, { name: 'assemblyscript', title: 'AssemblyScript Starter', thumbnail: 'assemblyscript.svg' }, { name: 'wat', title: 'WebAssembly Text Starter', thumbnail: 'webassembly.svg' }, diff --git a/e2e/specs/starter.spec.ts b/e2e/specs/starter.spec.ts index 593807883f..1a9c8f1bdb 100644 --- a/e2e/specs/starter.spec.ts +++ b/e2e/specs/starter.spec.ts @@ -380,6 +380,32 @@ test.describe('Starter Templates from UI', () => { await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); }); + test('ada-wasm Starter', async ({ page, getTestUrl }) => { + // the HAC Ada compiler (~1.4 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=Ada (Wasm) Starter'); + + await waitForEditorFocus(app); + await waitForResultUpdate(); + + // the counter stays disabled until the compiler 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, Ada!'); + await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); + }); + test('c-wasm Starter', async ({ page, getTestUrl }) => { // the compiler, linker and sysroot (~29 MB) are downloaded on the first run test.slow(); diff --git a/functions/vendors/templates.js b/functions/vendors/templates.js index 778222ad6b..4965caaf86 100644 --- a/functions/vendors/templates.js +++ b/functions/vendors/templates.js @@ -53,7 +53,6 @@ export const starterTemplates = { "rust-wasm": "Rust (Wasm) Starter", "swift-wasm": "Swift (Wasm) Starter", "zig-wasm": "Zig (Wasm) Starter", - "pascal": "Pascal Starter", "java": "Java Starter", "csharp-wasm": "C# (Wasm) Starter", "vb-wasm": "VB.NET (Wasm) Starter", @@ -74,6 +73,8 @@ export const starterTemplates = { "fennel": "Fennel Starter", "julia": "Julia Starter", "tcl": "Tcl Starter", + "ada-wasm": "Ada (Wasm) Starter", + "pascal": "Pascal Starter", "assemblyscript": "AssemblyScript Starter", "wat": "WebAssembly Text Starter", "sql": "SQL Starter", diff --git a/scripts/build.js b/scripts/build.js index 1082e5535c..4076296545 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -268,6 +268,7 @@ const iifeBuild = () => 'languages/solid/lang-solid-compiler.ts', 'languages/sql/lang-sql-compiler.ts', 'languages/swift-wasm/lang-swift-wasm-script.ts', + 'languages/ada-wasm/lang-ada-wasm-script.ts', 'languages/sql/lang-sql-script.ts', 'languages/svelte/lang-svelte-compiler.ts', 'languages/tcl/lang-tcl-script.ts', diff --git a/server/php/inc/starter-templates.json b/server/php/inc/starter-templates.json index 6e0d4057da..59211a6c48 100644 --- a/server/php/inc/starter-templates.json +++ b/server/php/inc/starter-templates.json @@ -53,7 +53,6 @@ "rust-wasm": "Rust (Wasm) Starter", "swift-wasm": "Swift (Wasm) Starter", "zig-wasm": "Zig (Wasm) Starter", - "pascal": "Pascal Starter", "java": "Java Starter", "csharp-wasm": "C# (Wasm) Starter", "vb-wasm": "VB.NET (Wasm) Starter", @@ -74,6 +73,8 @@ "fennel": "Fennel Starter", "julia": "Julia Starter", "tcl": "Tcl Starter", + "ada-wasm": "Ada (Wasm) Starter", + "pascal": "Pascal Starter", "assemblyscript": "AssemblyScript Starter", "wat": "WebAssembly Text Starter", "sql": "SQL Starter", diff --git a/src/livecodes/UI/command-menu-actions.ts b/src/livecodes/UI/command-menu-actions.ts index cf1d5e3090..de483b577a 100644 --- a/src/livecodes/UI/command-menu-actions.ts +++ b/src/livecodes/UI/command-menu-actions.ts @@ -309,7 +309,6 @@ export const getCommandMenuActions = ({ 'rust-wasm', 'swift-wasm', 'zig-wasm', - 'pascal', 'java', 'csharp-wasm', 'vb-wasm', @@ -330,6 +329,8 @@ export const getCommandMenuActions = ({ 'fennel', 'julia', 'tcl', + 'ada-wasm', + 'pascal', 'assemblyscript', 'wat', 'sql', diff --git a/src/livecodes/assets/templates/ada.png b/src/livecodes/assets/templates/ada.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3eca2c6d90a6f7951560d4a0518b2745cd25c7 GIT binary patch literal 10104 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 J +

Ada (Wasm)

+
+ Ada is compiled and run entirely in the browser by + HAC, an Ada + compiler written in Ada and compiled to WebAssembly. No server is involved. +
+ +

art-template

@@ -116,6 +149,40 @@

BBCode

+
+

Blockly

+
+ A JavaScript library for building visual programming editors. +
+ +

Civet

@@ -487,108 +554,6 @@

C# (Wasm)

- -
-

VB.NET (Wasm)

-
- VB.NET compiler running on WebAssembly, using - Roslyn and the - .NET WebAssembly runtime -
- -
- -
-

Zig (Wasm)

-
- Zig compiler running on WebAssembly. -
- -
- -
-

Pascal

-
- Pascal running in the browser using pas2js (by the Free Pascal team) compiled to WebAssembly. -
- -
-

Diagrams

(Experimental)
@@ -1462,157 +1427,90 @@

Nunjucks

-
-

Rust (Wasm)

-
- Rust is interpreted by - Miri (the Rust - mid-level IR interpreter) compiled to WebAssembly, running entirely in the browser. +
+

OCaml

+
+ OCaml is an industrial-strength programming language supporting functional, imperative and + object-oriented styles.
-
-
-

Swift (Wasm)

-
- Swift is compiled to WebAssembly by the Swift compiler itself: swift-frontend and - wasm-ld, both compiled to WebAssembly, run entirely in the browser. No server is - involved. +
+

Pascal

+
+ Pascal running in the browser using pas2js (by the Free Pascal team) compiled to WebAssembly.
-
-
-

Twig

-
- A JavaScript implementation of the - Twig - PHP templating language by - Twig.js -
-
+
+

Rust (Wasm)

+
+ Rust is interpreted by + Miri (the Rust + mid-level IR interpreter) compiled to WebAssembly, running entirely in the browser. +
+ +

Sass

Syntactically Awesome Style Sheets.
@@ -2347,6 +2276,49 @@

Stencil

+
+

CSS Frameworks and Processors

+ +

Stylis

Light-weight css preprocessor.
@@ -2415,6 +2387,39 @@

Svelte

+
+

Swift (Wasm)

+
+ Swift is compiled to WebAssembly by the Swift compiler itself: swift-frontend and + wasm-ld, both compiled to WebAssembly, run entirely in the browser. No server is + involved. +
+ +

Tcl (Tool Command Language)

@@ -2501,6 +2506,38 @@

TSX

+
+

Twig

+
+ A JavaScript implementation of the + Twig + PHP templating language by + Twig.js +
+ +

TypeScript

A Typed Superset of JavaScript.
@@ -2525,6 +2562,44 @@

TypeScript

+
+

VB.NET (Wasm)

+
+ VB.NET compiler running on WebAssembly, using + Roslyn and the + .NET WebAssembly runtime +
+ +

Vento

@@ -2644,80 +2719,34 @@

WebAssembly Text Format

-
-

Blockly

-
- A JavaScript library for building visual programming editors. +
+

Zig (Wasm)

+
+ Zig compiler running on WebAssembly.
-
-
-

CSS Frameworks and Processors

- -
diff --git a/src/livecodes/i18n/locales/en/language-info.lokalise.json b/src/livecodes/i18n/locales/en/language-info.lokalise.json index e062c35670..5db1650b71 100644 --- a/src/livecodes/i18n/locales/en/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/en/language-info.lokalise.json @@ -1,5 +1,17 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "notes": "### ###\n\n\n", + "translation": "Ada is compiled and run entirely in the browser by HAC, an Ada compiler written in Ada and compiled to WebAssembly. No server is involved." + }, + "adaWasm.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": " Ada Information Clearinghouse Ada Programming (Wikibooks) HAC repo LiveCodes Documentation Load starter template " + }, + "adaWasm.name": { + "notes": "", + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "notes": "", "translation": "High performance JavaScript templating engine." diff --git a/src/livecodes/i18n/locales/en/language-info.ts b/src/livecodes/i18n/locales/en/language-info.ts index d23bdc9d3f..c3bddc3222 100644 --- a/src/livecodes/i18n/locales/en/language-info.ts +++ b/src/livecodes/i18n/locales/en/language-info.ts @@ -10,6 +10,11 @@ import type { I18nTranslationTemplate } from '../models'; // In view of this, properties declared in I18nAttributes (and those attributes might be used in future) shall not be used as a nested key. const languageInfo = { + adaWasm: { + desc: 'Ada is compiled and run entirely in the browser by <1>HAC, an Ada compiler written in Ada and compiled to WebAssembly. No server is involved.', + link: '<1> <2>Ada Information Clearinghouse <3> <4>Ada Programming (Wikibooks) <5> <6>HAC repo <7> <8>LiveCodes Documentation <9> <10>Load starter template ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'High performance JavaScript templating engine.', link: '<1> <2>art-template official website <3> <4>art-template documentation ', diff --git a/src/livecodes/i18n/locales/en/translation.lokalise.json b/src/livecodes/i18n/locales/en/translation.lokalise.json index 39043df37a..a71d37884b 100644 --- a/src/livecodes/i18n/locales/en/translation.lokalise.json +++ b/src/livecodes/i18n/locales/en/translation.lokalise.json @@ -2544,6 +2544,10 @@ "notes": "", "translation": "Search templates..." }, + "templates.starter.ada-wasm": { + "notes": "", + "translation": "Ada (Wasm) Starter" + }, "templates.starter.angular": { "notes": "", "translation": "Angular Starter" diff --git a/src/livecodes/i18n/locales/en/translation.ts b/src/livecodes/i18n/locales/en/translation.ts index 1e07173b6e..122cc11c0e 100644 --- a/src/livecodes/i18n/locales/en/translation.ts +++ b/src/livecodes/i18n/locales/en/translation.ts @@ -982,6 +982,7 @@ const translation = { placeholder: 'Search templates...', }, starter: { + 'ada-wasm': 'Ada (Wasm) Starter', angular: 'Angular Starter', assemblyscript: 'AssemblyScript Starter', astro: 'Astro Starter', diff --git a/src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts b/src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts new file mode 100644 index 0000000000..b91c01d06f --- /dev/null +++ b/src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts @@ -0,0 +1,34 @@ +import type { Compiler, CompileOptions, Config } from '../../../models'; +import { adaWasm } from '../lang-ada-wasm'; + +describe('ada-wasm', () => { + const compiler = adaWasm.compiler as Compiler; + + test('has the expected name, title and extensions', () => { + expect(adaWasm.name).toBe('ada-wasm'); + expect(adaWasm.title).toBe('Ada (Wasm)'); + expect(adaWasm.extensions).toEqual( + expect.arrayContaining(['ada', 'ada-wasm', 'adb', 'ads', 'hac', 'wasm.ada']), + ); + }); + + test('uses the script editor with the ada-wasm script type', () => { + expect(adaWasm.editor).toBe('script'); + expect(compiler.scriptType).toBe('text/ada-wasm'); + expect(compiler.compiledCodeLanguage).toBe('ada'); + }); + + test('loads only the runner script on the page (the runtime lives in a worker)', () => { + const scripts = + typeof compiler.scripts === 'function' + ? compiler.scripts({ baseUrl: 'base/', config: {} as Config, compiled: '' }) + : compiler.scripts; + expect(scripts).toEqual(['base/{{hash:lang-ada-wasm-script.js}}']); + }); + + test('compiler factory is the identity (compilation happens in the runner)', async () => { + const fn = await compiler.factory({} as Config, ''); + const code = 'procedure H is begin null; end H;'; + expect(await fn(code, {} as CompileOptions as any)).toBe(code); + }); +}); diff --git a/src/livecodes/languages/ada-wasm/index.ts b/src/livecodes/languages/ada-wasm/index.ts new file mode 100644 index 0000000000..c44098e971 --- /dev/null +++ b/src/livecodes/languages/ada-wasm/index.ts @@ -0,0 +1 @@ +export * from './lang-ada-wasm'; diff --git a/src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts b/src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts new file mode 100644 index 0000000000..a995a94706 --- /dev/null +++ b/src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts @@ -0,0 +1,295 @@ +/* eslint-disable no-console */ +import { createWorkerFromContent, getErrorMessage } from '../../utils/utils'; +import { adaWasmBaseUrl } from '../../vendors'; + +// Ada is compiled and run by HAC (@live-codes/ada-wasm), a single self-contained +// WebAssembly bundle. It runs inside a dedicated worker so a non-terminating +// program can be torn down without hanging the result page. + +const SCRIPT_TYPE = 'text/ada-wasm'; + +const BOOT_TIMEOUT_MS = 2 * 60_000; +const RUN_TIMEOUT_MS = 60_000; + +interface WorkerRunResult { + stdout: string; + stderr: string; + exitCode: number; +} + +interface RunResult { + input: string; + output: string | null; + error: string | null; + exitCode: number | null; +} + +interface Runner { + ensureReady: () => Promise; + run: (code: string, input: string) => Promise; + destroy: () => void; +} + +interface AdaWasmApi { + ready: boolean; + input: string; + output: string | null; + error: string | null; + exitCode: number | null; + loaded: Promise; + init: Promise | null; + runner?: Runner; + run: (input?: string) => Promise; +} + +declare const window: Window & { + livecodes: Record; +}; + +const withTimeout = ( + promise: Promise, + ms: number, + message: string, + onTimeout?: () => void, +): Promise => + new Promise((resolve, reject) => { + const timer = setTimeout(() => { + onTimeout?.(); + reject(new Error(message)); + }, ms); + promise.then( + (value) => { + clearTimeout(timer); + resolve(value); + }, + (error) => { + clearTimeout(timer); + reject(error); + }, + ); + }); + +const getWorkerSrc = () => ` +importScripts(${JSON.stringify(adaWasmBaseUrl + 'dist/ada-wasm.iife.js')}); + +let runtimePromise = null; +const getRuntime = () => { + runtimePromise = runtimePromise || self.AdaWasm.createRuntime(); + return runtimePromise; +}; + +addEventListener('message', async (event) => { + const { id, code, input } = event.data; + try { + const runtime = await getRuntime(); + const result = await runtime.run(code, { input }); + postMessage({ + id, + result: { + stdout: result.stdout, + stderr: result.stderr, + exitCode: result.exitCode, + }, + }); + } catch (error) { + postMessage({ id, error: String((error && error.message) || error) }); + } +}); + +getRuntime().then( + () => postMessage({ type: 'ready' }), + (error) => postMessage({ type: 'error', message: String((error && error.message) || error) }), +); +`; + +interface Pending { + resolve: (result: WorkerRunResult) => void; + reject: (error: Error) => void; +} + +const createRunner = (): Runner => { + let worker: Worker | null = null; + let ready: Promise | null = null; + let settleReady: ((error?: Error) => void) | null = null; + let pending: Record = {}; + let nextId = 1; + + const failAll = (error: Error) => { + for (const id of Object.keys(pending)) { + pending[Number(id)].reject(error); + } + pending = {}; + }; + + const teardown = (error?: Error) => { + worker?.terminate(); + worker = null; + ready = null; + settleReady?.(error); + settleReady = null; + if (error) failAll(error); + }; + + const onMessage = (event: MessageEvent) => { + const message = event.data ?? {}; + if (message.type === 'ready') { + settleReady?.(); + settleReady = null; + return; + } + if (message.type === 'error') { + // The runtime failed to load (network, or the browser is unsupported). + teardown(new Error(message.message)); + return; + } + const request = pending[message.id]; + if (!request) return; + delete pending[message.id]; + if (message.error != null) { + request.reject(new Error(message.error)); + } else { + request.resolve(message.result); + } + }; + + const spawn = () => { + ready = new Promise((resolve, reject) => { + settleReady = (error?: Error) => (error ? reject(error) : resolve()); + }); + worker = createWorkerFromContent(getWorkerSrc()); + worker.onmessage = onMessage; + worker.onerror = (event) => teardown(new Error(`The Ada worker crashed: ${event.message}`)); + }; + + const ensureReady = async () => { + if (!ready) spawn(); + await ready; + }; + + const run = (code: string, input: string) => + ensureReady().then( + () => + new Promise((resolve, reject) => { + const id = nextId++; + pending[id] = { resolve, reject }; + worker?.postMessage({ id, code, input }); + }), + ); + + return { ensureReady, run, destroy: () => teardown() }; +}; + +const setResult = ( + input: string, + output: string | null, + error: string | null, + exitCode: number | null, +): RunResult => { + adaWasm.input = input; + adaWasm.output = output; + adaWasm.error = error; + adaWasm.exitCode = exitCode; + adaWasm.ready = true; + + if (error != null) { + console.error(error); + } else if (output != null) { + console.log(output); + } + return { input, output, error, exitCode }; +}; + +window.livecodes.adaWasm ??= {} as AdaWasmApi; + +const adaWasm = window.livecodes.adaWasm; +adaWasm.ready = false; + +/** Start (once) loading the runtime in a worker, showing the loading indicator. */ +const ensureLoaded = (runner: Runner): Promise => { + let init = adaWasm.init; + if (!init) { + init = (async () => { + parent.postMessage({ type: 'loading', payload: true }, '*'); + try { + await withTimeout( + runner.ensureReady(), + BOOT_TIMEOUT_MS, + 'Timed out while loading the Ada compiler.', + () => runner.destroy(), + ); + } finally { + parent.postMessage({ type: 'loading', payload: false }, '*'); + } + })().catch((error: Error) => { + // Reset so a later run can retry the download. + adaWasm.init = null; + throw error; + }); + // The failure is surfaced through `run`; do not also report it unhandled. + init.catch(() => undefined); + adaWasm.init = init; + } + return init; +}; + +adaWasm.loaded = new Promise((resolve) => { + const interval = setInterval(() => { + if (adaWasm.ready) { + clearInterval(interval); + resolve(); + } + }, 50); +}); + +adaWasm.run = async (input?: string) => { + const stdin = `${input ?? adaWasm.input ?? ''}`; + adaWasm.input = stdin; + + let code = ''; + document.querySelectorAll(`script[type="${SCRIPT_TYPE}"]`).forEach((script) => { + code += `${script.innerHTML}\n`; + }); + if (!code.trim()) return setResult(stdin, null, null, 0); + + const runner = (adaWasm.runner = adaWasm.runner || createRunner()); + + try { + await ensureLoaded(runner); + } catch (error) { + return setResult(stdin, null, `Error: ${getErrorMessage(error)}`, 1); + } + + try { + const result = await withTimeout( + runner.run(code, stdin), + RUN_TIMEOUT_MS, + 'Ada execution timed out.', + () => { + // A non-terminating program leaves the worker busy, so tear it down and + // let the next run start from a fresh worker. + runner.destroy(); + adaWasm.runner = undefined; + adaWasm.init = null; + }, + ); + + // Compiler diagnostics (and runtime errors) go to stderr; a clean compile + // produces none. + const stderr = result.stderr.trim(); + if (stderr) { + return setResult(stdin, result.stdout || null, stderr, result.exitCode || 1); + } + return setResult(stdin, result.stdout, null, result.exitCode); + } catch (error) { + return setResult(stdin, null, `Error: ${getErrorMessage(error)}`, 1); + } +}; + +// Alias so both `livecodes.adaWasm` and `livecodes.ada` are available. +window.livecodes.ada = adaWasm; + +window.addEventListener('load', async () => { + parent.postMessage({ type: 'loading', payload: true }, '*'); + await adaWasm.run(adaWasm.input); + parent.postMessage({ type: 'loading', payload: false }, '*'); +}); diff --git a/src/livecodes/languages/ada-wasm/lang-ada-wasm.ts b/src/livecodes/languages/ada-wasm/lang-ada-wasm.ts new file mode 100644 index 0000000000..d927d6cdc5 --- /dev/null +++ b/src/livecodes/languages/ada-wasm/lang-ada-wasm.ts @@ -0,0 +1,25 @@ +import { codemirrorLegacy } from '../../editor/codemirror/utils'; +import type { LanguageSpecs } from '../../models'; +import { codeMirrorBaseUrl, monacoLanguagesBaseUrl } from '../../vendors'; + +export const adaWasm: LanguageSpecs = { + name: 'ada-wasm', + title: 'Ada (Wasm)', + compiler: { + factory: () => async (code) => code, + scripts: ({ baseUrl }) => [baseUrl + '{{hash:lang-ada-wasm-script.js}}'], + scriptType: 'text/ada-wasm', + compiledCodeLanguage: 'ada-wasm', + liveReload: true, + }, + extensions: ['ada', 'adb', 'ads', 'hac', 'wasm.ada'], + editor: 'script', + editorSupport: { + monaco: { languageSupport: monacoLanguagesBaseUrl + 'ada.js', language: 'ada' }, + codemirror: { + languageSupport: async () => + codemirrorLegacy((await import(codeMirrorBaseUrl + 'codemirror-lang-pascal.js')).pascal), + }, + codejar: { language: 'ada' }, + }, +}; diff --git a/src/livecodes/languages/languages.ts b/src/livecodes/languages/languages.ts index d5c82b27c8..36e5fe549b 100644 --- a/src/livecodes/languages/languages.ts +++ b/src/livecodes/languages/languages.ts @@ -1,4 +1,5 @@ import type { LanguageSpecs } from '../models'; +import { adaWasm } from './ada-wasm'; import { artTemplate } from './art-template'; import { asciidoc } from './asciidoc'; import { assemblyscript } from './assemblyscript'; @@ -169,7 +170,6 @@ export const languages: LanguageSpecs[] = [ rustWasm, swiftWasm, zigWasm, - pascal, java, csharpWasm, vbWasm, @@ -190,6 +190,8 @@ export const languages: LanguageSpecs[] = [ fennel, julia, tcl, + adaWasm, + pascal, assemblyscript, wat, sql, diff --git a/src/livecodes/models.ts b/src/livecodes/models.ts index 123d42e961..5be16541a8 100644 --- a/src/livecodes/models.ts +++ b/src/livecodes/models.ts @@ -219,6 +219,7 @@ export interface Compiler { | 'text/minizinc' | 'text/go-wasm' | 'text/swift-wasm' + | 'text/ada-wasm' | 'application/json' | 'application/lua' | 'text/fennel' @@ -266,6 +267,7 @@ export type TemplateAlias = | 'rust' | 'rs' | 'swift' + | 'ada' | 'hs' | 'hs-wasm' | 'pl' diff --git a/src/livecodes/templates/starter/ada-wasm-starter.ts b/src/livecodes/templates/starter/ada-wasm-starter.ts new file mode 100644 index 0000000000..9f5edf4ebf --- /dev/null +++ b/src/livecodes/templates/starter/ada-wasm-starter.ts @@ -0,0 +1,96 @@ +import type { Template } from '../../models'; + +export const adaWasmStarter: Template = { + name: 'ada-wasm', + aliases: ['ada'], + title: window.deps.translateString('templates.starter.ada-wasm', 'Ada (Wasm) Starter'), + thumbnail: 'assets/templates/ada.png', + activeEditor: 'script', + markup: { + language: 'html', + content: ` +
    +

    Hello, World!

    + +

    You clicked 0 times.

    + +
    + + +`.trimStart(), + }, + style: { + language: 'css', + content: ` +.container, +.container button { + text-align: center; + font: 1em sans-serif; +} +.logo { + width: 150px; +} +`.trimStart(), + }, + script: { + language: 'ada-wasm', + content: ` +with HAT; use HAT; + +procedure Ada_Demo is + Current : Integer; +begin + -- The current count arrives on standard input, so every run is a fresh + -- program that prints the next value. + Get (Current); + Put_Line ("Ada"); + -- The second argument is the field width; 1 avoids the default padding. + Put_Line (Current + 1, 1); +end Ada_Demo; +`.trimStart(), + }, +}; diff --git a/src/livecodes/templates/starter/index.ts b/src/livecodes/templates/starter/index.ts index 065b978a12..eef0e7fde5 100644 --- a/src/livecodes/templates/starter/index.ts +++ b/src/livecodes/templates/starter/index.ts @@ -1,5 +1,6 @@ // this is bundled to build/livecodes/templates.js +import { adaWasmStarter } from './ada-wasm-starter'; import { angularStarter } from './angular-starter'; import { assemblyscriptStarter } from './assemblyscript-starter'; import { astroStarter } from './astro-starter'; @@ -137,7 +138,6 @@ export const starterTemplates = [ rustWasmStarter, swiftWasmStarter, zigWasmStarter, - pascalStarter, javaStarter, csharpWasmStarter, vbWasmStarter, @@ -158,6 +158,8 @@ export const starterTemplates = [ fennelStarter, juliaStarter, tclStarter, + adaWasmStarter, + pascalStarter, assemblyscriptStarter, watStarter, sqlStarter, diff --git a/src/livecodes/vendors.ts b/src/livecodes/vendors.ts index 25b9789f28..001f809d6c 100644 --- a/src/livecodes/vendors.ts +++ b/src/livecodes/vendors.ts @@ -7,6 +7,8 @@ export const vendorsBaseUrl = // 'http://127.0.0.1:8081/'; export const acornUrl = /* @__PURE__ */ getUrl('acorn@8.12.1/dist/acorn.js'); +export const adaWasmBaseUrl = /* @__PURE__ */ getUrl('@live-codes/ada-wasm@0.1.1/'); + export const artTemplateUrl = /* @__PURE__ */ getUrl('art-template@4.13.2/lib/template-web.js'); export const asciidocUrl = /* @__PURE__ */ getUrl( @@ -344,7 +346,7 @@ export const monacoBaseUrl = /* @__PURE__ */ getUrl('@live-codes/monaco-editor@0 export const monacoEmacsUrl = /* @__PURE__ */ getUrl('monaco-emacs@0.3.0/dist/monaco-emacs.js'); export const monacoLanguagesBaseUrl = /* @__PURE__ */ getUrl( - '@live-codes/monaco-languages@0.3.6/dist/', + '@live-codes/monaco-languages@0.3.8/dist/', ); export const monacoThemesBaseUrl = /* @__PURE__ */ getUrl('monaco-themes@0.4.4/themes/'); diff --git a/src/sdk/models.ts b/src/sdk/models.ts index 46a357d626..d5557dacfd 100644 --- a/src/sdk/models.ts +++ b/src/sdk/models.ts @@ -263,6 +263,12 @@ export type Language = | 'swift' | 'swift-wasm' | 'wasm.swift' + | 'ada' + | 'ada-wasm' + | 'adb' + | 'ads' + | 'hac' + | 'wasm.ada' | 'rust' | 'zig' | 'zig-wasm' @@ -462,6 +468,7 @@ export type TemplateName = | 'fanak' | 'rust-wasm' | 'swift-wasm' + | 'ada-wasm' | 'zig-wasm' | 'pascal' | 'perl' diff --git a/storybook/_stories/EmbedOptions/template.ts b/storybook/_stories/EmbedOptions/template.ts index da0d6f4de4..e734bf29f5 100644 --- a/storybook/_stories/EmbedOptions/template.ts +++ b/storybook/_stories/EmbedOptions/template.ts @@ -78,6 +78,8 @@ const storyDef: StoryDef = { Fennel: { props: { template: 'fennel' } }, Julia: { props: { template: 'julia' } }, Tcl: { props: { template: 'tcl' } }, + AdaWasm: { props: { template: 'ada-wasm' } }, + Pascal: { props: { template: 'pascal' } }, AssemblyScript: { props: { template: 'assemblyscript' }, storyName: 'AssemblyScript' }, WebAssemblyText: { props: { template: 'wat' }, storyName: 'WebAssembly Text' }, SQL: { props: { template: 'sql' } }, diff --git a/vendor-licenses.md b/vendor-licenses.md index f2171a41a2..77e959ca41 100644 --- a/vendor-licenses.md +++ b/vendor-licenses.md @@ -4,6 +4,8 @@ This is a list of software packages used by LiveCodes (sorted alphabetically) an Acorn: [MIT License](https://github.com/acornjs/acorn/blob/fb4c5820138c21f93edd801985be5061db21a672/acorn/LICENSE) +Ada (HAC): [MIT License](https://github.com/zertovitch/hac/blob/master/LICENSE) (the HAC Ada Compiler, compiled to WebAssembly and packaged by [@live-codes/ada-wasm](https://www.npmjs.com/package/@live-codes/ada-wasm): [MIT License](https://github.com/live-codes/browser-ada/blob/main/LICENSE). The bundled GNAT/AdaWebPack WebAssembly runtime is [GPL-3.0-or-later with the GCC Runtime Library Exception](https://www.gnu.org/licenses/gcc-exception-3.1.html)) + art-template: [MIT License](https://github.com/aui/art-template/blob/71333a3a6df78f231cb5d795d13872bf4fcd52c2/LICENSE) Asciidoctor.js: [MIT License](https://github.com/asciidoctor/asciidoctor.js/blob/9d57b34084966f35d5c542ae4feed4941bf57903/LICENSE) From 7a618818a5b2712e958d83bb82aad3e61c1e89c7 Mon Sep 17 00:00:00 2001 From: Hatem Hosny Date: Sat, 3 Oct 2026 02:34:49 +0300 Subject: [PATCH 2/5] cleanup --- src/livecodes/templates/starter/ada-wasm-starter.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/livecodes/templates/starter/ada-wasm-starter.ts b/src/livecodes/templates/starter/ada-wasm-starter.ts index 9f5edf4ebf..9801be0ed8 100644 --- a/src/livecodes/templates/starter/ada-wasm-starter.ts +++ b/src/livecodes/templates/starter/ada-wasm-starter.ts @@ -47,7 +47,7 @@ export const adaWasmStarter: Template = { const counter = document.querySelector("#counter"); const name = document.querySelector("#name"); - const [title, count] = output.split('\\n').map(s => s.trim()); + const [title, count] = output.split('\\n'); if (!isNaN(Number(count))) { window.count = Number(count); @@ -88,7 +88,6 @@ begin -- program that prints the next value. Get (Current); Put_Line ("Ada"); - -- The second argument is the field width; 1 avoids the default padding. Put_Line (Current + 1, 1); end Ada_Demo; `.trimStart(), From 8524e426bb2da44f7e0b00aa9f7edb3d791f1dec Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Sat, 3 Oct 2026 00:38:47 +0000 Subject: [PATCH 3/5] test(ada-wasm): align spec assertions with language spec --- .../languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts b/src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts index b91c01d06f..67a586515f 100644 --- a/src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts +++ b/src/livecodes/languages/ada-wasm/__tests__/lang-ada-wasm.spec.ts @@ -1,4 +1,4 @@ -import type { Compiler, CompileOptions, Config } from '../../../models'; +import type { CompileOptions, Compiler, Config } from '../../../models'; import { adaWasm } from '../lang-ada-wasm'; describe('ada-wasm', () => { @@ -8,14 +8,14 @@ describe('ada-wasm', () => { expect(adaWasm.name).toBe('ada-wasm'); expect(adaWasm.title).toBe('Ada (Wasm)'); expect(adaWasm.extensions).toEqual( - expect.arrayContaining(['ada', 'ada-wasm', 'adb', 'ads', 'hac', 'wasm.ada']), + expect.arrayContaining(['ada', 'adb', 'ads', 'hac', 'wasm.ada']), ); }); test('uses the script editor with the ada-wasm script type', () => { expect(adaWasm.editor).toBe('script'); expect(compiler.scriptType).toBe('text/ada-wasm'); - expect(compiler.compiledCodeLanguage).toBe('ada'); + expect(compiler.compiledCodeLanguage).toBe('ada-wasm'); }); test('loads only the runner script on the page (the runtime lives in a worker)', () => { From 68783cf428eec11e14591ffa707b4f2390185748 Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Sat, 3 Oct 2026 00:44:01 +0000 Subject: [PATCH 4/5] i18n: add Ada (Wasm) translations to all locales --- .../i18n/locales/ar/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/ar/language-info.ts | 5 +++++ src/livecodes/i18n/locales/ar/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/ar/translation.ts | 1 + .../i18n/locales/bn/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/bn/language-info.ts | 5 +++++ src/livecodes/i18n/locales/bn/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/bn/translation.ts | 1 + .../i18n/locales/de/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/de/language-info.ts | 5 +++++ src/livecodes/i18n/locales/de/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/de/translation.ts | 1 + .../i18n/locales/es/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/es/language-info.ts | 5 +++++ src/livecodes/i18n/locales/es/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/es/translation.ts | 1 + .../i18n/locales/fa/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/fa/language-info.ts | 5 +++++ src/livecodes/i18n/locales/fa/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/fa/translation.ts | 1 + .../i18n/locales/fr/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/fr/language-info.ts | 5 +++++ src/livecodes/i18n/locales/fr/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/fr/translation.ts | 1 + .../i18n/locales/hi/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/hi/language-info.ts | 5 +++++ src/livecodes/i18n/locales/hi/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/hi/translation.ts | 1 + .../i18n/locales/hu/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/hu/language-info.ts | 5 +++++ src/livecodes/i18n/locales/hu/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/hu/translation.ts | 1 + .../i18n/locales/id/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/id/language-info.ts | 5 +++++ src/livecodes/i18n/locales/id/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/id/translation.ts | 1 + .../i18n/locales/it/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/it/language-info.ts | 5 +++++ src/livecodes/i18n/locales/it/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/it/translation.ts | 1 + .../i18n/locales/ja/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/ja/language-info.ts | 5 +++++ src/livecodes/i18n/locales/ja/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/ja/translation.ts | 1 + .../i18n/locales/nl/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/nl/language-info.ts | 5 +++++ src/livecodes/i18n/locales/nl/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/nl/translation.ts | 1 + .../i18n/locales/pt/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/pt/language-info.ts | 5 +++++ src/livecodes/i18n/locales/pt/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/pt/translation.ts | 1 + .../i18n/locales/ru/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/ru/language-info.ts | 5 +++++ src/livecodes/i18n/locales/ru/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/ru/translation.ts | 1 + .../i18n/locales/tr/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/tr/language-info.ts | 5 +++++ src/livecodes/i18n/locales/tr/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/tr/translation.ts | 1 + .../i18n/locales/ur/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/ur/language-info.ts | 5 +++++ src/livecodes/i18n/locales/ur/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/ur/translation.ts | 1 + .../i18n/locales/zh-CN/language-info.lokalise.json | 9 +++++++++ src/livecodes/i18n/locales/zh-CN/language-info.ts | 5 +++++ .../i18n/locales/zh-CN/translation.lokalise.json | 3 +++ src/livecodes/i18n/locales/zh-CN/translation.ts | 1 + 68 files changed, 306 insertions(+) diff --git a/src/livecodes/i18n/locales/ar/language-info.lokalise.json b/src/livecodes/i18n/locales/ar/language-info.lokalise.json index 38023333ae..820f11e47e 100644 --- a/src/livecodes/i18n/locales/ar/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ar/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "يتم تجميع Ada وتشغيله بالكامل داخل المتصفح بواسطة <1>HAC، وهو مُترجم Ada مكتوب بلغة Ada ومُجمَّع إلى WebAssembly. لا يتضمن ذلك أي خادم." + }, + "adaWasm.link": { + "translation": " مركز معلومات Ada برمجة Ada (ويكيبوكس) مستودع HAC وثائق LiveCodes تحميل قالب البداية " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "محرك قوالب جافا سكريبت عالي الأداء." }, diff --git a/src/livecodes/i18n/locales/ar/language-info.ts b/src/livecodes/i18n/locales/ar/language-info.ts index 1b2f626006..16dd949bed 100644 --- a/src/livecodes/i18n/locales/ar/language-info.ts +++ b/src/livecodes/i18n/locales/ar/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'يتم تجميع Ada وتشغيله بالكامل داخل المتصفح بواسطة <1>HAC، وهو مُترجم Ada مكتوب بلغة Ada ومُجمَّع إلى WebAssembly. لا يتضمن ذلك أي خادم.', + link: '<1> <2>مركز معلومات Ada <3> <4>برمجة Ada (ويكيبوكس) <5> <6>مستودع HAC <7> <8>وثائق LiveCodes <9> <10>تحميل قالب البداية ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'محرك قوالب جافا سكريبت عالي الأداء.', link: '<1> <2>الموقع الرسمي لـ art-template <3> <4>وثائق art-template ', diff --git a/src/livecodes/i18n/locales/ar/translation.lokalise.json b/src/livecodes/i18n/locales/ar/translation.lokalise.json index c6b9eb8552..af9cd63c23 100644 --- a/src/livecodes/i18n/locales/ar/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ar/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "بحث في القوالب..." }, + "templates.starter.ada-wasm": { + "translation": "قالب Ada (Wasm)" + }, "templates.starter.angular": { "translation": "قالب Angular" }, diff --git a/src/livecodes/i18n/locales/ar/translation.ts b/src/livecodes/i18n/locales/ar/translation.ts index 39dbc343fe..f5850a8907 100644 --- a/src/livecodes/i18n/locales/ar/translation.ts +++ b/src/livecodes/i18n/locales/ar/translation.ts @@ -975,6 +975,7 @@ const translation: I18nTranslation = { placeholder: 'بحث في القوالب...', }, starter: { + 'ada-wasm': 'قالب Ada (Wasm)', angular: 'قالب Angular', assemblyscript: 'قالب AssemblyScript', astro: 'قالب Astro', diff --git a/src/livecodes/i18n/locales/bn/language-info.lokalise.json b/src/livecodes/i18n/locales/bn/language-info.lokalise.json index cfc18bef11..a00baa7d34 100644 --- a/src/livecodes/i18n/locales/bn/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/bn/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada সম্পূর্ণরূপে ব্রাউজারে <1>HAC দ্বারা কম্পাইল ও চালিত হয়, যা Ada-তে লেখা এবং WebAssembly-তে কম্পাইল করা একটি Ada কম্পাইলার। কোনো সার্ভার জড়িত নয়।" + }, + "adaWasm.link": { + "translation": " Ada তথ্য কেন্দ্র Ada প্রোগ্রামিং (উইকিবই) HAC রিপো LiveCodes ডকুমেন্টেশন স্টার্টার টেমপ্লেট লোড করুন " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "উচ্চ কর্মক্ষমতা সম্পন্ন JavaScript টেমপ্লেটিং ইঞ্জিন।" }, diff --git a/src/livecodes/i18n/locales/bn/language-info.ts b/src/livecodes/i18n/locales/bn/language-info.ts index 1f5e5385f0..f0e077f321 100644 --- a/src/livecodes/i18n/locales/bn/language-info.ts +++ b/src/livecodes/i18n/locales/bn/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada সম্পূর্ণরূপে ব্রাউজারে <1>HAC দ্বারা কম্পাইল ও চালিত হয়, যা Ada-তে লেখা এবং WebAssembly-তে কম্পাইল করা একটি Ada কম্পাইলার। কোনো সার্ভার জড়িত নয়।', + link: '<1> <2>Ada তথ্য কেন্দ্র <3> <4>Ada প্রোগ্রামিং (উইকিবই) <5> <6>HAC রিপো <7> <8>LiveCodes ডকুমেন্টেশন <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'উচ্চ কর্মক্ষমতা সম্পন্ন JavaScript টেমপ্লেটিং ইঞ্জিন।', link: '<1> <2>art-template অফিসিয়াল ওয়েবসাইট <3> <4>art-template ডকুমেন্টেশন ', diff --git a/src/livecodes/i18n/locales/bn/translation.lokalise.json b/src/livecodes/i18n/locales/bn/translation.lokalise.json index 3e607cb36d..6a5f6bb154 100644 --- a/src/livecodes/i18n/locales/bn/translation.lokalise.json +++ b/src/livecodes/i18n/locales/bn/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "টেমপ্লেটগুলিতে অনুসন্ধান করুন..." }, + "templates.starter.ada-wasm": { + "translation": "Ada (Wasm) স্টার্টার" + }, "templates.starter.angular": { "translation": "Angular স্টার্টার" }, diff --git a/src/livecodes/i18n/locales/bn/translation.ts b/src/livecodes/i18n/locales/bn/translation.ts index 13846b917d..3e687e4e2a 100644 --- a/src/livecodes/i18n/locales/bn/translation.ts +++ b/src/livecodes/i18n/locales/bn/translation.ts @@ -975,6 +975,7 @@ const translation: I18nTranslation = { placeholder: 'টেমপ্লেটগুলিতে অনুসন্ধান করুন...', }, starter: { + 'ada-wasm': 'Ada (Wasm) স্টার্টার', angular: 'Angular স্টার্টার', assemblyscript: 'AssemblyScript স্টার্টার', astro: 'Astro স্টার্টার', diff --git a/src/livecodes/i18n/locales/de/language-info.lokalise.json b/src/livecodes/i18n/locales/de/language-info.lokalise.json index 34732b7641..f2d167c930 100644 --- a/src/livecodes/i18n/locales/de/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/de/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada wird vollständig im Browser von <1>HAC kompiliert und ausgeführt, einem in Ada geschriebenen und zu WebAssembly kompilierten Ada-Compiler. Es ist kein Server beteiligt." + }, + "adaWasm.link": { + "translation": " Ada-Informationsstelle Ada-Programmierung (Wikibooks) HAC Repository LiveCodes-Dokumentation Starter-Vorlage laden " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Hochleistungsfähige JavaScript-Templating-Engine." }, diff --git a/src/livecodes/i18n/locales/de/language-info.ts b/src/livecodes/i18n/locales/de/language-info.ts index a54f810e9a..9d3dae2fc7 100644 --- a/src/livecodes/i18n/locales/de/language-info.ts +++ b/src/livecodes/i18n/locales/de/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada wird vollständig im Browser von <1>HAC kompiliert und ausgeführt, einem in Ada geschriebenen und zu WebAssembly kompilierten Ada-Compiler. Es ist kein Server beteiligt.', + link: '<1> <2>Ada-Informationsstelle <3> <4>Ada-Programmierung (Wikibooks) <5> <6>HAC Repository <7> <8>LiveCodes-Dokumentation <9> <10>Starter-Vorlage laden ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Hochleistungsfähige JavaScript-Templating-Engine.', link: '<1> <2>art-template offizielle Website <3> <4>art-template Dokumentation ', diff --git a/src/livecodes/i18n/locales/de/translation.lokalise.json b/src/livecodes/i18n/locales/de/translation.lokalise.json index ad2ff44b02..3e852bac76 100644 --- a/src/livecodes/i18n/locales/de/translation.lokalise.json +++ b/src/livecodes/i18n/locales/de/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Suche in Vorlagen..." }, + "templates.starter.ada-wasm": { + "translation": "Ada (Wasm)-Starter" + }, "templates.starter.angular": { "translation": "Angular-Starter" }, diff --git a/src/livecodes/i18n/locales/de/translation.ts b/src/livecodes/i18n/locales/de/translation.ts index 44da326b87..1df12f7cb7 100644 --- a/src/livecodes/i18n/locales/de/translation.ts +++ b/src/livecodes/i18n/locales/de/translation.ts @@ -977,6 +977,7 @@ const translation: I18nTranslation = { placeholder: 'Suche in Vorlagen...', }, starter: { + 'ada-wasm': 'Ada (Wasm)-Starter', angular: 'Angular-Starter', assemblyscript: 'AssemblyScript-Starter', astro: 'Astro-Starter', diff --git a/src/livecodes/i18n/locales/es/language-info.lokalise.json b/src/livecodes/i18n/locales/es/language-info.lokalise.json index d7b4504d3c..7079f07103 100644 --- a/src/livecodes/i18n/locales/es/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/es/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada se compila y ejecuta íntegramente en el navegador mediante <1>HAC, un compilador de Ada escrito en Ada y compilado a WebAssembly. No hay ningún servidor involucrado." + }, + "adaWasm.link": { + "translation": " Centro de Información de Ada Programación en Ada (Wikibooks) Repositorio de HAC Documentación de LiveCodes Cargar plantilla de inicio " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Motor de plantillas JavaScript de alto rendimiento." }, diff --git a/src/livecodes/i18n/locales/es/language-info.ts b/src/livecodes/i18n/locales/es/language-info.ts index f2cd68b4b6..7db4fa255a 100644 --- a/src/livecodes/i18n/locales/es/language-info.ts +++ b/src/livecodes/i18n/locales/es/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada se compila y ejecuta íntegramente en el navegador mediante <1>HAC, un compilador de Ada escrito en Ada y compilado a WebAssembly. No hay ningún servidor involucrado.', + link: '<1> <2>Centro de Información de Ada <3> <4>Programación en Ada (Wikibooks) <5> <6>Repositorio de HAC <7> <8>Documentación de LiveCodes <9> <10>Cargar plantilla de inicio ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Motor de plantillas JavaScript de alto rendimiento.', link: '<1> <2>Sitio web oficial de art-template <3> <4>Documentación de art-template ', diff --git a/src/livecodes/i18n/locales/es/translation.lokalise.json b/src/livecodes/i18n/locales/es/translation.lokalise.json index baf14ea0e5..96ce08763d 100644 --- a/src/livecodes/i18n/locales/es/translation.lokalise.json +++ b/src/livecodes/i18n/locales/es/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Buscar en plantillas..." }, + "templates.starter.ada-wasm": { + "translation": "Inicio Ada (Wasm)" + }, "templates.starter.angular": { "translation": "Inicio Angular" }, diff --git a/src/livecodes/i18n/locales/es/translation.ts b/src/livecodes/i18n/locales/es/translation.ts index 44e206f953..05bb61973e 100644 --- a/src/livecodes/i18n/locales/es/translation.ts +++ b/src/livecodes/i18n/locales/es/translation.ts @@ -975,6 +975,7 @@ const translation: I18nTranslation = { placeholder: 'Buscar en plantillas...', }, starter: { + 'ada-wasm': 'Inicio Ada (Wasm)', angular: 'Inicio Angular', assemblyscript: 'Inicio AssemblyScript', astro: 'Inicio Astro', diff --git a/src/livecodes/i18n/locales/fa/language-info.lokalise.json b/src/livecodes/i18n/locales/fa/language-info.lokalise.json index db6c07cbf7..e16ffb22aa 100644 --- a/src/livecodes/i18n/locales/fa/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fa/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada به‌طور کامل در مرورگر توسط <1>HAC کامپایل و اجرا می‌شود، که یک کامپایلر Ada نوشته‌شده به زبان Ada و کامپایل‌شده به WebAssembly است. هیچ سروری درگیر نیست." + }, + "adaWasm.link": { + "translation": " مرکز اطلاعات Ada برنامه‌نویسی Ada (ویکی‌کتاب) مخزن HAC مستندات LiveCodes بارگذاری قالب شروع " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "موتور قالب‌ساز JavaScript با کارایی بالا." }, diff --git a/src/livecodes/i18n/locales/fa/language-info.ts b/src/livecodes/i18n/locales/fa/language-info.ts index e5b66f410c..d360fb09bc 100644 --- a/src/livecodes/i18n/locales/fa/language-info.ts +++ b/src/livecodes/i18n/locales/fa/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada به‌طور کامل در مرورگر توسط <1>HAC کامپایل و اجرا می‌شود، که یک کامپایلر Ada نوشته‌شده به زبان Ada و کامپایل‌شده به WebAssembly است. هیچ سروری درگیر نیست.', + link: '<1> <2>مرکز اطلاعات Ada <3> <4>برنامه‌نویسی Ada (ویکی‌کتاب) <5> <6>مخزن HAC <7> <8>مستندات LiveCodes <9> <10>بارگذاری قالب شروع ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'موتور قالب‌ساز JavaScript با کارایی بالا.', link: '<1> <2>وب‌سایت رسمی art-template <3> <4>مستندات art-template ', diff --git a/src/livecodes/i18n/locales/fa/translation.lokalise.json b/src/livecodes/i18n/locales/fa/translation.lokalise.json index 50f54e629c..f1ba2a5c35 100644 --- a/src/livecodes/i18n/locales/fa/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fa/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "جستجو در قالب‌ها..." }, + "templates.starter.ada-wasm": { + "translation": "شروع کننده Ada (Wasm)" + }, "templates.starter.angular": { "translation": "شروع کننده انگولار" }, diff --git a/src/livecodes/i18n/locales/fa/translation.ts b/src/livecodes/i18n/locales/fa/translation.ts index abd1516a7e..25a2546bc0 100644 --- a/src/livecodes/i18n/locales/fa/translation.ts +++ b/src/livecodes/i18n/locales/fa/translation.ts @@ -976,6 +976,7 @@ const translation: I18nTranslation = { placeholder: 'جستجو در قالب‌ها...', }, starter: { + 'ada-wasm': 'شروع کننده Ada (Wasm)', angular: 'شروع کننده انگولار', assemblyscript: 'شروع کننده AssemblyScript', astro: 'شروع کننده Astro', diff --git a/src/livecodes/i18n/locales/fr/language-info.lokalise.json b/src/livecodes/i18n/locales/fr/language-info.lokalise.json index 9a15d2f196..070d5efd5f 100644 --- a/src/livecodes/i18n/locales/fr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fr/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada est compilé et exécuté entièrement dans le navigateur par <1>HAC, un compilateur Ada écrit en Ada et compilé en WebAssembly. Aucun serveur n'est impliqué." + }, + "adaWasm.link": { + "translation": " Centre d'information Ada Programmation Ada (Wikibooks) Dépôt HAC Documentation LiveCodes Charger un modèle de démarrage " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Moteur de templates JavaScript haute performance." }, diff --git a/src/livecodes/i18n/locales/fr/language-info.ts b/src/livecodes/i18n/locales/fr/language-info.ts index 9b3c66283a..5720cbac93 100644 --- a/src/livecodes/i18n/locales/fr/language-info.ts +++ b/src/livecodes/i18n/locales/fr/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: "Ada est compilé et exécuté entièrement dans le navigateur par <1>HAC, un compilateur Ada écrit en Ada et compilé en WebAssembly. Aucun serveur n'est impliqué.", + link: "<1> <2>Centre d'information Ada <3> <4>Programmation Ada (Wikibooks) <5> <6>Dépôt HAC <7> <8>Documentation LiveCodes <9> <10>Charger un modèle de démarrage ", + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Moteur de templates JavaScript haute performance.', link: "<1> <2>Site officiel d'art-template <3> <4>Documentation d'art-template ", diff --git a/src/livecodes/i18n/locales/fr/translation.lokalise.json b/src/livecodes/i18n/locales/fr/translation.lokalise.json index 32a033631f..99ab92313e 100644 --- a/src/livecodes/i18n/locales/fr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fr/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Recherche dans les modèles..." }, + "templates.starter.ada-wasm": { + "translation": "Démarrage Ada (Wasm)" + }, "templates.starter.angular": { "translation": "Démarrage Angular" }, diff --git a/src/livecodes/i18n/locales/fr/translation.ts b/src/livecodes/i18n/locales/fr/translation.ts index 8d164179e9..e9313af30b 100644 --- a/src/livecodes/i18n/locales/fr/translation.ts +++ b/src/livecodes/i18n/locales/fr/translation.ts @@ -977,6 +977,7 @@ const translation: I18nTranslation = { placeholder: 'Recherche dans les modèles...', }, starter: { + 'ada-wasm': 'Démarrage Ada (Wasm)', angular: 'Démarrage Angular', assemblyscript: 'Démarrage AssemblyScript', astro: 'Démarrage Astro', diff --git a/src/livecodes/i18n/locales/hi/language-info.lokalise.json b/src/livecodes/i18n/locales/hi/language-info.lokalise.json index df0305fe70..bce912676e 100644 --- a/src/livecodes/i18n/locales/hi/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hi/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada को पूरी तरह से ब्राउज़र में <1>HAC द्वारा संकलित और चलाया जाता है, जो Ada में लिखा गया और WebAssembly में संकलित एक Ada कंपाइलर है। कोई सर्वर शामिल नहीं है।" + }, + "adaWasm.link": { + "translation": " Ada सूचना केंद्र Ada प्रोग्रामिंग (विकिबुक्स) HAC रेपो लाइवकोड दस्तावेज़ीकरण स्टार्टर टेम्पलेट लोड करें " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "उच्च प्रदर्शन वाला JavaScript टेम्प्लेटिंग इंजन।" }, diff --git a/src/livecodes/i18n/locales/hi/language-info.ts b/src/livecodes/i18n/locales/hi/language-info.ts index bc73685ed3..2094b7d8d8 100644 --- a/src/livecodes/i18n/locales/hi/language-info.ts +++ b/src/livecodes/i18n/locales/hi/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada को पूरी तरह से ब्राउज़र में <1>HAC द्वारा संकलित और चलाया जाता है, जो Ada में लिखा गया और WebAssembly में संकलित एक Ada कंपाइलर है। कोई सर्वर शामिल नहीं है।', + link: '<1> <2>Ada सूचना केंद्र <3> <4>Ada प्रोग्रामिंग (विकिबुक्स) <5> <6>HAC रेपो <7> <8>लाइवकोड दस्तावेज़ीकरण <9> <10>स्टार्टर टेम्पलेट लोड करें ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'उच्च प्रदर्शन वाला JavaScript टेम्प्लेटिंग इंजन।', link: '<1> <2>art-template आधिकारिक वेबसाइट <3> <4>art-template दस्तावेज़ीकरण ', diff --git a/src/livecodes/i18n/locales/hi/translation.lokalise.json b/src/livecodes/i18n/locales/hi/translation.lokalise.json index 4d662be75b..2231e31456 100644 --- a/src/livecodes/i18n/locales/hi/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hi/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "टेम्प्लेट में खोजें..." }, + "templates.starter.ada-wasm": { + "translation": "Ada (Wasm) स्टार्टर" + }, "templates.starter.angular": { "translation": "Angular स्टार्टर" }, diff --git a/src/livecodes/i18n/locales/hi/translation.ts b/src/livecodes/i18n/locales/hi/translation.ts index 8f81aff479..edba0eb9a4 100644 --- a/src/livecodes/i18n/locales/hi/translation.ts +++ b/src/livecodes/i18n/locales/hi/translation.ts @@ -975,6 +975,7 @@ const translation: I18nTranslation = { placeholder: 'टेम्प्लेट में खोजें...', }, starter: { + 'ada-wasm': 'Ada (Wasm) स्टार्टर', angular: 'Angular स्टार्टर', assemblyscript: 'AssemblyScript स्टार्टर', astro: 'Astro स्टार्टर', diff --git a/src/livecodes/i18n/locales/hu/language-info.lokalise.json b/src/livecodes/i18n/locales/hu/language-info.lokalise.json index d850d90d6d..42ae79553b 100644 --- a/src/livecodes/i18n/locales/hu/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hu/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Az Ada-t teljes egészében a böngészőben fordítja le és futtatja a <1>HAC, egy Ada nyelven írt, WebAssembly-re fordított Ada-fordító. Nem vesz igénybe szervert." + }, + "adaWasm.link": { + "translation": " Ada Információs Központ Ada programozás (Wikibooks) HAC repo LiveCodes dokumentáció Indító sablon betöltése " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Nagy teljesítményű JavaScript sablonmotor." }, diff --git a/src/livecodes/i18n/locales/hu/language-info.ts b/src/livecodes/i18n/locales/hu/language-info.ts index dff8145d89..4c8674eb98 100644 --- a/src/livecodes/i18n/locales/hu/language-info.ts +++ b/src/livecodes/i18n/locales/hu/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Az Ada-t teljes egészében a böngészőben fordítja le és futtatja a <1>HAC, egy Ada nyelven írt, WebAssembly-re fordított Ada-fordító. Nem vesz igénybe szervert.', + link: '<1> <2>Ada Információs Központ <3> <4>Ada programozás (Wikibooks) <5> <6>HAC repo <7> <8>LiveCodes dokumentáció <9> <10>Indító sablon betöltése ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Nagy teljesítményű JavaScript sablonmotor.', link: '<1> <2>art-template hivatalos weboldal <3> <4>art-template dokumentáció ', diff --git a/src/livecodes/i18n/locales/hu/translation.lokalise.json b/src/livecodes/i18n/locales/hu/translation.lokalise.json index a248df0b0a..98d100676c 100644 --- a/src/livecodes/i18n/locales/hu/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hu/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Sablonok keresése..." }, + "templates.starter.ada-wasm": { + "translation": "Ada (Wasm) kezdő" + }, "templates.starter.angular": { "translation": "Angular kezdő" }, diff --git a/src/livecodes/i18n/locales/hu/translation.ts b/src/livecodes/i18n/locales/hu/translation.ts index 7ceb81e8ae..5b9629efa8 100644 --- a/src/livecodes/i18n/locales/hu/translation.ts +++ b/src/livecodes/i18n/locales/hu/translation.ts @@ -976,6 +976,7 @@ const translation: I18nTranslation = { placeholder: 'Sablonok keresése...', }, starter: { + 'ada-wasm': 'Ada (Wasm) kezdő', angular: 'Angular kezdő', assemblyscript: 'AssemblyScript kezdő', astro: 'Astro kezdő', diff --git a/src/livecodes/i18n/locales/id/language-info.lokalise.json b/src/livecodes/i18n/locales/id/language-info.lokalise.json index fc2d0d747e..de3ab82699 100644 --- a/src/livecodes/i18n/locales/id/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/id/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada dikompilasi dan dijalankan sepenuhnya di dalam browser oleh <1>HAC, kompiler Ada yang ditulis dalam bahasa Ada dan dikompilasi ke WebAssembly. Tidak ada server yang terlibat." + }, + "adaWasm.link": { + "translation": " Pusat Informasi Ada Pemrograman Ada (Wikibooks) Repo HAC Dokumentasi LiveCodes Muat templat awal " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Mesin templating JavaScript berkinerja tinggi." }, diff --git a/src/livecodes/i18n/locales/id/language-info.ts b/src/livecodes/i18n/locales/id/language-info.ts index e2fd2ee67c..09729fe896 100644 --- a/src/livecodes/i18n/locales/id/language-info.ts +++ b/src/livecodes/i18n/locales/id/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada dikompilasi dan dijalankan sepenuhnya di dalam browser oleh <1>HAC, kompiler Ada yang ditulis dalam bahasa Ada dan dikompilasi ke WebAssembly. Tidak ada server yang terlibat.', + link: '<1> <2>Pusat Informasi Ada <3> <4>Pemrograman Ada (Wikibooks) <5> <6>Repo HAC <7> <8>Dokumentasi LiveCodes <9> <10>Muat templat awal ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Mesin templating JavaScript berkinerja tinggi.', link: '<1> <2>Situs web resmi art-template <3> <4>Dokumentasi art-template ', diff --git a/src/livecodes/i18n/locales/id/translation.lokalise.json b/src/livecodes/i18n/locales/id/translation.lokalise.json index a5336ef082..c72cfa7e22 100644 --- a/src/livecodes/i18n/locales/id/translation.lokalise.json +++ b/src/livecodes/i18n/locales/id/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Cari di templat..." }, + "templates.starter.ada-wasm": { + "translation": "Pemula Ada (Wasm)" + }, "templates.starter.angular": { "translation": "Pemula Angular" }, diff --git a/src/livecodes/i18n/locales/id/translation.ts b/src/livecodes/i18n/locales/id/translation.ts index 10b4d80774..ef255caf7f 100644 --- a/src/livecodes/i18n/locales/id/translation.ts +++ b/src/livecodes/i18n/locales/id/translation.ts @@ -975,6 +975,7 @@ const translation: I18nTranslation = { placeholder: 'Cari di templat...', }, starter: { + 'ada-wasm': 'Pemula Ada (Wasm)', angular: 'Pemula Angular', assemblyscript: 'Pemula AssemblyScript', astro: 'Pemula Astro', diff --git a/src/livecodes/i18n/locales/it/language-info.lokalise.json b/src/livecodes/i18n/locales/it/language-info.lokalise.json index 7ec2743e6c..ed07ca73cb 100644 --- a/src/livecodes/i18n/locales/it/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/it/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada viene compilato ed eseguito interamente nel browser da <1>HAC, un compilatore Ada scritto in Ada e compilato in WebAssembly. Nessun server è coinvolto." + }, + "adaWasm.link": { + "translation": " Centro informazioni Ada Programmazione in Ada (Wikibooks) Repository di HAC Documentazione LiveCodes Carica il modello di avvio " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Motore di templating JavaScript ad alte prestazioni." }, diff --git a/src/livecodes/i18n/locales/it/language-info.ts b/src/livecodes/i18n/locales/it/language-info.ts index 11d739481d..b140707bae 100644 --- a/src/livecodes/i18n/locales/it/language-info.ts +++ b/src/livecodes/i18n/locales/it/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada viene compilato ed eseguito interamente nel browser da <1>HAC, un compilatore Ada scritto in Ada e compilato in WebAssembly. Nessun server è coinvolto.', + link: '<1> <2>Centro informazioni Ada <3> <4>Programmazione in Ada (Wikibooks) <5> <6>Repository di HAC <7> <8>Documentazione LiveCodes <9> <10>Carica il modello di avvio ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Motore di templating JavaScript ad alte prestazioni.', link: '<1> <2>Sito ufficiale di art-template <3> <4>Documentazione di art-template ', diff --git a/src/livecodes/i18n/locales/it/translation.lokalise.json b/src/livecodes/i18n/locales/it/translation.lokalise.json index e4f6877b00..ad7d655938 100644 --- a/src/livecodes/i18n/locales/it/translation.lokalise.json +++ b/src/livecodes/i18n/locales/it/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Ricerca nei modelli..." }, + "templates.starter.ada-wasm": { + "translation": "Starter Ada (Wasm)" + }, "templates.starter.angular": { "translation": "Starter Angular" }, diff --git a/src/livecodes/i18n/locales/it/translation.ts b/src/livecodes/i18n/locales/it/translation.ts index b80b785bfd..cbf90a73bf 100644 --- a/src/livecodes/i18n/locales/it/translation.ts +++ b/src/livecodes/i18n/locales/it/translation.ts @@ -976,6 +976,7 @@ const translation: I18nTranslation = { placeholder: 'Ricerca nei modelli...', }, starter: { + 'ada-wasm': 'Starter Ada (Wasm)', angular: 'Starter Angular', assemblyscript: 'Starter AssemblyScript', astro: 'Starter Astro', diff --git a/src/livecodes/i18n/locales/ja/language-info.lokalise.json b/src/livecodes/i18n/locales/ja/language-info.lokalise.json index 27a84cf874..0aabae175e 100644 --- a/src/livecodes/i18n/locales/ja/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ja/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada は Ada で書かれ WebAssembly にコンパイルされた Ada コンパイラである <1>HAC によって、完全にブラウザ内でコンパイルおよび実行されます。サーバーは関与しません。" + }, + "adaWasm.link": { + "translation": " Ada 情報センター Ada プログラミング(Wikibooks) HAC リポジトリ LiveCodes ドキュメント スターターテンプレートを読み込む " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "高性能な JavaScript テンプレートエンジン。" }, diff --git a/src/livecodes/i18n/locales/ja/language-info.ts b/src/livecodes/i18n/locales/ja/language-info.ts index bcf666ea05..2f7d88d67a 100644 --- a/src/livecodes/i18n/locales/ja/language-info.ts +++ b/src/livecodes/i18n/locales/ja/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada は Ada で書かれ WebAssembly にコンパイルされた Ada コンパイラである <1>HAC によって、完全にブラウザ内でコンパイルおよび実行されます。サーバーは関与しません。', + link: '<1> <2>Ada 情報センター <3> <4>Ada プログラミング(Wikibooks) <5> <6>HAC リポジトリ <7> <8>LiveCodes ドキュメント <9> <10>スターターテンプレートを読み込む ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: '高性能な JavaScript テンプレートエンジン。', link: '<1> <2>art-template 公式ウェブサイト <3> <4>art-template ドキュメント ', diff --git a/src/livecodes/i18n/locales/ja/translation.lokalise.json b/src/livecodes/i18n/locales/ja/translation.lokalise.json index 0eb0f71759..50769d050b 100644 --- a/src/livecodes/i18n/locales/ja/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ja/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "テンプレートで検索..." }, + "templates.starter.ada-wasm": { + "translation": "Ada(Wasm)スターター" + }, "templates.starter.angular": { "translation": "Angularスターター" }, diff --git a/src/livecodes/i18n/locales/ja/translation.ts b/src/livecodes/i18n/locales/ja/translation.ts index 829a0587ff..ab76fc8009 100644 --- a/src/livecodes/i18n/locales/ja/translation.ts +++ b/src/livecodes/i18n/locales/ja/translation.ts @@ -976,6 +976,7 @@ const translation: I18nTranslation = { placeholder: 'テンプレートで検索...', }, starter: { + 'ada-wasm': 'Ada(Wasm)スターター', angular: 'Angularスターター', assemblyscript: 'AssemblyScriptスターター', astro: 'Astroスターター', diff --git a/src/livecodes/i18n/locales/nl/language-info.lokalise.json b/src/livecodes/i18n/locales/nl/language-info.lokalise.json index fac22ff5c3..c1c023a598 100644 --- a/src/livecodes/i18n/locales/nl/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/nl/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada wordt volledig in de browser gecompileerd en uitgevoerd door <1>HAC, een in Ada geschreven en naar WebAssembly gecompileerde Ada-compiler. Er is geen server bij betrokken." + }, + "adaWasm.link": { + "translation": " Ada Informatiecentrum Programmeren in Ada (Wikibooks) HAC-repo LiveCodes-documentatie Starterssjabloon laden " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Krachtige JavaScript-sjabloonengine met hoge prestaties." }, diff --git a/src/livecodes/i18n/locales/nl/language-info.ts b/src/livecodes/i18n/locales/nl/language-info.ts index 856de5e36f..4f2c590baa 100644 --- a/src/livecodes/i18n/locales/nl/language-info.ts +++ b/src/livecodes/i18n/locales/nl/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada wordt volledig in de browser gecompileerd en uitgevoerd door <1>HAC, een in Ada geschreven en naar WebAssembly gecompileerde Ada-compiler. Er is geen server bij betrokken.', + link: '<1> <2>Ada Informatiecentrum <3> <4>Programmeren in Ada (Wikibooks) <5> <6>HAC-repo <7> <8>LiveCodes-documentatie <9> <10>Starterssjabloon laden ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Krachtige JavaScript-sjabloonengine met hoge prestaties.', link: '<1> <2>art-template officiële website <3> <4>art-template documentatie ', diff --git a/src/livecodes/i18n/locales/nl/translation.lokalise.json b/src/livecodes/i18n/locales/nl/translation.lokalise.json index 624d65617e..36a6391edd 100644 --- a/src/livecodes/i18n/locales/nl/translation.lokalise.json +++ b/src/livecodes/i18n/locales/nl/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Zoeken in sjablonen..." }, + "templates.starter.ada-wasm": { + "translation": "Ada (Wasm)-starter" + }, "templates.starter.angular": { "translation": "Angular-starter" }, diff --git a/src/livecodes/i18n/locales/nl/translation.ts b/src/livecodes/i18n/locales/nl/translation.ts index 0ec8463c2d..0a2241555e 100644 --- a/src/livecodes/i18n/locales/nl/translation.ts +++ b/src/livecodes/i18n/locales/nl/translation.ts @@ -976,6 +976,7 @@ const translation: I18nTranslation = { placeholder: 'Zoeken in sjablonen...', }, starter: { + 'ada-wasm': 'Ada (Wasm)-starter', angular: 'Angular-starter', assemblyscript: 'AssemblyScript-starter', astro: 'Astro-starter', diff --git a/src/livecodes/i18n/locales/pt/language-info.lokalise.json b/src/livecodes/i18n/locales/pt/language-info.lokalise.json index 2c100e330d..290c3cb799 100644 --- a/src/livecodes/i18n/locales/pt/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/pt/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "O Ada é compilado e executado inteiramente no navegador pelo <1>HAC, um compilador Ada escrito em Ada e compilado para WebAssembly. Nenhum servidor está envolvido." + }, + "adaWasm.link": { + "translation": " Centro de Informação Ada Programação em Ada (Wikibooks) Repositório do HAC Documentação do LiveCodes Carregar modelo inicial " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Mecanismo de modelagem JavaScript de alto desempenho." }, diff --git a/src/livecodes/i18n/locales/pt/language-info.ts b/src/livecodes/i18n/locales/pt/language-info.ts index 933156099a..6933f3ad5b 100644 --- a/src/livecodes/i18n/locales/pt/language-info.ts +++ b/src/livecodes/i18n/locales/pt/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'O Ada é compilado e executado inteiramente no navegador pelo <1>HAC, um compilador Ada escrito em Ada e compilado para WebAssembly. Nenhum servidor está envolvido.', + link: '<1> <2>Centro de Informação Ada <3> <4>Programação em Ada (Wikibooks) <5> <6>Repositório do HAC <7> <8>Documentação do LiveCodes <9> <10>Carregar modelo inicial ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Mecanismo de modelagem JavaScript de alto desempenho.', link: '<1> <2>Site oficial do art-template <3> <4>Documentação do art-template ', diff --git a/src/livecodes/i18n/locales/pt/translation.lokalise.json b/src/livecodes/i18n/locales/pt/translation.lokalise.json index 90cb3b2794..d7e8b93092 100644 --- a/src/livecodes/i18n/locales/pt/translation.lokalise.json +++ b/src/livecodes/i18n/locales/pt/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Procurar em modelos..." }, + "templates.starter.ada-wasm": { + "translation": "Iniciante Ada (Wasm)" + }, "templates.starter.angular": { "translation": "Iniciante Angular" }, diff --git a/src/livecodes/i18n/locales/pt/translation.ts b/src/livecodes/i18n/locales/pt/translation.ts index 5a3552e0ce..c23ab654e1 100644 --- a/src/livecodes/i18n/locales/pt/translation.ts +++ b/src/livecodes/i18n/locales/pt/translation.ts @@ -976,6 +976,7 @@ const translation: I18nTranslation = { placeholder: 'Procurar em modelos...', }, starter: { + 'ada-wasm': 'Iniciante Ada (Wasm)', angular: 'Iniciante Angular', assemblyscript: 'Iniciante AssemblyScript', astro: 'Iniciante Astro', diff --git a/src/livecodes/i18n/locales/ru/language-info.lokalise.json b/src/livecodes/i18n/locales/ru/language-info.lokalise.json index 83b1913351..0cef7fe3d8 100644 --- a/src/livecodes/i18n/locales/ru/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ru/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada компилируется и выполняется полностью в браузере с помощью <1>HAC — компилятора Ada, написанного на Ada и скомпилированного в WebAssembly. Сервер не задействован." + }, + "adaWasm.link": { + "translation": " Информационный центр Ada Программирование на Ada (Wikibooks) Репозиторий HAC Документация LiveCodes Загрузить стартовый шаблон " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Высокопроизводительный движок шаблонов JavaScript." }, diff --git a/src/livecodes/i18n/locales/ru/language-info.ts b/src/livecodes/i18n/locales/ru/language-info.ts index 22498bb056..6b189fd2d4 100644 --- a/src/livecodes/i18n/locales/ru/language-info.ts +++ b/src/livecodes/i18n/locales/ru/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada компилируется и выполняется полностью в браузере с помощью <1>HAC — компилятора Ada, написанного на Ada и скомпилированного в WebAssembly. Сервер не задействован.', + link: '<1> <2>Информационный центр Ada <3> <4>Программирование на Ada (Wikibooks) <5> <6>Репозиторий HAC <7> <8>Документация LiveCodes <9> <10>Загрузить стартовый шаблон ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Высокопроизводительный движок шаблонов JavaScript.', link: '<1> <2>Официальный сайт art-template <3> <4>Документация art-template ', diff --git a/src/livecodes/i18n/locales/ru/translation.lokalise.json b/src/livecodes/i18n/locales/ru/translation.lokalise.json index 7a81e119e1..549d74a7f8 100644 --- a/src/livecodes/i18n/locales/ru/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ru/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Поиск в шаблонах..." }, + "templates.starter.ada-wasm": { + "translation": "Стартер Ada (Wasm)" + }, "templates.starter.angular": { "translation": "Стартер Angular" }, diff --git a/src/livecodes/i18n/locales/ru/translation.ts b/src/livecodes/i18n/locales/ru/translation.ts index da5f831f77..307c978e6e 100644 --- a/src/livecodes/i18n/locales/ru/translation.ts +++ b/src/livecodes/i18n/locales/ru/translation.ts @@ -975,6 +975,7 @@ const translation: I18nTranslation = { placeholder: 'Поиск в шаблонах...', }, starter: { + 'ada-wasm': 'Стартер Ada (Wasm)', angular: 'Стартер Angular', assemblyscript: 'Стартер AssemblyScript', astro: 'Стартер Astro', diff --git a/src/livecodes/i18n/locales/tr/language-info.lokalise.json b/src/livecodes/i18n/locales/tr/language-info.lokalise.json index 0b9ac6399c..f326d8aa2f 100644 --- a/src/livecodes/i18n/locales/tr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/tr/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada, Ada ile yazılmış ve WebAssembly'ye derlenmiş bir Ada derleyicisi olan <1>HAC tarafından tamamen tarayıcı içinde derlenir ve çalıştırılır. Hiçbir sunucu devreye girmez." + }, + "adaWasm.link": { + "translation": " Ada Bilgi Merkezi Ada programlama (Wikibooks) HAC repo'su LiveCodes Belgeleri Başlangıç şablonunu yükle " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "Yüksek performanslı JavaScript şablonlama motoru." }, diff --git a/src/livecodes/i18n/locales/tr/language-info.ts b/src/livecodes/i18n/locales/tr/language-info.ts index dcf78e10e6..1942c15793 100644 --- a/src/livecodes/i18n/locales/tr/language-info.ts +++ b/src/livecodes/i18n/locales/tr/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: "Ada, Ada ile yazılmış ve WebAssembly'ye derlenmiş bir Ada derleyicisi olan <1>HAC tarafından tamamen tarayıcı içinde derlenir ve çalıştırılır. Hiçbir sunucu devreye girmez.", + link: "<1> <2>Ada Bilgi Merkezi <3> <4>Ada programlama (Wikibooks) <5> <6>HAC repo'su <7> <8>LiveCodes Belgeleri <9> <10>Başlangıç şablonunu yükle ", + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'Yüksek performanslı JavaScript şablonlama motoru.', link: '<1> <2>art-template resmi web sitesi <3> <4>art-template dokümantasyonu ', diff --git a/src/livecodes/i18n/locales/tr/translation.lokalise.json b/src/livecodes/i18n/locales/tr/translation.lokalise.json index c6a1af7396..157cab32f4 100644 --- a/src/livecodes/i18n/locales/tr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/tr/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "Şablonlarda arama yapın..." }, + "templates.starter.ada-wasm": { + "translation": "Ada (Wasm) Başlangıç" + }, "templates.starter.angular": { "translation": "Angular Başlangıç" }, diff --git a/src/livecodes/i18n/locales/tr/translation.ts b/src/livecodes/i18n/locales/tr/translation.ts index 7074052ed0..822b77f928 100644 --- a/src/livecodes/i18n/locales/tr/translation.ts +++ b/src/livecodes/i18n/locales/tr/translation.ts @@ -976,6 +976,7 @@ const translation: I18nTranslation = { placeholder: 'Şablonlarda arama yapın...', }, starter: { + 'ada-wasm': 'Ada (Wasm) Başlangıç', angular: 'Angular Başlangıç', assemblyscript: 'AssemblyScript Başlangıç', astro: 'Astro 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 f441a6acdf..a3a84ff70e 100644 --- a/src/livecodes/i18n/locales/ur/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ur/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada کو مکمل طور پر براؤزر میں <1>HAC کے ذریعے مرتب اور چلایا جاتا ہے، جو Ada میں لکھا گیا اور WebAssembly میں مرتب کردہ ایک Ada کمپائلر ہے۔ کوئی سرور شامل نہیں ہے۔" + }, + "adaWasm.link": { + "translation": " Ada معلوماتی مرکز Ada پروگرامنگ (ویکی کتب) HAC ریپو LiveCodes دستاویزات اسٹارٹر ٹیمپلیٹ لوڈ کریں " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "اعلی کارکردگی والا جاوا اسکرپٹ ٹیمپلیٹنگ انجن۔" }, diff --git a/src/livecodes/i18n/locales/ur/language-info.ts b/src/livecodes/i18n/locales/ur/language-info.ts index a25dd7203b..3c4f6d8e0e 100644 --- a/src/livecodes/i18n/locales/ur/language-info.ts +++ b/src/livecodes/i18n/locales/ur/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada کو مکمل طور پر براؤزر میں <1>HAC کے ذریعے مرتب اور چلایا جاتا ہے، جو Ada میں لکھا گیا اور WebAssembly میں مرتب کردہ ایک Ada کمپائلر ہے۔ کوئی سرور شامل نہیں ہے۔', + link: '<1> <2>Ada معلوماتی مرکز <3> <4>Ada پروگرامنگ (ویکی کتب) <5> <6>HAC ریپو <7> <8>LiveCodes دستاویزات <9> <10>اسٹارٹر ٹیمپلیٹ لوڈ کریں ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: 'اعلی کارکردگی والا جاوا اسکرپٹ ٹیمپلیٹنگ انجن۔', link: '<1> <2>آرٹ-ٹیمپلیٹ کی سرکاری ویب سائٹ <3> <4>آرٹ-ٹیمپلیٹ کی دستاویزات ', diff --git a/src/livecodes/i18n/locales/ur/translation.lokalise.json b/src/livecodes/i18n/locales/ur/translation.lokalise.json index 10555a2acf..199dbf0648 100644 --- a/src/livecodes/i18n/locales/ur/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ur/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "ٹیمپلیٹس میں تلاش کریں..." }, + "templates.starter.ada-wasm": { + "translation": "Ada (واسم) شروعاتی" + }, "templates.starter.angular": { "translation": "اینگولر شروعاتی" }, diff --git a/src/livecodes/i18n/locales/ur/translation.ts b/src/livecodes/i18n/locales/ur/translation.ts index 569eb3eca6..b459e186c4 100644 --- a/src/livecodes/i18n/locales/ur/translation.ts +++ b/src/livecodes/i18n/locales/ur/translation.ts @@ -975,6 +975,7 @@ const translation: I18nTranslation = { placeholder: 'ٹیمپلیٹس میں تلاش کریں...', }, starter: { + 'ada-wasm': 'Ada (واسم) شروعاتی', angular: 'اینگولر شروعاتی', assemblyscript: 'اسمبلی اسکرپٹ شروعاتی', astro: 'ایسٹرو شروعاتی', 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 c9f28b1e41..f0709416d2 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json @@ -1,5 +1,14 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", + "adaWasm.desc": { + "translation": "Ada 由用 Ada 编写并编译为 WebAssembly 的 Ada 编译器 <1>HAC 完全在浏览器中编译和运行。不涉及任何服务器。" + }, + "adaWasm.link": { + "translation": " Ada 信息交换中心 Ada 编程(Wikibooks) HAC 仓库 LiveCodes 文档 加载入门模板 " + }, + "adaWasm.name": { + "translation": "Ada (Wasm)" + }, "artTemplate.desc": { "translation": "高性能 JavaScript 模板引擎。" }, diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.ts b/src/livecodes/i18n/locales/zh-CN/language-info.ts index a409bbd88e..3da244a757 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.ts +++ b/src/livecodes/i18n/locales/zh-CN/language-info.ts @@ -3,6 +3,11 @@ import type { I18nLangInfoTranslation } from '../models'; const languageInfo: I18nLangInfoTranslation = { + adaWasm: { + desc: 'Ada 由用 Ada 编写并编译为 WebAssembly 的 Ada 编译器 <1>HAC 完全在浏览器中编译和运行。不涉及任何服务器。', + link: '<1> <2>Ada 信息交换中心 <3> <4>Ada 编程(Wikibooks) <5> <6>HAC 仓库 <7> <8>LiveCodes 文档 <9> <10>加载入门模板 ', + name: 'Ada (Wasm)', + }, artTemplate: { desc: '高性能 JavaScript 模板引擎。', link: '<1> <2> art-template 官方网站 <3> <4> art-template 文档 ', diff --git a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json index 1ca9e4db36..8f275b7779 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json @@ -1908,6 +1908,9 @@ "templates.search.placeholder": { "translation": "在模板中搜索..." }, + "templates.starter.ada-wasm": { + "translation": "Ada(WASM)启动模板" + }, "templates.starter.angular": { "translation": "Angular 启动模板" }, diff --git a/src/livecodes/i18n/locales/zh-CN/translation.ts b/src/livecodes/i18n/locales/zh-CN/translation.ts index 507e90cc23..11c6918b95 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.ts +++ b/src/livecodes/i18n/locales/zh-CN/translation.ts @@ -973,6 +973,7 @@ const translation: I18nTranslation = { placeholder: '在模板中搜索...', }, starter: { + 'ada-wasm': 'Ada(WASM)启动模板', angular: 'Angular 启动模板', assemblyscript: 'AssemblyScript 启动模板', astro: 'Astro 启动模板', From 11cbe43cd748e47316e93943ddbaeaabbee686e0 Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Sat, 3 Oct 2026 04:35:19 +0000 Subject: [PATCH 5/5] fix(ada-wasm): reject loaded promise on boot failure --- .../languages/ada-wasm/lang-ada-wasm-script.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts b/src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts index a995a94706..58d7190c31 100644 --- a/src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts +++ b/src/livecodes/languages/ada-wasm/lang-ada-wasm-script.ts @@ -32,6 +32,7 @@ interface Runner { interface AdaWasmApi { ready: boolean; + failed: boolean; input: string; output: string | null; error: string | null; @@ -203,11 +204,13 @@ window.livecodes.adaWasm ??= {} as AdaWasmApi; const adaWasm = window.livecodes.adaWasm; adaWasm.ready = false; +adaWasm.failed = false; /** Start (once) loading the runtime in a worker, showing the loading indicator. */ const ensureLoaded = (runner: Runner): Promise => { let init = adaWasm.init; if (!init) { + adaWasm.failed = false; init = (async () => { parent.postMessage({ type: 'loading', payload: true }, '*'); try { @@ -223,6 +226,7 @@ const ensureLoaded = (runner: Runner): Promise => { })().catch((error: Error) => { // Reset so a later run can retry the download. adaWasm.init = null; + adaWasm.failed = true; throw error; }); // The failure is surfaced through `run`; do not also report it unhandled. @@ -232,9 +236,12 @@ const ensureLoaded = (runner: Runner): Promise => { return init; }; -adaWasm.loaded = new Promise((resolve) => { +adaWasm.loaded = new Promise((resolve, reject) => { const interval = setInterval(() => { - if (adaWasm.ready) { + if (adaWasm.failed) { + clearInterval(interval); + reject(new Error(adaWasm.error || 'Failed to initialize the Ada environment')); + } else if (adaWasm.ready) { clearInterval(interval); resolve(); }