特殊文字のエスケープ

文章中に [ ] を書きたい

インラインpre記法を使用します。

URLは {[http://adiary.org]} です。
{[tag]}が一般形です。

URLは [http://adiary.org] です。

[tag]が一般形です。

文章中に { } を書きたい

インラインpreに使用する「{ }」の記号自体をそのまま出力したいときがあります。解決策は2つあります。

  • \記号によるエスケープ
  • {{ }}の中に書く
「\{ \}」記号を書く
「{{ { } }}」記号を書く

「{ }」記号を書く

{ }」記号を書く

タグ中のエスケープ

この他、タグ中でのみ使えるエスケープ表記があります。

例えばタグ記法の中に「: { } [ ]」といった特殊な文字を書きたいときがあります。

[bf:特殊な文字:[]{}]
[http://search.cpan.org/perldoc?Net::SSLeay]

[bf:特殊な文字:[]]

:SSLeay

これらの文字列は記法内部で特殊な記号として処理されてしまいますので、通常タグ中に記述することができません。

解決方法は2つあります。

  • エスケープ環境タグ記号 [[ ]] を使用する。
  • 「\」記号によりエスケープする。
[[bf:特殊な文字「{}:[]」]]
[bf:特殊な文字「\{\}\:\[\]」]
[http://search.cpan.org/perldoc?Net\:\:SSLeay]

特殊な文字「{}:[]」

特殊な文字「{}:[]」

http://search.cpan.org/perldoc?Net::SSLeay

注意

「\」によるエスケープが効くのは「{ }」の2文字と、記法タグ中の「:」だけです。

ダイジェスト記法

メッセージダイジェスト(MD5/SHA)を計算して出力する記法です。

プログラムを配布したりしない人にはあまり縁がない機能ですが、そういう人にはとても便利な記法だと思います。

使用Perlライブラリ

  • Digest::MD5 …… MD5使用時
  • Digest::SHA …… SHA使用時

MD5はPerlに標準付属してますが、SHAは付属していません。PurePerl実装の「Digest::SHA::PurePerl」を添付していますが、大きなファイルでは大変遅くなりますので、別途 Digest::SHA をインストールすることを推奨します。

apt-get install libdigest-sha1-perl

※最近のPerl(5.14以降?)ではインストールしなくても付属しているようです。

使用方法

おそらく一番使用するであろうファイルに対するダイジェストの記述方法です。

-[file:::md5_sample.zip:md5_sample.zip]
--(md5) [file:md5::md5_sample.zip:md5_sample.zip]
--(sha256) [file:sha::md5_sample.zip:md5_sample.zip]
  • md5_sample.zip
    • (md5) 1a2c9af0ab305122eb50cb5a9cf121cc
    • (sha256) b797b995aa68e4ef9a9e403c241bd7315e8564f8424f243ee66d64332203abf4

fileはアルバムから(画像以外の)ファイルを貼り付けたときに自動で挿入されるタグで、2カラム目の拡張子をmd5等に書き換えます。対応しているハッシュは以下になります。

md5, sha1, sha224, sha256, sha384, sha512, sha(sha256と同じ)

ダイジェスト値は記事を保存した時のファイルの状態を記録しています。ファイルを置き換えた場合は、記事を再保存する必要があります。

文字列のダイジェスト

-(md5) [md5:test string]
-(sha256) [sha:test string]
  • (md5) 6f8db599de986fab7a21625b7916589c
  • (sha256) d5579c46dfcc7f18207013e65b44e4cb4e2c2298f4ac457ba8f82743f31e930b

麻雀記法

麻雀牌を簡単に表示できる記法です。例えば次のように使用します。

[mj:123m 45r6p 7s8s9s ton ton sp haku haku hakuy]

man1man2man3pin4pinrpin6sou7sou8sou9tontonsphakuhakuyhaku

※「123m」等の表記はVer3.312以降の対応です。

表記対応牌画像
1m~9m萬子(マンズ)
man1man2man3man4man5man6man7man8man9
1p~9p筒子(ピンズ)
pin1pin2pin3pin4pin5pin6pin7pin8pin9
1s~9s索子(ソウズ)
sou1sou2sou3sou4sou5sou6sou7sou8sou9
5rm, 5rp, 5rs赤ドラ
manrpinrsour
ton nan sha pei東南西北
tonnanshapei
haku hatu chun白ハツ中
hakuhatuchun
ura裏面
ura
sp1牌分のスペース
uraspura

最後に'y'をつけると横向き牌になります。

画像素材

麻雀牌画像はフリーで公開されている麻雀豆腐の画像を使用させていただきました。

電卓記法

ブログに使うには高機能すぎるぐらい色々計算できる記法です。*1

*1 : 元々C71/C72 Special Edition用にジョークで開発された記法でした。プラグインとして実装されています。adiary開発のごく初期(Ver1スナップショット初期)にインタプリタ方式で動作していた昔のSatsuki-systemを流用して作られました。

電卓記法の基本

基本的にはとして使用します。

2の16乗は[calc:2^16]。3+4は[calc:3+4]。√2は[calc:sqrt(2)]。

2の16乗は65536。3+4は7。√2は1.4142135623731

となります。加減乗除やいろいろな関数が使えます。

電卓記法で変数が使える

変数を使うことができます。変数の代入は次のように行います。

[calcx:x=15]
[calcx:y="test"]

[calcx]は結果を出力しない記法です。

変数はさつき記法の自由変数を使用していますので、さつき記法からも代入や表示することができます。

:::z1=220
:::z2=あいうえお
z1の値は「[$z1]」です。

電卓記法で何ができる

この例はせりかさんに提供して頂きました。

2次方程式

y = x2 - 6x + 9

の解は以下で計算できます.

[calcx: a = 1][calcx: b = - 6][calcx: c = 9][calcx: d = b * b - 4 * a * c] \
[calc: if(d < 0, "解無し", if(d==0, (-b/(2 * a))."(重回)", (-b+sqrt(d))/(2 * a)) )]

3(重回)

お金の計算

表と連携した場合

[calcx:total=0]
|* 商品  |* 価格         |* 個数      |* 計         |
| 端麗   | [calc: p=198] | [calc:n=2] | [calc:t=p*n][calcx:total += t]|
| エビス | [calc: p=248] | [calc:n=1] | [calc:t=p*n][calcx:total += t]|
| 生搾り | [calc: p=198] | [calc:n=2] | [calc:t=p*n][calcx:total += t]|
|合計    |<|<|[calc:total]|
商品 価格 個数
端麗1982396
エビス2481248
生搾り1982396
合計1040

使える関数や式

電卓記法では、次の式や関数が使用できます。

利用可能な演算子(優先度の低い順)。

; , = += *= /= %= .= **= <<= >>= &= |= &&= ||=
|| && | & == != <=> eq ne < > <= >= defined >> <<
+ - . * / % x(文字列をn回複製) ++ -- ! ~ ^(べき乗) **(べき乗) #(配列参照)

利用可能な関数

sin cos tan asin acos atan atan2(x,y) rand oct hex abs ln log exp
sqrt pow(x,y) sqr root
floor round ceil int rint cint ceiling
max(a,b, ... ,z) min(a,b, ... ,z) pow10(x) log10 log2
hypot fabs fma remainder ldexp scalb rad2deg def2rag
time localtime substr ord length index rindex
chop chomp regexp replace split join crypt
push pop unshift shift sort strsort reverse
if(式, x, y) ("式"が真ならばxを、偽ならばyを返す)

ポーランド記法

[poland]というタグがあり、入力した式を逆ポーランド記法で出力します。

たとえば[poland:(b^2-sqrt(4*a*c))/(2*a)]と入力すると次のようになります。

b 2 ^ sqrt 4 a * c * %r - 2 a * /

内部処理の都合で %r とかでていますが気にしないでください。

記法タグを定義する

記法タグはユーザーが自由に定義することができます。よく使う表記やリンクを登録すると、より一層便利に使うことができます*1

登録方法

ブログの管理画面から「その他の設定」→「記法タグ」と選択するとブログ固有の記法タグ定義画面になります。

info/textparser_tags.txtの書き換えは推奨されません*2。もし複数のブログがあり、全体で同じ記法を使いたい場合は「info/textparser_site_tags.txt」というファイルを作成し、その中に定義してください。

*2 : このファイルを書き換えるとアップデート時に手間がふえてしまいます。

タグ定義の書式について

定義済の記法は「info/textparser_tags.txt」にあります。

基本の設定

google  = Google検索,       UTF-8,  http://www.google.co.jp/search?lr=lang_ja&ie=utf-8&oe=utf-8&q=
keyword = はてなキーワード, EUC-JP, http://d.hatena.ne.jp/keyword/
g       = >google

左がタグ名、次がタイトル、文字コード、URLと並びます。[google:ブログ]としたとき「ブログ」の部分が、指定した文字コードでエンコードされURLの最後に追加されます。この書式がもっとも一般的なものです。3行目のタグ「g」はタグ「google」へのエイリアス(別名)となります。エイリアスは1階層しか辿らないことに注意してください。

  • 相対パスを書いた場合は、スクリプトのあるディレクトリからの相対パスになります。
  • タグの指定は右から順に省略できます。プラグインタグのタイトルのみの指定でよく利用しています。
  • 2つめ以降の引数はリンクテキストとして解釈されます。リンク引数より多い引数はすべてリンクテキストとして扱われます。
  • 文字コードの指定は大文字で書きます。「小文字のみ」の文字列は特殊な設定とみなされます。

受け取る引数を指定する

URLの前に受け取る引数の数を書くことで、引数を指定できます。このとき $1 $2 ... $n が順に引数として扱われます。

hatena:id = はてなダイアリー, ASCII, 1, http://d.hatena.ne.jp/$1/
hatena:d  = はてなダイアリー, ASCII, 2, http://d.hatena.ne.jp/$1/$2
[hatena:id:xzz]         → http://d.hatena.ne.jp/xzz/
[hatena:d:xzz:20060707] → http://d.hatena.ne.jp/xzz/20060707

引数の数を省略した場合は、引数=1、リンクURL末尾に「$1」を付加したものとして扱われます。

引数の数によりタグの定義を変える

タグ名のうしろにスペースなしで「#引数の数」と指定します。

hatena:id   = はてなダイアリー, EUC-JP, 1, http://d.hatena.ne.jp/$1/       (1)
hatena:id#2 = はてなダイアリー, EUC-JP, 2, http://d.hatena.ne.jp/$1/$2     (2)
hatena:id#3 = はてなダイアリー, EUC-JP, 3, http://d.hatena.ne.jp/$1/$2/$3  (3)

引数の数を指定すると、引数の数が一致するときのみ該当タグが呼ばれます。一致しない場合は、指定なしのタグが呼ばれます。引数の数指定のあるタグのみを書くことができません。注意してほしいのは、右側の受け取る引数指定はあくまでURL置き換え時に処理する引数の数を指定するもので、タグ選別には関与しないということです*3

例えばこの例では、次のように対応します。

[hatena:id:xzz]                    → (1)
[hatena:id:xzz:20060707]           → (2)
[hatena:id:xzz:20060707:p1]        → (3)
[hatena:id:xzz:20060707:p1:xxx]    → (1)

「末尾がスペース」だったり非ASCII文字(全角文字)を含む引数があると、それ以降はカウントされません。これはリンクテキストが、引数として解釈されないための措置です。

[hatena:id:xzz:リンク]             → (1)
[hatena:id:xzz:20060707 ]          → (1)
[hatena:id:xzz:20060707:p1:リンク] → (3)

もしそれらを含めた引数の数を判別したい場合は「##3」などとします。

*3 : 溢れた引数がリンク名として使われることからこのような仕組みになっています

HTMLタグ置き換え機能

URL部分が<で始まるとき、そのまま置換が行われます。

mtex = mimeTeX, ASCII, 1, <img src="$0mimetex/mimetex.cgi?$1" alt="$1" class="tex">
test = block-tag-sample, ASCII, 2, block:
<table>
<tr><th>#1</th><td>#2</td></tr>
</table>

block:指定は、置き換え部分(URL部)を複数行に渡って書くための機能です。次の行から空行までを置き換え部分として認識されます。なお、置換時には改行は無視され1行に展開されます。

「#1 #2」はURIエンコードされていないそのままの引数と置換するための変数です。これは検索など他のタグ定義でも使用できます。(使用するケースはないと思いますが)

単一タグ定義(HTMLタグへの置換)

HTMLタグへの置換定義を行うことができます。

pre    = html:span.pre
em     = html:em
hidden = html:span.hidden

html:識別子に続き、tag名.クラス名となっています。さらにスペースに続けて追加属性を書くこともできます。

hidden = html:span.hidden title="マウスで選択"

画像リンク記法を定義する

画像記法は特定の場所においてある「画像へのリンク」を簡単に実現するためのものです。画像プラグインにより実現されています。

まずユーザー定義タグを用いてタグを指定します。オプション(通常文字コードを指定する部分)に image と書くのがポイントです。

myimg       = 画像, image, 1, http://example.jp/image/$1_small.jpg
myimg#large = 画像, image, 1, http://example.jp/image/$1_large.jpg
myimg#link  = 画像, image, 1, http://example.jp/image/$1.jpg

最初は通常の表示画像、myimg#largeには大きな画像指定時の表示画像、#linkにはリンク先アドレスをそれぞれ指定します。受け取る引数の数は、すべて同じに設定してください。

この状態で、myimgタグは次のように置き換わります。

[myimg:test]
[myimg:test:large]
[myimg:test:たいとる]
[myimg:test:w50:たいとる]
<a href="http://example.jp/image/test.jpg" class="myimg">
<img alt="test" title="test" src="http://example.jp/image/test_small.jpg"></a>

<a href="http://example.jp/image/test.jpg" class="myimg">
<img alt="test" title="test" src="http://example.jp/image/test_large.jpg"></a>

<a href="http://example.jp/image/test.jpg" class="myimg">
<img alt="てすと" title="てすと" src="http://example.jp/image/test_small.jpg"></a>

<a href="http://example.jp/image/test.jpg" class="myimg">
<img alt="てすと" title="てすと" src="http://example.jp/image/test_small.jpg" width="50"></a>

マクロの定義

マクロは複数行に展開される特殊なタグです。

以下は、見出しに章番号を付ける [*section_number] マクロの定義例です。

*section_number
::section_number=1
  • "*"(アスタリタク)で宣言を始めます。
  • 空行までがマクロとして認識されます。
  • マクロ引数は「#0」として展開できます。
*toc
<toc>#0</toc>
[*toc:depth=2]  → <toc>depth=2</toc>