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>موقع OCaml2>1> <3> <4>وثائق OCaml4> 3> <5> <6>موقع ReScript6> 5> <7> <8>تعلم X في Y دقائق، حيث X=OCaml8> 7> <9> <10>تحميل القالب الأولي10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'Pascal يعمل في المتصفح باستخدام pas2js (من فريق Free Pascal) ومُجمَّع إلى WebAssembly.',
+ link: '<1> <2>الموقع الرسمي لـ Free Pascal2> 1> <3> <4>وثائق pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>وثائق LiveCodes8> 7> <9> <10>تحميل القالب الأولي10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'بيرل تعمل في المتصفح باستخدام Perlito.',
link: '<1> <2>الموقع الرسمي لـ Perl2> 1> <3> <4>وثائق Perl4> 3> <5> <6>ملف README لـ Perlito56> 5> <7> <8>تعلم X في Y دقائق، حيث X=perl8> 7> <9> <10>تحميل القالب الأولي10> 9>',
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 ওয়েবসাইট2>1> <3> <4>OCaml ডকুমেন্টেশন4> 3> <5> <6>ReScript ওয়েবসাইট6> 5> <7> <8>Y মিনিটে X শিখুন, যেখানে X=OCaml8> 7> <9> <10>স্টার্টার টেমপ্লেট লোড করুন10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'Free Pascal দলের pas2js ব্যবহার করে ব্রাউজারে Pascal চলছে, যা WebAssembly-তে কম্পাইল করা।',
+ link: '<1> <2>Free Pascal অফিসিয়াল ওয়েবসাইট2> 1> <3> <4>pas2js ডকুমেন্টেশন4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes ডকুমেন্টেশন8> 7> <9> <10>স্টার্টার টেমপ্লেট লোড করুন10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perlito ব্যবহার করে ব্রাউজারে চলমান Perl।',
link: '<1> <2>Perl অফিসিয়াল ওয়েবসাইট2> 1> <3> <4>Perl ডকুমেন্টেশন4> 3> <5> <6>Perlito5 Readme6> 5> <7> <8>Y মিনিটে X শিখুন, যেখানে X=perl8> 7> <9> <10>স্টার্টার টেমপ্লেট লোড করুন10> 9>',
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 Website2>1> <3> <4>OCaml Dokumentation4> 3> <5> <6>ReScript Website6> 5> <7> <8>Lerne X in Y Minuten, wobei X=OCaml8> 7> <9> <10>Starter-Vorlage laden10> 9>',
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-Website2> 1> <3> <4>pas2js-Dokumentation4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes-Dokumentationen8> 7> <9> <10>Starter-Vorlage laden10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl läuft im Browser mit Perlito.',
link: '<1> <2>Perl offizielle Website2> 1> <3> <4>Perl Dokumentation4> 3> <5> <6>Perlito5 Readme6> 5> <7> <8>Lerne X in Y Minuten, wobei X=Perl8> 7> <9> <10>Starter-Vorlage laden10> 9>',
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 website2>1> <3> <4>OCaml documentation4> 3> <5> <6>ReScript website6> 5> <7> <8>Learn X in Y minutes, where X=OCaml8> 7> <9> <10>Load starter template10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'Pascal running in the browser using pas2js (by the Free Pascal team) compiled to WebAssembly.',
+ link: '<1> <2>Free Pascal website2> 1> <3> <4>pas2js documentation4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes Documentation8> 7> <9> <10>Load starter template10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl running in the browser using Perlito.',
link: '<1> <2>Perl official website2> 1> <3> <4>Perl documentation4> 3> <5> <6>Perlito5 Readme6> 5> <7> <8>Learn X in Y minutes, where X=perl8> 7> <9> <10>Load starter template10> 9>',
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 OCaml2>1> <3> <4>Documentación de OCaml4> 3> <5> <6>Sitio web de ReScript6> 5> <7> <8>Aprende X en Y minutos, donde X=OCaml8> 7> <9> <10>Cargar plantilla inicial10> 9>',
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 Pascal2> 1> <3> <4>Documentación de pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>Documentación de LiveCodes8> 7> <9> <10>Cargar plantilla inicial10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl ejecutándose en el navegador usando Perlito.',
link: '<1> <2>Sitio web oficial de Perl2> 1> <3> <4>Documentación de Perl4> 3> <5> <6>Readme de Perlito56> 5> <7> <8>Aprende X en Y minutos, donde X=perl8> 7> <9> <10>Cargar plantilla inicial10> 9>',
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>وبسایت OCaml2>1> <3> <4>مستندات OCaml4> 3> <5> <6>وبسایت ReScript6> 5> <7> <8>یادگیری X در Y دقیقه، جایی که X=OCaml8> 7> <9> <10>بارگذاری قالب شروع کننده10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'Pascal با استفاده از pas2js (توسط تیم Free Pascal) در مرورگر اجرا میشود و به WebAssembly کامپایل شده است.',
+ link: '<1> <2>وبسایت رسمی Free Pascal2> 1> <3> <4>مستندات pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>مستندات LiveCodes8> 7> <9> <10>بارگذاری قالب شروع کننده10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl که با استفاده از Perlito در مرورگر اجرا میشود.',
link: '<1> <2>وبسایت رسمی Perl2> 1> <3> <4>مستندات Perl4> 3> <5> <6>فایل Readme پرلیتو56> 5> <7> <8>یادگیری X در Y دقیقه، جایی که X=perl8> 7> <9> <10>بارگذاری قالب شروع کننده10> 9>',
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 OCaml2>1> <3> <4>Documentation OCaml4> 3> <5> <6>Site web ReScript6> 5> <7> <8>Apprenez X en Y minutes, où X=OCaml8> 7> <9> <10>Charger le modèle de démarrage10> 9>',
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 Pascal2> 1> <3> <4>Documentation pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>Documentations LiveCodes8> 7> <9> <10>Charger le modèle de démarrage10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: "Perl s'exécutant dans le navigateur en utilisant Perlito.",
link: '<1> <2>Site officiel de Perl2> 1> <3> <4>Documentation Perl4> 3> <5> <6>Readme de Perlito56> 5> <7> <8>Apprenez X en Y minutes, où X=perl8> 7> <9> <10>Charger le modèle de démarrage10> 9>',
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 वेबसाइट2>1> <3> <4>OCaml दस्तावेज़ीकरण4> 3> <5> <6>ReScript वेबसाइट6> 5> <7> <8>X को Y मिनटों में सीखें, जहां X=OCaml8> 7> <9> <10>स्टार्टर टेम्पलेट लोड करें10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'Free Pascal टीम द्वारा pas2js का उपयोग करके ब्राउज़र में चलने वाला Pascal, जो WebAssembly में संकलित है।',
+ link: '<1> <2>Free Pascal आधिकारिक वेबसाइट2> 1> <3> <4>pas2js दस्तावेज़ीकरण4> 3> <5> <6>pas2js wiki6> 5> <7> <8>लाइवकोड्स (LiveCodes) दस्तावेज़8> 7> <9> <10>स्टार्टर टेम्पलेट लोड करें10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perlito का उपयोग करके ब्राउज़र में चलने वाला Perl।',
link: '<1> <2>Perl आधिकारिक वेबसाइट2> 1> <3> <4>Perl दस्तावेज़ीकरण4> 3> <5> <6>Perlito5 रीडमी6> 5> <7> <8>X को Y मिनटों में सीखें, जहां X=perl8> 7> <9> <10>स्टार्टर टेम्पलेट लोड करें10> 9>',
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 weboldal2>1> <3> <4>OCaml dokumentáció4> 3> <5> <6>ReScript weboldal6> 5> <7> <8>Tanulj X-et Y perc alatt, ahol X=OCaml8> 7> <9> <10>Kezdő sablon betöltése10> 9>',
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 weboldal2> 1> <3> <4>pas2js dokumentáció4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes dokumentációk8> 7> <9> <10>Kezdő sablon betöltése10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl fut a böngészőben a Perlito használatával.',
link: '<1> <2>Perl hivatalos weboldal2> 1> <3> <4>Perl dokumentáció4> 3> <5> <6>Perlito5 Readme6> 5> <7> <8>Tanulj X-et Y perc alatt, ahol X=perl8> 7> <9> <10>Kezdő sablon betöltése10> 9>',
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 OCaml2>1> <3> <4>Dokumentasi OCaml4> 3> <5> <6>Situs web ReScript6> 5> <7> <8>Pelajari X dalam Y menit, dengan X=OCaml8> 7> <9> <10>Muat template pemula10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'Pascal berjalan di browser menggunakan pas2js (oleh tim Free Pascal), dikompilasi ke WebAssembly.',
+ link: '<1> <2>Situs web resmi Free Pascal2> 1> <3> <4>Dokumentasi pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>Dokumentasi LiveCodes8> 7> <9> <10>Muat template pemula10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl berjalan di browser menggunakan Perlito.',
link: '<1> <2>Situs web resmi Perl2> 1> <3> <4>Dokumentasi Perl4> 3> <5> <6>Readme Perlito56> 5> <7> <8>Pelajari X dalam Y menit, dengan X=perl8> 7> <9> <10>Muat template pemula10> 9>',
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 OCaml2>1> <3> <4>Documentazione di OCaml4> 3> <5> <6>Sito web di ReScript6> 5> <7> <8>Impara X in Y minuti, dove X=OCaml8> 7> <9> <10>Carica modello di partenza10> 9>',
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 Pascal2> 1> <3> <4>Documentazione di pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>Documentazione LiveCodes8> 7> <9> <10>Carica modello di partenza10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl in esecuzione nel browser utilizzando Perlito.',
link: '<1> <2>Sito ufficiale di Perl2> 1> <3> <4>Documentazione di Perl4> 3> <5> <6>Readme di Perlito56> 5> <7> <8>Impara X in Y minuti, dove X=perl8> 7> <9> <10>Carica modello di partenza10> 9>',
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 ウェブサイト2>1> <3> <4>OCaml ドキュメント4> 3> <5> <6>ReScript ウェブサイト6> 5> <7> <8>X分でYを学ぶ、X=OCaml8> 7> <9> <10>スターターテンプレートを読み込む10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'pas2js(Free Pascal チームによる)を使用してブラウザで動作する Pascal。WebAssembly にコンパイルされます。',
+ link: '<1> <2>Free Pascal 公式ウェブサイト2> 1> <3> <4>pas2js ドキュメント4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes ドキュメント8> 7> <9> <10>スターターテンプレートを読み込む10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perlito を使用してブラウザで動作する Perl。',
link: '<1> <2>Perl 公式ウェブサイト2> 1> <3> <4>Perl ドキュメント4> 3> <5> <6>Perlito5 Readme6> 5> <7> <8>X分でYを学ぶ、X=perl8> 7> <9> <10>スターターテンプレートを読み込む10> 9>',
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 website2>1> <3> <4>OCaml documentatie4> 3> <5> <6>ReScript website6> 5> <7> <8>Leer X in Y minuten, waarbij X=OCaml8> 7> <9> <10>Startsjabloon laden10> 9>',
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 website2> 1> <3> <4>pas2js-documentatie4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes-documentatie8> 7> <9> <10>Startsjabloon laden10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl draaiend in de browser met Perlito.',
link: '<1> <2>Perl officiële website2> 1> <3> <4>Perl documentatie4> 3> <5> <6>Perlito5 Readme6> 5> <7> <8>Leer X in Y minuten, waarbij X=perl8> 7> <9> <10>Startsjabloon laden10> 9>',
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 OCaml2>1> <3> <4>Documentação do OCaml4> 3> <5> <6>Site do ReScript6> 5> <7> <8>Aprenda X em Y minutos, onde X=OCaml8> 7> <9> <10>Carregar modelo inicial10> 9>',
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 Pascal2> 1> <3> <4>Documentação do pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>Documentação do LiveCodes8> 7> <9> <10>Carregar modelo inicial10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl rodando no navegador usando Perlito.',
link: '<1> <2>Site oficial do Perl2> 1> <3> <4>Documentação do Perl4> 3> <5> <6>Readme do Perlito56> 5> <7> <8>Aprenda X em Y minutos, onde X=perl8> 7> <9> <10>Carregar modelo inicial10> 9>',
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>Сайт OCaml2>1> <3> <4>Документация OCaml4> 3> <5> <6>Сайт ReScript6> 5> <7> <8>Изучите X за Y минут, где X=OCaml8> 7> <9> <10>Загрузить стартовый шаблон10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: 'Pascal, работающий в браузере с использованием pas2js (от команды Free Pascal), скомпилирован в WebAssembly.',
+ link: '<1> <2>Официальный сайт Free Pascal2> 1> <3> <4>Документация pas2js4> 3> <5> <6>pas2js wiki6> 5> <7> <8>Документация LiveCodes8> 7> <9> <10>Загрузить стартовый шаблон10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perl, работающий в браузере с использованием Perlito.',
link: '<1> <2>Официальный сайт Perl2> 1> <3> <4>Документация Perl4> 3> <5> <6>Readme Perlito56> 5> <7> <8>Изучите X за Y минут, где X=perl8> 7> <9> <10>Загрузить стартовый шаблон10> 9>',
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 sitesi2>1> <3> <4>OCaml dokümantasyonu4> 3> <5> <6>ReScript web sitesi6> 5> <7> <8>Y Dakikada X Öğrenin, X=OCaml8> 7> <9> <10>Başlangıç şablonunu yükle10> 9>',
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 sitesi2> 1> <3> <4>pas2js dokümantasyonu4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes Belgeleri8> 7> <9> <10>Başlangıç şablonunu yükle10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'Perlito kullanılarak tarayıcıda çalışan Perl.',
link: '<1> <2>Perl resmi web sitesi2> 1> <3> <4>Perl dokümantasyonu4> 3> <5> <6>Perlito5 Benioku6> 5> <7> <8>Y Dakikada X Öğrenin, X=perl8> 7> <9> <10>Başlangıç şablonunu yükle10> 9>',
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>او کیمل ویب سائٹ2>1> <3> <4>او کیمل دستاویزات4> 3> <5> <6>ری اسکرپٹ ویب سائٹ6> 5> <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=او کیمل8> 7> <9> <10>ابتدائی سانچہ لوڈ کریں10> 9>',
name: 'او کیمل',
},
+ pascal: {
+ desc: 'Free Pascal ٹیم کے pas2js کا استعمال کرتے ہوئے براؤزر میں چلنے والا Pascal، جو WebAssembly میں مرتب کیا گیا ہے۔',
+ link: '<1> <2>Free Pascal کی سرکاری ویب سائٹ2> 1> <3> <4>pas2js دستاویزات4> 3> <5> <6>pas2js wiki6> 5> <7> <8>لائیو کوڈز دستاویزات8> 7> <9> <10>ابتدائی سانچہ لوڈ کریں10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: 'پرلیٹو کا استعمال کرتے ہوئے براؤزر میں چلنے والا پرل۔',
link: '<1> <2>پرل کی سرکاری ویب سائٹ2> 1> <3> <4>پرل دستاویزات4> 3> <5> <6>پرلیٹو5 ریڈمی6> 5> <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=پرل8> 7> <9> <10>ابتدائی سانچہ لوڈ کریں10> 9>',
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 官方网站2>1> <3> <4>OCaml 文档4> 3> <5> <6>ReScript 网站6> 5> <7> <8>在 Y 分钟内学习 X,其中 X=OCaml8> 7> <9> <10>加载启动模板10> 9>',
name: 'OCaml',
},
+ pascal: {
+ desc: '使用 Free Pascal 团队的 pas2js 在浏览器中运行的 Pascal,并编译为 WebAssembly。',
+ link: '<1> <2>Free Pascal 官网2> 1> <3> <4>pas2js 文档4> 3> <5> <6>pas2js wiki6> 5> <7> <8>LiveCodes 文档8> 7> <9> <10>加载启动模板10> 9>',
+ name: 'Pascal',
+ },
perl: {
desc: '使用 Perlito 在浏览器中运行的 Perl。',
link: '<1> <2>Perl 官网2> 1> <3> <4>Perl 文档4> 3> <5> <6>Perlito5 自述文件6> 5> <7> <8>在 Y 分钟内学习 X,其中 X=Perl8> 7> <9> <10>加载启动模板10> 9>',
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)