このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

WikiCreoleのエスケープは比較的使いやすい

WikiCreoleに対する我々(檜山&Kuwata)の立場は、Kuwataさんが要領よく説明してくれています。

要するに、仕様を厳守するところからスタートしよう、ってことです。なんとか適合(conform)しようとしてるからこそ、愚痴や悪口も言いたくなるってもんです。でも今日は悪口じゃなくて、けっこう使いやすいな、というところを紹介。

Wikiマークアップとして使われている文字列を、リテラルとして入力したいときはエスケープする(特殊な意味を奪う)必要があります。WikiCreoleエスケープ文字はチルダ('~')です。チルダによって直後の1文字だけエスケープされます。これとは別なエスケープ・ルールとして、チルダに続くマークアップ全体をエスケープする方法があります。

例えば、'{{{'というWikiマークアップ(pre要素)をエスケープするとき:

  1. 直後の1文字をエスケープする方式では、'~{~{{'、または '{~{{' と書く必要がある。なぜなら、'{{' もWikiマークアップ(img要素)なので。
  2. 直後のマークアップエスケープする方式では、'~{{{' でよい。

「直後の1文字」方式のほうがメンドクサイです。が、何も考えなくてもエスケープできます。「どこまでエスケープされるのだろう?」と悩む必要はありません。

「直後のマークアップ」という言葉は曖昧性があります。'~{{{'の場合、'{{'も'{{{'もマークアップなので、「直後の一番長いマークアップ」と言わないと不正確です。また、曖昧性を除くことができても、マークアップに関する正確な知識がない限りはエスケープ範囲を予測できないのです。

つまり、「直後のマークアップ」方式には次の問題点があるのです。

  1. チルダの意味・効果が文脈により変わる。
  2. 文脈を理解するには、Wikiマークアップ全般に対する知識が要求される。
  3. チルダの意味・効果を正確に記述しようとすると、その説明はたいへんに長くなる。

実際、http://www.wikicreole.org/wiki/Creole1.0Poll の審議の記録や投票結果を見ると、「直後のマークアップ」方式に賛成した人は一人もいません。

ルールが文脈や環境に依存して、場合分けと例外や付帯条件に対する記述がたくさん含まれるのは、ほんとにロクなことはないのです。ルールは、可能な限り一律に適用できて、例外も付帯条件もないのが望ましいのです。僕が'**'マークアップを槍玉にあげているのは、これが完全に例外規則になってしまっているからです。例外規則は人を混乱させ悩ませます。

エスケープに関してはほぼ一律に適用できるルールで良かった良かった、と。「ほぼ」なのは次の例外があるからです。でも、この例外は妥当、あるいは許容できるものです。

  1. preブロック内ではエスケープ文字が効かない。
  2. URL内の'~'はエスケープ文字とみなさない。
  3. 空白と改行にチルダを前置してもエスケープにはならない。*1

*1:このルールは、個人的には気に入らないですが、まー許容はできるかと。