はじめに
ウエブ上で、CSS/HTML/Bash/Perlなどのソースコードを表示する時に以前は、preタグを使ったCSSで装飾するのが一般的でした。今回は、ソースコードの装飾に特化したSyntaxHighlighterの使用法を解説します。
2013年12月24日 00時31分
ウエブ上で、CSS/HTML/Bash/Perlなどのソースコードを表示する時に以前は、preタグを使ったCSSで装飾するのが一般的でした。今回は、ソースコードの装飾に特化したSyntaxHighlighterの使用法を解説します。
作業の前提条件は、下記のとおりです。
ソフトウエア | バージョン |
---|---|
OS | Windows 7 Ultimate 32bit |
Cygwin | Setup Version 2.831 |
高速スライダーのJQueryプラグインFlexSlider2の使用方法と同じ要領でダウンロードします。
$ cd /tmp/demo $ wget -q http://alexgorbatchev.com/SyntaxHighlighter/download/syntaxhighlighter_3.0.83.zip $ unzip -q syntaxhighlighter_3.0.83.zip $ rm -f syntaxhighlighter_3.0.83.zip $ mv syntaxhighlighter_3.0.83 syntaxhighlighter
SyntaxHighlighterには、デフォルトスタイルを含め、8種類のスタイルシートが用意されていますので、使用するスタイルシートを決めます。
スタイル選択
テキスト1 テキスト2 テキスト3
#!/bin/sh echo "テキスト1" echo "テキスト2" echo "テキスト3"
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> <link href="syntaxhighlighter/styles/shCore.css" rel="stylesheet">
.syntaxhighlighter { width: 100% !important; margin: 1em 0 1em 0 !important; position: relative !important;
使用するスタイルを決めたら、HTMLを作成します。
ここでは、shThemeEmacs.cssを使用します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>017-1</title> <link href="syntaxhighlighter/styles/shCore.css" rel="stylesheet"> <link href="syntaxhighlighter/styles/shThemeEmacs.css" rel="stylesheet"> </head> <body style="width: 720px;"> <pre class="brush:text"> テキスト1 テキスト2 テキスト3 </pre> <script src="syntaxhighlighter/scripts/shCore.js"></script> <script src="syntaxhighlighter/scripts/shBrushAppleScript.js"></script> <script src="syntaxhighlighter/scripts/shBrushAS3.js"></script> <script src="syntaxhighlighter/scripts/shBrushBash.js"></script> <script src="syntaxhighlighter/scripts/shBrushColdFusion.js"></script> <script src="syntaxhighlighter/scripts/shBrushCpp.js"></script> <script src="syntaxhighlighter/scripts/shBrushCSharp.js"></script> <script src="syntaxhighlighter/scripts/shBrushCss.js"></script> <script src="syntaxhighlighter/scripts/shBrushDelphi.js"></script> <script src="syntaxhighlighter/scripts/shBrushDiff.js"></script> <script src="syntaxhighlighter/scripts/shBrushErlang.js"></script> <script src="syntaxhighlighter/scripts/shBrushGroovy.js"></script> <script src="syntaxhighlighter/scripts/shBrushJava.js"></script> <script src="syntaxhighlighter/scripts/shBrushJavaFX.js"></script> <script src="syntaxhighlighter/scripts/shBrushJScript.js"></script> <script src="syntaxhighlighter/scripts/shBrushPerl.js"></script> <script src="syntaxhighlighter/scripts/shBrushPhp.js"></script> <script src="syntaxhighlighter/scripts/shBrushPlain.js"></script> <script src="syntaxhighlighter/scripts/shBrushPowerShell.js"></script> <script src="syntaxhighlighter/scripts/shBrushPython.js"></script> <script src="syntaxhighlighter/scripts/shBrushRuby.js"></script> <script src="syntaxhighlighter/scripts/shBrushSass.js"></script> <script src="syntaxhighlighter/scripts/shBrushScala.js"></script> <script src="syntaxhighlighter/scripts/shBrushSql.js"></script> <script src="syntaxhighlighter/scripts/shBrushVb.js"></script> <script src="syntaxhighlighter/scripts/shBrushXml.js"></script> <script type='text/javascript'>SyntaxHighlighter.all();</script> </body> </html>
6~7行目では、スタイルシートを指定しています。なお、shBrushCore.cssは必ず指定する必要があります。
16~41行目では、書式ごとのjsファイルを指定します。ここでは、全てのjsファイルを指定していますので、SyntaxHighlighterがサポートする全ての言語の装飾を行うことができます。
42行目では、指定された書式をロードしますので、忘れずに実行します。
ここまでは、Bootstrapを用いないため不具合が発生していませんが、SyntaxHighlighterを使用する場合、多くの場合Bootstrapと併用すると思います。その場合、どのブラウザでページを表示しても、行と行番号にズレが生じることがあります。
さきほど作成したHTMLに、BootstrapのCSSを追加して見ると、ズレが確認できます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>017-2</title> <link href="bootstrap.min.css" rel="stylesheet"> <link href="syntaxhighlighter/styles/shCore.css" rel="stylesheet"> <link href="syntaxhighlighter/styles/shThemeEmacs.css" rel="stylesheet"> </head>
<body style="width: 720px;"> <pre class="brush:text"> テキスト1 テキスト2 テキスト3 </pre> <script src="bootstrap.min.js"></script> <script src="syntaxhighlighter/scripts/shCore.js"></script>
ズレが発生する理由は、BootstrapとSyntaxHighlighterが使用しているcontainerクラスが競合しているためですので、SyntaxHighlighterのshCore.cssおよび、shCore.jsを下記のとおり修正します。
$ cd syntaxhighlighter/styles $ cp -p shCore.css shCore.css.orig $ vi shCore.css
.syntaxhighlighter table td.code { width: 100% !important; } .syntaxhighlighter table td.code .shcontainer { position: relative !important; } .syntaxhighlighter table td.code .shcontainer textarea { box-sizing: border-box !important; position: absolute !important; left: 0 !important;
.syntaxhighlighter table td.code .line { padding: 0 1em !important; } .syntaxhighlighter.nogutter td.code .shcontainer textarea, .syntaxhighlighter.nogutter td.code .line { padding-left: 0em !important; }
$ diff shCore.css.orig shCore.css
84c84 < .syntaxhighlighter table td.code .container { --- > .syntaxhighlighter table td.code .shcontainer { 87c87 < .syntaxhighlighter table td.code .container textarea { --- > .syntaxhighlighter table td.code .shcontainer textarea { 107c107 < .syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { --- > .syntaxhighlighter.nogutter td.code .shcontainer textarea, .syntaxhighlighter.nogutter td.code .line {
$ cd syntaxhighlighter/scripts $ cp -p shCore.js shCore.js.orig $ sed -i -e "s|container|shcontainer|g" shCore.js
編集後、ページをリロードするとズレの解消を確認できます。
SyntaxHighlighterが対応する言語は、 対応言語を参照して下さい。
SyntaxHighlighterを使用する際には、下記の書式で使用するエイリアスを指定します。
<pre class="brush:エイリアス"> .. </pre>
SyntaxHighlighterを使用する際に、さまざまなオプションを指定できます。 オプションの詳細は、SyntaxHighlighter.defaultsに書かれていますが、ここでは、よく使うオプションについて解説します。
オプション | 概要 | 使用例 |
---|---|---|
auto-links | コードに含まれるURLをリンクとして表示します。 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> </head> <body> <pre class="brush:html; auto-links:false;"> <a href="http://xx.yy.zz/">XYZ</a> <p>テキスト1</p> <p>テキスト2</p> <p>テキスト3</p> </pre> </body> </html> |
collapse | コードを折りたたんで表示します。 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> </head> <body> <pre class="brush:html; collapse:true;" title="クリックして表示"> <a href="http://xx.yy.zz/">XYZ</a> <p>テキスト1</p> <p>テキスト2</p> <p>テキスト3</p> </pre> </body> </html> |
first-line | コードの先頭行番号を指定する。 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> </head> <body> <pre class="brush:html; first-line:10;"> <a href="http://xx.yy.zz/">XYZ</a> <p>テキスト1</p> <p>テキスト2</p> <p>テキスト3</p> </pre> </body> </html> |
gutter | 行番号の表示・非表示を指定する。 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> </head> <body> <pre class="brush:html; gutter:false;"> <a href="http://xx.yy.zz/">XYZ</a> <p>テキスト1</p> <p>テキスト2</p> <p>テキスト3</p> </pre> </body> </html> |
highlight | 行をハイライト表示する。 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> </head> <body> <pre class="brush:html; highlight:[2,3];"> <a href="http://xx.yy.zz/">XYZ</a> <p>テキスト1</p> <p>テキスト2</p> <p>テキスト3</p> </pre> </body> </html> |
title | タイトルを表示する。 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> </head> <body> <pre class="brush:html;" title="サンプル"> <a href="http://xx.yy.zz/">XYZ</a> <p>テキスト1</p> <p>テキスト2</p> <p>テキスト3</p> </pre> </body> </html> |