Hugoでシンタックスハイライトを適用する
本サイトはHugoで作成しており、以下のテーマを利用しております。 https://themes.gohugo.io/hugo-blog-jeffprod/
コードブロックの箇所を見やすくするために、シンタックスハイライトを導入しました。
基本的にはHugoの公式サイトHugo Syntax Highlightingの手順通りに行うことで簡単に導入できます。
PygmentsはPythonで書かれたシンタックスハイライトのパッケージです。これをベースにHugoで使えるGo言語 で書かれたものがchromaです。
シンタックスハイライトのスタイルシートを出力
まずは、monokaiのcssファイルを出力します。以下コマンドを実行します。
hugo gen chromastyles --style=monokai > syntax.css
ファイルが出力されます。以下が中身です。
/* Background */ .chroma { color: #f8f8f2; background-color: #272822 }
/* Error */ .chroma .err { color: #960050; background-color: #1e0010 }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; }
/* Keyword */ .chroma .k { color: #66d9ef }
/* KeywordConstant */ .chroma .kc { color: #66d9ef }
/* KeywordDeclaration */ .chroma .kd { color: #66d9ef }
/* KeywordNamespace */ .chroma .kn { color: #f92672 }
/* KeywordPseudo */ .chroma .kp { color: #66d9ef }
/* KeywordReserved */ .chroma .kr { color: #66d9ef }
/* KeywordType */ .chroma .kt { color: #66d9ef }
/* NameAttribute */ .chroma .na { color: #a6e22e }
/* NameClass */ .chroma .nc { color: #a6e22e }
/* NameConstant */ .chroma .no { color: #66d9ef }
/* NameDecorator */ .chroma .nd { color: #a6e22e }
/* NameException */ .chroma .ne { color: #a6e22e }
/* NameFunction */ .chroma .nf { color: #a6e22e }
/* NameOther */ .chroma .nx { color: #a6e22e }
/* NameTag */ .chroma .nt { color: #f92672 }
/* Literal */ .chroma .l { color: #ae81ff }
/* LiteralDate */ .chroma .ld { color: #e6db74 }
/* LiteralString */ .chroma .s { color: #e6db74 }
/* LiteralStringAffix */ .chroma .sa { color: #e6db74 }
/* LiteralStringBacktick */ .chroma .sb { color: #e6db74 }
/* LiteralStringChar */ .chroma .sc { color: #e6db74 }
/* LiteralStringDelimiter */ .chroma .dl { color: #e6db74 }
/* LiteralStringDoc */ .chroma .sd { color: #e6db74 }
/* LiteralStringDouble */ .chroma .s2 { color: #e6db74 }
/* LiteralStringEscape */ .chroma .se { color: #ae81ff }
/* LiteralStringHeredoc */ .chroma .sh { color: #e6db74 }
/* LiteralStringInterpol */ .chroma .si { color: #e6db74 }
/* LiteralStringOther */ .chroma .sx { color: #e6db74 }
/* LiteralStringRegex */ .chroma .sr { color: #e6db74 }
/* LiteralStringSingle */ .chroma .s1 { color: #e6db74 }
/* LiteralStringSymbol */ .chroma .ss { color: #e6db74 }
/* LiteralNumber */ .chroma .m { color: #ae81ff }
/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
/* Operator */ .chroma .o { color: #f92672 }
/* OperatorWord */ .chroma .ow { color: #f92672 }
/* Comment */ .chroma .c { color: #75715e }
/* CommentHashbang */ .chroma .ch { color: #75715e }
/* CommentMultiline */ .chroma .cm { color: #75715e }
/* CommentSingle */ .chroma .c1 { color: #75715e }
/* CommentSpecial */ .chroma .cs { color: #75715e }
/* CommentPreproc */ .chroma .cp { color: #75715e }
/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
/* GenericDeleted */ .chroma .gd { color: #f92672 }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericInserted */ .chroma .gi { color: #a6e22e }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #75715e }
シンタックスハイライトを有効にする
config.toml
に以下を書き込みます。hugoでファイルを生成するときに、markdownでコードフェンスで囲った箇所に対してsyntax.css
を適用してくれます。
pygmentsUseClasses = true
コードフェンスを有効化するために以下も書いておきます。
pygmentsCodefences = true
syntax.css
をヘッダーでインポートするようにしましょう。これでスタイルが適用されているはずです。
垂直方向スクロールバーとフォントの変更
すべてのコードを表示すると、長くなりすぎてしまう場合がありますね。これを防ぐために、高さ制限を設けて、スクロールバーを表示させるようにします。
上のsyntax.css
の.chroma
を以下のように変更しました。
/* Background */
.chroma {
color: #f8f8f2;
background-color: #272822;
max-height: 400px; /* Change to your desired max height */
overflow-y: scroll;
font-family: 'Source Code Pro', monospace;
}
ついでに、フォントをSource Code Pro
に指定しました。フォントは Google Fonts から利用します。
インポートは以下の通りです。
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet">
コードフェンスで言語指定をした場合、フォントがSource Code Pro
にならなかったので、codeタグでフォントを指定するようにしたら、変更されました。
code { font-family: 'Source Code Pro', monospace; }