diff --git a/.agents/skills/livecodes/language-support/references/languages.md b/.agents/skills/livecodes/language-support/references/languages.md index daf91a99f0..12df9d3b6d 100644 --- a/.agents/skills/livecodes/language-support/references/languages.md +++ b/.agents/skills/livecodes/language-support/references/languages.md @@ -126,6 +126,8 @@ Enabled via `processors` config: | 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 | @@ -136,10 +138,14 @@ Enabled via `processors` config: | 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 | @@ -237,3 +243,4 @@ When loading files, extensions map to languages: | `.go` | Go | | `.php` | PHP | | `.java` | Java | +| `.pas`, `.pp` | Pascal | diff --git a/docs/docs/languages/pascal.mdx b/docs/docs/languages/pascal.mdx new file mode 100644 index 0000000000..1885bba122 --- /dev/null +++ b/docs/docs/languages/pascal.mdx @@ -0,0 +1,104 @@ +# Pascal + +[Pascal](https://www.freepascal.org/) is a procedural and object-oriented programming +language, designed by Niklaus Wirth in 1970 and still widely used for teaching and for +building native applications. + +LiveCodes runs Pascal in the browser using the [Free Pascal](https://www.freepascal.org/) +team's [pas2js](https://www.freepascal.org/_new/docs/tools/pas2js/) transpiler, compiled +to [WebAssembly](https://webassembly.org/). It transpiles Object Pascal to JavaScript, +which then runs in the result page. No server is involved. + +## Usage + +Write a Pascal program in the script editor and press **Run**. Anything written with +`Writeln` appears in the console. + +Because the compiled output is plain JavaScript, the program can use the DOM and other +browser APIs. `uses web` brings the browser API into scope: + +```pascal +program app; + +{$mode objfpc}{$H+} + +uses + web, sysutils; + +var + Count: Integer = 0; + +function HandleClick(Event: TJSEvent): boolean; +var + Counter: TJSElement; +begin + Count := Count + 1; + Counter := document.getElementById('counter'); + if (Counter <> nil) then + Counter.innerHTML := 'You clicked ' + IntToStr(Count) + ' times.'; +end; + +var + Title: TJSElement; + Button: TJSElement; +begin + Writeln('Hello from Pascal!'); + + Title := document.getElementById('title'); + if (Title <> nil) then + Title.innerHTML := 'Pascal'; + + Button := document.getElementById('counter-button'); + if (Button <> nil) then + Button.addEventListener('click', @HandleClick); +end. +``` + +That is the starter template: + +import LiveCodes from '../../src/components/LiveCodes.tsx'; + + + +Uncaught exceptions are reported in the console; `ExitCode` may be set to signal a +non-zero exit code. + +## Language Info + +### Name + +`pascal` + +### Aliases + +`pas`, `pp`, `pas2js` + +### Extension + +`.pas`, `.pp` + +### Editor + +`script` + +## Compiler + +[pas2js](https://www.freepascal.org/_new/docs/tools/pas2js/), the Free Pascal compiler +targeting JavaScript. + +### Version + +pas2js 3.3.1 + +## Limitations + +- There is no `Readln` in the pas2js runtime, so programs cannot read from standard + input. + +## Links + +- [Pascal](https://www.freepascal.org/) +- [Free Pascal documentation](https://www.freepascal.org/docs.html) +- [pas2js documentation](https://www.freepascal.org/_new/docs/tools/pas2js/) +- [pas2js wiki](https://wiki.freepascal.org/pas2js) +- [WebAssembly](https://webassembly.org/) in LiveCodes diff --git a/docs/src/components/LanguageSliders.tsx b/docs/src/components/LanguageSliders.tsx index 28ac9405be..88dbd76c58 100644 --- a/docs/src/components/LanguageSliders.tsx +++ b/docs/src/components/LanguageSliders.tsx @@ -97,6 +97,7 @@ 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)' }, diff --git a/docs/src/components/TemplateList.tsx b/docs/src/components/TemplateList.tsx index 79f06a5cc5..c5eed9f3fb 100644 --- a/docs/src/components/TemplateList.tsx +++ b/docs/src/components/TemplateList.tsx @@ -55,6 +55,7 @@ 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' }, diff --git a/e2e/specs/starter.spec.ts b/e2e/specs/starter.spec.ts index 95db9067cf..593807883f 100644 --- a/e2e/specs/starter.spec.ts +++ b/e2e/specs/starter.spec.ts @@ -296,6 +296,33 @@ test.describe('Starter Templates from UI', () => { expect(counterText).toBe('You clicked 3 times.'); }); + test('Pascal Starter', async ({ page, getTestUrl, editor }) => { + // the ~9 MB compiler 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=Pascal Starter'); + + await waitForEditorFocus(app); + await waitForResultUpdate(); + await app.waitForTimeout(30_000); + + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + + const titleText = await getResult().innerText('h1'); + expect(titleText).toBe('Hello, Pascal!'); + + const counterText = await getResult().innerText('text=You clicked'); + expect(counterText).toBe('You clicked 3 times.'); + }); + test('rust-wasm Starter', async ({ page, getTestUrl, editor }) => { // the interpreter and the stdlib sysroot are downloaded on the first run test.slow(); diff --git a/functions/vendors/templates.js b/functions/vendors/templates.js index cf497ac972..778222ad6b 100644 --- a/functions/vendors/templates.js +++ b/functions/vendors/templates.js @@ -53,6 +53,7 @@ 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", diff --git a/scripts/build.js b/scripts/build.js index be402e0419..1082e5535c 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -254,6 +254,7 @@ const iifeBuild = () => 'languages/minizinc/lang-minizinc-script.ts', 'languages/mustache/lang-mustache-compiler.ts', 'languages/nunjucks/lang-nunjucks-compiler.ts', + 'languages/pascal/lang-pascal-compiler.ts', 'languages/perl/lang-perl-script.ts', 'languages/php-wasm/lang-php-wasm-script.ts', 'languages/prolog/lang-prolog-script.ts', diff --git a/server/php/inc/starter-templates.json b/server/php/inc/starter-templates.json index e80e6b8207..6e0d4057da 100644 --- a/server/php/inc/starter-templates.json +++ b/server/php/inc/starter-templates.json @@ -53,6 +53,7 @@ "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", diff --git a/src/livecodes/UI/command-menu-actions.ts b/src/livecodes/UI/command-menu-actions.ts index ab421fc4a5..cf1d5e3090 100644 --- a/src/livecodes/UI/command-menu-actions.ts +++ b/src/livecodes/UI/command-menu-actions.ts @@ -309,6 +309,7 @@ export const getCommandMenuActions = ({ 'rust-wasm', 'swift-wasm', 'zig-wasm', + 'pascal', 'java', 'csharp-wasm', 'vb-wasm', diff --git a/src/livecodes/assets/templates/pascal.png b/src/livecodes/assets/templates/pascal.png new file mode 100644 index 0000000000..a3f1e2c6f9 Binary files /dev/null and b/src/livecodes/assets/templates/pascal.png differ diff --git a/src/livecodes/html/language-info.html b/src/livecodes/html/language-info.html index fc54b1d23f..42b5ffaa8c 100644 --- a/src/livecodes/html/language-info.html +++ b/src/livecodes/html/language-info.html @@ -559,6 +559,36 @@

Zig (Wasm)

+
+

Pascal

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

Diagrams

(Experimental)
diff --git a/src/livecodes/i18n/locales/ar/language-info.lokalise.json b/src/livecodes/i18n/locales/ar/language-info.lokalise.json index f6fcfee1f1..38023333ae 100644 --- a/src/livecodes/i18n/locales/ar/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ar/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal يعمل في المتصفح باستخدام pas2js (من فريق Free Pascal) ومُجمَّع إلى WebAssembly." + }, + "pascal.link": { + "translation": " الموقع الرسمي لـ Free Pascal وثائق pas2js pas2js wiki وثائق LiveCodes تحميل القالب الأولي " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "بيرل تعمل في المتصفح باستخدام Perlito." }, diff --git a/src/livecodes/i18n/locales/ar/language-info.ts b/src/livecodes/i18n/locales/ar/language-info.ts index 24fec63268..1b2f626006 100644 --- a/src/livecodes/i18n/locales/ar/language-info.ts +++ b/src/livecodes/i18n/locales/ar/language-info.ts @@ -292,6 +292,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>موقع OCaml <3> <4>وثائق OCaml <5> <6>موقع ReScript <7> <8>تعلم X في Y دقائق، حيث X=OCaml <9> <10>تحميل القالب الأولي ', name: 'OCaml', }, + pascal: { + desc: 'Pascal يعمل في المتصفح باستخدام pas2js (من فريق Free Pascal) ومُجمَّع إلى WebAssembly.', + link: '<1> <2>الموقع الرسمي لـ Free Pascal <3> <4>وثائق pas2js <5> <6>pas2js wiki <7> <8>وثائق LiveCodes <9> <10>تحميل القالب الأولي ', + name: 'Pascal', + }, perl: { desc: 'بيرل تعمل في المتصفح باستخدام Perlito.', link: '<1> <2>الموقع الرسمي لـ Perl <3> <4>وثائق Perl <5> <6>ملف README لـ Perlito5 <7> <8>تعلم X في Y دقائق، حيث X=perl <9> <10>تحميل القالب الأولي ', diff --git a/src/livecodes/i18n/locales/ar/translation.lokalise.json b/src/livecodes/i18n/locales/ar/translation.lokalise.json index 47e2204006..c6b9eb8552 100644 --- a/src/livecodes/i18n/locales/ar/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ar/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "قالب Ocaml" }, + "templates.starter.pascal": { + "translation": "قالب Pascal" + }, "templates.starter.perl": { "translation": "قالب Perl" }, diff --git a/src/livecodes/i18n/locales/ar/translation.ts b/src/livecodes/i18n/locales/ar/translation.ts index bb914603ba..39dbc343fe 100644 --- a/src/livecodes/i18n/locales/ar/translation.ts +++ b/src/livecodes/i18n/locales/ar/translation.ts @@ -1025,6 +1025,7 @@ const translation: I18nTranslation = { minizinc: 'قالب MiniZinc', 'objc-wasm': 'قالب Objective-C (Wasm)', ocaml: 'قالب Ocaml', + pascal: 'قالب Pascal', perl: 'قالب Perl', phaser: 'قالب Phaser', php: 'قالب PHP', diff --git a/src/livecodes/i18n/locales/bn/language-info.lokalise.json b/src/livecodes/i18n/locales/bn/language-info.lokalise.json index 95f2d27f3d..cfc18bef11 100644 --- a/src/livecodes/i18n/locales/bn/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/bn/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Free Pascal দলের pas2js ব্যবহার করে ব্রাউজারে Pascal চলছে, যা WebAssembly-তে কম্পাইল করা।" + }, + "pascal.link": { + "translation": " Free Pascal অফিসিয়াল ওয়েবসাইট pas2js ডকুমেন্টেশন pas2js wiki LiveCodes ডকুমেন্টেশন স্টার্টার টেমপ্লেট লোড করুন " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perlito ব্যবহার করে ব্রাউজারে চলমান Perl।" }, diff --git a/src/livecodes/i18n/locales/bn/language-info.ts b/src/livecodes/i18n/locales/bn/language-info.ts index b519f5bd04..1f5e5385f0 100644 --- a/src/livecodes/i18n/locales/bn/language-info.ts +++ b/src/livecodes/i18n/locales/bn/language-info.ts @@ -294,6 +294,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml ওয়েবসাইট <3> <4>OCaml ডকুমেন্টেশন <5> <6>ReScript ওয়েবসাইট <7> <8>Y মিনিটে X শিখুন, যেখানে X=OCaml <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', name: 'OCaml', }, + pascal: { + desc: 'Free Pascal দলের pas2js ব্যবহার করে ব্রাউজারে Pascal চলছে, যা WebAssembly-তে কম্পাইল করা।', + link: '<1> <2>Free Pascal অফিসিয়াল ওয়েবসাইট <3> <4>pas2js ডকুমেন্টেশন <5> <6>pas2js wiki <7> <8>LiveCodes ডকুমেন্টেশন <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', + name: 'Pascal', + }, perl: { desc: 'Perlito ব্যবহার করে ব্রাউজারে চলমান Perl।', link: '<1> <2>Perl অফিসিয়াল ওয়েবসাইট <3> <4>Perl ডকুমেন্টেশন <5> <6>Perlito5 Readme <7> <8>Y মিনিটে X শিখুন, যেখানে X=perl <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', diff --git a/src/livecodes/i18n/locales/bn/translation.lokalise.json b/src/livecodes/i18n/locales/bn/translation.lokalise.json index 9dd80cbdec..3e607cb36d 100644 --- a/src/livecodes/i18n/locales/bn/translation.lokalise.json +++ b/src/livecodes/i18n/locales/bn/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Ocaml স্টার্টার" }, + "templates.starter.pascal": { + "translation": "Pascal স্টার্টার" + }, "templates.starter.perl": { "translation": "Perl স্টার্টার" }, diff --git a/src/livecodes/i18n/locales/bn/translation.ts b/src/livecodes/i18n/locales/bn/translation.ts index 2de63382ef..13846b917d 100644 --- a/src/livecodes/i18n/locales/bn/translation.ts +++ b/src/livecodes/i18n/locales/bn/translation.ts @@ -1025,6 +1025,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZinc স্টার্টার', 'objc-wasm': 'Objective-C (Wasm) স্টার্টার', ocaml: 'Ocaml স্টার্টার', + pascal: 'Pascal স্টার্টার', perl: 'Perl স্টার্টার', phaser: 'Phaser স্টার্টার', php: 'PHP স্টার্টার', diff --git a/src/livecodes/i18n/locales/de/language-info.lokalise.json b/src/livecodes/i18n/locales/de/language-info.lokalise.json index 8287c7b681..34732b7641 100644 --- a/src/livecodes/i18n/locales/de/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/de/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal läuft im Browser mit pas2js (vom Free Pascal-Team) und wird zu WebAssembly kompiliert." + }, + "pascal.link": { + "translation": " Offizielle Free Pascal-Website pas2js-Dokumentation pas2js wiki LiveCodes-Dokumentationen Starter-Vorlage laden " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl läuft im Browser mit Perlito." }, diff --git a/src/livecodes/i18n/locales/de/language-info.ts b/src/livecodes/i18n/locales/de/language-info.ts index 4f0d0f545c..a54f810e9a 100644 --- a/src/livecodes/i18n/locales/de/language-info.ts +++ b/src/livecodes/i18n/locales/de/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml Website <3> <4>OCaml Dokumentation <5> <6>ReScript Website <7> <8>Lerne X in Y Minuten, wobei X=OCaml <9> <10>Starter-Vorlage laden ', name: 'OCaml', }, + pascal: { + desc: 'Pascal läuft im Browser mit pas2js (vom Free Pascal-Team) und wird zu WebAssembly kompiliert.', + link: '<1> <2>Offizielle Free Pascal-Website <3> <4>pas2js-Dokumentation <5> <6>pas2js wiki <7> <8>LiveCodes-Dokumentationen <9> <10>Starter-Vorlage laden ', + name: 'Pascal', + }, perl: { desc: 'Perl läuft im Browser mit Perlito.', link: '<1> <2>Perl offizielle Website <3> <4>Perl Dokumentation <5> <6>Perlito5 Readme <7> <8>Lerne X in Y Minuten, wobei X=Perl <9> <10>Starter-Vorlage laden ', diff --git a/src/livecodes/i18n/locales/de/translation.lokalise.json b/src/livecodes/i18n/locales/de/translation.lokalise.json index 89a218b453..ad2ff44b02 100644 --- a/src/livecodes/i18n/locales/de/translation.lokalise.json +++ b/src/livecodes/i18n/locales/de/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "OCaml-Starter" }, + "templates.starter.pascal": { + "translation": "Pascal-Starter" + }, "templates.starter.perl": { "translation": "Perl-Starter" }, diff --git a/src/livecodes/i18n/locales/de/translation.ts b/src/livecodes/i18n/locales/de/translation.ts index 502c426666..44da326b87 100644 --- a/src/livecodes/i18n/locales/de/translation.ts +++ b/src/livecodes/i18n/locales/de/translation.ts @@ -1027,6 +1027,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZink-Starter', 'objc-wasm': 'Objective-C (Wasm)-Starter', ocaml: 'OCaml-Starter', + pascal: 'Pascal-Starter', perl: 'Perl-Starter', phaser: 'Phaser-Starter', php: 'PHP-Starter', diff --git a/src/livecodes/i18n/locales/en/language-info.lokalise.json b/src/livecodes/i18n/locales/en/language-info.lokalise.json index 51e1184f85..e062c35670 100644 --- a/src/livecodes/i18n/locales/en/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/en/language-info.lokalise.json @@ -692,6 +692,18 @@ "notes": "", "translation": "OCaml" }, + "pascal.desc": { + "notes": "", + "translation": "Pascal running in the browser using pas2js (by the Free Pascal team) compiled to WebAssembly." + }, + "pascal.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": " Free Pascal website pas2js documentation pas2js wiki LiveCodes Documentation Load starter template " + }, + "pascal.name": { + "notes": "", + "translation": "Pascal" + }, "perl.desc": { "notes": "", "translation": "Perl running in the browser using Perlito." diff --git a/src/livecodes/i18n/locales/en/language-info.ts b/src/livecodes/i18n/locales/en/language-info.ts index d77637dc7a..d23bdc9d3f 100644 --- a/src/livecodes/i18n/locales/en/language-info.ts +++ b/src/livecodes/i18n/locales/en/language-info.ts @@ -302,6 +302,11 @@ const languageInfo = { link: '<1><2>OCaml website <3> <4>OCaml documentation <5> <6>ReScript website <7> <8>Learn X in Y minutes, where X=OCaml <9> <10>Load starter template ', name: 'OCaml', }, + pascal: { + desc: 'Pascal running in the browser using pas2js (by the Free Pascal team) compiled to WebAssembly.', + link: '<1> <2>Free Pascal website <3> <4>pas2js documentation <5> <6>pas2js wiki <7> <8>LiveCodes Documentation <9> <10>Load starter template ', + name: 'Pascal', + }, perl: { desc: 'Perl running in the browser using Perlito.', link: '<1> <2>Perl official website <3> <4>Perl documentation <5> <6>Perlito5 Readme <7> <8>Learn X in Y minutes, where X=perl <9> <10>Load starter template ', diff --git a/src/livecodes/i18n/locales/en/translation.lokalise.json b/src/livecodes/i18n/locales/en/translation.lokalise.json index a0cce78c0f..39043df37a 100644 --- a/src/livecodes/i18n/locales/en/translation.lokalise.json +++ b/src/livecodes/i18n/locales/en/translation.lokalise.json @@ -2744,6 +2744,10 @@ "notes": "", "translation": "Ocaml Starter" }, + "templates.starter.pascal": { + "notes": "", + "translation": "Pascal Starter" + }, "templates.starter.perl": { "notes": "", "translation": "Perl Starter" diff --git a/src/livecodes/i18n/locales/en/translation.ts b/src/livecodes/i18n/locales/en/translation.ts index 94649e5ca0..1e07173b6e 100644 --- a/src/livecodes/i18n/locales/en/translation.ts +++ b/src/livecodes/i18n/locales/en/translation.ts @@ -1032,6 +1032,7 @@ const translation = { minizinc: 'MiniZinc Starter', 'objc-wasm': 'Objective-C (Wasm) Starter', ocaml: 'Ocaml Starter', + pascal: 'Pascal Starter', perl: 'Perl Starter', phaser: 'Phaser Starter', php: 'PHP Starter', diff --git a/src/livecodes/i18n/locales/es/language-info.lokalise.json b/src/livecodes/i18n/locales/es/language-info.lokalise.json index 472aa29203..d7b4504d3c 100644 --- a/src/livecodes/i18n/locales/es/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/es/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal ejecutándose en el navegador usando pas2js (por el equipo de Free Pascal), compilado a WebAssembly." + }, + "pascal.link": { + "translation": " Sitio web oficial de Free Pascal Documentación de pas2js pas2js wiki Documentación de LiveCodes Cargar plantilla inicial " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl ejecutándose en el navegador usando Perlito." }, diff --git a/src/livecodes/i18n/locales/es/language-info.ts b/src/livecodes/i18n/locales/es/language-info.ts index d7b7681ace..f2cd68b4b6 100644 --- a/src/livecodes/i18n/locales/es/language-info.ts +++ b/src/livecodes/i18n/locales/es/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Sitio web de OCaml <3> <4>Documentación de OCaml <5> <6>Sitio web de ReScript <7> <8>Aprende X en Y minutos, donde X=OCaml <9> <10>Cargar plantilla inicial ', name: 'OCaml', }, + pascal: { + desc: 'Pascal ejecutándose en el navegador usando pas2js (por el equipo de Free Pascal), compilado a WebAssembly.', + link: '<1> <2>Sitio web oficial de Free Pascal <3> <4>Documentación de pas2js <5> <6>pas2js wiki <7> <8>Documentación de LiveCodes <9> <10>Cargar plantilla inicial ', + name: 'Pascal', + }, perl: { desc: 'Perl ejecutándose en el navegador usando Perlito.', link: '<1> <2>Sitio web oficial de Perl <3> <4>Documentación de Perl <5> <6>Readme de Perlito5 <7> <8>Aprende X en Y minutos, donde X=perl <9> <10>Cargar plantilla inicial ', diff --git a/src/livecodes/i18n/locales/es/translation.lokalise.json b/src/livecodes/i18n/locales/es/translation.lokalise.json index 45fc39d135..baf14ea0e5 100644 --- a/src/livecodes/i18n/locales/es/translation.lokalise.json +++ b/src/livecodes/i18n/locales/es/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Inicio Ocaml" }, + "templates.starter.pascal": { + "translation": "Inicio Pascal" + }, "templates.starter.perl": { "translation": "Inicio Perl" }, diff --git a/src/livecodes/i18n/locales/es/translation.ts b/src/livecodes/i18n/locales/es/translation.ts index 011383c68d..44e206f953 100644 --- a/src/livecodes/i18n/locales/es/translation.ts +++ b/src/livecodes/i18n/locales/es/translation.ts @@ -1025,6 +1025,7 @@ const translation: I18nTranslation = { minizinc: 'Inicio MiniZinc', 'objc-wasm': 'Inicio Objective-C (Wasm)', ocaml: 'Inicio Ocaml', + pascal: 'Inicio Pascal', perl: 'Inicio Perl', phaser: 'Inicio Phaser', php: 'Inicio PHP', diff --git a/src/livecodes/i18n/locales/fa/language-info.lokalise.json b/src/livecodes/i18n/locales/fa/language-info.lokalise.json index 09c5bb6d7a..db6c07cbf7 100644 --- a/src/livecodes/i18n/locales/fa/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fa/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal با استفاده از pas2js (توسط تیم Free Pascal) در مرورگر اجرا می‌شود و به WebAssembly کامپایل شده است." + }, + "pascal.link": { + "translation": " وب‌سایت رسمی Free Pascal مستندات pas2js pas2js wiki مستندات LiveCodes بارگذاری قالب شروع کننده " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl که با استفاده از Perlito در مرورگر اجرا می‌شود." }, diff --git a/src/livecodes/i18n/locales/fa/language-info.ts b/src/livecodes/i18n/locales/fa/language-info.ts index 952a677ef0..e5b66f410c 100644 --- a/src/livecodes/i18n/locales/fa/language-info.ts +++ b/src/livecodes/i18n/locales/fa/language-info.ts @@ -295,6 +295,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>وب‌سایت OCaml <3> <4>مستندات OCaml <5> <6>وب‌سایت ReScript <7> <8>یادگیری X در Y دقیقه، جایی که X=OCaml <9> <10>بارگذاری قالب شروع کننده ', name: 'OCaml', }, + pascal: { + desc: 'Pascal با استفاده از pas2js (توسط تیم Free Pascal) در مرورگر اجرا می‌شود و به WebAssembly کامپایل شده است.', + link: '<1> <2>وب‌سایت رسمی Free Pascal <3> <4>مستندات pas2js <5> <6>pas2js wiki <7> <8>مستندات LiveCodes <9> <10>بارگذاری قالب شروع کننده ', + name: 'Pascal', + }, perl: { desc: 'Perl که با استفاده از Perlito در مرورگر اجرا می‌شود.', link: '<1> <2>وب‌سایت رسمی Perl <3> <4>مستندات Perl <5> <6>فایل Readme پرلیتو5 <7> <8>یادگیری X در Y دقیقه، جایی که X=perl <9> <10>بارگذاری قالب شروع کننده ', diff --git a/src/livecodes/i18n/locales/fa/translation.lokalise.json b/src/livecodes/i18n/locales/fa/translation.lokalise.json index 615d286f52..50f54e629c 100644 --- a/src/livecodes/i18n/locales/fa/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fa/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "شروع کننده Ocaml" }, + "templates.starter.pascal": { + "translation": "شروع کننده Pascal" + }, "templates.starter.perl": { "translation": "شروع کننده Perl" }, diff --git a/src/livecodes/i18n/locales/fa/translation.ts b/src/livecodes/i18n/locales/fa/translation.ts index 5c96028612..abd1516a7e 100644 --- a/src/livecodes/i18n/locales/fa/translation.ts +++ b/src/livecodes/i18n/locales/fa/translation.ts @@ -1026,6 +1026,7 @@ const translation: I18nTranslation = { minizinc: 'شروع کننده MiniZinc', 'objc-wasm': 'شروع کننده Objective-C (Wasm)', ocaml: 'شروع کننده Ocaml', + pascal: 'شروع کننده Pascal', perl: 'شروع کننده Perl', phaser: 'شروع کننده Phaser', php: 'شروع کننده PHP', diff --git a/src/livecodes/i18n/locales/fr/language-info.lokalise.json b/src/livecodes/i18n/locales/fr/language-info.lokalise.json index f1d1422767..9a15d2f196 100644 --- a/src/livecodes/i18n/locales/fr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fr/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal s'exécutant dans le navigateur en utilisant pas2js (par l'équipe Free Pascal), compilé en WebAssembly." + }, + "pascal.link": { + "translation": " Site officiel de Free Pascal Documentation pas2js pas2js wiki Documentations LiveCodes Charger le modèle de démarrage " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl s'exécutant dans le navigateur en utilisant Perlito." }, diff --git a/src/livecodes/i18n/locales/fr/language-info.ts b/src/livecodes/i18n/locales/fr/language-info.ts index 57f5f20c1e..9b3c66283a 100644 --- a/src/livecodes/i18n/locales/fr/language-info.ts +++ b/src/livecodes/i18n/locales/fr/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Site web OCaml <3> <4>Documentation OCaml <5> <6>Site web ReScript <7> <8>Apprenez X en Y minutes, où X=OCaml <9> <10>Charger le modèle de démarrage ', name: 'OCaml', }, + pascal: { + desc: "Pascal s'exécutant dans le navigateur en utilisant pas2js (par l'équipe Free Pascal), compilé en WebAssembly.", + link: '<1> <2>Site officiel de Free Pascal <3> <4>Documentation pas2js <5> <6>pas2js wiki <7> <8>Documentations LiveCodes <9> <10>Charger le modèle de démarrage ', + name: 'Pascal', + }, perl: { desc: "Perl s'exécutant dans le navigateur en utilisant Perlito.", link: '<1> <2>Site officiel de Perl <3> <4>Documentation Perl <5> <6>Readme de Perlito5 <7> <8>Apprenez X en Y minutes, où X=perl <9> <10>Charger le modèle de démarrage ', diff --git a/src/livecodes/i18n/locales/fr/translation.lokalise.json b/src/livecodes/i18n/locales/fr/translation.lokalise.json index c45aed6b64..32a033631f 100644 --- a/src/livecodes/i18n/locales/fr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fr/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Démarrage OCaml" }, + "templates.starter.pascal": { + "translation": "Démarrage Pascal" + }, "templates.starter.perl": { "translation": "Démarrage Perl" }, diff --git a/src/livecodes/i18n/locales/fr/translation.ts b/src/livecodes/i18n/locales/fr/translation.ts index 8ecb67e5a8..8d164179e9 100644 --- a/src/livecodes/i18n/locales/fr/translation.ts +++ b/src/livecodes/i18n/locales/fr/translation.ts @@ -1027,6 +1027,7 @@ const translation: I18nTranslation = { minizinc: 'Démarrage MiniZinc', 'objc-wasm': 'Démarrage Objective-C (Wasm)', ocaml: 'Démarrage OCaml', + pascal: 'Démarrage Pascal', perl: 'Démarrage Perl', phaser: 'Démarrage Phaser', php: 'Démarrage PHP', diff --git a/src/livecodes/i18n/locales/hi/language-info.lokalise.json b/src/livecodes/i18n/locales/hi/language-info.lokalise.json index 21d35a925f..df0305fe70 100644 --- a/src/livecodes/i18n/locales/hi/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hi/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Free Pascal टीम द्वारा pas2js का उपयोग करके ब्राउज़र में चलने वाला Pascal, जो WebAssembly में संकलित है।" + }, + "pascal.link": { + "translation": " Free Pascal आधिकारिक वेबसाइट pas2js दस्तावेज़ीकरण pas2js wiki लाइवकोड्स (LiveCodes) दस्तावेज़ स्टार्टर टेम्पलेट लोड करें " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perlito का उपयोग करके ब्राउज़र में चलने वाला Perl।" }, diff --git a/src/livecodes/i18n/locales/hi/language-info.ts b/src/livecodes/i18n/locales/hi/language-info.ts index 0911683d55..bc73685ed3 100644 --- a/src/livecodes/i18n/locales/hi/language-info.ts +++ b/src/livecodes/i18n/locales/hi/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml वेबसाइट <3> <4>OCaml दस्तावेज़ीकरण <5> <6>ReScript वेबसाइट <7> <8>X को Y मिनटों में सीखें, जहां X=OCaml <9> <10>स्टार्टर टेम्पलेट लोड करें ', name: 'OCaml', }, + pascal: { + desc: 'Free Pascal टीम द्वारा pas2js का उपयोग करके ब्राउज़र में चलने वाला Pascal, जो WebAssembly में संकलित है।', + link: '<1> <2>Free Pascal आधिकारिक वेबसाइट <3> <4>pas2js दस्तावेज़ीकरण <5> <6>pas2js wiki <7> <8>लाइवकोड्स (LiveCodes) दस्तावेज़ <9> <10>स्टार्टर टेम्पलेट लोड करें ', + name: 'Pascal', + }, perl: { desc: 'Perlito का उपयोग करके ब्राउज़र में चलने वाला Perl।', link: '<1> <2>Perl आधिकारिक वेबसाइट <3> <4>Perl दस्तावेज़ीकरण <5> <6>Perlito5 रीडमी <7> <8>X को Y मिनटों में सीखें, जहां X=perl <9> <10>स्टार्टर टेम्पलेट लोड करें ', diff --git a/src/livecodes/i18n/locales/hi/translation.lokalise.json b/src/livecodes/i18n/locales/hi/translation.lokalise.json index c9ef803528..4d662be75b 100644 --- a/src/livecodes/i18n/locales/hi/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hi/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "OCaml स्टार्टर" }, + "templates.starter.pascal": { + "translation": "Pascal स्टार्टर" + }, "templates.starter.perl": { "translation": "Perl स्टार्टर" }, diff --git a/src/livecodes/i18n/locales/hi/translation.ts b/src/livecodes/i18n/locales/hi/translation.ts index f553c3463f..8f81aff479 100644 --- a/src/livecodes/i18n/locales/hi/translation.ts +++ b/src/livecodes/i18n/locales/hi/translation.ts @@ -1025,6 +1025,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZinc स्टार्टर', 'objc-wasm': 'Objective-C (Wasm) स्टार्टर', ocaml: 'OCaml स्टार्टर', + pascal: 'Pascal स्टार्टर', perl: 'Perl स्टार्टर', phaser: 'Phaser स्टार्टर', php: 'PHP स्टार्टर', diff --git a/src/livecodes/i18n/locales/hu/language-info.lokalise.json b/src/livecodes/i18n/locales/hu/language-info.lokalise.json index 9edeaab662..d850d90d6d 100644 --- a/src/livecodes/i18n/locales/hu/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hu/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "A Pascal a pas2js (a Free Pascal csapatától) segítségével fut a böngészőben, WebAssembly-re fordítva." + }, + "pascal.link": { + "translation": " Free Pascal hivatalos weboldal pas2js dokumentáció pas2js wiki LiveCodes dokumentációk Kezdő sablon betöltése " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl fut a böngészőben a Perlito használatával." }, diff --git a/src/livecodes/i18n/locales/hu/language-info.ts b/src/livecodes/i18n/locales/hu/language-info.ts index 49d38e93f7..dff8145d89 100644 --- a/src/livecodes/i18n/locales/hu/language-info.ts +++ b/src/livecodes/i18n/locales/hu/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml weboldal <3> <4>OCaml dokumentáció <5> <6>ReScript weboldal <7> <8>Tanulj X-et Y perc alatt, ahol X=OCaml <9> <10>Kezdő sablon betöltése ', name: 'OCaml', }, + pascal: { + desc: 'A Pascal a pas2js (a Free Pascal csapatától) segítségével fut a böngészőben, WebAssembly-re fordítva.', + link: '<1> <2>Free Pascal hivatalos weboldal <3> <4>pas2js dokumentáció <5> <6>pas2js wiki <7> <8>LiveCodes dokumentációk <9> <10>Kezdő sablon betöltése ', + name: 'Pascal', + }, perl: { desc: 'Perl fut a böngészőben a Perlito használatával.', link: '<1> <2>Perl hivatalos weboldal <3> <4>Perl dokumentáció <5> <6>Perlito5 Readme <7> <8>Tanulj X-et Y perc alatt, ahol X=perl <9> <10>Kezdő sablon betöltése ', diff --git a/src/livecodes/i18n/locales/hu/translation.lokalise.json b/src/livecodes/i18n/locales/hu/translation.lokalise.json index 0882594eeb..a248df0b0a 100644 --- a/src/livecodes/i18n/locales/hu/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hu/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "OCaml kezdő" }, + "templates.starter.pascal": { + "translation": "Pascal kezdő" + }, "templates.starter.perl": { "translation": "Perl kezdő" }, diff --git a/src/livecodes/i18n/locales/hu/translation.ts b/src/livecodes/i18n/locales/hu/translation.ts index b56cca5b32..7ceb81e8ae 100644 --- a/src/livecodes/i18n/locales/hu/translation.ts +++ b/src/livecodes/i18n/locales/hu/translation.ts @@ -1026,6 +1026,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZinc kezdő', 'objc-wasm': 'Objective-C (Wasm) kezdő', ocaml: 'OCaml kezdő', + pascal: 'Pascal kezdő', perl: 'Perl kezdő', phaser: 'Phaser kezdő', php: 'PHP kezdő', diff --git a/src/livecodes/i18n/locales/id/language-info.lokalise.json b/src/livecodes/i18n/locales/id/language-info.lokalise.json index 26225bebf1..fc2d0d747e 100644 --- a/src/livecodes/i18n/locales/id/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/id/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal berjalan di browser menggunakan pas2js (oleh tim Free Pascal), dikompilasi ke WebAssembly." + }, + "pascal.link": { + "translation": " Situs web resmi Free Pascal Dokumentasi pas2js pas2js wiki Dokumentasi LiveCodes Muat template pemula " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl berjalan di browser menggunakan Perlito." }, diff --git a/src/livecodes/i18n/locales/id/language-info.ts b/src/livecodes/i18n/locales/id/language-info.ts index d62f8faee7..e2fd2ee67c 100644 --- a/src/livecodes/i18n/locales/id/language-info.ts +++ b/src/livecodes/i18n/locales/id/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Situs web OCaml <3> <4>Dokumentasi OCaml <5> <6>Situs web ReScript <7> <8>Pelajari X dalam Y menit, dengan X=OCaml <9> <10>Muat template pemula ', name: 'OCaml', }, + pascal: { + desc: 'Pascal berjalan di browser menggunakan pas2js (oleh tim Free Pascal), dikompilasi ke WebAssembly.', + link: '<1> <2>Situs web resmi Free Pascal <3> <4>Dokumentasi pas2js <5> <6>pas2js wiki <7> <8>Dokumentasi LiveCodes <9> <10>Muat template pemula ', + name: 'Pascal', + }, perl: { desc: 'Perl berjalan di browser menggunakan Perlito.', link: '<1> <2>Situs web resmi Perl <3> <4>Dokumentasi Perl <5> <6>Readme Perlito5 <7> <8>Pelajari X dalam Y menit, dengan X=perl <9> <10>Muat template pemula ', diff --git a/src/livecodes/i18n/locales/id/translation.lokalise.json b/src/livecodes/i18n/locales/id/translation.lokalise.json index 38dbcc7089..a5336ef082 100644 --- a/src/livecodes/i18n/locales/id/translation.lokalise.json +++ b/src/livecodes/i18n/locales/id/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Pemula Ocaml" }, + "templates.starter.pascal": { + "translation": "Pemula Pascal" + }, "templates.starter.perl": { "translation": "Pemula Perl" }, diff --git a/src/livecodes/i18n/locales/id/translation.ts b/src/livecodes/i18n/locales/id/translation.ts index 12038db736..10b4d80774 100644 --- a/src/livecodes/i18n/locales/id/translation.ts +++ b/src/livecodes/i18n/locales/id/translation.ts @@ -1025,6 +1025,7 @@ const translation: I18nTranslation = { minizinc: 'Pemula MiniZinc', 'objc-wasm': 'Pemula Objective-C (Wasm)', ocaml: 'Pemula Ocaml', + pascal: 'Pemula Pascal', perl: 'Pemula Perl', phaser: 'Pemula Phaser', php: 'Pemula PHP', diff --git a/src/livecodes/i18n/locales/it/language-info.lokalise.json b/src/livecodes/i18n/locales/it/language-info.lokalise.json index 17f73e0add..7ec2743e6c 100644 --- a/src/livecodes/i18n/locales/it/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/it/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal in esecuzione nel browser utilizzando pas2js (del team Free Pascal), compilato in WebAssembly." + }, + "pascal.link": { + "translation": " Sito ufficiale di Free Pascal Documentazione di pas2js pas2js wiki Documentazione LiveCodes Carica modello di partenza " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl in esecuzione nel browser utilizzando Perlito." }, diff --git a/src/livecodes/i18n/locales/it/language-info.ts b/src/livecodes/i18n/locales/it/language-info.ts index 29e33f1f42..11d739481d 100644 --- a/src/livecodes/i18n/locales/it/language-info.ts +++ b/src/livecodes/i18n/locales/it/language-info.ts @@ -295,6 +295,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Sito web di OCaml <3> <4>Documentazione di OCaml <5> <6>Sito web di ReScript <7> <8>Impara X in Y minuti, dove X=OCaml <9> <10>Carica modello di partenza ', name: 'OCaml', }, + pascal: { + desc: 'Pascal in esecuzione nel browser utilizzando pas2js (del team Free Pascal), compilato in WebAssembly.', + link: '<1> <2>Sito ufficiale di Free Pascal <3> <4>Documentazione di pas2js <5> <6>pas2js wiki <7> <8>Documentazione LiveCodes <9> <10>Carica modello di partenza ', + name: 'Pascal', + }, perl: { desc: 'Perl in esecuzione nel browser utilizzando Perlito.', link: '<1> <2>Sito ufficiale di Perl <3> <4>Documentazione di Perl <5> <6>Readme di Perlito5 <7> <8>Impara X in Y minuti, dove X=perl <9> <10>Carica modello di partenza ', diff --git a/src/livecodes/i18n/locales/it/translation.lokalise.json b/src/livecodes/i18n/locales/it/translation.lokalise.json index 735d44b92d..e4f6877b00 100644 --- a/src/livecodes/i18n/locales/it/translation.lokalise.json +++ b/src/livecodes/i18n/locales/it/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Starter OCaml" }, + "templates.starter.pascal": { + "translation": "Starter Pascal" + }, "templates.starter.perl": { "translation": "Starter Perl" }, diff --git a/src/livecodes/i18n/locales/it/translation.ts b/src/livecodes/i18n/locales/it/translation.ts index 48b495660f..b80b785bfd 100644 --- a/src/livecodes/i18n/locales/it/translation.ts +++ b/src/livecodes/i18n/locales/it/translation.ts @@ -1026,6 +1026,7 @@ const translation: I18nTranslation = { minizinc: 'Starter MiniZinc', 'objc-wasm': 'Starter Objective-C (Wasm)', ocaml: 'Starter OCaml', + pascal: 'Starter Pascal', perl: 'Starter Perl', phaser: 'Starter Phaser', php: 'Starter PHP', diff --git a/src/livecodes/i18n/locales/ja/language-info.lokalise.json b/src/livecodes/i18n/locales/ja/language-info.lokalise.json index 86a110c20b..27a84cf874 100644 --- a/src/livecodes/i18n/locales/ja/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ja/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "pas2js(Free Pascal チームによる)を使用してブラウザで動作する Pascal。WebAssembly にコンパイルされます。" + }, + "pascal.link": { + "translation": " Free Pascal 公式ウェブサイト pas2js ドキュメント pas2js wiki LiveCodes ドキュメント スターターテンプレートを読み込む " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perlito を使用してブラウザで動作する Perl。" }, diff --git a/src/livecodes/i18n/locales/ja/language-info.ts b/src/livecodes/i18n/locales/ja/language-info.ts index 1887ed349c..bcf666ea05 100644 --- a/src/livecodes/i18n/locales/ja/language-info.ts +++ b/src/livecodes/i18n/locales/ja/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml ウェブサイト <3> <4>OCaml ドキュメント <5> <6>ReScript ウェブサイト <7> <8>X分でYを学ぶ、X=OCaml <9> <10>スターターテンプレートを読み込む ', name: 'OCaml', }, + pascal: { + desc: 'pas2js(Free Pascal チームによる)を使用してブラウザで動作する Pascal。WebAssembly にコンパイルされます。', + link: '<1> <2>Free Pascal 公式ウェブサイト <3> <4>pas2js ドキュメント <5> <6>pas2js wiki <7> <8>LiveCodes ドキュメント <9> <10>スターターテンプレートを読み込む ', + name: 'Pascal', + }, perl: { desc: 'Perlito を使用してブラウザで動作する Perl。', link: '<1> <2>Perl 公式ウェブサイト <3> <4>Perl ドキュメント <5> <6>Perlito5 Readme <7> <8>X分でYを学ぶ、X=perl <9> <10>スターターテンプレートを読み込む ', diff --git a/src/livecodes/i18n/locales/ja/translation.lokalise.json b/src/livecodes/i18n/locales/ja/translation.lokalise.json index d68fe42008..0eb0f71759 100644 --- a/src/livecodes/i18n/locales/ja/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ja/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "OCamlスターター" }, + "templates.starter.pascal": { + "translation": "Pascalスターター" + }, "templates.starter.perl": { "translation": "Perlスターター" }, diff --git a/src/livecodes/i18n/locales/ja/translation.ts b/src/livecodes/i18n/locales/ja/translation.ts index ecac2992c8..829a0587ff 100644 --- a/src/livecodes/i18n/locales/ja/translation.ts +++ b/src/livecodes/i18n/locales/ja/translation.ts @@ -1026,6 +1026,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZincスターター', 'objc-wasm': 'Objective-C(Wasm)スターター', ocaml: 'OCamlスターター', + pascal: 'Pascalスターター', perl: 'Perlスターター', phaser: 'Phaserスターター', php: 'PHPスターター', diff --git a/src/livecodes/i18n/locales/nl/language-info.lokalise.json b/src/livecodes/i18n/locales/nl/language-info.lokalise.json index 4b720bcd4b..fac22ff5c3 100644 --- a/src/livecodes/i18n/locales/nl/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/nl/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal draaiend in de browser met pas2js (van het Free Pascal-team), gecompileerd naar WebAssembly." + }, + "pascal.link": { + "translation": " Free Pascal officiële website pas2js-documentatie pas2js wiki LiveCodes-documentatie Startsjabloon laden " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl draaiend in de browser met Perlito." }, diff --git a/src/livecodes/i18n/locales/nl/language-info.ts b/src/livecodes/i18n/locales/nl/language-info.ts index a85454f595..856de5e36f 100644 --- a/src/livecodes/i18n/locales/nl/language-info.ts +++ b/src/livecodes/i18n/locales/nl/language-info.ts @@ -295,6 +295,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml website <3> <4>OCaml documentatie <5> <6>ReScript website <7> <8>Leer X in Y minuten, waarbij X=OCaml <9> <10>Startsjabloon laden ', name: 'OCaml', }, + pascal: { + desc: 'Pascal draaiend in de browser met pas2js (van het Free Pascal-team), gecompileerd naar WebAssembly.', + link: '<1> <2>Free Pascal officiële website <3> <4>pas2js-documentatie <5> <6>pas2js wiki <7> <8>LiveCodes-documentatie <9> <10>Startsjabloon laden ', + name: 'Pascal', + }, perl: { desc: 'Perl draaiend in de browser met Perlito.', link: '<1> <2>Perl officiële website <3> <4>Perl documentatie <5> <6>Perlito5 Readme <7> <8>Leer X in Y minuten, waarbij X=perl <9> <10>Startsjabloon laden ', diff --git a/src/livecodes/i18n/locales/nl/translation.lokalise.json b/src/livecodes/i18n/locales/nl/translation.lokalise.json index 4d6665872d..624d65617e 100644 --- a/src/livecodes/i18n/locales/nl/translation.lokalise.json +++ b/src/livecodes/i18n/locales/nl/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Ocaml-starter" }, + "templates.starter.pascal": { + "translation": "Pascal-starter" + }, "templates.starter.perl": { "translation": "Perl-starter" }, diff --git a/src/livecodes/i18n/locales/nl/translation.ts b/src/livecodes/i18n/locales/nl/translation.ts index 07d5815b61..0ec8463c2d 100644 --- a/src/livecodes/i18n/locales/nl/translation.ts +++ b/src/livecodes/i18n/locales/nl/translation.ts @@ -1026,6 +1026,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZinc Starter', 'objc-wasm': 'Objective-C (Wasm)-starter', ocaml: 'Ocaml-starter', + pascal: 'Pascal-starter', perl: 'Perl-starter', phaser: 'Phaser-starter', php: 'PHP-starter', diff --git a/src/livecodes/i18n/locales/pt/language-info.lokalise.json b/src/livecodes/i18n/locales/pt/language-info.lokalise.json index b99a73afd7..2c100e330d 100644 --- a/src/livecodes/i18n/locales/pt/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/pt/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal rodando no navegador usando pas2js (pela equipe do Free Pascal), compilado para WebAssembly." + }, + "pascal.link": { + "translation": " Site oficial do Free Pascal Documentação do pas2js pas2js wiki Documentação do LiveCodes Carregar modelo inicial " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl rodando no navegador usando Perlito." }, diff --git a/src/livecodes/i18n/locales/pt/language-info.ts b/src/livecodes/i18n/locales/pt/language-info.ts index 580c368cd3..933156099a 100644 --- a/src/livecodes/i18n/locales/pt/language-info.ts +++ b/src/livecodes/i18n/locales/pt/language-info.ts @@ -295,6 +295,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Site do OCaml <3> <4>Documentação do OCaml <5> <6>Site do ReScript <7> <8>Aprenda X em Y minutos, onde X=OCaml <9> <10>Carregar modelo inicial ', name: 'OCaml', }, + pascal: { + desc: 'Pascal rodando no navegador usando pas2js (pela equipe do Free Pascal), compilado para WebAssembly.', + link: '<1> <2>Site oficial do Free Pascal <3> <4>Documentação do pas2js <5> <6>pas2js wiki <7> <8>Documentação do LiveCodes <9> <10>Carregar modelo inicial ', + name: 'Pascal', + }, perl: { desc: 'Perl rodando no navegador usando Perlito.', link: '<1> <2>Site oficial do Perl <3> <4>Documentação do Perl <5> <6>Readme do Perlito5 <7> <8>Aprenda X em Y minutos, onde X=perl <9> <10>Carregar modelo inicial ', diff --git a/src/livecodes/i18n/locales/pt/translation.lokalise.json b/src/livecodes/i18n/locales/pt/translation.lokalise.json index 8d80a73ec9..90cb3b2794 100644 --- a/src/livecodes/i18n/locales/pt/translation.lokalise.json +++ b/src/livecodes/i18n/locales/pt/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Iniciante OCaml" }, + "templates.starter.pascal": { + "translation": "Iniciante Pascal" + }, "templates.starter.perl": { "translation": "Iniciante Perl" }, diff --git a/src/livecodes/i18n/locales/pt/translation.ts b/src/livecodes/i18n/locales/pt/translation.ts index 27751ab0e3..5a3552e0ce 100644 --- a/src/livecodes/i18n/locales/pt/translation.ts +++ b/src/livecodes/i18n/locales/pt/translation.ts @@ -1026,6 +1026,7 @@ const translation: I18nTranslation = { minizinc: 'Iniciante MiniZinc', 'objc-wasm': 'Iniciante Objective-C (Wasm)', ocaml: 'Iniciante OCaml', + pascal: 'Iniciante Pascal', perl: 'Iniciante Perl', phaser: 'Iniciante Phaser', php: 'Iniciante PHP', diff --git a/src/livecodes/i18n/locales/ru/language-info.lokalise.json b/src/livecodes/i18n/locales/ru/language-info.lokalise.json index 9b8c12ffbf..83b1913351 100644 --- a/src/livecodes/i18n/locales/ru/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ru/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal, работающий в браузере с использованием pas2js (от команды Free Pascal), скомпилирован в WebAssembly." + }, + "pascal.link": { + "translation": " Официальный сайт Free Pascal Документация pas2js pas2js wiki Документация LiveCodes Загрузить стартовый шаблон " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perl, работающий в браузере с использованием Perlito." }, diff --git a/src/livecodes/i18n/locales/ru/language-info.ts b/src/livecodes/i18n/locales/ru/language-info.ts index e662aef78c..22498bb056 100644 --- a/src/livecodes/i18n/locales/ru/language-info.ts +++ b/src/livecodes/i18n/locales/ru/language-info.ts @@ -297,6 +297,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>Сайт OCaml <3> <4>Документация OCaml <5> <6>Сайт ReScript <7> <8>Изучите X за Y минут, где X=OCaml <9> <10>Загрузить стартовый шаблон ', name: 'OCaml', }, + pascal: { + desc: 'Pascal, работающий в браузере с использованием pas2js (от команды Free Pascal), скомпилирован в WebAssembly.', + link: '<1> <2>Официальный сайт Free Pascal <3> <4>Документация pas2js <5> <6>pas2js wiki <7> <8>Документация LiveCodes <9> <10>Загрузить стартовый шаблон ', + name: 'Pascal', + }, perl: { desc: 'Perl, работающий в браузере с использованием Perlito.', link: '<1> <2>Официальный сайт Perl <3> <4>Документация Perl <5> <6>Readme Perlito5 <7> <8>Изучите X за Y минут, где X=perl <9> <10>Загрузить стартовый шаблон ', diff --git a/src/livecodes/i18n/locales/ru/translation.lokalise.json b/src/livecodes/i18n/locales/ru/translation.lokalise.json index d56a419821..7a81e119e1 100644 --- a/src/livecodes/i18n/locales/ru/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ru/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Стартер OCaml" }, + "templates.starter.pascal": { + "translation": "Стартер Pascal" + }, "templates.starter.perl": { "translation": "Стартер Perl" }, diff --git a/src/livecodes/i18n/locales/ru/translation.ts b/src/livecodes/i18n/locales/ru/translation.ts index ca892a017b..da5f831f77 100644 --- a/src/livecodes/i18n/locales/ru/translation.ts +++ b/src/livecodes/i18n/locales/ru/translation.ts @@ -1025,6 +1025,7 @@ const translation: I18nTranslation = { minizinc: 'Стартер MiniZinc', 'objc-wasm': 'Стартер Objective-C (Wasm)', ocaml: 'Стартер OCaml', + pascal: 'Стартер Pascal', perl: 'Стартер Perl', phaser: 'Стартер Phaser', php: 'Стартер PHP', diff --git a/src/livecodes/i18n/locales/tr/language-info.lokalise.json b/src/livecodes/i18n/locales/tr/language-info.lokalise.json index 459e854398..0b9ac6399c 100644 --- a/src/livecodes/i18n/locales/tr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/tr/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "Pascal, Free Pascal ekibi tarafından pas2js kullanılarak tarayıcıda çalışır ve WebAssembly'ye derlenir." + }, + "pascal.link": { + "translation": " Free Pascal resmi web sitesi pas2js dokümantasyonu pas2js wiki LiveCodes Belgeleri Başlangıç şablonunu yükle " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "Perlito kullanılarak tarayıcıda çalışan Perl." }, diff --git a/src/livecodes/i18n/locales/tr/language-info.ts b/src/livecodes/i18n/locales/tr/language-info.ts index 1357b5c61b..dcf78e10e6 100644 --- a/src/livecodes/i18n/locales/tr/language-info.ts +++ b/src/livecodes/i18n/locales/tr/language-info.ts @@ -296,6 +296,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml web sitesi <3> <4>OCaml dokümantasyonu <5> <6>ReScript web sitesi <7> <8>Y Dakikada X Öğrenin, X=OCaml <9> <10>Başlangıç şablonunu yükle ', name: 'OCaml', }, + pascal: { + desc: "Pascal, Free Pascal ekibi tarafından pas2js kullanılarak tarayıcıda çalışır ve WebAssembly'ye derlenir.", + link: '<1> <2>Free Pascal resmi web sitesi <3> <4>pas2js dokümantasyonu <5> <6>pas2js wiki <7> <8>LiveCodes Belgeleri <9> <10>Başlangıç şablonunu yükle ', + name: 'Pascal', + }, perl: { desc: 'Perlito kullanılarak tarayıcıda çalışan Perl.', link: '<1> <2>Perl resmi web sitesi <3> <4>Perl dokümantasyonu <5> <6>Perlito5 Benioku <7> <8>Y Dakikada X Öğrenin, X=perl <9> <10>Başlangıç şablonunu yükle ', diff --git a/src/livecodes/i18n/locales/tr/translation.lokalise.json b/src/livecodes/i18n/locales/tr/translation.lokalise.json index f3b871ef0c..c6a1af7396 100644 --- a/src/livecodes/i18n/locales/tr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/tr/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Ocaml Başlangıç" }, + "templates.starter.pascal": { + "translation": "Pascal Başlangıç" + }, "templates.starter.perl": { "translation": "Perl Başlangıç" }, diff --git a/src/livecodes/i18n/locales/tr/translation.ts b/src/livecodes/i18n/locales/tr/translation.ts index 317dd798c6..7074052ed0 100644 --- a/src/livecodes/i18n/locales/tr/translation.ts +++ b/src/livecodes/i18n/locales/tr/translation.ts @@ -1026,6 +1026,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZinc Başlangıç', 'objc-wasm': 'Objective-C (Wasm) Başlangıç', ocaml: 'Ocaml Başlangıç', + pascal: 'Pascal Başlangıç', perl: 'Perl Başlangıç', phaser: 'Phaser Başlangıç', php: 'PHP 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 8589817f35..f441a6acdf 100644 --- a/src/livecodes/i18n/locales/ur/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ur/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "او کیمل" }, + "pascal.desc": { + "translation": "Free Pascal ٹیم کے pas2js کا استعمال کرتے ہوئے براؤزر میں چلنے والا Pascal، جو WebAssembly میں مرتب کیا گیا ہے۔" + }, + "pascal.link": { + "translation": " Free Pascal کی سرکاری ویب سائٹ pas2js دستاویزات pas2js wiki لائیو کوڈز دستاویزات ابتدائی سانچہ لوڈ کریں " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "پرلیٹو کا استعمال کرتے ہوئے براؤزر میں چلنے والا پرل۔" }, diff --git a/src/livecodes/i18n/locales/ur/language-info.ts b/src/livecodes/i18n/locales/ur/language-info.ts index e8f1835f5b..a25dd7203b 100644 --- a/src/livecodes/i18n/locales/ur/language-info.ts +++ b/src/livecodes/i18n/locales/ur/language-info.ts @@ -297,6 +297,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>او کیمل ویب سائٹ <3> <4>او کیمل دستاویزات <5> <6>ری اسکرپٹ ویب سائٹ <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=او کیمل <9> <10>ابتدائی سانچہ لوڈ کریں ', name: 'او کیمل', }, + pascal: { + desc: 'Free Pascal ٹیم کے pas2js کا استعمال کرتے ہوئے براؤزر میں چلنے والا Pascal، جو WebAssembly میں مرتب کیا گیا ہے۔', + link: '<1> <2>Free Pascal کی سرکاری ویب سائٹ <3> <4>pas2js دستاویزات <5> <6>pas2js wiki <7> <8>لائیو کوڈز دستاویزات <9> <10>ابتدائی سانچہ لوڈ کریں ', + name: 'Pascal', + }, perl: { desc: 'پرلیٹو کا استعمال کرتے ہوئے براؤزر میں چلنے والا پرل۔', link: '<1> <2>پرل کی سرکاری ویب سائٹ <3> <4>پرل دستاویزات <5> <6>پرلیٹو5 ریڈمی <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=پرل <9> <10>ابتدائی سانچہ لوڈ کریں ', diff --git a/src/livecodes/i18n/locales/ur/translation.lokalise.json b/src/livecodes/i18n/locales/ur/translation.lokalise.json index 7480f23a61..10555a2acf 100644 --- a/src/livecodes/i18n/locales/ur/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ur/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "اوکامل شروعاتی" }, + "templates.starter.pascal": { + "translation": "پاسکل شروعاتی" + }, "templates.starter.perl": { "translation": "پرل شروعاتی" }, diff --git a/src/livecodes/i18n/locales/ur/translation.ts b/src/livecodes/i18n/locales/ur/translation.ts index 7fa12626f2..569eb3eca6 100644 --- a/src/livecodes/i18n/locales/ur/translation.ts +++ b/src/livecodes/i18n/locales/ur/translation.ts @@ -1025,6 +1025,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZinc شروعاتی', 'objc-wasm': 'Objective-C (واسم) شروعاتی', ocaml: 'اوکامل شروعاتی', + pascal: 'پاسکل شروعاتی', perl: 'پرل شروعاتی', phaser: 'فیزر شروعاتی', php: 'پی ایچ پی شروعاتی', 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 d1cea57d39..c9f28b1e41 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json @@ -519,6 +519,15 @@ "ocaml.name": { "translation": "OCaml" }, + "pascal.desc": { + "translation": "使用 Free Pascal 团队的 pas2js 在浏览器中运行的 Pascal,并编译为 WebAssembly。" + }, + "pascal.link": { + "translation": " Free Pascal 官网 pas2js 文档 pas2js wiki LiveCodes 文档 加载启动模板 " + }, + "pascal.name": { + "translation": "Pascal" + }, "perl.desc": { "translation": "使用 Perlito 在浏览器中运行的 Perl。" }, diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.ts b/src/livecodes/i18n/locales/zh-CN/language-info.ts index 2f6e4bdcd3..a409bbd88e 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.ts +++ b/src/livecodes/i18n/locales/zh-CN/language-info.ts @@ -290,6 +290,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1><2>OCaml 官方网站 <3> <4>OCaml 文档 <5> <6>ReScript 网站 <7> <8>在 Y 分钟内学习 X,其中 X=OCaml <9> <10>加载启动模板 ', name: 'OCaml', }, + pascal: { + desc: '使用 Free Pascal 团队的 pas2js 在浏览器中运行的 Pascal,并编译为 WebAssembly。', + link: '<1> <2>Free Pascal 官网 <3> <4>pas2js 文档 <5> <6>pas2js wiki <7> <8>LiveCodes 文档 <9> <10>加载启动模板 ', + name: 'Pascal', + }, perl: { desc: '使用 Perlito 在浏览器中运行的 Perl。', link: '<1> <2>Perl 官网 <3> <4>Perl 文档 <5> <6>Perlito5 自述文件 <7> <8>在 Y 分钟内学习 X,其中 X=Perl <9> <10>加载启动模板 ', diff --git a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json index 1f9003607d..1ca9e4db36 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json @@ -2058,6 +2058,9 @@ "templates.starter.ocaml": { "translation": "Ocaml 启动模板" }, + "templates.starter.pascal": { + "translation": "Pascal 启动模板" + }, "templates.starter.perl": { "translation": "Perl 启动模板" }, diff --git a/src/livecodes/i18n/locales/zh-CN/translation.ts b/src/livecodes/i18n/locales/zh-CN/translation.ts index 5778e5ca5f..507e90cc23 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.ts +++ b/src/livecodes/i18n/locales/zh-CN/translation.ts @@ -1023,6 +1023,7 @@ const translation: I18nTranslation = { minizinc: 'MiniZinc 启动模板', 'objc-wasm': 'Objective-C(WASM)启动模板', ocaml: 'Ocaml 启动模板', + pascal: 'Pascal 启动模板', perl: 'Perl 启动模板', phaser: 'Phaser 启动模板', php: 'PHP 启动模板', diff --git a/src/livecodes/languages/languages.ts b/src/livecodes/languages/languages.ts index 3fe75db640..d5c82b27c8 100644 --- a/src/livecodes/languages/languages.ts +++ b/src/livecodes/languages/languages.ts @@ -53,6 +53,7 @@ import { mjml } from './mjml'; import { mustache } from './mustache'; import { nunjucks } from './nunjucks'; import { ocaml } from './ocaml'; +import { pascal } from './pascal'; import { perl } from './perl'; import { php } from './php'; import { phpWasm } from './php-wasm'; @@ -168,6 +169,7 @@ export const languages: LanguageSpecs[] = [ rustWasm, swiftWasm, zigWasm, + pascal, java, csharpWasm, vbWasm, diff --git a/src/livecodes/languages/pascal/index.ts b/src/livecodes/languages/pascal/index.ts new file mode 100644 index 0000000000..565445b731 --- /dev/null +++ b/src/livecodes/languages/pascal/index.ts @@ -0,0 +1 @@ +export * from './lang-pascal'; diff --git a/src/livecodes/languages/pascal/lang-pascal-compiler.ts b/src/livecodes/languages/pascal/lang-pascal-compiler.ts new file mode 100644 index 0000000000..fbe41c6d43 --- /dev/null +++ b/src/livecodes/languages/pascal/lang-pascal-compiler.ts @@ -0,0 +1,55 @@ +import type { CompilerFunction } from '../../models'; +import { pascalWasmBaseUrl } from '../../vendors'; + +interface DiagnosticMessage { + file: string | null; + line: number | null; + column: number | null; + severity: string; + message: string; +} + +declare const pascalWasm: { + createCompiler: (options: { baseUrl: string }) => Promise<{ + compile: (code: string) => Promise<{ js: string | null; diagnostics: string }>; + }>; + parseDiagnostics: (diagnostics: string) => DiagnosticMessage[]; +}; + +const formatDiagnostics = (diagnostics: string) => { + const messages = pascalWasm.parseDiagnostics(diagnostics).map((message) => { + if (message.file === null || message.line === null) { + return `${message.severity}: ${message.message}`; + } + const file = message.file.replace(/^.*\//, ''); + return `${file} (${message.line},${message.column}) ${message.severity}: ${message.message}`; + }); + return messages.length ? messages : ['Pascal compilation failed']; +}; + +(self as any).createPascalCompiler = (): CompilerFunction => { + let compiler: ReturnType | undefined; + + const getCompiler = () => { + if (!compiler) { + compiler = pascalWasm.createCompiler({ baseUrl: pascalWasmBaseUrl }); + // do not keep a failed boot (e.g. a transient network error) + compiler.catch(() => { + compiler = undefined; + }); + } + return compiler; + }; + + // the compiler (a ~9 MB WASM module) is loaded once and kept warm + getCompiler().catch(() => undefined); + + return async (code) => { + if (!code.trim()) return ''; + const { js, diagnostics } = await (await getCompiler()).compile(code); + if (!js) { + return { code: '', info: { errors: formatDiagnostics(diagnostics) } }; + } + return `${js}\nrtl.run();\n`; + }; +}; diff --git a/src/livecodes/languages/pascal/lang-pascal.ts b/src/livecodes/languages/pascal/lang-pascal.ts new file mode 100644 index 0000000000..9923b30e23 --- /dev/null +++ b/src/livecodes/languages/pascal/lang-pascal.ts @@ -0,0 +1,25 @@ +import { codemirrorLegacy } from '../../editor/codemirror/utils'; +import type { LanguageSpecs } from '../../models'; +import { codeMirrorBaseUrl, monacoLanguagesBaseUrl, pascalWasmScriptUrl } from '../../vendors'; + +export const pascal: LanguageSpecs = { + name: 'pascal', + title: 'Pascal', + compiler: { + url: pascalWasmScriptUrl, + factory: (_config, baseUrl) => { + (self as any).importScripts(baseUrl + '{{hash:lang-pascal-compiler.js}}'); + return (self as any).createPascalCompiler(); + }, + }, + extensions: ['pascal', 'pas', 'pp', 'pas2js'], + editor: 'script', + editorSupport: { + monaco: { languageSupport: monacoLanguagesBaseUrl + 'pascal.js' }, + codemirror: { + languageSupport: async () => + codemirrorLegacy((await import(codeMirrorBaseUrl + 'codemirror-lang-pascal.js')).pascal), + }, + }, + largeDownload: true, +}; diff --git a/src/livecodes/templates/starter/index.ts b/src/livecodes/templates/starter/index.ts index 337647f173..065b978a12 100644 --- a/src/livecodes/templates/starter/index.ts +++ b/src/livecodes/templates/starter/index.ts @@ -46,6 +46,7 @@ import { markdownStarter } from './markdown-starter'; import { mdxStarter } from './mdx-starter'; import { minizincStarter } from './minizinc-starter'; import { ocamlStarter } from './ocaml-starter'; +import { pascalStarter } from './pascal-starter'; import { perlStarter } from './perl-starter'; import { phaserStarter } from './phaser-starter'; import { phpStarter } from './php-starter'; @@ -136,6 +137,7 @@ export const starterTemplates = [ rustWasmStarter, swiftWasmStarter, zigWasmStarter, + pascalStarter, javaStarter, csharpWasmStarter, vbWasmStarter, diff --git a/src/livecodes/templates/starter/pascal-starter.ts b/src/livecodes/templates/starter/pascal-starter.ts new file mode 100644 index 0000000000..ac4515d4ad --- /dev/null +++ b/src/livecodes/templates/starter/pascal-starter.ts @@ -0,0 +1,69 @@ +import type { Template } from '../../models'; + +export const pascalStarter: Template = { + name: 'pascal', + title: window.deps.translateString('templates.starter.pascal', 'Pascal Starter'), + thumbnail: 'assets/templates/pascal.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: 'pascal', + content: ` +program app; + +uses + web, sysutils; + +var + Count: Integer = 0; + +function HandleClick(Event: TJSEvent): boolean; +var + Counter: TJSElement; +begin + Count := Count + 1; + Counter := document.getElementById('counter'); + if (Counter <> nil) then + Counter.innerHTML := 'You clicked ' + IntToStr(Count) + ' times.'; +end; + +var + Title: TJSElement; + Button: TJSElement; +begin + Writeln('Hello from Pascal!'); + + Title := document.getElementById('title'); + if (Title <> nil) then + Title.innerHTML := 'Pascal'; + + Button := document.getElementById('counter-button'); + if (Button <> nil) then + Button.addEventListener('click', @HandleClick); +end. +`.trimStart(), + }, +}; diff --git a/src/livecodes/vendors.ts b/src/livecodes/vendors.ts index 957178bd10..25b9789f28 100644 --- a/src/livecodes/vendors.ts +++ b/src/livecodes/vendors.ts @@ -100,7 +100,7 @@ export const codeiumProviderUrl = /* @__PURE__ */ getUrl( '@live-codes/monaco-codeium-provider@0.2.2/dist/index.js', ); -export const codeMirrorBaseUrl = /* @__PURE__ */ getUrl('@live-codes/codemirror@0.4.2/build/'); +export const codeMirrorBaseUrl = /* @__PURE__ */ getUrl('@live-codes/codemirror@0.4.3/build/'); export const codemirrorMinimapUrl = /* @__PURE__ */ getUrl( '@replit/codemirror-minimap@0.5.2/dist/index.js', @@ -369,6 +369,14 @@ export const opalBaseUrl = /* @__PURE__ */ getUrl('https://cdn.opalrb.com/opal/1 export const parinferUrl = /* @__PURE__ */ getUrl('parinfer@3.13.1/parinfer.js'); +export const pascalWasmScriptUrl = /* @__PURE__ */ getUrl( + '@live-codes/pascal-wasm@0.1.0/dist/pascal-wasm.iife.min.js', +); + +// The classic-script build has no module URL, so it cannot find `assets/` on its +// own and needs to be told where they are. +export const pascalWasmBaseUrl = /* @__PURE__ */ getUrl('@live-codes/pascal-wasm@0.1.0/assets/'); + export const pathBrowserifyUrl = /* @__PURE__ */ getModuleUrl('path-browserify@1.0.1'); export const pgliteUrl = /* @__PURE__ */ getUrl('@electric-sql/pglite@0.1.5/dist/index.js'); diff --git a/src/sdk/models.ts b/src/sdk/models.ts index fed81a4453..46a357d626 100644 --- a/src/sdk/models.ts +++ b/src/sdk/models.ts @@ -220,6 +220,10 @@ export type Language = | 'rust-wasm' | 'rs-wasm' | 'wasm.rs' + | 'pascal' + | 'pas' + | 'pp' + | 'pas2js' | 'perl' | 'pl' | 'pm' @@ -459,6 +463,7 @@ export type TemplateName = | 'rust-wasm' | 'swift-wasm' | 'zig-wasm' + | 'pascal' | 'perl' | 'lua' | 'lua-wasm' diff --git a/typos.toml b/typos.toml index 629bd22d2b..755cdc31ca 100644 --- a/typos.toml +++ b/typos.toml @@ -26,6 +26,7 @@ xdescribe = "xdescribe" arange = "arange" touchs = "touchs" decid = "decid" +Wirth = "Wirth" [type.svg] # Skip check contents for svg files diff --git a/vendor-licenses.md b/vendor-licenses.md index 6bea72150a..f2171a41a2 100644 --- a/vendor-licenses.md +++ b/vendor-licenses.md @@ -196,6 +196,8 @@ Parinfer.js: [MIT License](https://github.com/parinfer/parinfer.js/blob/cddc36ac path-browserify: [MIT License](https://github.com/browserify/path-browserify/blob/872fec31a8bac7b9b43be0e54ef3037e0202c5fb/LICENSE) +pas2js (Free Pascal): [LGPL-2.1 License](https://github.com/fpc/pas2js/blob/main/LICENSE) + Perlito5: [Artistic License 2.0](https://github.com/fglock/Perlito/blob/f217cdac3771de31e009d4e099bac7013a619987/LICENSE.md) PGlite: [Apache License 2.0](https://github.com/electric-sql/pglite/blob/4da200e634f417fca2a8c17a3b0bae70cc2fe5af/LICENSE)