スケルトンデータprimdata 以下のファイルに入っています。BNF風に書いてみることにします。なお、Lisp言語では、 (A . (B C)) = (A B C) (A . () ) = (A) であることを注意してください。 ファイルにはスケルトンデータの定義が並んでいます skeleton-defs = |skeleton-def skeleton-defs デフォルトの定義は、setqで、書体固有の定義はdefprimitiveで行います skeleton-def = (setq symbol 'skeleton) | (defprimitive fonttype symbol 'skeleton) スケルトンデータは、点の定義、エレメント定義、スケルトン属性からなります skeleton = (points elements . skeleton-attributes) 点の定義はx座標、y座標、点属性からなります。左上を(0,0) 右下を(400,400)とする座標系です。 points = () | (point . points) point = ( x y . point-attributes ) x = INT y = INT 点属性には今のところ、link-ok(その点が他のエレメントに接続可能)がありますが、 これは、スケルトンエディタで利用するためのもので、アウトライン生成の際は使いません。 point-attributes = () | (point-attribute . point-attributes) point-attribute = (link-ok BOOL) エレメントの定義はエレメントの種類、制御点、エレメント属性からなります elements = () | (element . elements) element = (element-type element-points . element-attributes) エレメントの種類は、以下の通りです element-type = ten | tate | yoko | hidari | tatehidari | tatehane | magaritate | kokoro | kozato | shin-nyuu | outline | hira-circle | hira-long 制御点は pointsのインデックス(0から開始)のリストで表します。多くのエレメントは 制御点の数が固定ですが、outline, hira-longなどは可変長です。 element-points = () | (element-point . element-points) element-point = INT エレメント属性は属性名と属性値の連想リストで実現されます。 element-attributes = () = ((attribute-name . attribute-value) . element-attributes) 文法としてはこれ以上規定していませんが、主なエレメント属性には以下のものがあります。 :link:このエレメントの途中に接続する他のエレメントの点 :hirawidth:hira-longで使われる。各制御点付近での線幅 :curve:outlineで使われる。制御点のうち、前後がなめらかに接続する点のelement-points中のインデックス スケルトン属性も属性値と属性値の連想リストで実現されます。 skeleton-attributes = () | ((attribute-name . attribute-value) . skeleton-atributes) 文法としてはこれ以上規定していませんが、主なスケルトン属性には以下のものがあります。 :tateheight:部品を組み合わせる際の単位高さ :yokowidth:部品を組み合わせる際の単位幅 :updown:??? :center:縦方向に組み合わせる際に中心合わせをおこなうX座標 :width:??? :kamae:内部に部品を入れる部品(例、「くにがまえ」「まだれ」、「しんにゅう」)の場合、入れる場所の目安(最適な位置をプログラムで求めるが、その初期値に使う) :kamae2:内部に複数部品を入れる部品(例、「繭の下」)の2つめの部品を入れる場所の目安。 組合せデータjointdata以下のファイルに入っています。 ファイルには組合せデータの定義が並んでいます joint-defs = () | joint-def joint-defs デフォルトの定義は、setqで、書体固有の定義はdefjointで行います joint-def = (setq symbol 'joint) | (defjoint fonttype symbol 'joint) 組合せデータは組合せの種類の後に、joint-dataのリストが並びます joint = (joint-type . joints) joints = () | joint joints 組合せの種類としては以下のようなものがあります。 joint-type = tate|yoko|kamae|kamae2|nyou|tare |