Skip to content

Commit f080954

Browse files
committed
feat: add CodeBlock component for improved code display across documentation pages
1 parent a922d00 commit f080954

9 files changed

Lines changed: 167 additions & 82 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
import { Code } from "astro:components";
3+
import noshiftGrammar from "../../../vscode-extension/syntaxes/noshift.tmLanguage.json";
4+
5+
interface Props {
6+
code: string;
7+
lang?: string;
8+
}
9+
10+
const { code, lang = "text" } = Astro.props;
11+
12+
const resolvedLang = lang === "nsjs" ? noshiftGrammar : lang;
13+
---
14+
15+
<div class="code-block">
16+
<Code code={code.trim()} lang={resolvedLang as any} theme="tokyo-night" />
17+
</div>
18+
19+
<style>
20+
.code-block :global(pre) {
21+
background-color: var(--bg-code) !important;
22+
}
23+
</style>

pages/src/i18n/translations.ts

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -138,26 +138,26 @@ export const ui = {
138138
"cli.compileTitle": "nsc",
139139
"cli.compileDesc":
140140
"Compile all <code>.nsjs</code> files from <code>rootdir</code> to <code>outdir</code> as defined in <code>nsjsconfig.json</code>.",
141-
"cli.watchTitle": "nsc watch",
141+
"cli.watchTitle": "nsc watch | w | -w | --watch",
142142
"cli.watchDesc": "Watch for file changes and recompile automatically.",
143-
"cli.runTitle": "nsc run &lt;file&gt;",
143+
"cli.runTitle":
144+
"nsc run &lt;file&gt; | -r &lt;file&gt; | --run &lt;file&gt;",
144145
"cli.runDesc":
145146
"Compile and execute a <code>.nsjs</code> file directly without writing output files.",
146-
"cli.createCmdTitle": "nsc create [name]",
147+
"cli.createCmdTitle": "nsc create [name] | --create [name]",
147148
"cli.createCmdDesc":
148149
"Scaffold a new NoShift.js project. Use <code>--no-prettier</code> to skip Prettier setup.",
149-
"cli.initTitle": "nsc init",
150+
"cli.initTitle": "nsc init | --init",
150151
"cli.initDesc":
151152
"Create a <code>nsjsconfig.json</code> in the current directory with default settings.",
152-
"cli.cleanTitle": "nsc clean",
153+
"cli.cleanTitle": "nsc clean | --clean",
153154
"cli.cleanDesc":
154155
"Delete the output directory (<code>outdir</code>) defined in <code>nsjsconfig.json</code>.",
155-
"cli.versionTitle": "nsc version",
156-
"cli.versionDesc":
157-
"Display the current version of noshift.js. Also available as <code>nsc -v</code> or <code>nsc --version</code>.",
158-
"cli.helpTitle": "nsc help",
156+
"cli.versionTitle": "nsc version | -v | --version",
157+
"cli.versionDesc": "Display the current version of noshift.js.",
158+
"cli.helpTitle": "nsc help | -h | --help",
159159
"cli.helpDesc":
160-
"Show help information. Also available as <code>nsc -h</code> or <code>nsc --help</code>. Includes a link to the documentation site.",
160+
"Show help information. Includes a link to the documentation site.",
161161

162162
// Config
163163
"config.title": "Configuration",
@@ -220,13 +220,13 @@ export const ui = {
220220
"Shift が必要な記号を ^ プレフィックスの配列に置換する Joke 言語。コンパイルすると JavaScript になります。",
221221

222222
// Nav
223-
"nav.home": "ホーム",
224-
"nav.gettingStarted": "はじめに",
225-
"nav.syntax": "構文と記号",
226-
"nav.classes": "クラス",
227-
"nav.cli": "CLI リファレンス",
228-
"nav.config": "設定",
229-
"nav.vscode": "VS Code 拡張機能",
223+
"nav.home": "Home",
224+
"nav.gettingStarted": "Getting Started",
225+
"nav.syntax": "Syntax & Symbols",
226+
"nav.classes": "Classes",
227+
"nav.cli": "CLI Reference",
228+
"nav.config": "Configuration",
229+
"nav.vscode": "VS Code Extension",
230230
"nav.github": "GitHub",
231231
"nav.npm": "npm",
232232

@@ -327,26 +327,26 @@ export const ui = {
327327
"cli.compileTitle": "nsc",
328328
"cli.compileDesc":
329329
"<code>nsjsconfig.json</code> で定義された <code>rootdir</code> から <code>outdir</code> へすべての <code>.nsjs</code> ファイルをコンパイルします。",
330-
"cli.watchTitle": "nsc watch",
330+
"cli.watchTitle": "nsc watch | w | -w | --watch",
331331
"cli.watchDesc": "ファイルの変更を監視し、自動的にリコンパイルします。",
332-
"cli.runTitle": "nsc run &lt;file&gt;",
332+
"cli.runTitle":
333+
"nsc run &lt;file&gt; | -r &lt;file&gt; | --run &lt;file&gt;",
333334
"cli.runDesc":
334335
"出力ファイルを書き出さずに、<code>.nsjs</code> ファイルを直接コンパイル・実行します。",
335-
"cli.createCmdTitle": "nsc create [name]",
336+
"cli.createCmdTitle": "nsc create [name] | --create [name]",
336337
"cli.createCmdDesc":
337338
"新しい NoShift.js プロジェクトをスキャフォールドします。<code>--no-prettier</code> で Prettier 設定をスキップできます。",
338-
"cli.initTitle": "nsc init",
339+
"cli.initTitle": "nsc init | --init",
339340
"cli.initDesc":
340341
"現在のディレクトリにデフォルト設定の <code>nsjsconfig.json</code> を作成します。",
341-
"cli.cleanTitle": "nsc clean",
342+
"cli.cleanTitle": "nsc clean | --clean",
342343
"cli.cleanDesc":
343344
"<code>nsjsconfig.json</code> で定義された出力ディレクトリ(<code>outdir</code>)を削除します。",
344-
"cli.versionTitle": "nsc version",
345-
"cli.versionDesc":
346-
"noshift.js の現在のバージョンを表示します。<code>nsc -v</code> または <code>nsc --version</code> でも利用可能。",
347-
"cli.helpTitle": "nsc help",
345+
"cli.versionTitle": "nsc version | -v | --version",
346+
"cli.versionDesc": "noshift.js の現在のバージョンを表示します。",
347+
"cli.helpTitle": "nsc help | -h | --help",
348348
"cli.helpDesc":
349-
"ヘルプ情報を表示します。<code>nsc -h</code> または <code>nsc --help</code> でも利用可能。ドキュメントサイトへのリンクも含まれます。",
349+
"ヘルプ情報を表示します。ドキュメントサイトへのリンクも含まれます。",
350350

351351
// Config
352352
"config.title": "設定",

pages/src/pages/[lang]/classes.astro

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
import DocsLayout from "../../layouts/DocsLayout.astro";
3+
import CodeBlock from "../../components/CodeBlock.astro";
34
import { t, type Lang } from "../../i18n/translations";
45
56
export function getStaticPaths() {
@@ -21,7 +22,9 @@ const { lang } = Astro.params as { lang: Lang };
2122

2223
<h2>{t(lang, "classes.basicTitle")}</h2>
2324
<p set:html={t(lang, "classes.basicDesc")} />
24-
<pre><code>{`class ^3animal ^[
25+
<CodeBlock
26+
lang="nsjs"
27+
code={`class ^3animal ^[
2528
constructor^8name^9 ^[
2629
this.name ^- name;
2730
^]
@@ -32,9 +35,12 @@ const { lang } = Astro.params as { lang: Lang };
3235
^]
3336
3437
const dog ^- new ^3animal^8^2Dog^2^9;
35-
dog.speak^8^9;`}</code></pre>
38+
dog.speak^8^9;`}
39+
/>
3640
<p>{lang === "ja" ? "コンパイル後:" : "Compiles to:"}</p>
37-
<pre><code>{`class Animal {
41+
<CodeBlock
42+
lang="javascript"
43+
code={`class Animal {
3844
constructor(name) {
3945
this.name = name;
4046
}
@@ -45,11 +51,14 @@ dog.speak^8^9;`}</code></pre>
4551
}
4652
4753
const dog = new Animal("Dog");
48-
dog.speak();`}</code></pre>
54+
dog.speak();`}
55+
/>
4956

5057
<h2>{t(lang, "classes.inheritTitle")}</h2>
5158
<p set:html={t(lang, "classes.inheritDesc")} />
52-
<pre><code>{`class ^3dog extends ^3animal ^[
59+
<CodeBlock
60+
lang="nsjs"
61+
code={`class ^3dog extends ^3animal ^[
5362
constructor^8name^9 ^[
5463
super^8name^9;
5564
^]
@@ -60,9 +69,12 @@ dog.speak();`}</code></pre>
6069
^]
6170
6271
const d ^- new ^3dog^8^2Rex^2^9;
63-
d.bark^8^9;`}</code></pre>
72+
d.bark^8^9;`}
73+
/>
6474
<p>{lang === "ja" ? "コンパイル後:" : "Compiles to:"}</p>
65-
<pre><code>{`class Dog extends Animal {
75+
<CodeBlock
76+
lang="javascript"
77+
code={`class Dog extends Animal {
6678
constructor(name) {
6779
super(name);
6880
}
@@ -73,11 +85,14 @@ d.bark^8^9;`}</code></pre>
7385
}
7486
7587
const d = new Dog("Rex");
76-
d.bark();`}</code></pre>
88+
d.bark();`}
89+
/>
7790

7891
<h2>{t(lang, "classes.methodTitle")}</h2>
7992
<p set:html={t(lang, "classes.methodDesc")} />
80-
<pre><code>{`class ^3counter ^[
93+
<CodeBlock
94+
lang="nsjs"
95+
code={`class ^3counter ^[
8196
^;count ^- 0;
8297
8398
get^3count^8^9 ^[
@@ -87,9 +102,12 @@ d.bark();`}</code></pre>
87102
set^3count^8value^9 ^[
88103
this.^;count ^- value;
89104
^]
90-
^]`}</code></pre>
105+
^]`}
106+
/>
91107
<p>{lang === "ja" ? "コンパイル後:" : "Compiles to:"}</p>
92-
<pre><code>{`class Counter {
108+
<CodeBlock
109+
lang="javascript"
110+
code={`class Counter {
93111
#count = 0;
94112
95113
getCount() {
@@ -99,27 +117,34 @@ d.bark();`}</code></pre>
99117
setCount(value) {
100118
this.#count = value;
101119
}
102-
}`}</code></pre>
120+
}`}
121+
/>
103122

104123
<h2>{t(lang, "classes.staticTitle")}</h2>
105124
<p set:html={t(lang, "classes.staticDesc")} />
106-
<pre><code>{`class ^3math^3helper ^[
125+
<CodeBlock
126+
lang="nsjs"
127+
code={`class ^3math^3helper ^[
107128
static ^3p^3i ^- 3.14159;
108129
109130
static circle^3area^8r^9 ^[
110131
return ^3math^3helper.^3p^3i ^: r ^: r;
111132
^]
112133
^]
113134
114-
console.log^8^3math^3helper.circle^3area^85^9^9;`}</code></pre>
135+
console.log^8^3math^3helper.circle^3area^85^9^9;`}
136+
/>
115137
<p>{lang === "ja" ? "コンパイル後:" : "Compiles to:"}</p>
116-
<pre><code>{`class MathHelper {
138+
<CodeBlock
139+
lang="javascript"
140+
code={`class MathHelper {
117141
static PI = 3.14159;
118142
119143
static circleArea(r) {
120144
return MathHelper.PI * r * r;
121145
}
122146
}
123147
124-
console.log(MathHelper.circleArea(5));`}</code></pre>
148+
console.log(MathHelper.circleArea(5));`}
149+
/>
125150
</DocsLayout>

pages/src/pages/[lang]/cli.astro

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
import DocsLayout from "../../layouts/DocsLayout.astro";
3+
import CodeBlock from "../../components/CodeBlock.astro";
34
import { t, type Lang } from "../../i18n/translations";
45
56
export function getStaticPaths() {
@@ -21,33 +22,33 @@ const { lang } = Astro.params as { lang: Lang };
2122

2223
<h2>{t(lang, "cli.compileTitle")}</h2>
2324
<p set:html={t(lang, "cli.compileDesc")} />
24-
<pre><code>nsc</code></pre>
25+
<CodeBlock lang="bash" code="nsc" />
2526

26-
<h2>{t(lang, "cli.watchTitle")}</h2>
27+
<h2 set:html={t(lang, "cli.watchTitle")} />
2728
<p set:html={t(lang, "cli.watchDesc")} />
28-
<pre><code>nsc watch</code></pre>
29+
<CodeBlock lang="bash" code="nsc watch" />
2930

3031
<h2 set:html={t(lang, "cli.runTitle")} />
3132
<p set:html={t(lang, "cli.runDesc")} />
32-
<pre><code>nsc run src/index.nsjs</code></pre>
33+
<CodeBlock lang="bash" code="nsc run src/index.nsjs" />
3334

34-
<h2>{t(lang, "cli.createCmdTitle")}</h2>
35+
<h2 set:html={t(lang, "cli.createCmdTitle")} />
3536
<p set:html={t(lang, "cli.createCmdDesc")} />
36-
<pre><code>nsc create my-project</code></pre>
37+
<CodeBlock lang="bash" code="nsc create my-project" />
3738

38-
<h2>{t(lang, "cli.initTitle")}</h2>
39+
<h2 set:html={t(lang, "cli.initTitle")} />
3940
<p set:html={t(lang, "cli.initDesc")} />
40-
<pre><code>nsc init</code></pre>
41+
<CodeBlock lang="bash" code="nsc init" />
4142

42-
<h2>{t(lang, "cli.cleanTitle")}</h2>
43+
<h2 set:html={t(lang, "cli.cleanTitle")} />
4344
<p set:html={t(lang, "cli.cleanDesc")} />
44-
<pre><code>nsc clean</code></pre>
45+
<CodeBlock lang="bash" code="nsc clean" />
4546

46-
<h2>{t(lang, "cli.versionTitle")}</h2>
47+
<h2 set:html={t(lang, "cli.versionTitle")} />
4748
<p set:html={t(lang, "cli.versionDesc")} />
48-
<pre><code>nsc version</code></pre>
49+
<CodeBlock lang="bash" code="nsc version" />
4950

50-
<h2>{t(lang, "cli.helpTitle")}</h2>
51+
<h2 set:html={t(lang, "cli.helpTitle")} />
5152
<p set:html={t(lang, "cli.helpDesc")} />
52-
<pre><code>nsc help</code></pre>
53+
<CodeBlock lang="bash" code="nsc help" />
5354
</DocsLayout>

pages/src/pages/[lang]/config.astro

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
import DocsLayout from "../../layouts/DocsLayout.astro";
3+
import CodeBlock from "../../components/CodeBlock.astro";
34
import { t, type Lang } from "../../i18n/translations";
45
56
export function getStaticPaths() {
@@ -21,18 +22,21 @@ const { lang } = Astro.params as { lang: Lang };
2122

2223
<h2>{t(lang, "config.fileTitle")}</h2>
2324
<p set:html={t(lang, "config.fileDesc")} />
24-
<pre><code>nsc init</code></pre>
25+
<CodeBlock lang="bash" code="nsc init" />
2526

2627
<h2>{t(lang, "config.defaultTitle")}</h2>
2728
<p set:html={t(lang, "config.defaultDesc")} />
28-
<pre><code>{`{
29+
<CodeBlock
30+
lang="json"
31+
code={`{
2932
"compileroptions": {
3033
"rootdir": "src",
3134
"outdir": "dist",
3235
"warnuppercase": true,
3336
"capitalizeinstrings": true
3437
}
35-
}`}</code></pre>
38+
}`}
39+
/>
3640

3741
<h2>{t(lang, "config.optionsTitle")}</h2>
3842
<table>
@@ -69,9 +73,12 @@ const { lang } = Astro.params as { lang: Lang };
6973

7074
<h2>{t(lang, "config.disableCapitalizeTitle")}</h2>
7175
<p set:html={t(lang, "config.disableCapitalizeDesc")} />
72-
<pre><code>{`{
76+
<CodeBlock
77+
lang="json"
78+
code={`{
7379
"compileroptions": {
7480
"capitalizeinstrings": false
7581
}
76-
}`}</code></pre>
82+
}`}
83+
/>
7784
</DocsLayout>

0 commit comments

Comments
 (0)