xfy technology についての備忘録です。
xfy Blog Editor のトライアル版がリリースされました。いろいろ試してみたいのですが、実験用サーバの構築や XML-RPC の勉強などに思うように時間を割けず、 xfy Blog Editor を試せるのはもう少し先になりそうです。コメントをいただいておきながら申し訳ありません、 taox さん。
https://www.xfytec.com/community/modules/newbb/viewtopic.php?topic_id=145&forum=10
(こちらもなかなか思うように進みませんが) 引き続き、 DocBook 用のボキャブラリコンポーネントに手を加えていきます。
DocBook 用のボキャブラリコンポーネントとして、下記の機能を実装します。
各要素が表示される (実装済み)。
各要素の内容 (テキストノード) を編集できる (実装済み)。
要素が空要素用の場合 → プレースホルダを示す文字列が表示される (実装済み)。
カレット位置に応じて要素の挿入、分割、追加ができる。
パラグラフの前後に新しいパラグラフを挿入したり追加したりできるようにします。また、パラグラフをカレット位置で分割できるようにします。
XML エディタの中には、要素の挿入や追加などをメニュー (コンテキストメニューを含む) から行うものがあります。しかし、このボキャブラリコンポーネントでは、ワードプロセッサに似た使い勝手を実現したいので、これらの処理を Enter キーの押下で行うことにします。 Enter キー押下時の挙動は下記のとおりです。
カレットがパラグラフの先頭にある場合 → そのパラグラフの直前に空のパラグラフを挿入する。
カレットがパラグラフの途中にある場合 → そのパラグラフをカレット位置で分割する。
カレットがパラグラフの末尾にある場合 → そのパラグラフの直後に空のパラグラフを追加する。
これらの処理は、要素の分割処理だけで実現できます。なお、併せてパラグラフの末尾に段落記号 (¶) を表示することにします。
:
<xvcd:xvcd version="1.0"
xmlns:xvcd = "http://xmlns.xfy.com/xvcd"
xmlns:event = "http://xmlns.xfy.com/event"
xmlns:db = "http://docbook.org/ns/docbook"
xmlns:h = "http://www.w3.org/1999/xhtml">
:
<xvcd:template match="db:para">
<h:p>
<xvcd:call-template name="apply-templates.with-filler">
<xvcd:with-param name="filler" select="'パラグラフ'"/>
</xvcd:call-template>
<h:small class=" pilcrow-sign ">¶</h:small>
<xvcd:action event="event:key-pressed[@stroke = 'ENTER']">
<xvcd:split select="."/>
</xvcd:action>
</h:p>
</xvcd:template>
:
</xvcd:xvcd>
同様の変更をプログラムリスト用のテンプレートにも施します。
:
<xvcd:template match="db:programlisting">
<h:pre>
<xvcd:call-template name="apply-templates.with-filler">
<xvcd:with-param name="filler" select="'プログラムリスト'"/>
</xvcd:call-template>
<h:small class=" pilcrow-sign ">¶</h:small>
<xvcd:action event="event:key-pressed[@stroke = 'ENTER']">
<xvcd:split select="."/>
</xvcd:action>
</h:pre>
</xvcd:template>
:
この XVCD スクリプトを XML 文書に適用すると、次のようになります。
例によって記述の重複を避けるために、追加したばかりの h:small 要素と xvcd:action 要素とをそれぞれ名前付きテンプレート (テンプレート名: pilcrow-sign、 action.key-pressed.ENTER.then-split) として切り出します。
:
<xvcd:template name="pilcrow-sign">
<h:small class=" pilcrow-sign ">¶</h:small>
</xvcd:template>
<xvcd:template name="action.key-pressed.ENTER.then-split">
<xvcd:action event="event:key-pressed[@stroke = 'ENTER']">
<xvcd:split select="."/>
</xvcd:action>
</xvcd:template>
:
これらのテンプレートには、パラメータは特に備わっていません。これらのテンプレートを呼び出す際は、そのまま呼び出します。
:
<xvcd:template match="db:para">
<h:p>
<xvcd:call-template name="apply-templates.with-filler">
<xvcd:with-param name="filler" select="'パラグラフ'"/>
</xvcd:call-template>
<xvcd:call-template name="pilcrow-sign"/>
<xvcd:call-template name="action.key-pressed.ENTER.then-split"/>
</h:p>
</xvcd:template>
<xvcd:template match="db:programlisting">
<h:pre>
<xvcd:call-template name="apply-templates.with-filler">
<xvcd:with-param name="filler" select="'プログラムリスト'"/>
</xvcd:call-template>
<xvcd:call-template name="pilcrow-sign"/>
<xvcd:call-template name="action.key-pressed.ENTER.then-split"/>
</h:pre>
</xvcd:template>
:
現時点での XVCD スクリプトです。