xfy.memo

xfy technology についての備忘録です。

2006 年 9 月のアーカイブ

2006 年 9 月 11 日 DocBook 用のボキャブラリコンポーネントを作る (要素の挿入、分割、追加)

xfy Blog Editor のトライアル版がリリースされました。いろいろ試してみたいのですが、実験用サーバの構築や XML-RPC の勉強などに思うように時間を割けず、 xfy Blog Editor を試せるのはもう少し先になりそうです。コメントをいただいておきながら申し訳ありません、 taox さん。

xfy Blog Editor (Trial) ダウンロード - xfy Community

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 文書に適用すると、次のようになります。

スクリーンショット (PNG 形式、約 44KB)

リファクタリング

例によって記述の重複を避けるために、追加したばかりの h:small 要素と xvcd:action 要素とをそれぞれ名前付きテンプレート (テンプレート名: pilcrow-signaction.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 スクリプトです。


Powered by Movable Type 3.2-ja-2

Copyright © 2005, 2006 Shin All rights reserved.