Labo
SyntaxHighlighter2.0.320
スクリプトを載せていくにあたり、スクリプトコードをきれいに描画してくれるJavascript、"SyntaxHighlighter"を早速入れみることにする。
最新版は2.0.320で下記ページの「Click here」からダウンロードできます。
http://alexgorbatchev.com/wiki/SyntaxHighlighter:Download
ダウンロードしてzipファイルを解凍すると
・test.html
・scriptsフォルダ
・stylesフォルダ
・srcフォルダ
・LGPLv3.txt
が入っています。
test.htmlを開くと、head内に下記スクリプトが書かれており、主にデザイン成形のためのスタイルシートと、scriptフォルダ内の各プログラムコードごとに小分けにされているjavascriptファイルにリンクが貼られています。
ここでscriptフォルダ内を見るとver1.5には無かった、AS3用の「shBrushAS3.js」というファイルがちゃんと用意されているではないか!
早速HTML内にshBrushAS3.jsへのリンクを追加し、使わなさそうなプログラムコードへのリンクを省きます。さらに各スクリプトへのリンクはMTタグでブログURLの絶対パスを追加しました。
<script type="text/javascript" src="<$mt:BlogURL$>scripts/shCore.js"></script>
<script type="text/javascript" src="<$mt:BlogURL$>scripts/shBrushAS3.js"></script>
<script type="text/javascript" src="<$mt:BlogURL$>scripts/shBrushCss.js"></script>
<script type="text/javascript" src="<$mt:BlogURL$>scripts/shBrushJScript.js"></script>
<script type="text/javascript" src="<$mt:BlogURL$>scripts/shBrushPhp.js"></script>
<script type="text/javascript" src="<$mt:BlogURL$>scripts/shBrushPlain.js"></script>
<script type="text/javascript" src="<$mt:BlogURL$>scripts/shBrushXml.js"></script>
<link type="text/css" rel="stylesheet" href="<$mt:BlogURL$>styles/shCore.css"/>
<link type="text/css" rel="stylesheet" href="<$mt:BlogURL$>styles/shThemeDefault.css"/>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = '<$mt:BlogURL$>scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>
ここで問題が発生。MTタグの「<」と「>」がHTML上で文字コードになってしまった。
MT専用のプログラムコードへのリンクがあればいいのだがそれはさすがに無いようなので、とりあえず全ての特殊文字をコード変換してみるとうまく表示されました。
<pre name="code" class="as3">
function test():void{
trace("チェック!");
}
</pre>
class=""には自分が記述するプラグラムのフォーマット名を書きます。例文ではFlashのスクリプトなので"as3"と入れました。
こうすることで書き込みたいコードのハイライト表示が出来るようになります。 ちなみにclass=""に入れるスクリプト名(ストリング)は、各コード別のjsファイル内に書いてあります。
AS3は「shBrushAS3.js」に、
SyntaxHighlighter.brushes.AS3.aliases = ['actionscript3', 'as3'];
となっているので、"actionscript3"、"as3"のどちらの文字列で指定しても、AS3フォーマットのハイライトになります。
最後にデザインフォーマットを変更します。styleフォルダ内の「shCore.css」でフォント周り、「shThemeDefault.css」で、デザインをカスタムします。
【shCore.css】
.syntaxhighlighter span
{
margin: 0 !important;
padding: 0 !important;
border: 0 !important;
outline: 0 !important;
background: none !important;
text-align: left !important;
float: none !important;
vertical-align: baseline !important;
position: static !important;
left: auto !important;
top: auto !important;
right: auto !important;
bottom: auto !important;
height: auto !important;
width: auto !important;
line-height: 1.2em !important;
font-family: "Consolas", "Monaco", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
font-weight: normal !important;
font-style: normal !important;
font-size: 12px !important;
}
【shThemeDefault.css】
.syntaxhighlighter
{
/*background-color: #E7E5DC !important;*/
background-color: #f3f3f3 !important;
}
/* Highlighed line number */
.syntaxhighlighter .line.highlighted .number
{
background-color: #6CE26C !important;
color: black !important;
}
/* Highlighed line */
.syntaxhighlighter .line.highlighted.alt1 .content,
.syntaxhighlighter .line.highlighted.alt2 .content
{
background-color: #6CE26C !important;
}
/* Gutter line numbers */
.syntaxhighlighter .line .number
{
color: #5C5C5C !important;
}
/* Add border to the lines */
.syntaxhighlighter .line .content
{
/*border-left: 3px solid #6CE26C !important;*/
border-left: 2px solid #e5e5e5 !important;
color: #000 !important;
}
......etc
ひとつ解決できないのが、ソースコードにロールオーバーした時に出るはずのクリップボードアイコンが出ないこと。
表示しているHTMLと同階層に「scripts/clipboard.swf」を入れると出るのだが、それでは汎用性がなくなる。
このアイコンはswfファイルなので、パスが怪しいのですが、HTMLヘッダ内の「clipboard.swf」へのパスは絶対パスにしているしいまいち原因が分かりません。
原因が分かり次第追記したいと思います。
09.06.22.PM07:44