はじめに
ウエブ上で、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>
|