HTML変換規則
「イカル」のページをHTMLファイルに変換するときの内部の処理方法を説明します。
テンプレート作成の参考にして下さい。
段落HTML
段落のテキストをHTML出力用に加工したものを段落HTMLと呼びます。
段落HTMLは次の方法で生成します。
- 段落タイプが整形済みテキストでもデータでもなければ空白を に置き換えます。ただし<と>に囲まれた部分は除きます。
- 段落タイプが整形済みテキストでもデータでもなく、スタイル領域に@NOBRの指定がない場合は改行に<br>を付加ます。
- スタイル領域に@ENCODEの指定がある場合は下記の文字が変換されます。
変換前 変換後 " " & & < < > > 0x0A~0xFFの文字 &#文字コード;
属性
段落のID領域およびスタイル領域より、段落の開始タグに付加される属性が作られます。
属性は次の手順で作られます。
ID領域に設定されたIDは id属性 id="xxxx"を付加します。
次にスタイル領域に設定された文字列より次の規則で属性を付加します。
- xxx="yyyy"、x='yyyy'またはxxx=yyyyはそのままの形で属性として付加します。
- xxx:yyyy;はスタイル属性とみなして style="xxx:yyyy;" を付加します。
- 上記以外のアルファベットで始まる文字列はクラス名とみなしてクラス属性 class="xxxx" を付加します。
コンテンツHTML
「イカル」のページをHTMLへ変換したものをコンテンツHTMLといいます。
「イカル」のページは次の規則に従い、ページの最初の段落より順次階層的にコンテンツHTMLに変換されます。
段落タイプが見出無しテーブルの場合
テーブル開始タグ<table 属性>に変換されます。。
段落のテキストが空でない場合は、テーブルの表題として<caption>段落HTML</caption>が出力されます。
スタイル領域に列幅が指定されている場合は、列幅指定のための<col width="xxx">要素が指定されている数だけ出力されます。
次に子段落のセクションタイプがテーブル行の場合、開始行タグ<row 属性>に変換されます。
そうでない場合は開始行タグ<row>を出力し、その段落は行の最初のセル要素<td 属性>段落HTML</td>に変換されます。
孫段落は順次、行のセル要素<td 属性>段落HTML</td>に変換されます。。
孫段落がすべて処理されたら、</row>を出力して行を閉じ、次の子段落から行の処理を繰り返します。
子段落がすべて処理されたら、</table>を出力してテーブルを閉じます。
段落タイプが見出付きテーブルの場合
上記の見出し無しテーブルと同じですが、1行目は<td>の代わりに<th>が出力されます。
段落タイプが順序無しリストの場合
順序無しリスト開始タグ<ul 属性>に変換されます。
次に子段落は順次<li 属性>段落HTML</li>に変換されます。
子段落がすべて処理されたら、</ul>を出力して順序無しリストを閉じます。
段落タイプが順序付きリストの場合
順序付きリスト開始タグ<ol 属性>に変換されます。
次に子段落は順次<li 属性>段落HTML</li>に変換されます。
子段落がすべて処理されたら、</ol>を出力して順序付きリストを閉じます。
段落タイプが整形済みテキストの場合
<pre 属性>段落HTML</pre>を出力します。
段落タイプがグループの場合
最初に子段落をグループ化するために開始タグ<div 属性>を出力します。
段落HTMLがあれば段落要素<p 属性>段落HTML</p>を出力します。
子段落は上記ルールにしたがって再帰的にHTML化されます。
子段落がすべて処理されたら、</div>を出力してグループを閉じます。
段落タイプがデータの場合
段落のテキストをそのまま出力します。
段落タイプが自動で、子段落がある場合
親および上位の段落タイプが全て自動の場合
最初に子段落をセクション化するために開始タグ<section class='ollevel?' 属性>を出力します。
次に見出し要素<h?>段落HTML</h?>を出力します。
子段落は上記ルールにしたがって再帰的にHTML化されます。
子段落がすべて処理されたら、</section>を出力してセクションを閉じます。
(注) ?は階層の深さを表す1~6の数字です。
親および上位の段落タイプに自動以外がある場合
最初に子段落をグループ化するために開始タグ<div 属性>を出力します。
段落HTMLがあれば段落要素<p 属性>段落HTML</p>を出力します。
子段落は上記ルールにしたがって再帰的にHTML化されます。
子段落がすべて処理されたら、</div>を出力してグループを閉じます。
段落タイプが自動で、子段落が無い場合
段落要素<p 属性>段落HTML</p>に変換されます。
使用するテンプレート
上記のコンテンツHTMLには文書型宣言やヘッダーが無く、これだけでは完全なHTML文書ではありません。
コンテンツHTMLを文書型宣言やヘッダーが書かれたテンプレートに埋め込むことにより完全なHTML文書になります。
使用するテンプレートは文書目的別に設定されています。
使用するテンプレートは次の手順により決定されます。
- 変換するページよりページの親子関係を遡り最初に設定されている目的のテンプレートを使用します。
- 親子関係でどこにも目的のテンプレートが設定されていなければ文書に設定されているテンプレートを使用します。
- 文書にも設定されていなければデフォルトのテンプレートを使用します。
完全なHTMLの生成
テンプレートを利用して完全なHTMLを作成するのは次の手順によって行われます。
- 最初にテンプレートの内容を生成HTMLとします。
- 生成HTMLの中にある[ページ内容]変数をコンテンツHTMLに置き換えます。
- 生成HTMLの中にある[文書タイトル]変数を文書タイトルに置き換えます。
- 生成HTMLの中にある[ページタイトル]変数をページタイトルに置き換えます。
- 生成HTMLの中にある[文書目次]変数を文書目次に置き換えます。
- 生成HTMLの中にある[部分目次]変数を部分目次に置き換えます。
- 生成HTMLの中にある[ページ目次]変数をページ目次に置き換えます。
- 生成HTMLの中に利用者定義変数が使用されていれば利用者定義変数の値に置き換えます。
利用者定義変数の値は変数ごとに、変換するページよりページの親子関係を遡り最初に設定されている値を使用します。
親子関係でどこにも利用者定義変数が定義されていなければ、文書で定義されている利用者変数の値を使用します。
文書でも利用者変数が定義されていなければ変換されず変数名はそのまま残ります。
上記の置き換えにより生成されたHTMLを最終結果としてファイルに出力します。
置き換えは上より順番に行われるので、前段階で変数が使用されていれば置き換えが行われます。
例えば[文書目次]変数はテンプレートの中やページ内容の中にあっても置き換えられます。
出力ファイル
HTMLファイルの生成先フォルダは文書設定で文書目的別に設定します。
HTMLファイルの出力ファイル名はページ設定で文書目的別に設定します。
出力ファイル名に拡張子が指定されていない場合は、文書設定で文書目的別に設定する拡張子が使用されます。
出力ファイル名にフォルダが指定されている場合は、生成先フォルダのサブファルダと看做し、その中に出力します。
生成先フォルダまたはサブフォルダが無い場合は出力前にフォルダを自動生成します。