【簡単確実】シンタックスハイライター「google-code-prettify」を実装する方法(使い方)

Sponsored Link


京都のたぶん一番安いWeb屋です。たまにお墨付きで記事を書かされて掲載していただいてます。

プログラム関係の記事を書いています。

今回は「google-code-prettify」についてです。

「google-code-prettify」とは?


2014-07-15_204439

google-code-prettify
https://code.google.com/p/google-code-prettify/wiki/GettingStarted

これは「シンタックスハイライター」と呼ばれています。

どういったものかというと、プログラムコードをブログなどのWebページに掲載する場合に必要な処理や見た目を整えてくれる便利なライブラリです。

日本では「SyntaxHighlighter」の方がメジャーです。

SyntaxHighlighter
http://alexgorbatchev.com/SyntaxHighlighter/

使い勝手や見た目は「google-code-prettify」の方が好まれる傾向にあります。導入は簡単なのですが、プログラマでないとミスで動作しない例があったり、日本語での解説も数はあるのですが、親切なものがないために上手に導入できていない方もいるようです。

今回は、そういった方で一度あきらめた方でも簡単に導入できる方法を紹介します。

サンプル

See the Pen html code in CODE Tag. by nodelay (@nodelay) on CodePen.

簡単な導入方法


手順は以下のとおりです。

  1. HTMLから「run_prettify.js」を読み込む
  2. ページロード完了後に「prettyPrint();」を実行
  3. <PRE>タグに「class=”prettyprint linenums”」を指定

たった3ステップです。

では、実際に詳細な作業を見ていきましょう。

HTMLから「run_prettify.js」を読み込む

<!--
    google-code-prettify
=========================================================== -->
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js?skin=sunburst"></script>

ファイルは「CDN」などで読み込むと簡単です。

読み込むJSファイルは「run_prettify.js」です。

この「run」がついたファイルはCSSもJSも同時に読み込んでくれるので、コードが1行で済むメリットがあります。

JSの「?」の後ろに「skin=sunburst」とありますが、これは見た目のスキンファイルの指定です。

CSSを別途読み込まない分、パラメーターで指定できます。もちろん、「?」以降を記述しなければ、デフォルトのスキンで表示されます。

スキンはこちらから見ることができます。

ただ、うまく動作しないスキンもあるので「Sunburst」がおすすめです。

ページロード完了後に「prettyPrint();」を実行

//google-code-prettify
//==================================================
jQuery(window).load(function(){
	prettyPrint();
});

jQueryも導入しておいてください。

そのうえで、必ず「ページの読み込みが終わったら実行する」という記述を行います。

追記:この実行をしなくても動作しました。

<PRE>タグに「class=”prettyprint linenums”」を指定


次に<PRE>タグに「class=”prettyprint linenums”」を指定します。

<pre class="prettyprint linenums">
  <code>&lt;span class="bu lightred pie"&gt;HTML CODE&lt;/span&gt;</code>
</pre>

HTMLに掲載したいコードを「<pre>」と「<code>」タグで囲んで記述します。

補足事項:codeタグと掲載したいコードの途中に改行があると、改行あるとみなされますので、先頭のcodeタグと掲載ソース一行目の間には改行はいれません。同様に、最後のcodeタグ(スラッシュがつく閉じタグ)と掲載コードの間にも改行は入れません。

あとは、「<pre>」タグにclassを指定しておきます。

「prettyprint」はシンタックスハイライトを使うよという宣言みたいなものです。

「linenums」は行番号を表示する宣言みたいなものです。(追記:CSSの指定によっては表示されなくなるかもしれません)

さて、上記では「<>」が文字参照でエスケープされています。

「<」 → &lt;
「>」 → &gt;

※都合上、全角で書いてあります。

これは、HTMLをそのまま書いてしまうと、ブラウザがHTMLだと認識してレンダリングして表示してしまい、コードで表示されないからです。

しかし、これはこれで結構面倒です。

codeタグ内でHTMLが実行されないように<>を文字参照に変換するJavascript


そこで、事前にHTMLの「<code>」タグ内に書かれたHTMLソースを変換するJavascriptを書いて実行しておきます。

//codeタグ内でHTMLが実行されないようにする
//==================================================
jQuery('code').each(function(){
    var text=jQuery(this).html().replace(/</g,'&lt;');
    var text=text.replace(/>/g,'&gt;');
    jQuery(this).html(text);
});

ただし、必ずこのJavascriptはページが読み込まれる前に実行してください。

さきほどのCODEPENのサンプルでもそのようになっていますが、これを行うことで、「<CODE>」タグ内にHTMLコードをそのまま書いても動作させることができます。

See the Pen USeful pre tag for google-code-prettify by nodelay (@nodelay) on CodePen.

ちなみに、このプログラムの詳細は別途記事にしてあります。

CSSのサンプル


CSS

/*Preformatted text-style*/
pre {
    width: auto!important;/*指定しないと、横幅狭い場合にはみ出る*/
    padding: 8px 40px!important;/*google-code-prettify使用時の微調整(左paddingは行番号表示で必要)*/;
    white-space: pre-wrap;
    word-wrap: break-word;
    overflow: auto;
}
code {
    font-family: 'Open Sans', Georgia;
}
pre.prettyprint.linenums li {
    list-style-type: decimal-leading-zero;/*google-code-prettify使用時に行番号表示するなら必要*/
}

CSSはこんな感じで整えておくと良いでしょう。
Google Webフォント「Open Sans」を指定すると読みやすくなります。

HTMLかCSSであらかじめGoogle Webフォントを読み込んでください。

HTMLでのGoogle Webフォント組み込み例

<link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,300,400italic,400,600italic,600,700italic,700,800italic,800" rel="stylesheet" type="text/css">

CSSでのGoogle Webフォント組み込み例

@import url(http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800);

前述のCODEPENのサンプルの場合、HTMLで読み込んでいます。これはCODEPENが「@import」をサポートしていないからです。

Google Webフォントについては別途詳細に書いてありますので参照してください。

Sponsored Link

最新記事はトップページで!

京都発・地方が盛り上がるグルメや観光に撮影ロケ地の話題を提供!


購読するならRSSをご利用ください!

RSSはこちらをご利用ください。


マスコミ各社様の記事使用規約についてはこちらをご覧ください。

当ブログでは掲示板やSNSなど他メディアでURLや記事を紹介することはございませんので、掲示板などで記事を紹介されていても一切無関係です。誤解なきようお願いいたします。
当ブログで転載しているTweetはTwitter社の規約(2013/10)に準じた形式(API利用)によって許可された範囲で行われています。また、Tweet内容の所有権はTwitter社の規約によりTweet元のアカウント所有者にあります。そのため、当ブログでその所有権を主張するものではありません。Tweet内容については責任は負いませんので予めご了承ください。