少し手が空いたので、Text::Shinobi というモジュールを作成してみました。340年前に編纂された、かの忍術総合百科事典『万川集海』に登場する換字式暗号
の encode/decode をするものです。
暗号✨ 忍者💕 少年時代に何かで見たことがある方も多いのではないでしょうか。ちなみに、当然ながら忍者界ではテストにも出ます
モジュール化のアイディア自体は数年前に思いついたのですが、二の足を踏んでいたのは、以下のようなめんどくさい点(←ここが楽しい点でもある)によります:
- 万川集海の該当章(巻五)の原典にあたることが面倒であった
- 変換表が厳密には載っていない(忍術書では大事なところを「これは口伝」と割愛する
- 変換後の文字について、そのままの Shape の漢字が存在するが…、(例:「横」)
- それらを JIS(X 0208, X 0212, X 0213)の視点で見た場合、あるものと無いものがする
- Unicode の視点で見た場合(perl であることもあり基本 Unicode にマッピングしたい)、最近のバージョンで入ったものやいわゆる utf8mb4 の範囲であったりする
- 特に JIS外由来で Unicode に入っている文字の場合、表示できるフォントが入っているかどうかが環境や状況(該当文字の lang 判定)によって異なる。
ですがこのたび、
- 昨年発売の 完本 万川集海 により内閣文庫本を容易に参照できるようになったこと!
- 変換表は現代一般的とされる「栬」を「い」スタートするものと固定
- 変換後の文字を選択できるようにしつつも、「その時_ほとんどの_ブラウザで表示可能な文字をデフォルトとする」をコンセプトとする妥協。
などと決め、気合をいれ Unicode 表と対決。検証には うみほたる 様の記事と同梱の readme.txt を激烈参照させていただきました。Unicode に採用された文字の数点が「忍びいろは」由来であることなど、興味深かったです。Unicode に生き続ける忍術! (参考: JIS X0213規格票の p205, p282「附随書6(規定)」(X0213_09.pdf)にて用例として示されています。
ブラウザの標準環境で表示可能な文字というのが曲者で、中国語フォントへの fallback を考慮すると(たとえば Macの場合でゴシック体の場合は PingFang HK)、最終的にはシミュレータでちまちま確認。(結果 Android 4.x は見捨てることに… 苦
しかしこういった泥臭い確認作業(2016)、
10年前(2007)やってたことと大して変わらない件www
emoji4unicode がそうであったように、Unicode やフォント環境などは今後も変わるもの。忍びいろはが流行すると、現在対応する Unicode がない文字も Unicode 採用されるカモ!!