*** empty log message ***
authornisikimi <nisikimi>
Fri, 11 Dec 2009 01:37:46 +0000 (01:37 +0000)
committernisikimi <nisikimi>
Fri, 11 Dec 2009 01:37:46 +0000 (01:37 +0000)
FORMATS/FLT.ja.txt
FORMATS/FLT.txt

index 4407f82..3d0321f 100644 (file)
-/* Copyright (C) 2003, 2004
+/* Copyright (C) 2003, 2004, 2009
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
    See the end for copying conditions.  */
 
 /***ja
 
-@page mdbFLT ¥Õ¥©¥ó¥È¥ì¥¤¥¢¥¦¥È¥Æ¡¼¥Ö¥ë
+@page mdbFLT フォントレイアウトテーブル
 
-@section flt-description ÀâÌÀ
+@section flt-description 説明
 
-ñ½ã¤Ê¥¹¥¯¥ê¥×¥È¤Î¾ì¹ç¡¢É½¼¨¥¨¥ó¥¸¥ó¤ÏÁªÂò¤·¤¿¥Õ¥©¥ó¥È¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó
-¥°¤Ë±þ¤¸¤Æʸ»ú¥³¡¼¥É¤ò¥°¥ê¥Õ¥³¡¼¥É¤Ë°ìʸ»ú¤º¤ÄÊÑ´¹¤¹¤ë¡£¤·¤«¤·¡¢Ê£»¨¤Ê
-¥ì¥¤¥¢¥¦¥È¤òÍ׵᤹¤ëʸ½ñ¡¢¤¿¤È¤¨¤Ð¥¿¥¤¤ä¥¤¥ó¥É·Ï¤Î¥¹¥¯¥ê¥×¥È¤Ê¤É¤Î¾ì¹ç¡¢
-£±ÂУ±¤ÎÊÑ´¹¤Ç¤ÏÉÔ½½Ê¬¤Ç¤¢¤ë¡£Ê£¿ô¤Îʸ»ú¤¬°ì¤Ä¤Î¥ê¥¬¥Á¥ã¤È¤·¤ÆÉÁ¤«¤ì¤¿¤ê¡¢
-£²¼¡¸µÅª¤Ë¤º¤é¤·¤¿°ÌÃÖ¤ËÉÁ¤«¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¥°¥ê¥Õ¤¬¤¢¤Ã¤¿¤ê¤¹¤ë¡£
+単純なスクリプトの場合、表示エンジンは選択したフォントのエンコーディン
+グに応じて文字コードをグリフコードに一文字ずつ変換する。しかし、複雑な
+レイアウトを要求する文書、たとえばタイやインド系のスクリプトなどの場合、
+1対1の変換では不十分である。複数の文字が一つのリガチャとして描かれたり、
+2次元的にずらした位置に描かなくてはならないグリフがあったりする。
 
-¤³¤Î¤è¤¦¤ÊÊ£»¨¤Ê¥¹¥¯¥ê¥×¥È¤ò½èÍý¤¹¤ë¤¿¤á¡¢m17n ¥é¥¤¥Ö¥é¥ê¤Ï¥Õ¥©¥ó¥È¥ì
-¥¤¥¢¥¦¥È¥Æ¡¼¥Ö¥ë (û½Ì¤·¤Æ FLT ¤È¸Æ¤Ö¤³¤È¤Ë¤¹¤ë) ¤òÍѤ¤¤ë¡£FLT ¥É¥é¥¤
-¥Ð¤Ï FLT ¤ò²ò¼á¤·¡¢Ê¸»úÎó¤òɽ¼¨¥¨¥ó¥¸¥ó¤ËÅϤ¹¤³¤È¤Î¤Ç¤­¤ë¥°¥ê¥ÕÎó¤ËÊÑ
-´¹¤¹¤ë¡£
+このような複雑なスクリプトを処理するため、m17n ライブラリはフォントレ
+イアウトテーブル (短縮して FLT と呼ぶことにする) を用いる。FLT ドライ
+バは FLT を解釈し、文字列を表示エンジンに渡すことのできるグリフ列に変
+換する。
 
-FLT ¤Ï OpenType Layout Table ¤Ë¸«¤é¤ì¤ë¾ðÊó (CMAP, GSUB, and GPOS) ¤Ë
-²Ã¤¨¤Æ¡¢Ê¸»úÎ󤫤é½ñµ­ÁÇ (grapheme) ¥¯¥é¥¹¥¿¤òÃê½Ð¤·¤¿¤ê¡¢¥¯¥é¥¹¥¿Æâ¤Ç
-ʸ»ú¤òʤÙÊѤ¨¤¿¤ê¤¹¤ë¤¿¤á¤Î¾ðÊó¤ò»ý¤Ä¤³¤È¤¬¤Ç¤­¤ë¡£
+FLT は OpenType Layout Table に見られる情報 (CMAP, GSUB, GPOS) に
+加えて、文字列から書記素 (grapheme) クラスタを抽出したり、クラスタ内で
+文字を並べ変えたりするための情報を持つことができる。
 
-FLT ¤Ï 1 ¤Ä°Ê¾å¤ÎÊÑ´¹¥¹¥Æ¡¼¥¸¤¬Â³¤¤¤¿¤â¤Î¤Ç¤¢¤ë¡£³Æ¥¹¥Æ¡¼¥¸¤Ç¥³¡¼¥ÉÎó
-¤ÏÊ̤Τâ¤Î¤ËÊÑ´¹¤µ¤ì¡¢¼¡¤Î¥¹¥Æ¡¼¥¸¤ËÆɤޤì¤ë¡£Îó¤ÎŤµ¤Ï¥¹¥Æ¡¼¥¸Ëè¤Ë°Û
-¤Ê¤ë¤³¤È¤¬¤¢¤ë¡£¥³¡¼¥ÉÎó¤Î³ÆÍ×ÁǤϰʲ¼¤ÎÀ°¿ôÃͤΰÀ­¤ò»ý¤Ä¡£
+flt は 1 つ以上の変換ステージが続いたものである。各ステージでコード列
+は別のものに変換され、次のステージに渡される。列の長さはステージ毎に異
+なることがある。
 
-<ul>
-<li> ¥³¡¼¥É
-
-ÊÑ´¹¤ÎºÇ½é¤Î¥¹¥Æ¡¼¥¸¤Ç¤Ï¡¢¸µ¤Îʸ»úÎó¤Îʸ»ú¥³¡¼¥É¡£ºÇ¸å¤Î¥¹¥Æ¡¼¥¸¤Ç¤Ï¡¢
-ɽ¼¨¥¨¥ó¥¸¥ó¤ËÅϤµ¤ì¤ë¥°¥ê¥Õ¥³¡¼¥É¡£¤½¤ì°Ê³°¤Ç¤ÏÃæ´ÖŪ¤Ê¥°¥ê¥Õ¥³¡¼¥É¡£
+レイアウトエンジンがテキストを描く際には、まずテキストの各文字に対して
+それぞれフォントと FLT とを決定する。レイアウトエンジンはテキストを同じ
+フォントと FLT を用いる部分文字列に分割し、それぞれの部分文字列を一つず
+つ、決定した FLT の最初のステージに渡して処理させる。
 
-<li> ¥«¥Æ¥´¥ê
+各時点で処理されている部分文字列を、@e 現行の @e ラン と呼ぶ。
 
-¤½¤Î¥¹¥Æ¡¼¥¸¤Î @c CATEGORY-TABLE ¤ÇÄêµÁ¤µ¤ì¤¿¤«¡¢°ÊÁ°¤Î¥¹¥Æ¡¼¥¸¤ÇÄêµÁ¤µ
-¤ì¾å½ñ¤­¤µ¤ì¤Æ¤¤¤Ê¤¤¥«¥Æ¥´¥ê¡¼¥³¡¼¥É¡£
+部分文字列の各要素は以下の特徴(整数値で表される)で表現される。
 
-<li> ·ë¹çµ¬Â§
+<ul>
+<li> コード
 
-0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¤³¤Î¡ÊÃæ´Ö¡Ë¥°¥ê¥Õ¤òÁ°¤Î¤â¤Î¤È¤É¤¦·ë¹ç¤¹¤ë¤«¤ò»ØÄꤹ¤ë¡£
+変換の最初のステージでは、元の文字列の文字コード。最後のステージでは、
+表示エンジンに渡されるグリフコード。それ以外では中間的なグリフコード。
 
-<li> º¸¥Ñ¥Ç¥£¥ó¥°¥Õ¥é¥°
+<li> カテゴリ
 
-0 ¤Ç¤Ê¤±¤ì¤Ð¡¢É½¼¨´Ø¿ô¤Ë¤³¤Î¡ÊÃæ´Ö¡Ë¥°¥ê¥Õ¤ÎÁ°¤Ë¥¹¥Ú¡¼¥¹¤òÁÞÆþ¤·¤Æ¡¢Á°
-¤Î¥°¥ê¥Õ¤È½Å¤Ê¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤è¤¦»Ø¼¨¤¹¤ë¡£
+類似した扱いを要する文字コードや中間的なグリフコードは、まとめて一つの
+カテゴリに分類する。@c カテゴリ は、そのステージの
+&lt;category-table&gt; で定義されたか、以前のステージで定義され上書きさ
+れていないカテゴリコードのうちのいずれか。
 
-<li> ±¦¥Ñ¥Ç¥£¥ó¥°¥Õ¥é¥°
+<li> 結合規則
 
-0 ¤Ç¤Ê¤±¤ì¤Ð¡¢É½¼¨´Ø¿ô¤Ë¤³¤Î¡ÊÃæ´Ö¡Ë¥°¥ê¥Õ¤Î¸å¤Ë¥¹¥Ú¡¼¥¹¤òÁÞÆþ¤·¤Æ¡¢¸å
-¤Î¥°¥ê¥Õ¤È½Å¤Ê¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤è¤¦»Ø¼¨¤¹¤ë¡£
+変換の最初のステージでは、この値は0である。0 でない場合は、この(中間)
+グリフを直前のグリフとどう結合するかを指定する。
 
-</ul>
+<li> 左パディングフラグ
 
-¥ì¥¤¥¢¥¦¥È¥¨¥ó¥¸¥ó¤¬¥Æ¥­¥¹¥È¤òÉÁ¤¯ºÝ¤Ë¤Ï¡¢¤Þ¤º¥Æ¥­¥¹¥È¤Î³Æʸ»ú¤ËÂФ·¤Æ
-¤½¤ì¤¾¤ì¥Õ¥©¥ó¥È¤ÈFLT ¤ò·èÄꤹ¤ë¡£Æ±¤¸¥Õ¥©¥ó¥È¤È FLT ¤òÍѤ¤¤ëÉôʬʸ»úÎó
-¤Ë´Ø¤·¤Æ¡¢¥ì¥¤¥¢¥¦¥È¥¨¥ó¥¸¥ó¤ÏÂбþ¤¹¤ëÃæ´ÖŪ¤Ê¥°¥ê¥Õ¤ÎÎó¤òÀ¸À®¤¹¤ë¡£Ãæ
-´ÖŪ¤Ê¥°¥ê¥Õ¥³¡¼¥É¤Î³ÆÍ×ÁǤϡ¢¥³¡¼¥É¤Î°À­¤È¤·¤ÆÂбþ¤¹¤ëʸ»ú¥³¡¼¥É¡¢Â¾
-¤Î°À­¤È¤·¤Æ 0 ¤ò»ý¤Ä¡£¤³¤ÎÎó¤ÏFLT ¤ÎºÇ½é¤Î¥¹¥Æ¡¼¥¸¤Ç¸½¹Ô¤Î @e ¥é¥ó (Éô
-ʬÎó) ¤È¤·¤Æ½èÍý¤µ¤ì¤ë¡£
+変換の最初のステージでは、この値は0である。0 でない場合は、表示関数にこ
+の(中間)グリフの前にスペースを挿入して、前のグリフと重ならないように
+するよう指示する。
 
-³Æ¥¹¥Æ¡¼¥¸¤Ï°Ê²¼¤Î¤è¤¦¤ËƯ¤¯¡£
+<li> 右パディングフラグ
 
-¤Þ¤º¤³¤Î¥¹¥Æ¡¼¥¸¤Ë @c CATEGORY-TABLE ¤¬¤¢¤ì¤Ð¡¢¸½¹Ô¤Î¥é¥ó¤Î¤¹¤Ù¤Æ¤Î¥°
-¥ê¥Õ¤Î¥«¥Æ¥´¥ê¤¬¹¹¿·¤µ¤ì¤ë¡£¥«¥Æ¥´¥ê¤Î̵¤¤¥°¥ê¥Õ¤¬¤¢¤ì¤Ð¡¢¥é¥ó¤Ï¤½¤Î¥°
-¥ê¥Õ¤ÎÁ°¤Ç½ª¤ë¡£
+変換の最初のステージでは、この値は0である。0 でない場合は、表示関数にこ
+の(中間)グリフの後にスペースを挿入して、後のグリフと重ならないように
+するよう指示する。
 
-¼¡¤Ë¤³¤Î¥¹¥Æ¡¼¥¸¤Î¥³¡¼¥É¥ª¥Õ¥»¥Ã¥È¡¢·ë¹çµ¬Â§¡¢º¸¥Ñ¥Ç¥£¥ó¥°¥Õ¥é¥°¤¬ 0 
-¤Ë½é´ü²½¤µ¤ì¤ë¡£
+</ul>
 
-¼¡¤¤¤Ç¡¢¤³¤Î¥¹¥Æ¡¼¥¸¤ÎºÇ½é¤ÎÊÑ´¹µ¬Â§¤¬¸½¹Ô¤Î¥é¥ó¤ËŬÍѤµ¤ì¤ë¡£
+@e ランが変換ステージに渡ると、そのステージに &lt;category-table&gt; エ
+レメントがあれば、ランのすべてのグリフのカテゴリが更新される。カテゴリ
+の無いグリフがあれば、ランはそのグリフの前で終る。次にこのステージのコー
+ドオフセット、結合規則、左パディングフラグのデフォルト値が 0 に初期化さ
+れる。これらの準備の後、このステージの最初の変換規則が現行のランに適用
+され、新しい(中間)グリフ列が生成される。この新しい @e 現行のランは次
+のステージかレンダリングエンジンに渡される。
 
-ºÇ¸å¤Ë¸½¹Ô¤Î¥é¥ó¤Ï¿·¤·¤¯ºî¤é¤ì¤¿¡ÊÃæ´Ö¡Ë¥°¥ê¥ÕÎó¤ËÃÖ¤­´¹¤¨¤é¤ì¤ë¡£
+@section flt-syntax 文法と意味
 
-@section flt-syntax Ê¸Ë¡¤È°ÕÌ£
+以下に、relaxngで記述された flt のスキーマを示す。(このスキーマのファイ
+ルは m17n-db-xml/FLTNEW/flt.rng である。またこのスキーマは、基本的な表
+現や項を定義する  m17n-db-xml/FLTNEW/expr.rng を継承して利用する。)
 
-m17n ¥é¥¤¥Ö¥é¥ê ¤Ï m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥¿¥° \<font, layouter,
-FLT-NAME\> ¤òÍѤ¤¤Æ FLT ¤ò¥í¡¼¥É¤¹¤ë¡£FLT ¤Î¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï°Ê²¼¤ÎÄ̤ꡧ
+m17n ライブラリ は m17n データベースからタグ \<font, layouter,
+flt-name\> を用いて flt をロードする。flt のデータのフォーマットは以下の通り:
 
 @verbatim
-FONT-LAYOUT-TABLE ::= FLT-DECLARATION ? STAGE0 STAGE *
+<?xml version="1.0" encoding="utf-8"?>
+
+<grammar 
+        datatypelibrary="http://www.w3.org/2001/xmlschema-datatypes"
+         xmlns:xi="http://www.w3.org/1999/xml/xinclude"
+        xmlns="http://relaxng.org/ns/structure/1.0"
+        ns="http://www.m17n.org/FLT">
+
+<include href="expr.rng"/>
+
+<start combine="choice">
+  <element name="font-layouter">
+    <attribute name="key0"><data type="string"/></attribute>
+    <attribute name="key1"><data type="string"/></attribute>
+    <optional><ref name="font"/></optional>
+    <optional>
+      <element name="m17n-version">
+       <data type="string"><param name="pattern">[0-9]+\.[0-9]+\.[0-9]+</param></data>
+      </element>
+    </optional>
+    <ref name="first-stage"/>
+    <zeroormore><ref name="stage"/></zeroormore>
+  </element>
+</start>
+
+<define name="first-stage">
+  <element name="first-stage">
+    <ref name="category-table"/>
+    <ref name="generator"/>
+  </element>
+</define>
+
+<define name="stage">
+  <element name="stage">
+    <optional><ref name="category-table"/></optional>
+    <ref name="generator"/>
+  </element>
+</define>
 
-FLT-DECLARATION ::= '(' 'font' 'layouter' NAME nil PROP * ')'
-NAME ::= SYMBOL
-PROP :: = VERSION | FONT
-VERSION ::= '(' 'version' MTEXT ')'
-FONT ::= '(' 'font' FONT-SPEC ')'
-FONT-SPEC ::=
-     '(' [[ FOUNDRY FAMILY
-           [ WEIGHT [ STYLE [ STRETCH [ ADSTYLE ]]]]]
-         REGISTRY ]
-        [ OTF-SPEC ] [ LANG-SPEC ] ')'
+@endverbatim
 
-STAGE0 ::= CATEGORY-TABLE GENERATOR
+属性 "key0" と "key1" は、m17n データベースから使用する FLT をみつける
+際に利用される。&lt;first-stage&gt; 要素は &lt;category-table&gt; 要素
+を持たなくてはならない。各 FLT は、&lt;first-stage&gt; の
+&lt;category-table&gt; に含まれる文字のみを処理できる。
 
-STAGE ::= CATEGORY-TABLE ? GENERATOR
+@verbatim
 
-CATEGORY-TABLE ::= '(' 'category' CATEGORY-SPEC + ')'
+<define name="category-table">
+  <element name="category-table">
+    <zeroOrMore>
+      <element name="category">
+       <attribute name="category-value">
+         <data type="string"><param name="pattern">[a-zA-Z]</param></data>
+       </attribute>
+       <choice>
+         <element name="glyph-code"><ref name="integer"/></element>
+         <group><element name="from-code"><ref name="integer"/></element>
+                <element name="to-code"><ref name="integer"/></element>
+         </group>
+       </choice>
+      </element>
+    </zeroOrMore>
+  </element>
+</define>
 
-CATEGORY-SPEC ::= '(' CODE CATEGORY ')'
-                  | '(' CODE CODE CATEGORY ')'
+@endverbatim
 
-CODE ::= INTEGER
+&lt;category-table&gt; エレメントは、各ステージが処理できる文字やグリフ
+にカテゴリを割り当てる。各 &lt;category&gt; エレメントの属性
+"category-value" の値が、エレメントの内容で指定される文字/グリフのカテ
+ゴリである。内容が&lt;glyph-code&lt; エレメントである場合は、それがカテ
+ゴリを割り当てられる文字/グリフのコードである。内容が
+&lt;from-code&lt; と &lt;to-code&lt; の組であるばあいには、それらの間に
+含まれるコードを持つ文字/グリフにカテゴリを割り当てる。
 
-CATEGORY ::= INTEGER
+@verbatim
+<define name="generator">
+  <element name="generator">
+    <ref name="funcall"/>
+    <zeroOrMore>
+      <ref name="defmacro"/>
+    </zeroOrMore>
+  </element>
+</define>
 @endverbatim
 
-@c CATEGORY-SPEC ¤ÎÄêµÁÃæ¤Ç¡¢ @c CODE ¤Ï¥°¥ê¥Õ¥³¡¼¥É @c CATEGORY ¤ÏÂç
-ʸ»ú¤¢¤ë¤¤¤Ï¾®Ê¸»ú¤Î ASCII code¡¢¤¹¤Ê¤ï¤Á 'A', ... 'Z', 'a', .. 'z' ¤Î
-¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
+&lt;generator&gt; エレメントは、そのステージに渡された文字列または中間
+的なグリフコード列に施される変換を指定する。変換の記述にマクロが含まれ
+る場合には、同じ &lt;generator&gt; 内で定義されていなければならない。マ
+クロは対応する変換の列に展開される。
 
-@c CATEGORY-SPEC ¤ÎºÇ½é¤Î·Á¼°¤Ï¡¢@c CATEGORY ¤ò¥³¡¼¥É @c CODE ¤ò»ý¤Ä¥°
-¥ê¥Õ¤Ë³ä¤êÅö¤Æ¡¢Æó¤ÄÌܤηÁ¼°¤Ï @c CATEGORY ¤òÆó¤Ä¤Î @c CODE ¤Î´Ö¤Î¥³¡¼
-¥É¤ò»ý¤Ä¥°¥ê¥Õ¤Ë³ä¤êÅö¤Æ¤ë¡£
+@section flt-action FLT の変換
 
 @verbatim
-GENERATOR ::= '(' 'generator' RULE MACRO-DEF * ')'
-
-RULE ::= REGEXP-BLOCK | MATCH-BLOCK | SUBST-BLOCK | COND-BLOCK
-         FONT-FACILITY-BLOCK | DIRECT-CODE | COMBINING-SPEC | OTF-SPEC
-         | PREDEFINED-RULE | MACRO-NAME
-
-MACOR-DEF ::= '(' MACRO-NAME RULE + ')'
+<define name="funcall" combine="choice">
+  <choice>
 @endverbatim
 
-³Æ @c RULE ¤Ï¡¢¾ÃÈñ¤¹¤ë¥°¥ê¥Õ¤ÈÀ¸À®¤¹¤ë¥°¥ê¥Õ¤ò»ØÄꤹ¤ë¡£¡Ö¾ÃÈñ¤µ¤ì¤¿¡×
-¥°¥ê¥Õ¤Ï¸½¹Ô¤Î¥é¥ó¤«¤é¼è¤ê½ü¤«¤ì¤ë¡£¥ë¡¼¥ë¤Ï¾õ¶·¤Ë¤è¤Ã¤Æ¤Ï¼ºÇÔ¤¹¤ë¡£ÌÀ
-¼¨Åª¤Ë¼ºÇԤȽñ¤«¤ì¤Æ¤¤¤ë¾ì¹ç¤ò¤Î¤¾¤­¡¢À®¸ù¤È¤ß¤Ê¤¹¡£
+この節では個々の変換の詳細を説明する。"expr.rng" で与えられているものに
+加えて、いくつかの関数が文字/グリフの変換専用に定義されている。
+
+各変換においては、グリフを消費したり生成したりすることがある。「消費さ
+れた」グリフは現行のランから取り除かれる。ルールは状況によっては失敗す
+る。明示的に失敗と書かれている場合をのぞき、成功とみなす。
 
 @verbatim
-DIRECT-CODE ::= INTEGER
+    <element name="direct-code">
+      <attribute name="glyph-code"><ref name="glyph-code"/></attribute>
+    </element>
 @endverbatim
 
-¤³¤Î¥ë¡¼¥ë¤Ï¥°¥ê¥Õ¤ò¾ÃÈñ¤»¤º¡¢°Ê²¼¤Î°À­¤ò»ý¤Ä¥°¥ê¥Õ¤òÀ¸À®¤¹¤ë¡£
+&lt;direct-code&gt; エレメントはグリフを消費せず、以下の特徴を持つグリ
+フを生成させる。
 
 <ul>
-<li> ¥³¡¼¥É : @c INTEGER ¤Ë¥Ç¥Õ¥©¥ë¥È¤Î¥³¡¼¥É¥ª¥Õ¥»¥Ã¥È¤ò­¤·¤¿¤â¤Î
-<li> ·ë¹çµ¬Â§ : ¥Ç¥Õ¥©¥ë¥ÈÃÍ
-<li> º¸¥Ñ¥Ç¥¤¥ó¥°¥Õ¥é¥° : ¥Ç¥Õ¥©¥ë¥ÈÃÍ
-<li> ±¦¥Ñ¥Ç¥¤¥ó¥°¥Õ¥é¥° : 0
+<li> コード : 属性 "glyph-code" の値にデフォルトのコードオフセットを足したもの
+<li> 結合規則 : デフォルト値
+<li> 左パデイングフラグ : デフォルト値
+<li> 右パデイングフラグ : 0
 </ul>
 
-¥°¥ê¥ÕÀ¸À®¸å¡¢¥Ç¥Õ¥©¥ë¥È¤Î¥³¡¼¥É¥ª¥Õ¥»¥Ã¥È¡¢·ë¹çµ¬Â§, º¸¥Ñ¥Ç¥£¥ó¥°¥Õ¥é
-¥° ¤Ï¤¹¤Ù¤Æ 0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¤ë¡£
+グリフ生成後、デフォルトのコードオフセット、結合規則, 左パディングフラ
+グ はすべて 0 に戻される。
 
 @verbatim
-PREDEFINED-RULE ::= '=' | '*' | '<' | '>' | '|' | '[' | ']'
+    <element name="copy-glyph"><empty/></element>
 @endverbatim
 
-¤³¤ì¤é¤Ï°Ê²¼¤Î¤è¤¦¤ËƯ¤¯¡£
+&lt;copy-glyph&gt; エレメントは、現行のランの最初のグリフを消費し、同じ
+グリフを生成する。現行のランが空ならば失敗する。
 
-<ul>
-<li> @c =
-
-¸½¹Ô¤Î¥é¥ó¤ÎºÇ½é¤Î¥°¥ê¥Õ¤ò¾ÃÈñ¤·¡¢Æ±¤¸¥°¥ê¥Õ¤òÀ¸À®¤¹¤ë¡£¸½¹Ô¤Î¥é¥ó¤¬¶õ
-¤Ê¤é¤Ð¼ºÇÔ¤¹¤ë¡£
-
-<li> @c *
-
-Á°¤Î¥ë¡¼¥ë¤ò·«¤êÊÖ¤·¼Â¹Ô¤¹¤ë¡£Á°¤Î¥ë¡¼¥ë¤¬¼ºÇÔ¤¹¤ì¤Ð¡¢²¿¤â¤»¤º¼ºÇÔ¤¹¤ë¡£
+@verbatim
+    <element name="repeat"><empty/></element>
+@endverbatim
 
-<li> @c @<
+&lt;repeat&gt; エレメントは、前のルールを繰り返し実行する。前のルールが
+失敗すれば、何もせず失敗する。
 
-½ñµ­ÁÇ¥¯¥é¥¹¥¿¤Î»Ï¤á¤ò¼¨¤¹¡£
+@verbatim
+    <element name="start-cluster"><empty/></element>
+@endverbatim
 
-<li> @c @>
+&lt;start-cluster&gt; エレメントは、書記素クラスタの始めを表す。
 
-½ñµ­ÁÇ¥¯¥é¥¹¥¿¤Î½ª¤ê¤ò¼¨¤¹¡£
+@verbatim
+    <element name="end-cluster"><empty/></element>
+@endverbatim
 
-<li> @c @[
+&lt;end-cluster&gt; エレメントは、書記素クラスタの終わりを表す。
 
-¤³¤Îµ¬Â§¤Ï¥Ç¥Õ¥©¥ë¥È¤Îº¸¥Ñ¥Ç¥£¥ó¥°¥Õ¥é¥°¤ò 1 ¤Ë¤¹¤ë¡£¥°¥ê¥Õ¤Î¾ÃÈñ¤äÀ¸
-À®¤Ï¤·¤Ê¤¤¡£
+@verbatim
+    <element name="left-padding-flag"><empty/></element>
+@endverbatim
 
-<li> @c @]
+&lt;left-padding-flag&gt; エレメントは、デフォルトの左パディングフラグ
+を 1 に設定する。グリフの消費や生成は行わない。
 
-¤³¤Îµ¬Â§¤ÏºÇ¶áÀ¸À®¤µ¤ì¤¿¥°¥ê¥Õ¤Î±¦¥Ñ¥Ç¥£¥ó¥°¥Õ¥é¥°¤ò 1 ¤Ë¤¹¤ë¡£¥°¥ê¥Õ
-¤Î¾ÃÈñ¤äÀ¸À®¤Ï¤·¤Ê¤¤¡£
+@verbatim
+    <element name="right-padding-flag"><empty/></element>
+@endverbatim
 
-<li> @c |
+&lt;right-padding-flag&gt; エレメントは、最近生成されたグリフの右パディ
+ングフラグを 1 に設定する。グリフの消費や生成は行わない。
 
-¥°¥ê¥Õ¤ò¾ÃÈñ¤»¤º¡¢¥«¥Æ¥´¥ê¤¬ ' ' ¤Ç¾¤Î°À­¤¬ 0 ¤Ç¤¢¤ëÆÃÊ̤ʥ°¥ê¥Õ¤òÀ¸
-À®¤¹¤ë¡£¤³¤Îµ¬Â§¤À¤±¤¬¤³¤ÎÆÃÊ̤ʥ°¥ê¥Õ¤òÀ¸À®¤¹¤ë¡£
+@verbatim
+    <element name="separator"><empty/></element>
+@endverbatim
 
-</ul>
+&lt;separator&gt; エレメントは、グリフを消費せず、カテゴリが ' ' で他の
+属性が0 である特別なグリフを生成する。このエレメントだけがこの特別なグ
+リフを生成できる。
 
 @verbatim
-REGEXP-BLOCK ::= '(' REGEXP RULE * ')'
-
-REGEXP ::= MTEXT
+    <element name="regexp-block">
+      <attribute name="regexp"/>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>
 @endverbatim
 
-@c MTEXT ¤Ï¸½¹Ô¤Î¥é¥ó¤Î¥«¥Æ¥´¥êÎó¤Ë¹çÃפ¹¤Ù¤­Àµµ¬É½¸½¤Ç¤¢¤ë¡£¹çÃפ¹¤ì
-¤Ð¡¢¤³¤Îµ¬Â§¤Ï°ì»þŪ¤Ë¸½¹Ô¤Î¥é¥ó¤ò¹çÃפ·¤¿Éôʬ¤À¤±¤Ë¸ÂÄꤷ¤¿¾å¤Ç¡¢@c
-RULE ¤ò¼Â¹Ô¤¹¤ë¡£¹çÃפ·¤¿Éôʬ¤Ï¤³¤Îµ¬Â§¤Ë¤è¤Ã¤Æ¾ÃÈñ¤µ¤ì¤ë¡£
+属性 "regexp" の値は正規表現であり、このエレメントはまずこの正規表現が
+現行のランのカテゴリと合致するかを調べる。合致すれば、
+&lt;regexp-block&gt; エレメントは現行のランを一時的に合致した部分だけに
+限定した上で、指定のアクションを実行させる。合致した部分は消費される。
 
-³ç¸Ì¤Î¤Ä¤¤¤¿Éôʬɽ¸½¤¬¤¢¤ì¤Ð¡¢@c RULE ¤ÎÃæ¤Ë½Ð¸½¤¹¤ë¤«¤â¤·¤ì¤Ê¤¤ @c
-MATCH-BLOCK ¤Ë¤è¤Ã¤Æ»ÈÍѤ¹¤ë¤¿¤á¤Ëµ­Ï¿¤µ¤ì¤ë¡£
+正規表現中に括弧のついた部分表現があれば、ランのうち対応する部分を記録
+する。この &lt;regexp-block&gt; エレメント中に &lt;match-block&gt; エレ
+メントがあれば、この記録が利用される。
 
-¹çÃפ¹¤ëÉôʬ¤¬Ìµ¤±¤ì¤Ð¡¢¤³¤Îµ¬Â§¤Ï¼ºÇÔ¤¹¤ë¡£
+合致する部分が無ければ、&lt;regexp-block&gt; は失敗する。
 
 @verbatim
-MATCH-BLOCK ::= '(' MATCH-INDEX RULE * ')'
 
-MATCH-INDEX ::= INTEGER
+    <element name="match-block">
+      <attribute name="match-index"><data type="integer"/></attribute>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>      
+
 @endverbatim
 
-@c MATCH-INDEX ¤ÏľÁ°¤Î @c REGEXP-BLOCK ¤Ë¤è¤Ã¤Æµ­Ï¿¤µ¤ì¤¿Éôʬɽ¸½¤ò»Ø
-Äꤹ¤ëÀ°¿ô¤Ç¤¢¤ë¡£¤³¤Î¤è¤¦¤ÊÉôʬɽ¸½¤¬¤¢¤ì¤Ð¡¢¤³¤Îµ¬Â§¤Ï°ì»þŪ¤Ë¸½¹Ô¤Î
-¥é¥ó¤ò¹çÃפ·¤¿Éôʬɽ¸½¤À¤±¤Ë¸ÂÄꤷ¤¿¾å¤Ç¡¢@c RULE ¤ò¼Â¹Ô¤¹¤ë¡£¹çÃפ·¤¿
-Éôʬ¤Ï¤³¤Îµ¬Â§¤Ë¤è¤Ã¤Æ¾ÃÈñ¤µ¤ì¤ë¡£
+属性 "match-index" の値は、正規表現の括弧つき部分表現を指定する整数であ
+る。&lt;match-block&gt; エレメントは、直前の &lt;regexp-block&gt; エレ
+メントがその部分表現に対応するランの一部を記録していれば、一時的に現行
+のランを記録されていた部分だけに限定した上で、指定のアクションを実行す
+る。記録されていた部分は消費される。
 
-¹çÃפ¹¤ëÉôʬ¤¬Ìµ¤±¤ì¤Ð¡¢¤³¤Îµ¬Â§¤Ï¼ºÇÔ¤¹¤ë¡£
+対応する部分が記録されていなければ、&lt;match-block&gt; は失敗する。
 
-¤³¤Îµ¬Â§¤¬¥¹¥Æ¡¼¥¸¤ÎºÇ½é¤Îµ¬Â§¤Ç¤¢¤ë¾ì¹ç¤Ï¡¢@c MATCH-INDEX ¤Ï 0 ¤Ç¤Ê¤¯
-¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤³¤Î¾ì¹ç¥é¥óÁ´ÂΤ˹çÃפ¹¤ë¤³¤È¤Ë¤Ê¤ë¡£
+このアクションがステージの最初、すなわち先行する &lt;regexp-block&gt;
+無しに現れる場合には、属性 "match-index" の値は 0 でなくてはならない。
+この場合、指定された部分表現に対応するランの一部とはラン全体である。
 
 @verbatim
-SUBST-BLOCK ::= '(' SOURCE-PATTERN RULE * ')'
-
-SOURCE-PATTERN ::= '(' CODE + ')'
-                   | (' 'range' CODE CODE ')'
+    <element name="subst-block">
+      <choice>
+       <element name="source-pattern">
+         <oneOrMore><ref name="integer"/></oneOrMore>
+       </element>
+       <element name="code-range">
+         <attribute name="from-code"><ref name="integer"/></attribute>
+         <attribute name="to-code"><ref name="integer"/></attribute>
+       </element>
+      </choice>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>
 @endverbatim
 
-¸½¹Ô¤Î¥é¥ó¤Î¥³¡¼¥ÉÎ󤬠@c SOURCE-PATTERN ¤È¹çÃפ¹¤ì¤Ð¡¢¤³¤Îµ¬Â§¤Ï°ì»þ
-Ū¤Ë¸½¹Ô¤Î¥é¥ó¤ò¹çÃפ·¤¿Éôʬ¤À¤±¤Ë¸ÂÄꤷ¤¿¾å¤Ç¡¢@c RULE ¤ò¼Â¹Ô¤¹¤ë¡£
-¹çÃפ·¤¿Éôʬ¤Ï¾ÃÈñ¤µ¤ì¤ë¡£
+&lt;subst-block&gt; エレメントは、現行のランのコード列が
+&lt;source-pattern&gt; エレメントか &lt;code-range&gt; エレメントと合致
+した場合、一時的に現行のランを合致した部分だけに限定した上で指定の変換
+を実行する。合致した部分は消費される。
 
-@c SOURCE-PATTERN ¤ÎºÇ½é¤Î·Á¼°¤Ï¡¢¹çÃפ¹¤ë¥°¥ê¥Õ¥³¡¼¥É¤ÎÎó¤ò»ØÄꤹ¤ë¡£
-¤³¤Î¾ì¹ç¡¢¤³¤Îµ¬Â§¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥³¡¼¥É¥ª¥Õ¥»¥Ã¥È¤ò 0 ¤Ë¥ê¥»¥Ã¥È¤¹¤ë¡£
-
-Æó¤Ä¤á¤Î·Á¼°¤Ï¡¢¥³¡¼¥ÉÎó¤ÎºÇ½é¤Î¥°¥ê¥Õ¥³¡¼¥É¤ÎÈϰϤò»ØÄꤹ¤ë¡£¤³¤Î¾ì¹ç¡¢
-¤³¤Îµ¬Â§¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥³¡¼¥É¥ª¥Õ¥»¥Ã¥È¤òºÇ½é¤Î¥°¥ê¥Õ¥³¡¼¥É¤«¤éÈϰϤò»Ø
-Äꤹ¤ë½é¤á¤Î @c CODE ¤ò°ú¤¤¤¿¤â¤Î¤ËÀßÄꤹ¤ë¡£
-
-¹çÃפ¹¤ëÉôʬ¤¬Ìµ¤±¤ì¤Ð¡¢¤³¤Îµ¬Â§¤Ï¼ºÇÔ¤¹¤ë¡£
+&lt;source-pattern&gt; エレメントの内容は合致すべき文字/グリフコードの
+列である。この場合、デフォルトのコードオフセットは 0 にリセットされる。
+&lt;code-range&gt; エレメントは、文字/コード列の最初のグリフコードの範
+囲を指定する。この場合デフォルトのコードオフセットは、最初のグリフコー
+ドから属性"from-code" の値をを引いたものにセットされる。
 
+合致しなければ、&lt;subst-block&gt; は失敗する。
 
 @verbatim
-FONT-FACILITY-BLOCK ::= '(' FONT-FACILITY RULE * ')'
-FONT-FACILITY = '(' 'font-facility' CODE * ')'
-               | '(' 'font-facility' FONT-SPEC ')'
+    <element name="cond-block">
+      <oneOrMore><ref name="funcall"/></oneOrMore>
+    </element>
 @endverbatim
 
-¸½ºß¤Î¥Õ¥©¥ó¥È¤¬ @c CODE ¤Î¥°¥ê¥Õ¤ò»ý¤Ã¤Æ¤¤¤ë¤«¡¢@c FONT-SPEC ¤È¹çÃפ¹
-¤ì¤Ð¡¢¤³¤Îµ¬Â§¤ÏÀ®¸ù¤·¡¢@c RULE ¤ò¼Â¹Ô¤¹¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢¤³¤Îµ¬Â§¤Ï
-¼ºÇÔ¤¹¤ë¡£
+&lt;cond-block&gt; エレメントは、指定の変換を順に、どれかが成功するまで
+実行しようとする。どれも成功しなければ、この規則は失敗する。そうでなけ
+れば成功である。
 
 @verbatim
-COND-BLOCK ::= '(' 'cond' RULE + ')'
+    <element name="font-facility-block">
+      <choice>
+       <ref name="font"/>
+       <element name="characters">
+         <oneOrMore><ref name="integer"/></oneOrMore>
+       </element>
+      </choice>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>
 @endverbatim
 
-¤³¤Îµ¬Â§¤Ï @c RULE ¤ò½ç¤Ë¡¢¤É¤ì¤«¤¬À®¸ù¤¹¤ë¤Þ¤Ç¼Â¹Ô¤¹¤ë¡£¤É¤Î¥ë¡¼¥ë¤â
-À®¸ù¤·¤Ê¤±¤ì¤Ð¡¢¤³¤Îµ¬Â§¤Ï¼ºÇÔ¤¹¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÀ®¸ù¤Ç¤¢¤ë¡£
+3行目の &lt;font&gt; エレメントはフォントの仕様を与える。現在のフォン
+トがこの仕様を満たしているか、&lt;characters&gt; エレメント中のリストで
+与えられたコードの文字グリフを持っていれば、
+&lt;font-facility-block&gt; エレメントは成功し、指定の変換を実行する。
+そうでなければ、&lt;font-facility-block&gt; は失敗する。
+
+&lt;font&gt; エレメントは以下のように定義されている。      
 
 @verbatim
-OTF-SPEC ::= SYMBOL
+<define name="font">
+  <element name="font">
+    <optional>
+      <optional>
+       <attribute name="foundry"><data type="token"/></attribute>
+       <attribute name="family"><data type="token"/></attribute>
+       <optional>
+         <attribute name="weight"><data type="token"/></attribute>
+         <optional>
+           <attribute name="style"><data type="token"/></attribute>
+           <optional>
+             <attribute name="stretch"><data type="token"/></attribute>
+             <optional>
+               <attribute name="adstyle"><data type="token"/></attribute>
+             </optional>
+           </optional>
+         </optional>
+       </optional>
+      </optional>
+      <attribute name="registry"><data type="token"/></attribute>
+    </optional>
+    <optional>
+      <ref name="otf-specification"/>
+    </optional>
+    <zeroOrMore>
+      <element name="lang-specification">
+       <data type="token"><param name="minLength">2</param><param name="maxLength">3</param></data>
+      </element>
+    </zeroOrMore>
+  </element>
+</define>
 @endverbatim
 
-@c OTF-SPEC ¤Ï¡¢OTF ¥É¥é¥¤¥Ð¤Ø¤Î»Ø¼¨¤ò»ØÄꤹ¤ë̾Á°¤ò»ý¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
-̾Á°¤Ï°Ê²¼¤Îʸˡ¤Ë½¾¤¦¡£
+属性 "foundry" の値は、adobe, misc 等フォントの開発元を表すシンボルで
+ある。
 
-@verbatim
-  OTF-SPEC-NAME ::= ':otf' SCRIPT LANGSYS ? GSUB-FEATURES ? GPOS-FEATURES ?
+属性 "family" の値は、times, helvetica 等フォントのファミリを表すシン
+ボルである。
 
-  SCRIPT ::= SYMBOL
+属性 "weight" の値は、normal, bold 等フォントの太さを表すシンボルであ
+る。
 
-  LANGSYS ::= '/' SYMBOL
+属性 "style" の値は、normal, italic 等フォントのスラントを表すシンボル
+である。
 
-  GSUB-FEATURES ::= '=' FEATURE-LIST ?
+属性 "stretch" の値は、normal, semicondensed 等フォントの文字幅を表すシ
+ンボルである。
 
-  GPOS-FEATURES ::= '+' FEATURE-LIST ?
+属性 "adstyle" の値は、serif, sans-serif 等フォントの抽象的フォントファ
+ミリを表すシンボルである。
 
-  FEATURE-LIST ::= ( SYMBOL ',' ) * [ SYMBOL | '*' ]
+属性 "registry" の値は、iso10646-1, iso8895-1 等フォントのレジストリを
+表すシンボルである。
 
+@verbatim
+    <ref name="otf-specification"/>
 @endverbatim
 
-³Æ @c SYMBOL ¤Ï OpenType specification Ãæ¤Ç¤Î¥¿¥°Ì¾¤ò»ØÄꤹ¤ë¡£
+&lt;otf-specification&gt; は OTF ドライバへの指示を表し、以下のように定
+義される。
 
-@c SCRIPT ¤Ë¤Ä¤¤¤Æ¤Ï¡¢@c SYMBOL ¤Ï¥¹¥¯¥ê¥×¥È¥¿¥°Ì¾¤òɽ¤¹¡£Devanagari 
-¤Ï deva ¤Ê¤É¡£)
+@verbatim
+<define name="otf-specification">
+  <element name="otf">
+    <attribute name="script"/>
+    <optional><attribute name="langsys"/></optional>
+    <optional>
+      <element name="gsub-features">
+       <choice>
+         <element name="positive-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+         <element name="negative-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+       </choice>
+      </element>
+    </optional>
+    <optional>
+      <element name="gpos-features">
+       <choice>
+         <element name="positive-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+         <element name="negative-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+       </choice>
+      </element>
+    </optional>
+  </element>
+</define>
 
-@c LANGSYS ¤Î¾ì¹ç¤Ï¡¢@c SYMBOL ¤Ï¸À¸ì¥·¥¹¥Æ¥à¥¿¥°Ì¾¤ò»ØÄꤹ¤ë¡£@c
-LANGSYS ¤¬¾Êά¤µ¤ì¤ì¤Ð¡¢¥Ç¥Õ¥©¥ë¥È¤Î¸À¸ì¥·¥¹¥Æ¥à¥Æ¡¼¥Ö¥ë¤¬»ÈÍѤµ¤ì¤ë¡£
+@endverbatim
 
-@c GSUB-FEATURES ¤Ç¤Ï¡¢ @c FEATURE LIST Ãæ¤Î³Æ @c SYMBOL ¤Ï Å¬ÍѤ¹¤ë 
-GSUB feature ¥¿¥°Ì¾¤ò»ØÄꤹ¤ë¡£'*' ¤Ï»Ä¤ê¤¹¤Ù¤Æ¤Î feature ¤ò»ØÄꤹ¤ë¤¿
-¤á¤ËºÇ¸å¤ÎÍ×ÁǤȤ·¤ÆÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ @c SYMBOL ¤ÎÁ°¤Ë'~' ¤¬¤Ä¤¤¤Æ
-¤ª¤ê¡¢ºÇ¸å¤ÎÍ×ÁǤ¬ '*' ¤Ê¤é¤Ð¡¢@c SYMBOL ¤ÏŬÍѤ¹¤ëfeature ¤«¤é½ü¤«¤ì
-¤ë¡£@c SYMBOL ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢GSUB feature ¤ÏŬÍѤµ¤ì¤Ê¤¤¡£@c
-GSUB-FEATURES ¼«ÂΤ¬¾Êά¤µ¤ì¤ì¤Ð¤¹¤Ù¤Æ¤Î GSUB feature ¤¬Å¬ÍѤµ¤ì¤ë¡£
+属性 "script", "langsys" の値と"feature" 要素の内容は OpenType
+specification で定義されたタグ名でなければならない。
 
-@c GPOS-FEATURES ¤Î»ØÄê¤Ï @c GSUB-FEATURES ¤Î¾ì¹ç¤ÈƱÍͤǤ¢¤ë¡£
+属性 "script" はスクリプトタグ名を表す。(Devanagari は deva など。)
 
-Á´¤Æ¤Î¥¿¥°Ì¾¤Ï ASCII ¤Îɽ¼¨²Äǽʸ»ú£´¤Ä¤«¤é¤Ê¤ë¤³¤È¡£
+属性 "langsys" の値は言語システムタグ名を表す。この属性がが省略されてい
+れば、デフォルトの言語システムテーブルが使用される。
 
-OpenType ¤Î»ØÄêÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï¼¡¤Î¥Ú¡¼¥¸¤ò»²¾È¤Î¤³¤È¡£\n
-    <http://www.microsoft.com/typography/otspec/default.htm>
+&lt;gsub-features&gt; エレメントは &lt;positive-list&gt; か
+&lt;negative-list&gt; のどちらかのリストを持つ。リスト中の
+&lt;feature&gt; エレメントは、適用するべき(でない) GSUB Feature
+feature タグ名を指定する。&lt;positive-list&gt; エレメントが
+&lt;feature&gt; エレメントをひとつも持たなければ、GSUB feature は適用さ
+れない。&lt;negative-list&gt; 要素が &lt;feature&gt; エレメントをひとつ
+も持たなければ、すべての GSUB featureが適用される。
 
-@verbatim
-COMBINING ::= SYMBOL
-@endverbatim
+&lt;gpos-features&gt; エレメントは &lt;positive-list&gt; か
+&lt;negative-list&gt; のどちらかのリストを持つ。リスト中の
+&lt;feature&gt; エレメントは、適用するべき(でない) GPOS Feature
+feature タグ名を指定する。&lt;positive-list&gt; エレメントが
+&lt;feature&gt; エレメントをひとつも持たなければ、GPOS feature は適用さ
+れない。&lt;negative-list&gt; 要素が &lt;feature&gt; エレメントをひとつ
+も持たなければ、すべての GPOS featureが適用される。
 
-@c COMBINING ¤Ï¡¢ ¼¡¤Î¥°¥ê¥Õ¤òÁ°¤Î¤â¤Î¤È¤É¤¦·ë¹ç¤¹¤ë¤«¤Î»Ø¼¨¤ò̾Á°¤È¤·
-¤Æ»ý¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£¤³¤Î¥ë¡¼¥ë¤Ï¥Ç¥Õ¥©¥ë¥È¤Î·ë¹çµ¬Â§¤ò¥·¥ó¥Ü¥ë̾¸ÇÍ­
-¤ÎÀ°¿ô¥³¡¼¥É¤Ë¥»¥Ã¥È¤¹¤ë¡£Ì¾Á°¤Ï°Ê²¼¤Îʸˡ¤Ë½¾¤¦¡£
-following syntax.
+&lt;otf-specification&gt; エレメントが &lt;font-facility-block" 中に現
+れる場合、&lt;positive-list&gt; エレメントや &lt;negative-list&gt; エレ
+メントは、フォントが持つべき(でない) feature を指定する。
 
-@verbatim
-  COMBINING-NAME ::= VPOS HPOS OFFSET VPOS HPOS
+OpenType の指定方法については 
+&lt;http://www.microsoft.com/typography/otspec/default.htmglt;
+を参照のこと。
 
-  VPOS ::= 't' | 'c' | 'b' | 'B'
+@verbatim
+    <element name="combining-specification">
+      <attribute name="v-pos1">
+       <choice><value>t</value><value>c</value><value>b</value><value>B</value></choice>
+      </attribute>
+      <attribute name="v-pos2">
+       <choice><value>t</value><value>c</value><value>b</value><value>B</value></choice>
+      </attribute>
+      <attribute name="h-pos1">
+       <choice><value>l</value><value>c</value><value>r</value></choice>
+      </attribute>
+      <attribute name="h-pos2">
+       <choice><value>l</value><value>c</value><value>r</value></choice>
+      </attribute>
+      <optional>
+           <attribute name="x-direction"><choice><value>right</value><value>left</value></choice></attribute>
+           <optional><attribute name="x-amount"><data type="integer"/></attribute></optional>
+      </optional>
+      <optional>
+           <attribute name="y-direction"><choice><value>up</value><value>down</value></choice></attribute>
+           <optional><attribute name="y-amount"><data type="integer"/></attribute></optional>
+      </optional>
+    </element>
+@endverbatim
 
-  HPOS ::= 'l' | 'c' | 'r'
+&lt;combining-specification&gt; エレメントは次のグリフを前のグリフとど
+のように結合させるかを指定する。またデフォルトの結合規則を指定する。
 
-  OFFSET :: = '.' | XOFF | YOFF XOFF ?
+このエレメントは、グリフ毎に1つの参照点を定め、その参照点同士がグリフ
+が描画される際にどのような相対位置にあるかを指定する。
 
-  XOFF ::= ('<' | '>') INTEGER ?
+属性 "v-pos1", "v-pos2" はそれぞれ前のグリフと次のグリフの参照点の垂直
+位置を示す。この属性が取り得る値は、"t", "c", "B", "b" であり、それぞれ
+グリフの表示領域の上端、中心、ベースライン、下端を示す。
 
-  YOFF ::= ('+' | '-') INTEGER ?
-@endverbatim
+属性 "h-pos1", "h-pos2" はそれぞれ前のグリフと次のグリフの参照点の水平
+位置を示す。この属性が取り得る値は、"l", "c", "r" であり、それぞれグリ
+フの表示領域の左端、中心、右端を示す。
 
-@c VPOS ¤È @c HPOS ¤Ï¼¡¤Î¤è¤¦¤Ë¿âľ¡¢¿åÊ¿°ÌÃÖ¤ò»ØÄꤹ¤ë¡£
+次の図に可能な参照点を示す。
 
 @verbatim
-                                POINT VPOS HPOS
-                                ----- ---- ----
-    0----1----2 <---- top       0     t    l
-    |         |                 1     t    c
-    |         |                 2     t    r
-    |         |                 3     B    l
-    9   10   11 <---- center    4     B    c
-    |         |                 5     B    r
-  --3----4----5-- <-- baseline  6     b    l
-    |         |                 7     b    c
-    6----7----8 <---- bottom    8     b    r
-                                9     c    l
-    |    |    |                10     c    c
-  left center right            11     c    r
+                                      v-pos  h-pos
+                                ----- ----   ----
+    0----1----2 <---- top       0     t      l
+    |         |                 1     t      c
+    |         |                 2     t      r
+    |         |                 3     B      l
+    9   10   11 <---- center    4     B      c
+    |         |                 5     B      r
+  --3----4----5-- <-- baseline  6     b      l
+    |         |                 7     b      c
+    6----7----8 <---- bottom    8     b      r
+                                9     c      l
+    |    |    |                10     c      c
+  left center right            11     c      r
 @endverbatim
 
-º¸¤Î¿Þ¤Ï¤¢¤ë¥°¥ê¥Õ¤Î 12 ¤Î»²¾ÈÅÀ¤ò 0 ¤«¤é 11 ¤Þ¤Ç¤Î¿ô»ú¤Ç¼¨¤·¤Æ¤¤¤ë¡£
-»Í³Ñ·Á 0-6-8-2 ¤Ï¥°¥ê¥Õ¤Îɽ¼¨Îΰè¤Ç¤¢¤ê¡¢°ÌÃÖ3, 4, 5 ¤Ï¥Ù¡¼¥¹¥é¥¤¥ó¾å
-¤Ë¤¢¤ë¡£ 9 ¤È 11 ¤Ï¤½¤ì¤¾¤ìÀþ0-6 ¤È 2-8 ¤ÎÃæ¿´¤Ç¤¢¤ë¡£1, 10, 4, 7 ¤Ï¤½
-¤ì¤¾¤ìÀþ1-2, 3-5, 9-11, 6-8 ¤ÎÃæ¿´¤Ç¤¢¤ë¡£
-
-±¦¤Îɽ¤Ï¡¢³Æ»²¾ÈÅÀ¤¬@c VPOS ¤È @c HPOS ¤ÎÁȹ礻¤Ë¤è¤Ã¤Æ¤É¤Î¤è¤¦¤Ë»ØÄê
-¤µ¤ì¤ë¤«¤ò¼¨¤·¤Æ¤¤¤ë¡£
-
-@c COMBINING-NAME ¤ÎÄêµÁÃæ¤ÎºÇ½é¤Î @c VPOS ¤È @c HPOS ¤Ï¡¢Á°¤Î¥°¥ê¥Õ¤Î
-»²¾ÈÅÀ¤ò¡¢Æó¤ÄÌܤΠ@c VPOS ¤È @c HPOS ¤Ï¼¡¤Î¥°¥ê¥Õ¤Î»²¾ÈÅÀ¤ò»ØÄꤹ¤ë¡£
-¼¡¤Î¥°¥ê¥Õ¤Ï¤³¤ÎÆó¸Ä¤Î»²¾ÈÅÀ¤¬½Å¤Ê¤ë¤è¤¦¤ËÉÁ¤«¤ì¤ë¡£
 
-@c OFFSET ¤Ï½Å¤Ê¤ê¤«Â¾¤Î¾ÜºÙ¤ò»ØÄꤹ¤ë¡£'.' ¤Ç¤¢¤ì¤Ð¡¢»²¾ÈÅÀÆó¤Ä¤ÏƱ¤¸
-°ÌÃ֤ˤ¢¤ë¡£
+左側の図はあるグリフの 12 の参照点を 0 から 11 までの数字で示している。
+四角形 0-6-8-2 はグリフの表示領域であり、位置3, 4, 5 はベースライン上に
+ある。 9, 10, 11 は表示領域の高さを二分する位置にあり、1, 10, 4, 7 は表
+示領域の幅を二分する位置にある。
 
-@c XOFF ¤Ï¡¢¼¡¤Î¥°¥ê¥Õ¤Î»²¾ÈÅÀ¤Î X ºÂɸ¤ò¡¢Á°¤Î»²¾ÈÅÀ¤«¤é¤É¤ì¤Û¤É±¦ 
-('<') ¤¢¤ë¤¤¤Ïº¸ ('>') ¤Ø¤º¤é¤¹¤«»ØÄꤹ¤ë¡£
+各参照点の属性 "v-pos1" と "h-pos1" (あるいは "v-pos2" と "h-pos2")の
+値を右側の表に示す。
 
-@c YOFF ¤Ï¡¢¼¡¤Î¥°¥ê¥Õ¤Î»²¾ÈÅÀ¤Î Y ºÂɸ¤ò¡¢Á°¤Î»²¾ÈÅÀ¤«¤é¤É¤ì¤Û¤É¾å 
-('+') ¤¢¤ë¤¤¤Ï²¼ ('-') ¤Ø¤º¤é¤¹¤«»ØÄꤹ¤ë¡£
+属性 "x-direction", "x-amount", "y-direction", "y-amount" は参照点の相
+対位置を指定する。"x-direction" も "y-direction" も省略されていれば、2
+つグリフの参照点は同じ位置に重なっている。
 
-¤É¤Á¤é¤Î¾ì¹ç¤Ë¤â¡¢@c INTEGER ¤Ï¥Õ¥©¥ó¥È¥µ¥¤¥º¤Î²¿¡ó¤º¤é¤¹¤«¤ò¼¨¤¹ÃͤÇ
-¤¢¤ë¡£¤¹¤Ê¤ï¤Á¡¢¤â¤· @c INTEGER ¤¬ 10 ¤Ê¤é¤Ð¥Õ¥©¥ó¥È¥µ¥¤¥º¤Î10% (1/10) 
-¤º¤é¤¹¤³¤È¤Ë¤Ê¤ë¡£ @c INTEGER ¤¬¾Êά¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢5 ¤¬»ØÄꤵ¤ì¤¿¤â¤Î
-¤È¤¹¤ë¡£
+属性 "x-direction" の値は "right" か "left" であり、次のグリフの参照点
+のx座標が前のグリフの参照点のx座標よりそれぞれ右あるいは左にずれること
+を意味する。属性 "y-direction" の値は "up" か "down" であり、次のグリフ
+の参照点のy座標が前のグリフの参照点のy座標よりそれぞれ上あるいは下にず
+れることを意味する。
 
-¼¡¤Î¥°¥ê¥Õ¤¬Á°¤Î¥°¥ê¥Õ¤Ë·ë¹ç¤µ¤ì¤ë¤È¡¢¤½¤ì¤é¤Ï°ì¤Ä¤Î·ë¹ç¥°¥ê¥Õ¤È¤·¤Æ°·
-¤ï¤ì¤ë¡£
-
-@verbatim
-MACRO-NAME ::= SYMBOL
-@endverbatim
+属性 "x-amount" と "y-amount" の値は、ずらす量をフォントサイズの1/100単
+位で指定する。つまり値が10であれば、フォントサイズの10% (1/10) ずらす。
+属性 "x-amount" や "y-amount" が省略されていれば、デフォルト値の 5 が用
+いられる。
 
-@c MACRO-NAME ¤Ï @c MACRO-DEF ¤Î¤¤¤º¤ì¤«¤Ë¸½¤ï¤ì¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢Âбþ
-¤¹¤ë@c RULE ¤ÎÎó¤ËŸ³«¤µ¤ì¤ë¡£
+次のグリフが前のグリフに結合されると、それらは一つの結合グリフとして扱
+われる。
 
-@section flt-context-dependent Ê¸Ì®¤Ë°Í¸¤¹¤ë¿¶Éñ
+@section flt-context-dependent 文脈に依存するふるまい
 
-¤³¤³¤Þ¤Ç¤Ï¡¢ÆÃÄê¤Î¥Õ¥©¥ó¥È¤ÇÉÁ¤«¤ì¤ë³Æʸ»ú¡¿¥°¥ê¥ÕÎó¤¬Ê¸Ì®¼«Í³¤Ç¤¢¤ë¤³
-¤È¡¢¤¹¤Ê¤ï¤ÁÁ°¸å¤Î¥°¥ê¥Õ¤Ë±Æ¶Á¤µ¤ì¤Ê¤¤¤³¤È¤òÁ°Äó¤È¤·¤Æ¤­¤¿¡£¤³¤ì¤Ï¡¢Îó 
-S1 ¤¬¥Õ¥©¥ó¥ÈF1 ¤Ë¤è¤Ã¤ÆÉÁ¤«¤ì¡¢Àè¹Ô¤¹¤ëÎó S0 ¤¬¾ï¤Ë¥Õ¥©¥ó¥È F0 ¤òÍ×µá
-¤¹¤ë¾ì¹ç¤Ë¤ÏÀµ¤·¤¤¡£
+ここまでは、特定のフォントで描かれる各文字/グリフ列が文脈自由であるこ
+と、すなわち前後のグリフに影響されないことを前提としてきた。これは、列 
+S1 がフォントF1 によって描かれ、先行する列 S0 が常にフォント F0 を要求
+する場合には正しい。
 
 @verbatim
-  Îó                            S0      S1
-  ¸½¹Ô¤Î¥Õ¥©¥ó¥È                F0      F1
-  ÍøÍѲÄǽ¤Ê¥Õ¥©¥ó¥È            F0      F1
+  列                            S0      S1
+  現行のフォント                F0      F1
+  利用可能なフォント            F0      F1
 @endverbatim
 
-¤·¤«¤·»þ¤Ë¤Ï¡¢Îó¤òÌÀ³Î¤Ë¶èÀڤ뤳¤È¤¬¤Ç¤­¤Ê¤¤¾ì¹ç¤â¤¢¤ë¡£Àè¹Ô¤¹¤ëÎó S0
-¤¬ F0 ¤À¤±¤Ç¤Ê¤¯ F1 ¤Ç¤âÉÁ¤±¤ë¤È¤·¤è¤¦¡£
+しかし時には、列を明確に区切ることができない場合もある。先行する列 S0
+が F0 だけでなく F1 でも描けるとしよう。
 
 @verbatim
-  Îó                            S0      S1
-  ¸½¹Ô¤Î¥Õ¥©¥ó¥È                F0      F1
-  ÍøÍѲÄǽ¤Ê¥Õ¥©¥ó¥È            F0,F1   F1
+  列                            S0      S1
+  現行のフォント                F0      F1
+  利用可能なフォント            F0,F1   F1
 @endverbatim
 
-¤³¤Î¾ì¹ç¡¢Àè¹Ô¤¹¤ë S0 ¤òÉÁ¤¯¤¿¤á¤Ë»È¤ï¤ì¤¿¥°¥ê¥Õ¤¬ S1 ¤Î¥°¥ê¥Õ¤ÎÀ¸À®¤Ë
-±Æ¶Á¤òÍ¿¤¨¤ë¤³¤È¤â¤¢¤ë¡£¤½¤³¤Ç S1 ¤Î½èÍý¤ÎºÝ¤Ë¤¹¤Ç¤Ë½èÍý¤Î½ª¤Ã¤¿ S0 ¤Ë
-´Ø¤¹¤ë¾ðÊó¤Ë¥¢¥¯¥»¥¹¤¹¤ëɬÍפ¬¤¢¤ë¡£ºÇ½é¤Î¥¹¥Æ¡¼¥¸¡Ê¤³¤Î¥¹¥Æ¡¼¥¸¤Î¤ß¡Ë
-¤ÎÀ¸À®µ¬Â§¤Ï¡¢½èÍýºÑ¤ß¤ÎÉôʬ¤Ø¥¢¥¯¥»¥¹¤¹¤ëÆÃÊ̤ÊÀµµ¬É½¸½¤òµö¤·¤Æ¤¤¤ë¡£
+この場合、先行する S0 を描くために使われたグリフが S1 のグリフの生成に
+影響を与えることもある。そこで S1 の処理の際にすでに処理の終った S0 に
+関する情報にアクセスする必要がある。最初のステージ(このステージのみ)
+の生成規則は、処理済みの部分へアクセスする特別な正規表現を許している。
 
 @verbatim
   "RE0 RE1"
 @endverbatim
 
-@c RE0 ¤È @c RE1 ¤ÏÀè¹Ô¤ÎÎó S0 ¤È¸å³¤ÎÎó S1 ¤Ë¤½¤ì¤¾¤ìÂбþ¤¹¤ëÀµµ¬É½
-¸½¤Ç¤¢¤ë¡£
+@c RE0 と @c RE1 は先行の列 S0 と後続の列 S1 にそれぞれ対応する正規表
+現である。
 
-Æó¤Ä¤ÎÀµµ¬É½¸½¤Î´Ö¤Î¥¹¥Ú¡¼¥¹¤ËÃí°Õ¡£¤³¤ì¤ÏÆÃÊ̤ʥ«¥Æ¥´¥ê ' ' ¤ò¼¨¤·¤Æ
-¤¤¤ë (¾åµ­»²¾È) ¡£¤³¤ÎÀµµ¬É½¸½¤Ï¥Õ¥©¥ó¥È F1 ¤ò»ÈÍѤ¹¤ë¥°¥ê¥ÕÀ¸À®µ¬Â§¤Ë
-°¤·¤Æ¤ª¤ê¡¢¤·¤¿¤¬¤Ã¤Æ RE1 ¤À¤±¤Ç¤Ê¤¯RE0 ¤â F1 ÍѤΥ«¥Æ¥´¥ê¤òÍѤ¤¤Æɽ
-¸½¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤Ä¤Þ¤ê¡¢Àè¹Ô¤¹¤ëÎóS0 ¤¬ F1 ÍѤΥ«¥Æ¥´¥ê¤Çɽ¤»
-¤Ê¤¤¾ì¹ç¤Ë¤Ï(¾å¤ÎºÇ½é¤ÎÎã¤Î¤è¤¦¤Ë) ¤³¤Î¥Ñ¥¿¡¼¥ó¤ò»ý¤ÄÀ¸À®µ¬Â§¤Ë¤Ï¹çÃ×
-¤·¤Ê¤¤¡£
+二つの正規表現の間のスペースに注意。これは特別なカテゴリ ' ' を示して
+いる (上記参照) 。この正規表現はフォント F1 を使用するグリフ生成規則に
+属しており、したがって RE1 だけでなくRE0 も F1 用のカテゴリを用いて表
+現されなければならない。つまり、先行する列S0 が F1 用のカテゴリで表せ
+ない場合には(上の最初の例のように) このパターンを持つ生成規則には合致
+しない。
 
-@section flt-seealso »²¾È
+@section flt-seealso 参照
 
 @ref mdbGeneral "mdbGeneral(5)", 
 @ref flt-list "FLTs provided by the m17n database"
index c95b65d..2e957e9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004
+/* Copyright (C) 2003, 2004, 2009
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
    See the end for copying conditions.  */
@@ -82,21 +82,23 @@ one.
 
 </ul>
 
-When a @e run is passed to a stage, if the stage has a @c
-category-table, the category of each glyph in the current run is
-updated.  If there is a glyph that has no category, the current run
-ends before that glyph.  Then, the default values of code-offset,
-combining-spec, and left-padding-flag of this stage are initialized to
-zero.  After these setups, the initial conversion action of the stage
-is applied to the current run and a new (intermediate) glyph sequence
-is produced.  The new current run is then passed to the next stage or
-the rendering engine.
+When a @e run is passed to a stage, if the stage has a
+&lt;category-table&gt; element, the category of each glyph in the
+current run is updated.  If there is a glyph that has no category, the
+current run ends before that glyph.  Then, the default values of
+code-offset, combining-spec, and left-padding-flag of this stage are
+initialized to zero.  After these setups, the initial conversion of
+the stage is applied to the current run and a new (intermediate) glyph
+sequence is produced.  The new current run is then passed to the next
+stage or the rendering engine.
 
 
 @section flt-syntax FLT STAGES and CATEGORIES
 
 The following defines a schema for a FLT, written in RelaxNG.  (This
-schema file can be found at m17n-db-xml/FLT/flt.rng.) 
+schema file can be found at m17n-db-xml/FLTNEW/flt-expr.rng and
+includes m17n-db-xml/FLTNEW/expr.rng that defines basic expressions
+and terms.)
 
 @verbatim
 <?xml version="1.0" encoding="utf-8"?>
@@ -106,7 +108,10 @@ schema file can be found at m17n-db-xml/FLT/flt.rng.)
          xmlns:xi="http://www.w3.org/1999/XML/xinclude"
         xmlns="http://relaxng.org/ns/structure/1.0"
         ns="http://www.m17n.org/FLT">
-<start>
+
+<include href="expr.rng"/>
+
+<start combine="choice">
   <element name="font-layouter">
     <attribute name="key0"><data type="string"/></attribute>
     <attribute name="key1"><data type="string"/></attribute>
@@ -139,74 +144,75 @@ schema file can be found at m17n-db-xml/FLT/flt.rng.)
 
 The attributes "key0" and "key1" are used to find an FLT from the m17n
 database.  The element &lt;first-stage&gt; must have a
-&lt;category-table&gt;.  An FLT can convert characters defined in the
-&lt;category-table&gt; of its &lt;first-stage&gt;.
+&lt;category-table&gt;.  An FLT can handle only such characters that
+are contained in the &lt;category-table&gt; of its
+&lt;first-stage&gt;.
 
 @verbatim
 
 <define name="category-table">
   <element name="category-table">
-    <oneOrMore>
+    <zeroOrMore>
       <element name="category">
-       <choice>
-         <attribute name="code"><ref name="glyph-code"/></attribute>
-         <group><attribute name="from-code"><ref name="glyph-code"/></attribute>
-                <attribute name="to-code"><ref name="glyph-code"/></attribute>
-         </group>
-       </choice>
        <attribute name="category-value">
          <data type="string"><param name="pattern">[a-zA-Z]</param></data>
        </attribute>
+       <choice>
+         <element name="glyph-code"><ref name="integer"/></element>
+         <group><element name="from-code"><ref name="integer"/></element>
+                <element name="to-code"><ref name="integer"/></element>
+         </group>
+       </choice>
       </element>
-    </oneOrMore>
+    </zeroOrMore>
   </element>
 </define>
 
-<define name="glyph-code">
-  <choice>
-    <data type="string"><param name="pattern">[0#]x[0-9a-fA-F]{1,6}</param></data>
-    <data type="string"><param name="pattern">\?.</param></data>
-  </choice>
-</define>
-
 @endverbatim
 
-The element &lt;category-table&gt; declares cageories of characters
-that can be handled in a stage.  Each &lt;category&gt; element assigns
-the value of the attribute "category-value" to a glyph whose code is
-the value of the attribute "code", or a range of glyphs whose code 
-falls betwee the value of the attribute "from-code" and that of "to-code".
-
+The element &lt;category-table&gt; declares cageories of characters or
+glyphs that can be handled in a stage.  Each &lt;category&gt; element
+assigns the value of the attribute "category-value" to its content.
+When the content is an element &lt;glyph-code&lt;, it is the code of
+the character/glyph to which the category is assigned to.  When the
+content is the pair of &lt;from-code&lt; and &lt;to-code&lt;, all the
+characters/glyphs whose code falls between them are assinged the
+category.
 
 @verbatim
 <define name="generator">
   <element name="generator">
-    <ref name="action"/>
+    <ref name="funcall"/>
     <zeroOrMore>
-      <element name="macro-definition">
-       <attribute name="macro-ID"><data type="ID"></data></attribute>
-       <oneOrMore><ref name="action"/></oneOrMore>
-      </element>
+      <ref name="defmacro"/>
     </zeroOrMore>
   </element>
 </define>
 @endverbatim
 
-The element &lt;generator&gt; specifies the action applied to
-character/intermediate glyph code sequence passed to the stage.  The
-&lt;macro-definition&gt; define macros used in the action.  A macro is
-exapanded to the sequence of the correponding actions.
+The element &lt;generator&gt; specifies the conversion applied to
+character/intermediate glyph code sequence passed to the stage.  When
+the conversion requires any macros, they must be defined within the
+same &lt;generator&gt;.  A macro is exapanded to the sequence of the
+correponding conversions.
 
-@section flt-action FLT ACTIONS
+@section flt-action FLT CONVERSIONS
 
-This section describes &lt;action&gt;s.  Each &lt;action&gt; specifies
-glyphs to be consumed and glyphs to be produced.  When some glyphs are
-consumed, they are taken away from the current run.  An action may
-fail in some explicitly described condition.
+@verbatim
+<define name="funcall" combine="choice">
+  <choice>
+@endverbatim
+
+This section describes details of the possible conversions.  In
+addition to those defined in "expr.rng", some functions are specially
+defined for character/glyph conversions.
+
+A conversion can consume and/or produces glyphs.  When some glyphs are
+"consumed", they are taken away from the current run.  A conversion
+may fail in some explicitly described condition.
 
 @verbatim
-    <element name="direct-code">
-      <attribute name="glyph-code"><ref name="glyph-code"/></attribute>
+    <element name="direct-code"><ref name="integer"/></element>
     </element>
 @endverbatim
 
@@ -214,7 +220,7 @@ The element &lt;direct-code&gt; consumes no glyph and produces a glyph
 that has the following specifications:
 
 <ul>
-<li> code : @c glyph-code plus the default code-offset
+<li> code : the value of the reffered integer plus the default code-offset
 <li> combining-spec : default value
 <li> left-padding-flag : default value
 <li> right-padding-flag : zero
@@ -254,15 +260,14 @@ The element &lt;end-cluster&gt; specifies the end of a grapheme cluster.
 @endverbatim
 
 The element &lt;left-padding-flag&gt; sets the default
-left-padding-flag to 1.  No glyph is consumed.  No glyph is produced.
+left-padding-flag to 1.  No glyph is consumed or produced.
 
 @verbatim
     <element name="right-padding-flag"><empty/></element>
 @endverbatim
 
 The element &lt;right-padding-flag&gt; changes the right-padding-flag
-of the lastly generated glyph to 1.  No glyph is consumed.  No glyph
-is produced.
+of the lastly generated glyph to 1.  No glyph is consumed or produced.
 
 @verbatim
     <element name="separator"><empty/></element>
@@ -270,104 +275,110 @@ is produced.
 
 The element &lt;separator&gt; consumes no glyph and produces a special
 glyph whose category is ' ' and other attributes are zero.  This
-special glyph can be produced by this action only.
+special glyph can be produced by this function only.
 
 @verbatim
     <element name="regexp-block">
       <attribute name="regexp"/>
-      <zeroOrMore><ref name="action"/></zeroOrMore>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
     </element>
 @endverbatim
 
-The value of the attribute "regexp" is a regular expression that
-should match the sequence of categories of the current run.  If a
-match is found, this action executes &lt;action&gt;s temporarily
-limiting the current run to the matched part.  This action consumes the
-matched part.
+The value of the attribute "regexp" is a regular expression that may
+match the sequence of categories of the current run.  If a match is
+found, refereed funcalls are executed, temporarily limiting the
+current run to the matched part.  The matched part is comsumed.
 
-Parenthesized subexpressions, if any, are recorded to be used in the
-&lt;match-block&gt; element in the &lt;action&gt;s.
+If any parenthesized subexpressions exist in the regular expression,
+the parts of the run that match the subexpressions are recorded to be
+used by the &lt;match-block&gt; element in this &lt;regexp-block&gt;.
 
-If no match is found, this action fails.
+If no match is found, &lt;regexp-block&gt; fails.
 
 @verbatim
 
     <element name="match-block">
       <attribute name="match-index"><data type="integer"/></attribute>
-      <zeroOrMore><ref name="action"/></zeroOrMore>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
     </element>      
 
 @endverbatim
 
 The value of the attribute "match-index" is an integer specifying a
-parenthesized subexpression recorded by the previous
-&lt;regexp-bloack&gt; element.  If such a subexpression exists, this
-action executes &lt;action&gt;s temporarily limiting the current run to
-the subsequence that matches with the subexpression.  This action
-consumes the matched subsequence.
+parenthesized subexpression of a regular expression.  If the previous
+&lt;regexp-block&gt; element has recorded the corresponding part of
+the run, the &lt;match-block&gt; element executes specified
+conversions, temporarily limiting the current run to the part.  The
+recorded part is consumed.
 
-If the specified subexpression does not exist, this action fails.
+If the corresponding part does not exist, &lt;match-block&gt; fails.
 
-If this is the first action of the stage, the value of the attribute
-"match-index" must be 0, and it matches the whole current run.
+If this is the first conversion of the stage, that is, if no preceding
+&lt;regexp-block&gt; exists, the value of the attribute "match-index"
+must be 0.  In such case the corresponding part means the whole
+current run.
 
 @verbatim
     <element name="subst-block">
       <choice>
        <element name="source-pattern">
-         <list><oneOrMore><ref name="glyph-code"/></oneOrMore></list>
+         <oneOrMore><ref name="integer"/></oneOrMore>
        </element>
        <element name="code-range">
-         <attribute name="from-code"><ref name="glyph-code"/></attribute>
-         <attribute name="to-code"><ref name="glyph-code"/></attribute>
+         <attribute name="from-code"><ref name="integer"/></attribute>
+         <attribute name="to-code"><ref name="integer"/></attribute>
        </element>
       </choice>
-      <zeroOrMore><ref name="action"/></zeroOrMore>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
     </element>
 @endverbatim
 
 If the sequence of codes of the current run matches the element
-&lt;source-pattern&gt; or the element &lt;code-range&gt;, this action
-executes &lt;action&gt;s, temporarily limiting the current run to the
-matched part. This action consumes the matched part.
+&lt;source-pattern&gt; or the element &lt;code-range&gt;, the element
+&lt;subst-block&gt; executes specified conversions, temporarily
+limiting the current run to the matched part. &lt;subst-block&gt;
+consumes the matched part.
 
-The element &lt;source-pattern&gt; specifies a sequence of glyph codes
-to be matched.  In this case, this action resets the default
-code-offset to zero.  The element &lt;code-range&gt; specifies a range
-of codes that should match the first glyph code of the code sequence.
-In this case, this action sets the default code-offset to the first
-glyph code minus the value of the "from-code" attribute.
+The element &lt;source-pattern&gt; specifies a sequence of
+character/glyph codes to be matched.  In this case, the default
+code-offset is reset to zero.  The element &lt;code-range&gt;
+specifies a range of codes that should match the first glyph code of
+the code sequence.  In this case, the default code-offset is set to
+the first glyph code minus the value of the "from-code" attribute.
 
-If no match is found, this action fails.  
+If no match is found, &lt;subst-block&gt; fails.  
 
 @verbatim
     <element name="cond-block">
-      <oneOrMore><ref name="action"></ref></oneOrMore>
+      <oneOrMore><ref name="funcall"/></oneOrMore>
+
     </element>
 @endverbatim
 
-This action sequentially executes &lt;action&gt;s until one succeeds.
-If no succeeds, this action fails.  Otherwise, it succeeds.
+The element &lt;cond-block&gt; sequentially tries to execute specified
+conversions until one succeeds.  If no conversion succeeds,
+&lt;cond-block&gt; fails.  Otherwise, it succeeds.
 
 @verbatim
     <element name="font-facility-block">
       <choice>
        <ref name="font"/>
        <element name="characters">
-         <list><oneOrMore><ref name="glyph-code"/></oneOrMore></list>
+         <oneOrMore><ref name="integer"/></oneOrMore>
        </element>
       </choice>
-      <zeroOrMore><ref name="action"/></zeroOrMore>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
     </element>
 @endverbatim
 
-The element &lt;font&gt;, referred in the line 3, supplies font
+The element &lt;font&gt;, referred in the third line, supplies font
 specifications.  If the current font matches with the referred
-specification, or has glyphs for the codes listed in the element
-&lt;characters&gt;, this action succeeds and executes &lt;action&gt;s.
-Otherwise, this action fails.
+specification, or has glyphs for the characters whose codes are listed
+in the element &lt;characters&gt;, the element
+&lt;font-facility-block&gt; succeeds and executes specified
+conversions.  Otherwise, &lt;font-facility-block&gt; fails.
 
-&lt;font&gt; is defined as follows:
+The element &lt;font&gt; is defined as follows:
 
 @verbatim
 <define name="font">
@@ -431,8 +442,9 @@ registry information, e.g. iso10646-1, iso8895-1, etc.
 &lt;otf-specification&gt; specifies an instruction to the OTF driver.
 It is defined as follows:
 
+@verbatim
 <define name="otf-specification">
-  <element name="otf">
+  <element name="otf-specification">
     <attribute name="script"/>
     <optional><attribute name="langsys"/></optional>
     <optional>
@@ -477,18 +489,18 @@ It is defined as follows:
     </optional>
   </element>
 </define>
-
 @endverbatim
 
 Values of the attribute "script", "langsys" and contents of the
-"feature" tags must be tag names defined in the OpenType
+"feature" elements must be tag names defined in the OpenType
 specification.
 
-The attribute "script" specifies a Script tag name (e.g. deva for
-Devanagari).
+The value of the attribute "script" specifies a Script tag name
+(e.g. deva for Devanagari).
 
-The attribute "langsys" specifies a Language System tag name.  If this
-attribute is omitted, the Default Language System table is used.
+The value of the attribute "langsys" specifies a Language System tag
+name.  If this attribute is omitted, the default Language System table
+is used.
 
 The element &lt;gsub-features&gt; has either a &lt;positive-list&gt;
 or a &lt;negative-list&gt;.  The &lt;feature&gt; element in each list
@@ -509,8 +521,8 @@ When the element &lt;otf-specification&gt; appears in a
 &lt;negative-list&gt; element specifies features that the font must
 (not) have.
 
-See the following page for the OpenType specification.\n
-    <http://www.microsoft.com/typography/otspec/default.htm>
+See &lt;http://www.microsoft.com/typography/otspec/default.htm&gt; for
+the OpenType specification.
 
 @verbatim
     <element name="combining-specification">
@@ -535,6 +547,7 @@ See the following page for the OpenType specification.\n
            <optional><attribute name="y-amount"><data type="integer"/></attribute></optional>
       </optional>
     </element>
+</define>
 @endverbatim
 
 The element &lt;combining-specification&gt; specifies how to combine
@@ -579,7 +592,8 @@ glyph.  The rectangle 0-6-8-2 is the bounding box of the glyph.  The
 positions 3, 4, and 5 are on the baseline. 9-11 are on the vertical
 center of the box, 0-2 and 6-8 are on the top and on the bottom
 respectively.  1, 10, 4, and 7 are on the horizontal center of the
-box.
+box. The values of the attributes "v-pos1" and "h-pos1" (or "v-pos2"
+and "h-pos2") for each reference point are shown in the right table.
 
 The attribute "x-direction", "x-amount", "y-direction", and "y-amount"
 specifies the relative position of these reference points.  If both
@@ -602,47 +616,36 @@ or "y-amount" is omitted, the default value 5 is used.
 Once the next glyph is combined with the previous one, they are
 treated as a single combined glyph.
 
-@verbatim
-    <element name="macro-reference">
-     <attribute name="macro-ID"><data type="IDREF"/></attribute>
-    </element>
-
-@endverbatim
-
-The element &lt;macro-reference&gt; refers to a macro defined in
-&lt;macro-definition&gt;.  The attribute "macro-ID" specifies a macro
-and this element is exapanded to the sequence of the correponding
-rules.
-
 @section flt-context-dependent CONTEXT DEPENDENT BEHAVIOR
 
-So far, it has been assumed that each sequence, which is drawn with a
-specific font, is context free, i.e. not affected by the glyphs
+So far, it has been assumed that each sequence that is drawn with a
+specific font is context free, i.e. not affected by the glyphs
 preceding or following that sequence.  This is true when sequence S1
 is drawn with font F1 while the preceding sequence S0 unconditionally
 requires font F0.
 
 @verbatim
   sequence                              S0      S1
-  currently used font                   F0      F1
-  usable font(s)                        F0      F1
+  font currently used                   F0      F1
+  font(s) possibly used                 F0      F1
 @endverbatim
 
-Sometimes, however, a clear separation of sequences is not possible.
-Suppose that the preceding sequence S0 can be drawn not only with F0
-but also with F1.
+Sometimes, however, a sequence of characters cannot be cleary and
+unambiguously separeted into sequences.  Suppose that the preceding
+sequence S0 can be drawn with F1 also.
 
 @verbatim
   sequence                              S0      S1
-  currently used font                   F0      F1
-  usable font(s)                        F0,F1   F1
+  font currently used                   F0      F1
+  font(s) possibly used                 F0,F1   F1
 @endverbatim
 
-In this case, glyphs used to draw the preceding S0 may affect glyph
-generation of S1.  Therefore it is necessary to access information
-about S0, which has already been processed, when processing S1.
-Generation rules in the first stage (only in the first stage) accept a
-special regular expression to access already processed parts.
+In this case, glyphs used to draw the preceding sequence S0 may affect
+glyph generation of the sequence S1.  Therefore it is necessary to
+access information about S0, which has already been processed, when
+processing S1.  For this purpose, actions in the first stage (only in
+the first stage) of conversion accept a special regular expression to
+access already processed parts.
 
 @verbatim
   "RE0 RE1"