diff --git a/.agents/skills/livecodes/language-support/references/languages.md b/.agents/skills/livecodes/language-support/references/languages.md
index 1fa694624d..a8b04f02cc 100644
--- a/.agents/skills/livecodes/language-support/references/languages.md
+++ b/.agents/skills/livecodes/language-support/references/languages.md
@@ -142,6 +142,7 @@ Enabled via `processors` config:
| Perl | `perl`, `pl`, `pm` | Perl runtime |
| Pascal | `pascal`, `pas`, `pp`, `pas2js` | pas2js (Pascal -> JS, WASM) |
| Ada (Wasm) | `ada`, `ada-wasm`, `adb`, `ads`, `hac`, `wasm.ada` | HAC (Ada -> WASM) |
+| D (Wasm) | `d-wasm`, `d`, `di`, `dlang`, `dmd` | DMD (D -> WASM) |
| Gleam | `gleam` | Gleam language |
| Elm | `elm` | Elm compiler (WASM) |
| Haskell | `haskell`, `hs`, `lhs` | MicroHs (not GHC) |
diff --git a/docs/docs/languages/d-wasm.mdx b/docs/docs/languages/d-wasm.mdx
new file mode 100644
index 0000000000..1589ab04ba
--- /dev/null
+++ b/docs/docs/languages/d-wasm.mdx
@@ -0,0 +1,141 @@
+# D (Wasm)
+
+D is a general-purpose, statically typed, compiled programming language with C-like syntax, garbage collection, and a rich standard library.
+
+D in LiveCodes is compiled to WebAssembly by [DMD](https://dlang.org/) and run in the browser, with
+no server. It uses the WebAssembly backend of [dkorpel's dmd-explorer](https://dkorpel.github.io/dmd-explorer/),
+packaged as [`@live-codes/dlang-wasm`](https://www.npmjs.com/package/@live-codes/dlang-wasm).
+
+## Usage
+
+Demo:
+
+import LiveCodes from '../../src/components/LiveCodes.tsx';
+
+export const dConfig = {
+ activeEditor: 'script',
+ script: {
+ language: 'd-wasm',
+ content: `import std.stdio;\n
+void main()
+{
+ writeln("Hello, World!");
+}`,
+ },
+ mode: 'simple',
+ editor: 'auto',
+ tools: {
+ status: 'full',
+ },
+};
+
+
+
+### Communication with JavaScript
+
+The program runs in the context of the result page. A few helpers are available in the browser global
+`livecodes.d` object:
+
+- `livecodes.d.input`: the standard input passed to the program.
+- `livecodes.d.loaded`: a promise that resolves when the compiler has downloaded and the program
+ has run. Other helpers should be used after it resolves.
+- `livecodes.d.output`: the program's output (standard output and standard error, in the order they
+ were written).
+- `livecodes.d.error`: the compiler diagnostics, if the code failed to compile.
+- `livecodes.d.exitCode`: the exit code of the program.
+- `livecodes.d.run`: compiles and runs the code again with new input, returning a promise that
+ resolves with `output`, `error` and `exitCode`.
+
+The same object is also available as `livecodes.dlang`.
+
+Example:
+
+
+
+```d
+import std.stdio;
+
+void main()
+{
+ writeln("Hello, World!");
+}
+```
+
+Templates, ranges and the algorithms in Phobos behave as expected:
+
+```d
+import std.stdio;
+import std.algorithm : map, sum;
+import std.range : iota;
+
+void main()
+{
+ auto squares = iota(1, 6).map!(x => x * x);
+ writeln(squares); // [1, 4, 9, 16, 25]
+ writeln(squares.sum); // 55
+}
+```
+
+`readln` reads from the **stdin** pane, in the same way as the other console languages.
+
+## Language Info
+
+### Name
+
+`d-wasm`
+
+### Aliases / Extensions
+
+`d`, `di`, `dlang`, `dmd`
+
+### Editor
+
+`script`
+
+## Compiler
+
+[DMD](https://dlang.org/) (the D reference compiler) compiled to WebAssembly, with druntime and
+Phobos, from [dkorpel's dmd-explorer](https://dkorpel.github.io/dmd-explorer/).
+
+### Version
+
+`DMD`: v2.113
+
+## Code Formatting
+
+Not currently supported.
+
+## Live Reload
+
+By default, new code changes are sent to the result page for re-evaluation without a full page reload. This behavior can be disabled by adding the code comment `// __livecodes_reload__` to the D code, which forces a full page reload.
+
+This comment can be added in the [`hiddenContent` property of the editor](../configuration/configuration-object.mdx#markup) for embedded playgrounds.
+
+## Example Usage
+
+```d
+import std.stdio;
+
+void main()
+{
+ int sum = 0;
+ foreach (i; 1 .. 6)
+ {
+ sum += i;
+ }
+ writeln("Sum = ", sum); // Sum = 15
+ writeln("Mean = ", sum / 5); // Mean = 3
+}
+```
+
+## Starter Template
+
+https://livecodes.io/?template=d-wasm
+
+## Links
+
+- [D official website](https://dlang.org/)
+- [D language specification](https://dlang.org/spec/spec.html)
+- [D language tour](https://tour.dlang.org/)
+- [Learn D in Y minutes](https://learnxinyminutes.com/docs/d/)
+- [@live-codes/dlang-wasm](https://www.npmjs.com/package/@live-codes/dlang-wasm)
diff --git a/docs/src/components/LanguageSliders.tsx b/docs/src/components/LanguageSliders.tsx
index 393d686d37..9fb6e0ddc4 100644
--- a/docs/src/components/LanguageSliders.tsx
+++ b/docs/src/components/LanguageSliders.tsx
@@ -94,6 +94,7 @@ export default function Sliders() {
{ name: 'objcpp-wasm', title: 'Objective-C++ (Wasm)' },
{ name: 'cobol-wasm', title: 'COBOL (Wasm)' },
{ name: 'fortran', title: 'Fortran' },
+ { name: 'd-wasm', title: 'D (Wasm)' },
{ name: 'rust-wasm', title: 'Rust (Wasm)' },
{ name: 'swift-wasm', title: 'Swift (Wasm)' },
{ name: 'haskell', title: 'Haskell' },
diff --git a/docs/src/components/TemplateList.tsx b/docs/src/components/TemplateList.tsx
index 9703d55ab2..feb3952f94 100644
--- a/docs/src/components/TemplateList.tsx
+++ b/docs/src/components/TemplateList.tsx
@@ -50,6 +50,7 @@ const templates = [
{ name: 'c-wasm', title: 'C (Wasm) Starter', thumbnail: 'c.svg' },
{ name: 'cobol-wasm', title: 'COBOL Starter', thumbnail: 'cobol.svg' },
{ name: 'fortran-wasm', title: 'Fortran Starter', thumbnail: 'fortran.svg' },
+ { name: 'd-wasm', title: 'D Starter', thumbnail: 'd.svg' },
{ name: 'cpp-wasm', title: 'C++ (Wasm) Starter', thumbnail: 'cpp.svg' },
{ name: 'objc-wasm', title: 'Objective-C (Wasm) Starter', thumbnail: 'objective-c.svg' },
{ name: 'rust-wasm', title: 'Rust (Wasm) Starter', thumbnail: 'rust.svg' },
diff --git a/functions/vendors/templates.js b/functions/vendors/templates.js
index 9834c0e64d..76924caf52 100644
--- a/functions/vendors/templates.js
+++ b/functions/vendors/templates.js
@@ -52,6 +52,7 @@ export const starterTemplates = {
"objc-wasm": "Objective-C (Wasm) Starter",
"cobol-wasm": "COBOL Starter",
"fortran-wasm": "Fortran Starter",
+ "d-wasm": "D Starter",
"rust-wasm": "Rust (Wasm) Starter",
"swift-wasm": "Swift (Wasm) Starter",
"zig-wasm": "Zig (Wasm) Starter",
diff --git a/scripts/build.js b/scripts/build.js
index cc79d610e3..15e8f3d1c1 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -229,6 +229,7 @@ const iifeBuild = () =>
'languages/cpp/lang-cpp-script.ts',
'languages/clang-wasm/lang-clang-wasm-script.ts',
'languages/fortran-wasm/lang-fortran-wasm-script.ts',
+ 'languages/d-wasm/lang-d-wasm-script.ts',
'languages/cobol-wasm/lang-cobol-wasm-script.ts',
'languages/go-wasm/lang-go-wasm-script.ts',
'languages/csharp-wasm/lang-csharp-wasm-script.ts',
diff --git a/server/php/inc/starter-templates.json b/server/php/inc/starter-templates.json
index 63b164e539..b2af230bfe 100644
--- a/server/php/inc/starter-templates.json
+++ b/server/php/inc/starter-templates.json
@@ -52,6 +52,7 @@
"objc-wasm": "Objective-C (Wasm) Starter",
"cobol-wasm": "COBOL Starter",
"fortran-wasm": "Fortran Starter",
+ "d-wasm": "D Starter",
"rust-wasm": "Rust (Wasm) Starter",
"swift-wasm": "Swift (Wasm) Starter",
"zig-wasm": "Zig (Wasm) Starter",
diff --git a/src/livecodes/UI/command-menu-actions.ts b/src/livecodes/UI/command-menu-actions.ts
index a088cf673c..6a19304ecd 100644
--- a/src/livecodes/UI/command-menu-actions.ts
+++ b/src/livecodes/UI/command-menu-actions.ts
@@ -308,6 +308,7 @@ export const getCommandMenuActions = ({
'objc-wasm',
'cobol-wasm',
'fortran-wasm',
+ 'd-wasm',
'rust-wasm',
'swift-wasm',
'zig-wasm',
diff --git a/src/livecodes/assets/templates/d.svg b/src/livecodes/assets/templates/d.svg
new file mode 100644
index 0000000000..8f2f56bc69
--- /dev/null
+++ b/src/livecodes/assets/templates/d.svg
@@ -0,0 +1,177 @@
+
diff --git a/src/livecodes/html/language-info.html b/src/livecodes/html/language-info.html
index 843afed019..df49270f6b 100644
--- a/src/livecodes/html/language-info.html
+++ b/src/livecodes/html/language-info.html
@@ -602,6 +602,42 @@
C# (Wasm)
+
+ D (Wasm)
+
+ D compiled to WebAssembly by
+
DMD, running entirely in the
+ browser.
+
+
+
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 9cffd85e61..0447c7ed5c 100644
--- a/src/livecodes/i18n/locales/ar/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ar/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "يتم تجميع D إلى WebAssembly بواسطة DMD، وتعمل بالكامل داخل المتصفح."
+ },
+ "d-wasm.link": {
+ "translation": " الموقع الرسمي لـ D مواصفات لغة D جولة في لغة D تعلم X في Y دقيقة، حيث X = D وثائق LiveCodes تحميل قالب البدء "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(تجريبي)"
},
diff --git a/src/livecodes/i18n/locales/ar/language-info.ts b/src/livecodes/i18n/locales/ar/language-info.ts
index a2838d9ca6..41531bea8a 100644
--- a/src/livecodes/i18n/locales/ar/language-info.ts
+++ b/src/livecodes/i18n/locales/ar/language-info.ts
@@ -111,6 +111,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>وثائق لغة C#2> 1> <3> <4> تعلم X في دقائق Y، حيث X = C#4> 3> <5> <6> وثائق LiveCodes6> 5> <7> <8> تحميل قالب البدء8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'يتم تجميع D إلى WebAssembly بواسطة <1>DMD1>، وتعمل بالكامل داخل المتصفح.',
+ link: '<1> <2>الموقع الرسمي لـ D2> 1> <3> <4>مواصفات لغة D4> 3> <5> <6>جولة في لغة D6> 5> <7> <8>تعلم X في Y دقيقة، حيث X = D8> 7> <9> <10>وثائق LiveCodes10> 9> <11> <12>تحميل قالب البدء12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(تجريبي)',
desc2: 'رسومات بيانية كبرمجة. يدعم:',
diff --git a/src/livecodes/i18n/locales/ar/translation.lokalise.json b/src/livecodes/i18n/locales/ar/translation.lokalise.json
index b59238f279..8c045f3f0f 100644
--- a/src/livecodes/i18n/locales/ar/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ar/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "قالب C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "قالب D"
+ },
"templates.starter.d3": {
"translation": "قالب D3"
},
diff --git a/src/livecodes/i18n/locales/ar/translation.ts b/src/livecodes/i18n/locales/ar/translation.ts
index b192d9ce38..7b719d0bf4 100644
--- a/src/livecodes/i18n/locales/ar/translation.ts
+++ b/src/livecodes/i18n/locales/ar/translation.ts
@@ -996,6 +996,7 @@ const translation: I18nTranslation = {
cpp: 'قالب C++',
'cpp-wasm': 'قالب C++ (Wasm)',
'csharp-wasm': 'قالب C# (Wasm)',
+ 'd-wasm': 'قالب D',
d3: 'قالب D3',
daisyui: 'قالب daisyUI',
diagrams: 'قالب الرسوم البيانية',
diff --git a/src/livecodes/i18n/locales/bn/language-info.lokalise.json b/src/livecodes/i18n/locales/bn/language-info.lokalise.json
index 637743f6a3..47a2f4a2e5 100644
--- a/src/livecodes/i18n/locales/bn/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/bn/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D DMD দ্বারা WebAssembly-তে কম্পাইল করা হয় এবং সম্পূর্ণভাবে ব্রাউজারে চলে।"
+ },
+ "d-wasm.link": {
+ "translation": " D অফিসিয়াল ওয়েবসাইট D ভাষা স্পেসিফিকেশন D ভাষা ট্যুর Y মিনিটে X শিখুন, যেখানে X=D লাইভকোডস ডকুমেন্টেশন স্টার্টার টেমপ্লেট লোড করুন "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(পরীক্ষামূলক)"
},
diff --git a/src/livecodes/i18n/locales/bn/language-info.ts b/src/livecodes/i18n/locales/bn/language-info.ts
index 29ab84cefd..a9ec413195 100644
--- a/src/livecodes/i18n/locales/bn/language-info.ts
+++ b/src/livecodes/i18n/locales/bn/language-info.ts
@@ -111,6 +111,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>C# ভাষা ডকুমেন্টেশন2> 1> <3> <4>Y মিনিটে X শিখুন, যেখানে X=C#4> 3> <5> <6>LiveCodes ডকুমেন্টেশন6> 5> <7> <8>স্টার্টার টেমপ্লেট লোড করুন8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D <1>DMD1> দ্বারা WebAssembly-তে কম্পাইল করা হয় এবং সম্পূর্ণভাবে ব্রাউজারে চলে।',
+ link: '<1> <2>D অফিসিয়াল ওয়েবসাইট2> 1> <3> <4>D ভাষা স্পেসিফিকেশন4> 3> <5> <6>D ভাষা ট্যুর6> 5> <7> <8>Y মিনিটে X শিখুন, যেখানে X=D8> 7> <9> <10>লাইভকোডস ডকুমেন্টেশন10> 9> <11> <12>স্টার্টার টেমপ্লেট লোড করুন12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(পরীক্ষামূলক)',
desc2: 'কোড-হিসাবে-ডায়াগ্রাম। সমর্থন করে:',
diff --git a/src/livecodes/i18n/locales/bn/translation.lokalise.json b/src/livecodes/i18n/locales/bn/translation.lokalise.json
index b42e2be2b0..b20db58da1 100644
--- a/src/livecodes/i18n/locales/bn/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/bn/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C# (Wasm) স্টার্টার"
},
+ "templates.starter.d-wasm": {
+ "translation": "D স্টার্টার"
+ },
"templates.starter.d3": {
"translation": "D3 স্টার্টার"
},
diff --git a/src/livecodes/i18n/locales/bn/translation.ts b/src/livecodes/i18n/locales/bn/translation.ts
index d562058e1c..2909de69fc 100644
--- a/src/livecodes/i18n/locales/bn/translation.ts
+++ b/src/livecodes/i18n/locales/bn/translation.ts
@@ -996,6 +996,7 @@ const translation: I18nTranslation = {
cpp: 'C++ স্টার্টার',
'cpp-wasm': 'C++ (Wasm) স্টার্টার',
'csharp-wasm': 'C# (Wasm) স্টার্টার',
+ 'd-wasm': 'D স্টার্টার',
d3: 'D3 স্টার্টার',
daisyui: 'daisyUI স্টার্টার',
diagrams: 'Diagrams স্টার্টার',
diff --git a/src/livecodes/i18n/locales/de/language-info.lokalise.json b/src/livecodes/i18n/locales/de/language-info.lokalise.json
index 0f40d74b57..3885d58cba 100644
--- a/src/livecodes/i18n/locales/de/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/de/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D wird von DMD nach WebAssembly kompiliert und läuft vollständig im Browser."
+ },
+ "d-wasm.link": {
+ "translation": " Offizielle Website von D D-Sprachspezifikation D Sprachführung Lerne X in Y Minuten, wobei X = D LiveCodes-Dokumentation Startervorlage laden "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Experimentell)"
},
diff --git a/src/livecodes/i18n/locales/de/language-info.ts b/src/livecodes/i18n/locales/de/language-info.ts
index c23d622d5d..262639c238 100644
--- a/src/livecodes/i18n/locales/de/language-info.ts
+++ b/src/livecodes/i18n/locales/de/language-info.ts
@@ -113,6 +113,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Dokumentation der Sprache C#2> 1> <3> <4> Lernen Sie X in Y Minuten, wobei X=C#4> 3> <5> <6> LiveCodes Dokumentation6> 5> <7> <8> Laden Sie die Startvorlage8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D wird von <1>DMD1> nach WebAssembly kompiliert und läuft vollständig im Browser.',
+ link: '<1> <2>Offizielle Website von D2> 1> <3> <4>D-Sprachspezifikation4> 3> <5> <6>D Sprachführung6> 5> <7> <8>Lerne X in Y Minuten, wobei X = D8> 7> <9> <10>LiveCodes-Dokumentation10> 9> <11> <12>Startervorlage laden12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Experimentell)',
desc2: 'Diagramme als Code. Unterstützt:',
diff --git a/src/livecodes/i18n/locales/de/translation.lokalise.json b/src/livecodes/i18n/locales/de/translation.lokalise.json
index 77dcad0c02..c0fc6c8503 100644
--- a/src/livecodes/i18n/locales/de/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/de/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C# (Wasm)-Starter"
},
+ "templates.starter.d-wasm": {
+ "translation": "D-Starter"
+ },
"templates.starter.d3": {
"translation": "D3-Starter"
},
diff --git a/src/livecodes/i18n/locales/de/translation.ts b/src/livecodes/i18n/locales/de/translation.ts
index 70dda525df..e9defc5f53 100644
--- a/src/livecodes/i18n/locales/de/translation.ts
+++ b/src/livecodes/i18n/locales/de/translation.ts
@@ -998,6 +998,7 @@ const translation: I18nTranslation = {
cpp: 'C++-Starter',
'cpp-wasm': 'C++ (Wasm)-Starter',
'csharp-wasm': 'C# (Wasm)-Starter',
+ 'd-wasm': 'D-Starter',
d3: 'D3-Starter',
daisyui: 'daisyUI-Starter',
diagrams: 'Diagramm-Starter',
diff --git a/src/livecodes/i18n/locales/en/language-info.lokalise.json b/src/livecodes/i18n/locales/en/language-info.lokalise.json
index 3aa9b19a7c..3a5927087d 100644
--- a/src/livecodes/i18n/locales/en/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/en/language-info.lokalise.json
@@ -256,6 +256,18 @@
"notes": "",
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "notes": "### ###\n\n\n",
+ "translation": "D compiled to WebAssembly by DMD, running entirely in the browser."
+ },
+ "d-wasm.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### ###\n\n\n### ###\n\n\n",
+ "translation": " D official website D language specification D language tour Learn X in Y minutes, where X=D LiveCodes Documentation Load starter template "
+ },
+ "d-wasm.name": {
+ "notes": "",
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"notes": "",
"translation": "(Experimental)"
diff --git a/src/livecodes/i18n/locales/en/language-info.ts b/src/livecodes/i18n/locales/en/language-info.ts
index d1fd6417bd..59e146c7d9 100644
--- a/src/livecodes/i18n/locales/en/language-info.ts
+++ b/src/livecodes/i18n/locales/en/language-info.ts
@@ -119,6 +119,11 @@ const languageInfo = {
link: '<1> <2>C# language documentation2> 1> <3> <4>Learn X in Y minutes, where X=C#4> 3> <5> <6>LiveCodes Documentation6> 5> <7> <8>Load starter template8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D compiled to WebAssembly by <1>DMD1>, running entirely in the browser.',
+ link: '<1> <2>D official website2> 1> <3> <4>D language specification4> 3> <5> <6>D language tour6> 5> <7> <8>Learn X in Y minutes, where X=D8> 7> <9> <10>LiveCodes Documentation10> 9> <11> <12>Load starter template12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Experimental)',
desc2: 'Diagrams-as-code. Supports:',
diff --git a/src/livecodes/i18n/locales/en/translation.lokalise.json b/src/livecodes/i18n/locales/en/translation.lokalise.json
index d8d8ceb184..f7990a76fe 100644
--- a/src/livecodes/i18n/locales/en/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/en/translation.lokalise.json
@@ -2628,6 +2628,10 @@
"notes": "",
"translation": "C# (Wasm) Starter"
},
+ "templates.starter.d-wasm": {
+ "notes": "",
+ "translation": "D Starter"
+ },
"templates.starter.d3": {
"notes": "",
"translation": "D3 Starter"
diff --git a/src/livecodes/i18n/locales/en/translation.ts b/src/livecodes/i18n/locales/en/translation.ts
index ab7866dad1..a368d5972b 100644
--- a/src/livecodes/i18n/locales/en/translation.ts
+++ b/src/livecodes/i18n/locales/en/translation.ts
@@ -1003,6 +1003,7 @@ const translation = {
cpp: 'C++ Starter',
'cpp-wasm': 'C++ (Wasm) Starter',
'csharp-wasm': 'C# (Wasm) Starter',
+ 'd-wasm': 'D Starter',
d3: 'D3 Starter',
daisyui: 'daisyUI Starter',
diagrams: 'Diagrams Starter',
diff --git a/src/livecodes/i18n/locales/es/language-info.lokalise.json b/src/livecodes/i18n/locales/es/language-info.lokalise.json
index 7b059552a3..39bac57f40 100644
--- a/src/livecodes/i18n/locales/es/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/es/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D compilado a WebAssembly por DMD, ejecutándose íntegramente en el navegador."
+ },
+ "d-wasm.link": {
+ "translation": " Página web oficial de D Especificación del lenguaje D Tour del lenguaje D Aprende X en Y minutos, donde X = D Documentación de LiveCodes Cargar plantilla de inicio "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Experimental)"
},
diff --git a/src/livecodes/i18n/locales/es/language-info.ts b/src/livecodes/i18n/locales/es/language-info.ts
index f4fe59abc5..e519db1429 100644
--- a/src/livecodes/i18n/locales/es/language-info.ts
+++ b/src/livecodes/i18n/locales/es/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Documentación del lenguaje C#2> 1> <3> <4> Aprenda X en Y minutos, donde X=C#4> 3> <5> <6> Documentación de LiveCodes6> 5> <7> <8> Cargue la plantilla de inicio8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D compilado a WebAssembly por <1>DMD1>, ejecutándose íntegramente en el navegador.',
+ link: '<1> <2>Página web oficial de D2> 1> <3> <4>Especificación del lenguaje D4> 3> <5> <6>Tour del lenguaje D6> 5> <7> <8>Aprende X en Y minutos, donde X = D8> 7> <9> <10>Documentación de LiveCodes10> 9> <11> <12>Cargar plantilla de inicio12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Experimental)',
desc2: 'Diagramas como código. Soporta:',
diff --git a/src/livecodes/i18n/locales/es/translation.lokalise.json b/src/livecodes/i18n/locales/es/translation.lokalise.json
index 7f94058ecc..ae4253147e 100644
--- a/src/livecodes/i18n/locales/es/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/es/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "Inicio C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "Inicio D"
+ },
"templates.starter.d3": {
"translation": "Inicio D3"
},
diff --git a/src/livecodes/i18n/locales/es/translation.ts b/src/livecodes/i18n/locales/es/translation.ts
index 8c67cb6395..d167c42597 100644
--- a/src/livecodes/i18n/locales/es/translation.ts
+++ b/src/livecodes/i18n/locales/es/translation.ts
@@ -996,6 +996,7 @@ const translation: I18nTranslation = {
cpp: 'Inicio C++',
'cpp-wasm': 'Inicio C++ (Wasm)',
'csharp-wasm': 'Inicio C# (Wasm)',
+ 'd-wasm': 'Inicio D',
d3: 'Inicio D3',
daisyui: 'Inicio daisyUI',
diagrams: 'Inicio Diagramas',
diff --git a/src/livecodes/i18n/locales/fa/language-info.lokalise.json b/src/livecodes/i18n/locales/fa/language-info.lokalise.json
index 472c93c427..e61a2d9ebb 100644
--- a/src/livecodes/i18n/locales/fa/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/fa/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D توسط DMD به WebAssembly کامپایل میشود و کاملاً در مرورگر اجرا میشود."
+ },
+ "d-wasm.link": {
+ "translation": " وبسایت رسمی D مشخصات زبان D تور زبان D یادگیری X در Y دقیقه، که X=D مستندات لایوکدز بارگذاری قالب شروع "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(آزمایشی)"
},
diff --git a/src/livecodes/i18n/locales/fa/language-info.ts b/src/livecodes/i18n/locales/fa/language-info.ts
index 277ffd09f0..49d563bfd1 100644
--- a/src/livecodes/i18n/locales/fa/language-info.ts
+++ b/src/livecodes/i18n/locales/fa/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>مستندات زبان #C2> 1> <3> <4>یادگیری X در Y دقیقه، جایی که X=C#4> 3> <5> <6>مستندات LiveCodes6> 5> <7> <8>بارگذاری قالب شروع کننده8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D توسط <1>DMD1> به WebAssembly کامپایل میشود و کاملاً در مرورگر اجرا میشود.',
+ link: '<1> <2>وبسایت رسمی D2> 1> <3> <4>مشخصات زبان D4> 3> <5> <6>تور زبان D6> 5> <7> <8>یادگیری X در Y دقیقه، که X=D8> 7> <9> <10>مستندات لایوکدز10> 9> <11> <12>بارگذاری قالب شروع12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(آزمایشی)',
desc2: 'نمودارها به صورت کد. پشتیبانی از:',
diff --git a/src/livecodes/i18n/locales/fa/translation.lokalise.json b/src/livecodes/i18n/locales/fa/translation.lokalise.json
index dc2bede4fd..905c675853 100644
--- a/src/livecodes/i18n/locales/fa/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/fa/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "شروع کننده C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "شروع کننده D"
+ },
"templates.starter.d3": {
"translation": "شروع کننده D3"
},
diff --git a/src/livecodes/i18n/locales/fa/translation.ts b/src/livecodes/i18n/locales/fa/translation.ts
index b59ac5b97e..2b7263659b 100644
--- a/src/livecodes/i18n/locales/fa/translation.ts
+++ b/src/livecodes/i18n/locales/fa/translation.ts
@@ -997,6 +997,7 @@ const translation: I18nTranslation = {
cpp: 'شروع کننده C++',
'cpp-wasm': 'شروع کننده C++ (Wasm)',
'csharp-wasm': 'شروع کننده C# (Wasm)',
+ 'd-wasm': 'شروع کننده D',
d3: 'شروع کننده D3',
daisyui: 'شروع کننده daisyUI',
diagrams: 'شروع کننده نمودارها',
diff --git a/src/livecodes/i18n/locales/fr/language-info.lokalise.json b/src/livecodes/i18n/locales/fr/language-info.lokalise.json
index a570fd3ec0..5157c8fab7 100644
--- a/src/livecodes/i18n/locales/fr/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/fr/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D compilé en WebAssembly par DMD, s'exécutant entièrement dans le navigateur."
+ },
+ "d-wasm.link": {
+ "translation": " Site officiel de D Spécification du langage D Tour du langage D Apprenez X en Y minutes, où X = D Documentation LiveCodes Charger un modèle de démarrage "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Expérimental)"
},
diff --git a/src/livecodes/i18n/locales/fr/language-info.ts b/src/livecodes/i18n/locales/fr/language-info.ts
index 5dbe8b80bf..dbe5be9557 100644
--- a/src/livecodes/i18n/locales/fr/language-info.ts
+++ b/src/livecodes/i18n/locales/fr/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Documentation sur le langage C#2> 1> <3> <4> Apprenez X en Y minutes, où X=C#4> 3> <5> <6> Documentation LiveCodes6> 5> <7> <8> Charger le modèle de démarrage8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: "D compilé en WebAssembly par <1>DMD1>, s'exécutant entièrement dans le navigateur.",
+ link: '<1> <2>Site officiel de D2> 1> <3> <4>Spécification du langage D4> 3> <5> <6>Tour du langage D6> 5> <7> <8>Apprenez X en Y minutes, où X = D8> 7> <9> <10>Documentation LiveCodes10> 9> <11> <12>Charger un modèle de démarrage12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Expérimental)',
desc2: 'Diagrammes sous forme de code. Prend en charge :',
diff --git a/src/livecodes/i18n/locales/fr/translation.lokalise.json b/src/livecodes/i18n/locales/fr/translation.lokalise.json
index 8c6f6ee8cf..09b40d9059 100644
--- a/src/livecodes/i18n/locales/fr/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/fr/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "Démarrage C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "Démarrage D"
+ },
"templates.starter.d3": {
"translation": "Démarrage D3"
},
diff --git a/src/livecodes/i18n/locales/fr/translation.ts b/src/livecodes/i18n/locales/fr/translation.ts
index e4b42bf928..cbb57761ae 100644
--- a/src/livecodes/i18n/locales/fr/translation.ts
+++ b/src/livecodes/i18n/locales/fr/translation.ts
@@ -998,6 +998,7 @@ const translation: I18nTranslation = {
cpp: 'Démarrage C++',
'cpp-wasm': 'Démarrage C++ (Wasm)',
'csharp-wasm': 'Démarrage C# (Wasm)',
+ 'd-wasm': 'Démarrage D',
d3: 'Démarrage D3',
daisyui: 'Démarrage daisyUI',
diagrams: 'Démarrage Diagrammes',
diff --git a/src/livecodes/i18n/locales/hi/language-info.lokalise.json b/src/livecodes/i18n/locales/hi/language-info.lokalise.json
index 6130a1afa4..a8602ccb42 100644
--- a/src/livecodes/i18n/locales/hi/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/hi/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D को DMD द्वारा WebAssembly में संकलित किया जाता है, जो पूरी तरह से ब्राउज़र में चलता है।"
+ },
+ "d-wasm.link": {
+ "translation": " D आधिकारिक वेबसाइट D भाषा विनिर्देश D भाषा टूर Y मिनट में X सीखें, जहाँ X=D लाइवकोड्स दस्तावेज़ीकरण स्टार्टर टेम्पलेट लोड करें "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(प्रायोगिक)"
},
diff --git a/src/livecodes/i18n/locales/hi/language-info.ts b/src/livecodes/i18n/locales/hi/language-info.ts
index 6378e336ef..e6e6f30bbb 100644
--- a/src/livecodes/i18n/locales/hi/language-info.ts
+++ b/src/livecodes/i18n/locales/hi/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>सी# भाषा दस्तावेज़ीकरण2> 1> <3> <4>एक्स को वाई मिनटों में सीखें, जहां एक्स=सी#4> 3> <5> <6>लाइवकोड दस्तावेज़ीकरण6> 5> <7> <8>स्टार्टर टेम्पलेट लोड करें8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D को <1>DMD1> द्वारा WebAssembly में संकलित किया जाता है, जो पूरी तरह से ब्राउज़र में चलता है।',
+ link: '<1> <2>D आधिकारिक वेबसाइट2> 1> <3> <4>D भाषा विनिर्देश4> 3> <5> <6>D भाषा टूर6> 5> <7> <8>Y मिनट में X सीखें, जहाँ X=D8> 7> <9> <10>लाइवकोड्स दस्तावेज़ीकरण10> 9> <11> <12>स्टार्टर टेम्पलेट लोड करें12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(प्रायोगिक)',
desc2: 'कोड के रूप में आरेख। समर्थन करता है:',
diff --git a/src/livecodes/i18n/locales/hi/translation.lokalise.json b/src/livecodes/i18n/locales/hi/translation.lokalise.json
index 50ddbb6bda..bd32d66fe2 100644
--- a/src/livecodes/i18n/locales/hi/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/hi/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C# (Wasm) स्टार्टर"
},
+ "templates.starter.d-wasm": {
+ "translation": "D स्टार्टर"
+ },
"templates.starter.d3": {
"translation": "D3 स्टार्टर"
},
diff --git a/src/livecodes/i18n/locales/hi/translation.ts b/src/livecodes/i18n/locales/hi/translation.ts
index 6e55916bee..1194034c04 100644
--- a/src/livecodes/i18n/locales/hi/translation.ts
+++ b/src/livecodes/i18n/locales/hi/translation.ts
@@ -996,6 +996,7 @@ const translation: I18nTranslation = {
cpp: 'C++ स्टार्टर',
'cpp-wasm': 'C++ (Wasm) स्टार्टर',
'csharp-wasm': 'C# (Wasm) स्टार्टर',
+ 'd-wasm': 'D स्टार्टर',
d3: 'D3 स्टार्टर',
daisyui: 'daisyUI स्टार्टर',
diagrams: 'आरेख स्टार्टर',
diff --git a/src/livecodes/i18n/locales/hu/language-info.lokalise.json b/src/livecodes/i18n/locales/hu/language-info.lokalise.json
index 2fae13696f..6df56e54c5 100644
--- a/src/livecodes/i18n/locales/hu/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/hu/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "A D a DMD segítségével WebAssembly-re fordul, és teljes egészében a böngészőben fut."
+ },
+ "d-wasm.link": {
+ "translation": " A D hivatalos weboldala D nyelvi specifikáció D nyelvi túra Tanulj meg X-et Y perc alatt, ahol X=D LiveCodes dokumentáció Indító sablon betöltése "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Kísérleti)"
},
diff --git a/src/livecodes/i18n/locales/hu/language-info.ts b/src/livecodes/i18n/locales/hu/language-info.ts
index 3ecf913ae5..e6b178d781 100644
--- a/src/livecodes/i18n/locales/hu/language-info.ts
+++ b/src/livecodes/i18n/locales/hu/language-info.ts
@@ -113,6 +113,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>C# nyelvi dokumentáció2> 1> <3> <4>Tanulj X-et Y perc alatt, ahol X=C#4> 3> <5> <6>LiveCodes dokumentáció6> 5> <7> <8>Kezdő sablon betöltése8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'A D a <1>DMD1> segítségével WebAssembly-re fordul, és teljes egészében a böngészőben fut.',
+ link: '<1> <2>A D hivatalos weboldala2> 1> <3> <4>D nyelvi specifikáció4> 3> <5> <6>D nyelvi túra6> 5> <7> <8>Tanulj meg X-et Y perc alatt, ahol X=D8> 7> <9> <10>LiveCodes dokumentáció10> 9> <11> <12>Indító sablon betöltése12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Kísérleti)',
desc2: 'Diagramok-kódként. Támogatja:',
diff --git a/src/livecodes/i18n/locales/hu/translation.lokalise.json b/src/livecodes/i18n/locales/hu/translation.lokalise.json
index 5ad93207f0..17f2b46fb2 100644
--- a/src/livecodes/i18n/locales/hu/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/hu/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C# (Wasm) kezdő"
},
+ "templates.starter.d-wasm": {
+ "translation": "D kezdő"
+ },
"templates.starter.d3": {
"translation": "D3 kezdő"
},
diff --git a/src/livecodes/i18n/locales/hu/translation.ts b/src/livecodes/i18n/locales/hu/translation.ts
index 8c614f588b..15a4e6e9c0 100644
--- a/src/livecodes/i18n/locales/hu/translation.ts
+++ b/src/livecodes/i18n/locales/hu/translation.ts
@@ -997,6 +997,7 @@ const translation: I18nTranslation = {
cpp: 'C++ kezdő',
'cpp-wasm': 'C++ (Wasm) kezdő',
'csharp-wasm': 'C# (Wasm) kezdő',
+ 'd-wasm': 'D kezdő',
d3: 'D3 kezdő',
daisyui: 'daisyUI kezdő',
diagrams: 'Diagramok kezdő',
diff --git a/src/livecodes/i18n/locales/id/language-info.lokalise.json b/src/livecodes/i18n/locales/id/language-info.lokalise.json
index 7c8be50542..570030c2a6 100644
--- a/src/livecodes/i18n/locales/id/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/id/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D dikompilasi ke WebAssembly oleh DMD, berjalan sepenuhnya di dalam browser."
+ },
+ "d-wasm.link": {
+ "translation": " Situs web resmi D Spesifikasi bahasa D Tur bahasa D Belajar X dalam Y menit, di mana X = D Dokumentasi LiveCodes Muat templat awal "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Eksperimental)"
},
diff --git a/src/livecodes/i18n/locales/id/language-info.ts b/src/livecodes/i18n/locales/id/language-info.ts
index bc6d0467e7..03d6c57a8e 100644
--- a/src/livecodes/i18n/locales/id/language-info.ts
+++ b/src/livecodes/i18n/locales/id/language-info.ts
@@ -113,6 +113,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Dokumentasi bahasa C#2> 1> <3> <4>Pelajari X dalam Y menit, dengan X=C#4> 3> <5> <6>Dokumentasi LiveCodes6> 5> <7> <8>Muat template pemula8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D dikompilasi ke WebAssembly oleh <1>DMD1>, berjalan sepenuhnya di dalam browser.',
+ link: '<1> <2>Situs web resmi D2> 1> <3> <4>Spesifikasi bahasa D4> 3> <5> <6>Tur bahasa D6> 5> <7> <8>Belajar X dalam Y menit, di mana X = D8> 7> <9> <10>Dokumentasi LiveCodes10> 9> <11> <12>Muat templat awal12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Eksperimental)',
desc2: 'Diagram-sebagai-kode. Mendukung:',
diff --git a/src/livecodes/i18n/locales/id/translation.lokalise.json b/src/livecodes/i18n/locales/id/translation.lokalise.json
index 66df0cffab..47ce60c852 100644
--- a/src/livecodes/i18n/locales/id/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/id/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "Pemula C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "Pemula D"
+ },
"templates.starter.d3": {
"translation": "Pemula D3"
},
diff --git a/src/livecodes/i18n/locales/id/translation.ts b/src/livecodes/i18n/locales/id/translation.ts
index 71bad67074..fd6180395c 100644
--- a/src/livecodes/i18n/locales/id/translation.ts
+++ b/src/livecodes/i18n/locales/id/translation.ts
@@ -996,6 +996,7 @@ const translation: I18nTranslation = {
cpp: 'Pemula C++',
'cpp-wasm': 'Pemula C++ (Wasm)',
'csharp-wasm': 'Pemula C# (Wasm)',
+ 'd-wasm': 'Pemula D',
d3: 'Pemula D3',
daisyui: 'Pemula daisyUI',
diagrams: 'Pemula Diagram',
diff --git a/src/livecodes/i18n/locales/it/language-info.lokalise.json b/src/livecodes/i18n/locales/it/language-info.lokalise.json
index 6bd459e148..53042e8e1f 100644
--- a/src/livecodes/i18n/locales/it/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/it/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D compilato in WebAssembly da DMD, eseguito interamente nel browser."
+ },
+ "d-wasm.link": {
+ "translation": " Sito web ufficiale di D Specifica del linguaggio D Tour del linguaggio D Impara X in Y minuti, dove X = D Documentazione di LiveCodes Carica il modello di avvio "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Sperimentale)"
},
diff --git a/src/livecodes/i18n/locales/it/language-info.ts b/src/livecodes/i18n/locales/it/language-info.ts
index a894e3c498..5536561e6e 100644
--- a/src/livecodes/i18n/locales/it/language-info.ts
+++ b/src/livecodes/i18n/locales/it/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Documentazione sul linguaggio C#2> 1> <3> <4> Imparare X in Y minuti, dove X=C#4> 3> <5> <6> Documentazione LiveCodes6> 5> <7> <8> Carica il modello iniziale8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D compilato in WebAssembly da <1>DMD1>, eseguito interamente nel browser.',
+ link: '<1> <2>Sito web ufficiale di D2> 1> <3> <4>Specifica del linguaggio D4> 3> <5> <6>Tour del linguaggio D6> 5> <7> <8>Impara X in Y minuti, dove X = D8> 7> <9> <10>Documentazione di LiveCodes10> 9> <11> <12>Carica il modello di avvio12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Sperimentale)',
desc2: 'Diagrammi come codice. Supporta:',
diff --git a/src/livecodes/i18n/locales/it/translation.lokalise.json b/src/livecodes/i18n/locales/it/translation.lokalise.json
index df72eb124c..fbc62938c2 100644
--- a/src/livecodes/i18n/locales/it/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/it/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "Starter C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "Starter D"
+ },
"templates.starter.d3": {
"translation": "Starter D3"
},
diff --git a/src/livecodes/i18n/locales/it/translation.ts b/src/livecodes/i18n/locales/it/translation.ts
index d06368db46..b67c6fe4f0 100644
--- a/src/livecodes/i18n/locales/it/translation.ts
+++ b/src/livecodes/i18n/locales/it/translation.ts
@@ -997,6 +997,7 @@ const translation: I18nTranslation = {
cpp: 'Starter C++',
'cpp-wasm': 'Starter C++ (Wasm)',
'csharp-wasm': 'Starter C# (Wasm)',
+ 'd-wasm': 'Starter D',
d3: 'Starter D3',
daisyui: 'Starter daisyUI',
diagrams: 'Starter Diagrammi',
diff --git a/src/livecodes/i18n/locales/ja/language-info.lokalise.json b/src/livecodes/i18n/locales/ja/language-info.lokalise.json
index 003af91a09..96896268d0 100644
--- a/src/livecodes/i18n/locales/ja/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ja/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D は DMD によって WebAssembly にコンパイルされ、ブラウザ内で完全に実行されます。"
+ },
+ "d-wasm.link": {
+ "translation": " D 公式サイト D 言語仕様 D 言語ツアー 「Y分でXを学ぶ」(X=D) LiveCodes ドキュメント スターターテンプレートを読み込む "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(実験的)"
},
diff --git a/src/livecodes/i18n/locales/ja/language-info.ts b/src/livecodes/i18n/locales/ja/language-info.ts
index 3035393447..d1cf93881d 100644
--- a/src/livecodes/i18n/locales/ja/language-info.ts
+++ b/src/livecodes/i18n/locales/ja/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>C# 言語のドキュメント2> 1> <3> <4>X を Y 分で学習します (X=C の場合)#4> 3> <5> <6>LiveCodesドキュメンテーション6> 5> <7> <8>スターターテンプレートをロードする8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D は <1>DMD1> によって WebAssembly にコンパイルされ、ブラウザ内で完全に実行されます。',
+ link: '<1> <2>D 公式サイト2> 1> <3> <4>D 言語仕様4> 3> <5> <6>D 言語ツアー6> 5> <7> <8>「Y分でXを学ぶ」(X=D)8> 7> <9> <10>LiveCodes ドキュメント10> 9> <11> <12>スターターテンプレートを読み込む12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(実験的)',
desc2: 'コードとしての図表。サポート:',
diff --git a/src/livecodes/i18n/locales/ja/translation.lokalise.json b/src/livecodes/i18n/locales/ja/translation.lokalise.json
index 6c8c6c8989..408515a6fc 100644
--- a/src/livecodes/i18n/locales/ja/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ja/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C#(Wasm)スターター"
},
+ "templates.starter.d-wasm": {
+ "translation": "Dスターター"
+ },
"templates.starter.d3": {
"translation": "D3スターター"
},
diff --git a/src/livecodes/i18n/locales/ja/translation.ts b/src/livecodes/i18n/locales/ja/translation.ts
index 1683c8e497..ff4f4c6064 100644
--- a/src/livecodes/i18n/locales/ja/translation.ts
+++ b/src/livecodes/i18n/locales/ja/translation.ts
@@ -997,6 +997,7 @@ const translation: I18nTranslation = {
cpp: 'C++スターター',
'cpp-wasm': 'C++(Wasm)スターター',
'csharp-wasm': 'C#(Wasm)スターター',
+ 'd-wasm': 'Dスターター',
d3: 'D3スターター',
daisyui: 'daisyUIスターター',
diagrams: 'ダイアグラムスターター',
diff --git a/src/livecodes/i18n/locales/nl/language-info.lokalise.json b/src/livecodes/i18n/locales/nl/language-info.lokalise.json
index 475696dba9..f16a44febd 100644
--- a/src/livecodes/i18n/locales/nl/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/nl/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D wordt door DMD gecompileerd naar WebAssembly en draait volledig in de browser."
+ },
+ "d-wasm.link": {
+ "translation": " Officiële website van D D-taalspecificatie D taaltour Leer X in Y minuten, waarbij X = D LiveCodes-documentatie Starterssjabloon laden "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Experimenteel)"
},
diff --git a/src/livecodes/i18n/locales/nl/language-info.ts b/src/livecodes/i18n/locales/nl/language-info.ts
index 164da152f1..558fa2d990 100644
--- a/src/livecodes/i18n/locales/nl/language-info.ts
+++ b/src/livecodes/i18n/locales/nl/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>C#-taaldocumentatie2> 1> <3> <4>Leer X in Y minuten, waarbij X=C#4> 3> <5> <6>LiveCodes Documentatie6> 5> <7> <8>Startsjabloon laden8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D wordt door <1>DMD1> gecompileerd naar WebAssembly en draait volledig in de browser.',
+ link: '<1> <2>Officiële website van D2> 1> <3> <4>D-taalspecificatie4> 3> <5> <6>D taaltour6> 5> <7> <8>Leer X in Y minuten, waarbij X = D8> 7> <9> <10>LiveCodes-documentatie10> 9> <11> <12>Starterssjabloon laden12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Experimenteel)',
desc2: 'Diagrammen als code. Ondersteunt:',
diff --git a/src/livecodes/i18n/locales/nl/translation.lokalise.json b/src/livecodes/i18n/locales/nl/translation.lokalise.json
index 6d15d7fad6..ef30f62d0f 100644
--- a/src/livecodes/i18n/locales/nl/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/nl/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C# (Wasm)-starter"
},
+ "templates.starter.d-wasm": {
+ "translation": "D-starter"
+ },
"templates.starter.d3": {
"translation": "D3-starter"
},
diff --git a/src/livecodes/i18n/locales/nl/translation.ts b/src/livecodes/i18n/locales/nl/translation.ts
index 7e9b636c88..1a1109093b 100644
--- a/src/livecodes/i18n/locales/nl/translation.ts
+++ b/src/livecodes/i18n/locales/nl/translation.ts
@@ -997,6 +997,7 @@ const translation: I18nTranslation = {
cpp: 'C++-starter',
'cpp-wasm': 'C++ (Wasm)-starter',
'csharp-wasm': 'C# (Wasm)-starter',
+ 'd-wasm': 'D-starter',
d3: 'D3-starter',
daisyui: 'daisyUI-starter',
diagrams: 'Diagrammen-starter',
diff --git a/src/livecodes/i18n/locales/pt/language-info.lokalise.json b/src/livecodes/i18n/locales/pt/language-info.lokalise.json
index e2bf2819f5..ffc35b6ec4 100644
--- a/src/livecodes/i18n/locales/pt/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/pt/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D compilado para WebAssembly pelo DMD, executado na íntegra no navegador."
+ },
+ "d-wasm.link": {
+ "translation": " Site oficial do D Especificação da linguagem D Tour pela linguagem D Aprenda X em Y minutos, onde X = D Documentação do LiveCodes Carregar modelo inicial "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Experimental)"
},
diff --git a/src/livecodes/i18n/locales/pt/language-info.ts b/src/livecodes/i18n/locales/pt/language-info.ts
index 1e542fb8ba..95355064e8 100644
--- a/src/livecodes/i18n/locales/pt/language-info.ts
+++ b/src/livecodes/i18n/locales/pt/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Documentação da linguagem C#2> 1> <3> <4> Aprenda X em Y minutos, onde X=C#4> 3> <5> <6> Documentação LiveCodes6> 5> <7> <8> Carregar modelo inicial8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D compilado para WebAssembly pelo <1>DMD1>, executado na íntegra no navegador.',
+ link: '<1> <2>Site oficial do D2> 1> <3> <4>Especificação da linguagem D4> 3> <5> <6>Tour pela linguagem D6> 5> <7> <8>Aprenda X em Y minutos, onde X = D8> 7> <9> <10>Documentação do LiveCodes10> 9> <11> <12>Carregar modelo inicial12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Experimental)',
desc2: 'Diagramas como código. Suporta:',
diff --git a/src/livecodes/i18n/locales/pt/translation.lokalise.json b/src/livecodes/i18n/locales/pt/translation.lokalise.json
index aa8debfe63..54a56130a0 100644
--- a/src/livecodes/i18n/locales/pt/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/pt/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "Iniciante C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "Iniciante D"
+ },
"templates.starter.d3": {
"translation": "Iniciante D3"
},
diff --git a/src/livecodes/i18n/locales/pt/translation.ts b/src/livecodes/i18n/locales/pt/translation.ts
index 1bc08b3c99..cc93458c63 100644
--- a/src/livecodes/i18n/locales/pt/translation.ts
+++ b/src/livecodes/i18n/locales/pt/translation.ts
@@ -997,6 +997,7 @@ const translation: I18nTranslation = {
cpp: 'Iniciante C++',
'cpp-wasm': 'Iniciante C++ (Wasm)',
'csharp-wasm': 'Iniciante C# (Wasm)',
+ 'd-wasm': 'Iniciante D',
d3: 'Iniciante D3',
daisyui: 'Iniciante daisyUI',
diagrams: 'Iniciante Diagrams',
diff --git a/src/livecodes/i18n/locales/ru/language-info.lokalise.json b/src/livecodes/i18n/locales/ru/language-info.lokalise.json
index 065ac297a6..a397a84a49 100644
--- a/src/livecodes/i18n/locales/ru/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ru/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D компилируется в WebAssembly с помощью DMD и полностью выполняется в браузере."
+ },
+ "d-wasm.link": {
+ "translation": " Официальный сайт D Спецификация языка D Тур по языку D «Изучите X за Y минут», где X = D Документация LiveCodes Загрузить стартовый шаблон "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Экспериментально)"
},
diff --git a/src/livecodes/i18n/locales/ru/language-info.ts b/src/livecodes/i18n/locales/ru/language-info.ts
index 7d53b29f06..18c1b9f17b 100644
--- a/src/livecodes/i18n/locales/ru/language-info.ts
+++ b/src/livecodes/i18n/locales/ru/language-info.ts
@@ -113,6 +113,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Документация по языку C#2> 1> <3> <4> Узнайте X за Y минут, где X=C#4> 3> <5> <6> Документация LiveCodes6> 5> <7> <8> Загрузите стартовый шаблон8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D компилируется в WebAssembly с помощью <1>DMD1> и полностью выполняется в браузере.',
+ link: '<1> <2>Официальный сайт D2> 1> <3> <4>Спецификация языка D4> 3> <5> <6>Тур по языку D6> 5> <7> <8>«Изучите X за Y минут», где X = D8> 7> <9> <10>Документация LiveCodes10> 9> <11> <12>Загрузить стартовый шаблон12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Экспериментально)',
desc2: 'Диаграммы как код. Поддерживает:',
diff --git a/src/livecodes/i18n/locales/ru/translation.lokalise.json b/src/livecodes/i18n/locales/ru/translation.lokalise.json
index 5778dcbf95..ec8c67ad93 100644
--- a/src/livecodes/i18n/locales/ru/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ru/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "Стартер C# (Wasm)"
},
+ "templates.starter.d-wasm": {
+ "translation": "Стартер D"
+ },
"templates.starter.d3": {
"translation": "Стартер D3"
},
diff --git a/src/livecodes/i18n/locales/ru/translation.ts b/src/livecodes/i18n/locales/ru/translation.ts
index a66e97ded6..e9f7029b8e 100644
--- a/src/livecodes/i18n/locales/ru/translation.ts
+++ b/src/livecodes/i18n/locales/ru/translation.ts
@@ -996,6 +996,7 @@ const translation: I18nTranslation = {
cpp: 'Стартер C++',
'cpp-wasm': 'Стартер C++ (Wasm)',
'csharp-wasm': 'Стартер C# (Wasm)',
+ 'd-wasm': 'Стартер D',
d3: 'Стартер D3',
daisyui: 'Стартер daisyUI',
diagrams: 'Стартер диаграмм',
diff --git a/src/livecodes/i18n/locales/tr/language-info.lokalise.json b/src/livecodes/i18n/locales/tr/language-info.lokalise.json
index c24dda41e7..8e1d342fe8 100644
--- a/src/livecodes/i18n/locales/tr/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/tr/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D, DMD tarafından WebAssembly’ye derlenir ve tamamen tarayıcı içinde çalışır."
+ },
+ "d-wasm.link": {
+ "translation": " D resmi web sitesi D dil spesifikasyonu D dil turu Y dakikada X'i öğrenin, burada X=D LiveCodes Belgeleri Başlangıç şablonunu yükle "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(Deneysel)"
},
diff --git a/src/livecodes/i18n/locales/tr/language-info.ts b/src/livecodes/i18n/locales/tr/language-info.ts
index d5d18f7de6..f072ea97e3 100644
--- a/src/livecodes/i18n/locales/tr/language-info.ts
+++ b/src/livecodes/i18n/locales/tr/language-info.ts
@@ -112,6 +112,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>C# dil dokümantasyonu2> 1> <3> <4>Y Dakikada X Öğrenin, X=C#4> 3> <5> <6>LiveCodes Dokümantasyonu6> 5> <7> <8>Başlangıç şablonunu yükle8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D, <1>DMD1> tarafından WebAssembly’ye derlenir ve tamamen tarayıcı içinde çalışır.',
+ link: "<1> <2>D resmi web sitesi2> 1> <3> <4>D dil spesifikasyonu4> 3> <5> <6>D dil turu6> 5> <7> <8>Y dakikada X'i öğrenin, burada X=D8> 7> <9> <10>LiveCodes Belgeleri10> 9> <11> <12>Başlangıç şablonunu yükle12> 11>",
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(Deneysel)',
desc2: 'Kod olarak diyagramlar. Destekledikleri:',
diff --git a/src/livecodes/i18n/locales/tr/translation.lokalise.json b/src/livecodes/i18n/locales/tr/translation.lokalise.json
index c1fd9a1e2e..fef8e96051 100644
--- a/src/livecodes/i18n/locales/tr/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/tr/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C# (Wasm) Başlangıç"
},
+ "templates.starter.d-wasm": {
+ "translation": "D Başlangıç"
+ },
"templates.starter.d3": {
"translation": "D3 Başlangıç"
},
diff --git a/src/livecodes/i18n/locales/tr/translation.ts b/src/livecodes/i18n/locales/tr/translation.ts
index e0d07f1935..58e5dfc274 100644
--- a/src/livecodes/i18n/locales/tr/translation.ts
+++ b/src/livecodes/i18n/locales/tr/translation.ts
@@ -997,6 +997,7 @@ const translation: I18nTranslation = {
cpp: 'C++ Başlangıç',
'cpp-wasm': 'C++ (Wasm) Başlangıç',
'csharp-wasm': 'C# (Wasm) Başlangıç',
+ 'd-wasm': 'D Başlangıç',
d3: 'D3 Başlangıç',
daisyui: 'daisyUI Başlangıç',
diagrams: 'Diyagramlar 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 5edc90fd8f..8c27972788 100644
--- a/src/livecodes/i18n/locales/ur/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ur/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D DMD کے ذریعے WebAssembly میں مرتب کیا جاتا ہے، جو مکمل طور پر براؤزر میں چلتا ہے۔"
+ },
+ "d-wasm.link": {
+ "translation": " D آفیشل ویب سائٹ D زبان کی تفصیلات D زبان کا دورہ Y منٹ میں X سیکھیں، جہاں X=D لائیو کوڈز دستاویزات اسٹارٹر ٹیمپلیٹ لوڈ کریں "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(تجرباتی)"
},
diff --git a/src/livecodes/i18n/locales/ur/language-info.ts b/src/livecodes/i18n/locales/ur/language-info.ts
index ed2b461a39..ee9a1d3e92 100644
--- a/src/livecodes/i18n/locales/ur/language-info.ts
+++ b/src/livecodes/i18n/locales/ur/language-info.ts
@@ -113,6 +113,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2> C# زبان کی دستاویزات 2> 1> <3> <4> Y منٹوں میں X سیکھیں، جہاں X=C# 4> 3> <5> <6> LiveCodes ڈاکومینٹیشن 6> 5> <7> <8> 8> شروع کریں 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D <1>DMD1> کے ذریعے WebAssembly میں مرتب کیا جاتا ہے، جو مکمل طور پر براؤزر میں چلتا ہے۔',
+ link: '<1> <2>D آفیشل ویب سائٹ2> 1> <3> <4>D زبان کی تفصیلات4> 3> <5> <6>D زبان کا دورہ6> 5> <7> <8>Y منٹ میں X سیکھیں، جہاں X=D8> 7> <9> <10>لائیو کوڈز دستاویزات10> 9> <11> <12>اسٹارٹر ٹیمپلیٹ لوڈ کریں12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(تجرباتی)',
desc2: 'کوڈ کے طور پر خاکے۔ معاونت کرتا ہے:',
diff --git a/src/livecodes/i18n/locales/ur/translation.lokalise.json b/src/livecodes/i18n/locales/ur/translation.lokalise.json
index 18f444566e..c830900131 100644
--- a/src/livecodes/i18n/locales/ur/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ur/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C# (واسم) شروعاتی"
},
+ "templates.starter.d-wasm": {
+ "translation": "D شروعاتی"
+ },
"templates.starter.d3": {
"translation": "D3 شروعاتی"
},
diff --git a/src/livecodes/i18n/locales/ur/translation.ts b/src/livecodes/i18n/locales/ur/translation.ts
index 98147ee70a..73f962da93 100644
--- a/src/livecodes/i18n/locales/ur/translation.ts
+++ b/src/livecodes/i18n/locales/ur/translation.ts
@@ -996,6 +996,7 @@ const translation: I18nTranslation = {
cpp: 'سی++ شروعاتی',
'cpp-wasm': 'سی++ (واسم) شروعاتی',
'csharp-wasm': 'C# (واسم) شروعاتی',
+ 'd-wasm': 'D شروعاتی',
d3: 'D3 شروعاتی',
daisyui: 'daisyUI شروعاتی',
diagrams: 'ڈایاگرامز شروعاتی',
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 6030018064..62e481aa39 100644
--- a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json
@@ -192,6 +192,15 @@
"csharpWasm.name": {
"translation": "C# (Wasm)"
},
+ "d-wasm.desc": {
+ "translation": "D 由 DMD 编译为 WebAssembly,完全在浏览器中运行。"
+ },
+ "d-wasm.link": {
+ "translation": " D 官方网站 D 语言规范 D 语言导览 《Y分钟学会X》,其中X=D LiveCodes 文档 加载入门模板 "
+ },
+ "d-wasm.name": {
+ "translation": "D (Wasm)"
+ },
"diagrams.desc1": {
"translation": "(实验性)"
},
diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.ts b/src/livecodes/i18n/locales/zh-CN/language-info.ts
index eff5c264d1..31c50ef7c9 100644
--- a/src/livecodes/i18n/locales/zh-CN/language-info.ts
+++ b/src/livecodes/i18n/locales/zh-CN/language-info.ts
@@ -111,6 +111,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2> C# 语言文档2> 1> <3> <4>在 Y 分钟内学习 X,其中 X=C# 4> 3> <5> <6> LiveCodes 文档6> 5> <7> <8>加载入门模板8> 7>',
name: 'C# (Wasm)',
},
+ 'd-wasm': {
+ desc: 'D 由 <1>DMD1> 编译为 WebAssembly,完全在浏览器中运行。',
+ link: '<1> <2>D 官方网站2> 1> <3> <4>D 语言规范4> 3> <5> <6>D 语言导览6> 5> <7> <8>《Y分钟学会X》,其中X=D8> 7> <9> <10>LiveCodes 文档10> 9> <11> <12>加载入门模板12> 11>',
+ name: 'D (Wasm)',
+ },
diagrams: {
desc1: '(实验性)',
desc2: '使用代码绘制图表。支持:',
diff --git a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json
index 2fb10a92c1..fcd92ab6a4 100644
--- a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json
@@ -1971,6 +1971,9 @@
"templates.starter.csharp-wasm": {
"translation": "C#(WASM)启动模板"
},
+ "templates.starter.d-wasm": {
+ "translation": "D 启动模板"
+ },
"templates.starter.d3": {
"translation": "D3 启动模板"
},
diff --git a/src/livecodes/i18n/locales/zh-CN/translation.ts b/src/livecodes/i18n/locales/zh-CN/translation.ts
index 740a43b357..6e6646cbf2 100644
--- a/src/livecodes/i18n/locales/zh-CN/translation.ts
+++ b/src/livecodes/i18n/locales/zh-CN/translation.ts
@@ -994,6 +994,7 @@ const translation: I18nTranslation = {
cpp: 'C++ 启动模板',
'cpp-wasm': 'C++(WASM)启动模板',
'csharp-wasm': 'C#(WASM)启动模板',
+ 'd-wasm': 'D 启动模板',
d3: 'D3 启动模板',
daisyui: 'daisyUI 启动模板',
diagrams: '图表启动模板',
diff --git a/src/livecodes/languages/d-wasm/__tests__/lang-d-wasm.spec.ts b/src/livecodes/languages/d-wasm/__tests__/lang-d-wasm.spec.ts
new file mode 100644
index 0000000000..3c8b48503b
--- /dev/null
+++ b/src/livecodes/languages/d-wasm/__tests__/lang-d-wasm.spec.ts
@@ -0,0 +1,28 @@
+import { dWasm } from '../lang-d-wasm';
+
+describe('D (Wasm) language spec', () => {
+ test('is registered as d-wasm, with the wasm compiler script', () => {
+ expect(dWasm.name).toBe('d-wasm');
+ expect(dWasm.title).toBe('D (Wasm)');
+ expect(dWasm.compiler).toMatchObject({
+ scriptType: 'text/d-wasm',
+ compiledCodeLanguage: 'd-wasm',
+ liveReload: true,
+ });
+ });
+
+ test('accepts the common D extensions', () => {
+ expect(dWasm.extensions).toEqual(expect.arrayContaining(['d', 'di', 'dlang', 'dmd']));
+ });
+
+ test('warns that the first run is a large download', () => {
+ // The DMD runtime is ~5.5 MB compressed (25 MB inflated); the app shows a loading indicator.
+ expect(dWasm.largeDownload).toBe(true);
+ });
+
+ test('provides D editor support in all editors', () => {
+ expect(dWasm.editor).toBe('script');
+ expect(dWasm.editorSupport?.monaco?.language).toBe('d');
+ expect(dWasm.editorSupport?.codejar?.language).toBe('d');
+ });
+});
diff --git a/src/livecodes/languages/d-wasm/index.ts b/src/livecodes/languages/d-wasm/index.ts
new file mode 100644
index 0000000000..7c6cf784a8
--- /dev/null
+++ b/src/livecodes/languages/d-wasm/index.ts
@@ -0,0 +1 @@
+export * from './lang-d-wasm';
diff --git a/src/livecodes/languages/d-wasm/lang-d-wasm-script.ts b/src/livecodes/languages/d-wasm/lang-d-wasm-script.ts
new file mode 100644
index 0000000000..254e92f37f
--- /dev/null
+++ b/src/livecodes/languages/d-wasm/lang-d-wasm-script.ts
@@ -0,0 +1,221 @@
+/* eslint-disable no-console */
+import { getErrorMessage } from '../../utils/utils';
+import { dlangWasmBaseUrl } from '../../vendors';
+import { createWorkerRunner, type Runner } from '../worker-runner';
+
+// One runner for one language. The compiler itself is @live-codes/dlang-wasm (DMD compiled to
+// WebAssembly), loaded from its CDN build: the IIFE defines `self.dlangWasm`, which the worker
+// reaches with importScripts. It compiles and runs the program in place, because a browser has no
+// linker subprocess to hand a binary to.
+const SCRIPT_TYPE = 'text/d-wasm';
+
+interface RunResult {
+ input: string;
+ output: string | null;
+ error: string | null;
+ exitCode: number | null;
+}
+
+interface DWasmApi {
+ ready: boolean;
+ input: string;
+ output: string | null;
+ error: string | null;
+ exitCode: number | null;
+ loaded: Promise;
+ init: Promise | null;
+ runner: Runner | null;
+ run: (input?: string) => Promise;
+}
+
+declare const window: Window & {
+ livecodes: Record;
+};
+
+const getWorkerSrc = () => `
+importScripts(${JSON.stringify(dlangWasmBaseUrl + 'dist/dlang-wasm.global.js')});
+
+let compilerPromise = null;
+
+const getCompiler = () => {
+ compilerPromise =
+ compilerPromise ||
+ self.dlangWasm
+ .createCompiler('d', {
+ baseUrl: ${JSON.stringify(dlangWasmBaseUrl + 'assets/')},
+ })
+ .then(async (compiler) => {
+ // Compile druntime up front so the first Run only pays for the program.
+ await compiler.warm();
+ return compiler;
+ });
+ return compilerPromise;
+};
+
+addEventListener('message', async (event) => {
+ const { id, code, input } = event.data;
+ try {
+ const compiler = await getCompiler();
+ const result = await compiler.run(code, input);
+ postMessage({
+ id,
+ result: {
+ output: result.output,
+ // The package reports diagnostics as an array; empty on a clean compile.
+ errors: result.errors || [],
+ exitCode: result.exitCode,
+ },
+ });
+ } catch (error) {
+ postMessage({ id, error: String((error && error.message) || error) });
+ }
+});
+
+getCompiler().then(
+ () => postMessage({ type: 'ready' }),
+ (error) => postMessage({ type: 'error', message: String((error && error.message) || error) }),
+);
+`;
+
+// A single compile + run is normally quick; a long timeout guards against hangs (e.g. an infinite
+// loop in the user program) by killing and respawning the worker. The wasm call cannot be
+// interrupted any other way.
+const RUN_TIMEOUT_MS = 120000;
+
+/**
+ * Reads the program out of the result page.
+ *
+ * The result page writes the code inline as the `innerHTML` of a
+ * `
+`.trimStart(),
+ },
+ style: {
+ language: 'css',
+ content: `
+.container,
+.container button {
+ text-align: center;
+ font: 1em sans-serif;
+}
+.logo {
+ width: 150px;
+}
+`.trimStart(),
+ },
+ script: {
+ language: 'd',
+ content: `
+import std.stdio;
+import std.string : strip;
+import std.conv : to;
+
+void main()
+{
+ writeln("D");
+ int count = readln().strip().to!int;
+ writeln(count + 1);
+}
+`.trimStart(),
+ },
+};
diff --git a/src/livecodes/templates/starter/index.ts b/src/livecodes/templates/starter/index.ts
index 6647ec7b83..1342107608 100644
--- a/src/livecodes/templates/starter/index.ts
+++ b/src/livecodes/templates/starter/index.ts
@@ -20,6 +20,7 @@ import { coffeescriptStarter } from './coffeescript-starter';
import { commonlispStarter } from './commonlisp-starter';
import { cppStarter } from './cpp-starter';
import { csharpWasmStarter } from './csharp-wasm-starter';
+import { dWasmStarter } from './d-wasm-starter';
import { d3Starter } from './d3-starter';
import { daisyuiStarter } from './daisyui-starter';
import { diagramsStarter } from './diagrams-starter';
@@ -141,6 +142,7 @@ export const starterTemplates = [
objcWasmStarter,
cobolWasmStarter,
fortranWasmStarter,
+ dWasmStarter,
rustWasmStarter,
swiftWasmStarter,
zigWasmStarter,
diff --git a/src/livecodes/vendors.ts b/src/livecodes/vendors.ts
index 44fc5d65c5..d2badfe390 100644
--- a/src/livecodes/vendors.ts
+++ b/src/livecodes/vendors.ts
@@ -140,6 +140,8 @@ export const ddietrCmThemesBaseUrl = /* @__PURE__ */ getUrl(
'@ddietr/codemirror-themes@1.4.2/dist/theme/',
);
+export const dlangWasmBaseUrl = /* @__PURE__ */ getUrl('@live-codes/dlang-wasm@0.1.0/');
+
export const doppioJvmBaseUrl = 'https://unpkg.com/@seth0x41/doppio@1.0.0/';
export const dotUrl = /* @__PURE__ */ getUrl('dot@1.1.3/doT.js');
@@ -364,7 +366,7 @@ export const monacoBaseUrl = /* @__PURE__ */ getUrl('@live-codes/monaco-editor@0
export const monacoEmacsUrl = /* @__PURE__ */ getUrl('monaco-emacs@0.3.0/dist/monaco-emacs.js');
export const monacoLanguagesBaseUrl = /* @__PURE__ */ getUrl(
- '@live-codes/monaco-languages@0.3.10/dist/',
+ '@live-codes/monaco-languages@0.3.11/dist/',
);
export const monacoThemesBaseUrl = /* @__PURE__ */ getUrl('monaco-themes@0.4.4/themes/');
diff --git a/src/sdk/models.ts b/src/sdk/models.ts
index 2ade86ec3c..b1dc2a4692 100644
--- a/src/sdk/models.ts
+++ b/src/sdk/models.ts
@@ -192,6 +192,11 @@ export type Language =
| 'ftn'
| 'fortran-wasm'
| 'lfortran'
+ | 'd'
+ | 'di'
+ | 'dlang'
+ | 'dmd'
+ | 'd-wasm'
| 'cpp-wasm'
| 'cppwasm'
| 'wasm.cpp'
@@ -491,6 +496,7 @@ export type TemplateName =
| 'cpp-wasm'
| 'objc-wasm'
| 'fortran-wasm'
+ | 'd-wasm'
| 'cobol-wasm'
| 'java'
| 'csharp-wasm'
diff --git a/storybook/_stories/EmbedOptions/template.ts b/storybook/_stories/EmbedOptions/template.ts
index 081df37858..39ab1ecc63 100644
--- a/storybook/_stories/EmbedOptions/template.ts
+++ b/storybook/_stories/EmbedOptions/template.ts
@@ -51,6 +51,7 @@ const storyDef: StoryDef = {
CWasm: { props: { template: 'c-wasm' } },
CppWasm: { props: { template: 'cpp-wasm' } },
ObjcWasm: { props: { template: 'objc-wasm' } },
+ DWasm: { props: { template: 'd-wasm' } },
CobolWasm: { props: { template: 'cobol-wasm' }, storyName: 'COBOL (Wasm)' },
FortranWasm: { props: { template: 'fortran-wasm' }, storyName: 'Fortran (Wasm)' },
RustWasm: { props: { template: 'rust-wasm' } },
diff --git a/storybook/preact/stories/EmbedOptions/template.stories.ts b/storybook/preact/stories/EmbedOptions/template.stories.ts
index a9e2264a5f..9425051cdd 100644
--- a/storybook/preact/stories/EmbedOptions/template.stories.ts
+++ b/storybook/preact/stories/EmbedOptions/template.stories.ts
@@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' });
export const CppWasm = livecodesStory({ template: 'cpp-wasm' });
export const ObjcWasm = livecodesStory({ template: 'objc-wasm' });
export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
+export const DWasm = livecodesStory({ template: 'd-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
diff --git a/storybook/react/stories/EmbedOptions/template.stories.ts b/storybook/react/stories/EmbedOptions/template.stories.ts
index a9e2264a5f..9425051cdd 100644
--- a/storybook/react/stories/EmbedOptions/template.stories.ts
+++ b/storybook/react/stories/EmbedOptions/template.stories.ts
@@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' });
export const CppWasm = livecodesStory({ template: 'cpp-wasm' });
export const ObjcWasm = livecodesStory({ template: 'objc-wasm' });
export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
+export const DWasm = livecodesStory({ template: 'd-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
diff --git a/storybook/solid/stories/EmbedOptions/template.stories.ts b/storybook/solid/stories/EmbedOptions/template.stories.ts
index a9e2264a5f..9425051cdd 100644
--- a/storybook/solid/stories/EmbedOptions/template.stories.ts
+++ b/storybook/solid/stories/EmbedOptions/template.stories.ts
@@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' });
export const CppWasm = livecodesStory({ template: 'cpp-wasm' });
export const ObjcWasm = livecodesStory({ template: 'objc-wasm' });
export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
+export const DWasm = livecodesStory({ template: 'd-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
diff --git a/storybook/svelte/stories/EmbedOptions/template.stories.ts b/storybook/svelte/stories/EmbedOptions/template.stories.ts
index a9e2264a5f..9425051cdd 100644
--- a/storybook/svelte/stories/EmbedOptions/template.stories.ts
+++ b/storybook/svelte/stories/EmbedOptions/template.stories.ts
@@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' });
export const CppWasm = livecodesStory({ template: 'cpp-wasm' });
export const ObjcWasm = livecodesStory({ template: 'objc-wasm' });
export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
+export const DWasm = livecodesStory({ template: 'd-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
diff --git a/storybook/vue/stories/EmbedOptions/template.stories.ts b/storybook/vue/stories/EmbedOptions/template.stories.ts
index a9e2264a5f..9425051cdd 100644
--- a/storybook/vue/stories/EmbedOptions/template.stories.ts
+++ b/storybook/vue/stories/EmbedOptions/template.stories.ts
@@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' });
export const CppWasm = livecodesStory({ template: 'cpp-wasm' });
export const ObjcWasm = livecodesStory({ template: 'objc-wasm' });
export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
+export const DWasm = livecodesStory({ template: 'd-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
diff --git a/storybook/web-components/stories/EmbedOptions/template.stories.ts b/storybook/web-components/stories/EmbedOptions/template.stories.ts
index a9e2264a5f..9425051cdd 100644
--- a/storybook/web-components/stories/EmbedOptions/template.stories.ts
+++ b/storybook/web-components/stories/EmbedOptions/template.stories.ts
@@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' });
export const CppWasm = livecodesStory({ template: 'cpp-wasm' });
export const ObjcWasm = livecodesStory({ template: 'objc-wasm' });
export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
+export const DWasm = livecodesStory({ template: 'd-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
diff --git a/vendor-licenses.md b/vendor-licenses.md
index f46ea0731e..6c1d2e0339 100644
--- a/vendor-licenses.md
+++ b/vendor-licenses.md
@@ -344,6 +344,10 @@ wabt.js: [Apache-2.0 license](https://github.com/AssemblyScript/wabt.js/blob/182
wacl: [BSD 3-Clause License](https://github.com/ecky-l/wacl/blob/9daacabb0102a9986f33263261350edfeebdd83b/LICENSE)
+@live-codes/dlang-wasm: [MIT License](https://github.com/live-codes/browser-d/blob/main/LICENSE)
+
+DMD / druntime / Phobos (Wasm): [BSL-1.0 License](https://github.com/dlang/dmd/blob/master/LICENSE.txt)
+
@live-codes/cobol-wasm: [MIT License](https://github.com/live-codes/browser-cobol/blob/main/LICENSE) (the [@live-codes/cobol-wasm](https://www.npmjs.com/package/@live-codes/cobol-wasm) package's own code is MIT, but it ships GnuCOBOL in its assets and so declares `(MIT AND GPL-3.0-or-later)`. Neither GnuCOBOL nor Clang is bundled by LiveCodes; both are loaded at run time)
GnuCOBOL (Wasm): [GPL-3.0-or-later License](https://github.com/OCamlPro/gnucobol/blob/master/COPYING) (the COBOL compiler, shipped in `@live-codes/cobol-wasm`'s assets and loaded at run time by LiveCodes. Its `libcob` runtime is [LGPL-3.0-or-later](https://github.com/OCamlPro/gnucobol/blob/master/COPYING.LESSER), as is the GMP library it links)