Avendia19
English

目次

このサイトの生成について

このサイトのほぼ全てのページは、 HTML を直接書いて作っているのではなく、 XML を自作のスクリプトで HTML に変換することで作っています。 こうすることで、 表示用の構造 (最終的にネットに公開される HTML) と文書そのものの意味的構造 (変換前の XML) が分離でき、 デザインの変更などが容易にできます。

例えば、 図表の表示スタイルを変えたいとなると、 全てのページを見て図表があるか確認し、 あるならその箇所の HTML ソースを書き換える必要があります。 このサイトには 400 を超えるページが存在しているので、 この作業は非常に大変です。 しかし、 文書そのもののデータを XML でもっておき、 それを変換することで HTML を生成するようにしておけば、 その変換規則の部分を書き換えるだけ済むわけです。

さらに、 記述を簡略化するため、 原稿データは XML 形式ではなく自作の ZenML 形式で書いてあります。 ZenML 形式は XML 形式の構文のみを変更した形式で、 XML とほぼ同等の表現力および表現方式をもちます。 詳しくは、 こちらを参照してください。

以下に、 サイト生成に用いるタグの仕様を備忘録としてまとめておきます。

common モジュール

page

XML のルート要素である。 サイトを生成するときには、 1 つのファイルが 1 つのページを表すので、 この要素が 1 つのページを表すことになる。

name, ver

name 要素は、 そのページのタイトルを表す。 生成される HTML のナビゲーション部分に表示される。

ver 要素は、 そのベージの情報がシャレイア語のどの時期に沿っているかを表す。 シャレイア語の通時的な説明を載せているページなど、 ページの内容が特定の時期に依存しない場合は、 * を代わりに指定する。 シャレイア語のページでない場合は、 このタグは省略する。 これも生成される HTML のナビゲーション部分に表示される。

namever はナビゲーション部分にのみ表示され、 本文には影響を与えない。 そのため、 page の子要素になっていればどの位置に書いても良いが、 変換スクリプトの実装の都合上、 page の最初の 2 つの子要素にすべきである。

import-script

この要素の名前を script に変えたタグが、 生成される HTML のヘッダ部分に挿入される。 JavaScript を用いるページなどで用いる。

base

この要素がそのまま生成される HTML のヘッダ部分に挿入される。 エラーページなど、 開かれるときの URL が定まらないときに、 相対 URL の基準位置を固定するのに用いる。

pb, ab, abo, aba, abd

pb 要素は、 目次ページにおける一連の目次のリストを表す。 この子要素は、 以下に説明する ab, abo, aba, abd のいずれかとする。

ab, abo, aba, abd の 4 つの要素は、 どれも目次の 1 つの項目になり、 参照先のページへのリンクに変換される。 参照先のページの URL は href 属性で記述する。 ab 要素は、 最も一般的な目次項目である。 abo 要素と aba 要素は、 シャレイア語関連のページの目次に用いられ、 シャレイア語の現在の時期よりも古い時期に沿っているページを表すのに用いられる。 その中でも、 現在と同じ代に沿っているページなら abo 要素を用い、 それより前の時期に沿っているなら aba 要素を用いる。 最後に abd 要素は、 準備中のページなど、 実際にはリンクを張らずに項目のみを表支持させておきたい場合に用いる。

hb

hb 要素は、 目次リストを表す pb 要素の表題を記述するのに用いる。

p

img

この要素の箇所に画像を表示する。 HTML の場合と同様に、 src 属性に表示したい画像の URL を指定する。

img 要素はブロック要素になっているので、 p 要素の中に入れる必要はない。

a, an

この要素の箇所にリンクを表示する。 HTML の場合と同様に、 href 属性にリンク先の URL を指定する。 a 要素の代わりに an 要素を用いると、 リンクテキストが装飾されず、 本文の他の部分と同様の文字色で表示される。

ol, ul, li

xl, li, sh, ja

xl 要素により、 そのページでいる扱っている言語 (多くの場合でシャレイア語) の例文リストを作ることができる。 この子要素は複数の li 要素から成る。 その li 要素はさらに小要素として sh 要素と ja 要素を 1 つずつもち、 それぞれそのページで扱っている言語の文とそれを翻訳した文を表す。 ja 要素は省略することができる。

\xl<
\li<\sh<{salot a fit e lêdik.}>\ja<これは文です。>>
\li<\sh<{pa salot a qut e pet?}>\ja<あれは何ですか?>>
>

li 要素の小要素としては、 後述する gloss 要素も置くことができる。

el, li, et, ed

el 要素は、 項目名とその項目の内容のリストを生成する。 この小要素は複数の li 要素から成り、 各 li 要素の小要素は ed 要素と ed 要素がそれぞれ 1 つであり、 順に項目名とその内容を表す。

HTML の説明リストと用途はだいたい同じだが、 HTML と要素の構造が違うので注意すること。

trans, li, ja, sh

trans 要素により、 歌詞などの対訳表を作ることができる。 この子要素は複数の li 要素であり、 それぞれが表の 1 行分を表す。 各 li 要素は小要素として ja 要素と sh 要素を 1 つずつもち、 それぞれもともとの言語によるフレーズとそれをそのページで扱っている言語に翻訳したフレーズを表す。

table, tr, th, thl, td

section-table

この要素の箇所にそのページの節の目次を生成する。

form, input, textarea

special

この要素は、 CGI など動的なページのテンプレートを作るときに、 CGI が生成した HTML を挿入する箇所を指定する意味で使われる。

pdf

この要素の箇所に PDF ファイルを表示する。 src 属性で表示したい PDF ファイルの URL を指定する。

slide

この要素の箇所に Speaker Deck のスライドを表示する。 id 属性でスライドのデータ ID を指定する。

pre, samp

pre 要素の箇所にソースコードを別行立てで表示する。 各 pre 要素の直後に samp 要素を置くと、 それはソースコードを実行したときの出力を意味する。 どちらも HTML を生成する際にインデントは削除されるので、 XML の構造に従って小要素のテキストをインデントすることができる。

同名の HTML 要素とは少し使い方が異なるので注意すること。

c, m

ソースコードに関連する文字列を表示するときに用いる。 c 要素は実際のソースコード中に現れる文字列を引用するときに用い、 m はそれ以外のソースコードに関連する文字列に対して用いる。

x, xn

そのページで扱っている言語を表すのに用いる。 変換後の HTML では、 それ以外の本文とは別のフォントで表示され、 そこで話題にしている言語と本文の記述に用いている言語が明確に区別できるようになる。 x 要素を用いた場合は、 小要素のテキストが単語ごとに分解され、 それぞれがシャレイア語辞典の該当項目へのリンクになる。 xn 要素を用いた場合は、 リンクにはならずにフォントが変わるのみである。

なお、 変換スクリプトで ZenML を HTML に変換する際に、 ZenML の {} 要素と [] 要素がそれぞれ x 要素と xn 要素に変換されるように設定してあるので、 より簡潔な括弧記法を用いる場合が多い。

k

この要素の小要素のテキストは、 必ず日本語フォントで表示される。 そのままでは欧文フォントで半角文字のように表示されてしまう場合に、 それを抑制するのに用いる。

i

この要素の小要素のテキストが変数名であることを表す。 変換後の HTML ではイタリック体で表示されるが、 あくまでそう表示されるというだけなので、 イタリック体で表示するためにこの要素を用いることは推奨されない。

なお、 変換スクリプトでは、 ZenML の // 要素を i 要素にマップしてあるので、 どちらを用いても良い。

h

この要素は、 ハイリア数を記述するために用いる。

sup, sub

fl

small

br

gloss モジュール

gloss, li, sh, ex, mph

gloss 要素により、 グロスを表示させることができる。 この要素は、 p 要素のように page 要素の直下に置くこともできるが、 例文リストを表す xl 要素内の li 要素の直下に置くこともできる。

gloss 要素は小要素として複数の li 要素をとり、 さらに各 li 要素は sh 要素と ex 要素を 1 つずつもつ。 ここで、 sh 要素には単語を記し、 ex 要素にはその単語の逐次訳を記す。

mph 要素は文法的形態素を表す略号を記述するために用い、 ex 要素の中でのみ利用できる。

句読点も 1 つの li 要素によって表現する。 このとき、 sh 要素に句読点を記述し、 ja 要素は省略する。 さらに、 その要素が句読点を表していることを変換スクリプトに知らせるため、 li 要素の punc 属性に同じ句読点を記述する。

\gloss<
\li<\sh<[du]-{kil}-[a]-[t]>\ex<\mph<否->可能になる\mph<-現-継.自>>>
\li<\sh<{a}>\ex<\mph<主>>>
\li<\sh<{tel}>\ex<私>>
\li|punc="."|<\sh<[.]>>
>

なお、 これを全て手で書くのは面倒なので、 より簡潔に書けるように lig マクロが用意されている。

tsolitaire モジュール

t

board, row, t

error モジュール

error, code, message

マクロ

lig

lig マクロは、 グロスを表す gloss 要素内の li 要素を生成するためのユーテリティマクロである。 属性に何を記述したかによって、 3 通りの使い方がある。

auto 属性を指定した場合、 属性値と同じ単語のグロス項目が全て自動で生成される。 小要素は空で良い。 この属性を使用できる単語は、 基本助接辞 (a, e, ca, zi, li) と機能辞 (pa, kin, 'n) のみである。

punc 属性を指定した場合、 句読点を表すグロス項目が生成される。 小要素は空で良い。

conj 属性を用いると、 動辞や副辞の活用によって生じる形態素に関する記述を自動で追加できる。 この属性の値には、 du-ato- のように、 活用接頭辞と活用接尾辞 (存在しなければ空文字) をハイフンで区切ったものを指定する。

\gloss<
&lig|conj="du-at"|<\sh<{kil}>\ex<可能になる>>
&lig|auto="a"|>
&lig<\sh<{tel}>\ex<私>>
&lig|punc="."|>
>

これは以下の ZenML と同等なものとしてパースされる。

\gloss<
\li<\sh<[du]-{kil}-[a]-[t]>\ex<\mph<否->可能になる\mph<-現-継.自>>>
\li<\sh<{a}>\ex<\mph<主>>>
\li<\sh<{tel}>\ex<私>>
\li|punc="."|<\sh<[.]>>
>