mango00000
@mango00000

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ブログで表示しているコードに色をつけたい

解決したいこと

HTMLで表示するプログラミングのコードに色をつけたい

半年ほど前にブログを始めました。

プログラミングのことについての記事が多いので、プログラムコードを示すときがあるのですが、最近見にくいなぁーと思ったので修正しようと思っています。

今は、次のようなHTMLコードでプログラムコードを示しています。

<p class="code">const text = &quot;text&quot;;
console.log(text);<span class="fadeUp" style="display: none;"><i class="fa-regular fa-circle-check"></i>copied!</span></p>

&quot;ダブルクォーテーション正規表記です。
このサイトで変換させていただいております

(横スクロールできるようにdiv > pre > codeという感じにしようと思っていますが、まだやってません。)

さっきのコードの

<span class="fadeUp" style="display: none;"><i class="fa-regular fa-circle-check"></i>copied!</span>

この部分は、コードをクリックしたときにコピーする時のアニメーションに使用しています。

話を戻すと、色をつけたいと思ってQiitaZennのコードを調べてみました。

すると、いずれもdiv > pre > code > たくさんのspanタグという構造になっていました。

たくさんのspanタグというのは、それぞれコメントアウト < > || - var let const importなどの文字の種類?(ダブルクォーテーション・クラス名)ごとに、クラス名を付与したspanタグで作られていました。

おそらく、示したいコードを変換ツール的なものに通してそういうspanタグを生成しているのだと思います。

Qiitaのコード

<div class="highlight">
	<pre>
		<code>
			<span class="c">&lt;!-- Google tag (gtag.js) --&gt;</span>
			<span class="nt">&lt;script </span>
			<span class="na">async=</span>
			<span class="s">""</span>
			<span class="na">src=</span>
			<span class="s">"https://www.googletagmanager.com/gtag/js?id=---ID---"</span>
			<span class="nt">&gt;&lt;/script&gt;</span>
			<span class="nt">&lt;script&gt;</span>
			<span class="nb">window</span>
			<span class="p">.</span>
			<span class="nx">dataLayer</span>
			<span class="o">=</span>
			<span class="nb">window</span>
			<span class="p">.</span>
			<span class="nx">dataLayer</span>
			<span class="o">||</span>
			<span class="p">[];</span>
			<span class="kd">function</span>
			<span class="nf">gtag</span>
			<span class="p">(){</span>
			<span class="nx">dataLayer</span>
			<span class="p">.</span>
			<span class="nf">push</span>
			<span class="p">(</span>
			<span class="nx">arguments</span>
			<span class="p">);}</span>
			<span class="nf">gtag</span>
			<span class="p">(</span>
			<span class="nx">js</span>
			<span class="p">,</span>
			<span class="k">new</span>
			<span class="nc">Date</span>
			<span class="p">());</span>
			<span class="nf">gtag</span>
			<span class="p">(</span>
			<span class="nx">config</span>
			<span class="p">,</span>
			<span class="o">---</span>
			<span class="nx">ID</span>
			<span class="o">---</span>
			<span class="p">);</span>
			<span class="nt">&lt;/script&gt;</span>
		</code>
	</pre>
</div>

クラス名はちょっと意味不明ですがこういう感じになっています。


今の所、ブログで解説している言語は
HTML CSS Javascript Python Swift Shellあたりです。

どうすればできますか?
こんな感じでやれば...みたいなアイデアでもなんでもいいので、何かあれば教えて欲しいです。

0

1Answer

実現されたいことはいわゆるシンタックスハイライトであるかと思いますが、1から作るにはすべてのシンタックスに対応したキーワードやcssの定義が必要となるのでなかなか手間かと思います。
highlight.js等のライブラリを使用するのが早いかと思います。(他にも「シンタックスハイライト」で検索していただければ色々なライブラリがあるかと思います。)

そうではなく、自作でシンタックスハイライトを作るためのアルゴリズムを検討したいというプログラミング学習的な意味のご質問でしたら。以下のようなステップになるかと思います。

  1. 各プログラム言語におけるキーワードをリストアップ
  2. 各プログラム言語における構文を解析。正規表現をご存じのようですので正規表現で{}の対応などを検知する形になります。
  3. キーワードや構文に対応する文字列を分割して、キーワードや構文に対応したclassを持つspanタグ等にする。Qiitaの解析をしていただいた通りです。highlight.jsも同じような形です。
  4. 各Classに対応したCSSの定義。
3Like

Comments

  1. @mango00000

    Questioner

    ありがとうございます。
    今、ちょうどいいライブラリを探しているところです(自分で作るかも)。

Your answer might help someone💌