暑い日が続きますね。
しかし、暑いからと言って、怠けているわけにも行きません。
一生懸命やる気を出して、今日は久々にMagSite1関係の作業に着手しました。
MagSite1に画像を扱う機能を付けて欲しいという強いリクエストは受けていますし、自分としてもこれが必要です。本来、このサイトには、と~のZERO歳のコンテンツも統合するはずだったのですが、MagSite1には画像を扱う機能がないため、これが実現できていませんでした。
これを実現する上での最大の障害は、画像の縮小でした。サムネール表示や、大きなデジカメ画像を適当なサイズで閲覧可能とするためには、この機能が必要です。しかし、ただ単に.NET Frameworkのクラスライブラリを呼ぶだけでは綺麗とは言い難い結果しか得られませんでした。自分で作らないと駄目かと思って途中まで作りかけましたが、実は何種類もの方法が選択可能になっていることに気付き、InterpolationMode.HighQualityBicubic (高品質双三次補間)を試してみると、なかなか綺麗な結果が得られました。
これで問題は解決と作業を進めようとしたのですが。どうも画像扱いの仕様が不必要に複雑すぎると思い、考え込みました。そして、実質的な機能を落とさず仕様をサッパリさせることに成功しました。
それで万々歳かというとそうではありませんでした。そのサッパリとした仕様は、オーサリング言語の存在を前提としていたからです。
現在、MagSite1は、プレーンテキストとXHTMLをサポートしています。プレーンテキストでも、URLの自動抽出は行われています。このサイトが現在持っているコンテンツの大半はプレーンテキスト形式です。しかし、きめ細かくコンテンツに画像を入れていこうとすれば、そのための指示を書き込む必要が生じます。当然、プレーンテキストでは書けません。しかし、XHTMLを使えば済むというものではなく、いろいろ複雑な機能を正しく稼働させるようにXHTMLコードを書くのは面倒すぎる作業です。そこで、簡単なオーサリング言語が必要となるわけです。
そこで、今日は以下のようなメモを書いてみました。
これがそのまま実装される可能性は薄いと思いますので参考程度に。
MagML: MagSite Markup Language
● 目的
MagSite1のコンテンツ記述を楽に済ませる。
● 要求
・ 容易に見出しを記述できる
・ 容易にリストを記述できる
・ 容易に強調を記述できる
・ 容易にハイパーリンクを記述できる (URLを隠せる)
・ 容易にプログラムリストを記述できる (固定ピッチ。行頭空白の有効化)
・ 容易にテーブルを記述できる
・ 容易に画像表示を記述できる
・ 全角文字が使用できるアドバンテージを活用する
● 概要
setextとWikiのフォーマット言語を多少参考にしているが独自の世界を構築する(せざるを得ない)
● 2重データ保存
MagMLの拡張により、それまでマークアップ文字ではなかったものがマークアップ文字になる場合がある。そのため、MagMLコンテンツ本文は、XHTMLに変換後のデータを保存して記憶し、合わせてMagML形式のソースも同時に保持する。表示時はXHTMLデータを使い、再編集時にはMagML形式のソースを使う。
● %%の特権性
%%はマークアップの開始として特別な意味を持つ。マークアップの開始と、マークアップの打ち消しマークアップ以外で出現してはならない。%%`%%`と書く必要がある。
● 見出しマークアップ
行頭に1文字の「●」が付く行は、それを取り除き、h2要素に置き換えられる。
行頭に1文字の「◎」が付く行は、それを取り除き、h3要素に置き換えられる。
行頭に1文字の「○」が付く行は、それを取り除き、h4要素に置き換えられる。
● リストマークアップ
行頭に1文字の「・」が付く行は、「・」を取り除き、前後の同じ条件を持つ行を合わせて1つの<ul>要素によるリストに置き換えられる。
● アンダーラインマークアップ
%%_テキスト_はテキストがアンダーライン付きと見なされる。(span要素+CSS)
● 強い強調マークアップ
%%**テキスト**はstrong要素に置き換えられ「テキスト」を強調する。
● 強調マークアップ
%%/テキスト/はem要素に置き換えられ「テキスト」を強調する。
● 字下げマークアップ
行頭が>である場合は半角空白4文字分の字下げを行う
行頭が>>である場合は半角空白8文字分の字下げを行う
行頭が>>>である場合は半角空白12文字分の字下げを行う
● マークアップの打ち消しマークアップ
%%`テキスト`でくくった範囲はマークアップの打ち消しとなる
● ハイパーリンクマークアップ
http://で始まる文字列はハイパーリンクとして自動抽出される。
%%~見出し~URI~は<a href="URI">見出し</a>に置き換えられる。
見出しとURIに直接~を書くことはできない。もともと~自身はURI中で%7eと書くべきものである。それ以外はマークアップの打ち消しマークアップを使う必要がある。
● フォーマット済みマークアップ
%%preとだけ書いた行と、%%preとだけ書いた行の間は、フォーマット済みと見なされ、一切の手を入れず、ありのまま固定ピッチフォントで表示される。タブは空白に置き換えられ、半角空白はnbsp実体になる。
● テーブルマークアップ
%%tableとだけ書いた行と、%%tableとだけ書いた行の間は、テーブルと見なされる。
1行として%%th アイテム1, アイテム2, ... アイテムnと書いた場合、これらはth要素に展開される。テーブル中のみ有効
1行として%%td アイテム1, アイテム2, ... アイテムnと書いた場合、これらはtd要素に展開される。テーブル中のみ有効
● 画像表示アップ
%%L画像番号#はサムネール画像のimg要素と画像表示ページへのリンクにa要素に置き換えられる。
%%I画像番号#はその画像そのものがインラインに展開される。
● ネストについて
機能はネストすることができる。%%_これは%%**テスト**です_は有効な構文。
● 終了を示す特殊文字
%%_テキスト_の最後の_のような特殊文字は、そのコンテキスト内でのみ有効である。
例: %%_これは%%**テ_ス_ト**です_のテ_ス_トの_はアンダーラインの終了文字と見なされない。
● 不完全な構文
%%**テストのような閉じていないマークアップは、行末が終了の特殊文字相当の機能を持つとし、構文エラーとして扱わない。2つの区切りを持つ%%~見出し~URI~のような構文では、最後の特殊文字だけが行末で代用できる。途中の特殊文字は代用できない。
end.