ソース表示用プラグイン ( WP-SynHighlight )
ソース表示用のプラグインを入れてみました。
WP-SynHighlight というやつです。
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title> ishwt : tracking</title>
- <link rel="alternate" type="application/rss+xml" title="RSS 2.0 - all posts" href="http://ishwt.net/feed/" />
- <link rel="alternate" type="application/rss+xml" title="RSS 2.0 - all comments" href="http://ishwt.net/comments/feed/" />
- </head>
- <body>
- Hello Syntax!
- </body>
- </html>
Syntax Highlighter。
世の中的には Syntax Highlighter が使われているのをよくみかけます。
ただ、Syntax Highlighter は Objective-C に対応しません。
IPMsg のソースを記載するかもしれないことを考えると、Objective-C 対応したものを選んでおきたいところです。そのため却下、他を探します。
WP-Syntax。
最初に WP-Syntax という、最近でもアップデートされ続けていてダウンロード数も多く、デザインも落ち着いていていいな、というものを見つけました(プラグインは長いことアップデートされていないものは心配なのであまり使いたくありませんし)。
これは GeSHi というエンジンを利用しているようで、GeSHi が Objective-C をサポートしています。
WP-Syntax を使う場合の記述は、<pre> タグを利用したものでした。以下のような感じです。
- <pre lang="objc" number="1" escaped="true">
- obj-c source code.
- </pre>
いったんはこれで行こうと思ったのですが、残念なことに WordPress ダッシュボードの Visual エディタと HTML エディタを行き来した時に問題が発生することに気がつきました。
<pre> タグにつけている、number 属性や escaped 属性が独自属性なので Visual エディタから HTML エディタに行ったときに勝手に消されてしまいます。lang 属性は別の意味ながら存在する属性なので消されませんが、いずれにしろふとした拍子に表示が変わってしまいます。
WP-SynHighlight。
他に GeSHi を利用しているプラグインがないか探して行き着いたのが WP-SynHighlit 。
[]で囲む方式で記述するので、Visual エディタと HTML エディタの行き来にも問題が発生しません。また、Visual エディタ側にボタンが増えてダイアログで各種設定項目を指定して[]の記述を生成できるので、記法などを確認するのもやりやすいです。実際にはこんな感じで書きます。
- [codesyntax lang="objc" title="Objective-c sample"]
- <pre> obj-c source code.</pre>
- [/codesyntax]
内側に<pre> を入れているのは、HTML でエスケープしなければならない文字が含まれてしまっている場合に文書がおかしくなったり、WordPress に削除されてしまわないように記載しておくといいようなので、入れています。
なお、Visual エディタを使う場合には <pre> を使っていても、< と > と & はエスケープしておいたほうが良いみたいです。結構簡単に消えます。また、Visual エディタと HTML エディタ間の切り替えでおかしくならないといっても、HTML エディタ側でどうなっているかをチェックし、もし余計なゴミが入っていたら消す作業はしたほうがいいと思われます。
では、実際に Objective-c のソースを。IPMsg の添付ファイルの管理クラス定義です。
- {
- AttachmentFile* file; // ファイルオブジェクト
- BOOL downloadComplete; // ダウンロード完了フラグ(受信ファイル用)
- }
- // ファクトリ
- + (id)attachmentWithFile:(AttachmentFile*)attach;
- + (id)attachmentWithMessageAttachment:(char*)buf;
- // 初期化/解放
- - (id)initWithFile:(AttachmentFile*)attach;
- - (id)initWithMessageAttachment:(char*)buf;
- - (void)dealloc;
- // getter/setter
- - (void)setFileID:(int)fid;
- - (AttachmentFile*)file;
- - (BOOL)downloadComplete;
- - (void)setDownloadComplete:(BOOL)flag;
- // 送信ユーザ管理
- - (void)appendUser:(UserInfo*)user;
- - (void)removeUser:(UserInfo*)user;
- - (unsigned)numberOfUsers;
- - (UserInfo*)userAtIndex:(unsigned)index;
- - (BOOL)containsUser:(UserInfo*)user;
- @end
うーん、なんか tab_width という設定値が上手く反映しないっぽい。普段 Tab = 4 でソースを書くので少し整形しないときれいにならないのはちょっと面倒。
設定の仕方が間違っている可能性大なので、おいおい調べようと思います。