# ノーマライザ

浅海 智晴
2002年3月31日

ノーマライザは要素内のコンテンツを正規化するための機能です。 各要素の`normalizer`属性を使用して指定します。

# ノーマライザ一覧

SmartDocでサポートしているノーマライザの一覧を に示します。

名前,機能,関連属性
none | なにもしない | -
natural | テキストエディタ入力で自然な形の入力をSmartDocの形式に変換 | xml:lang, xml:space
naturallabel | naturalノーマライザにラベル用途の処理を追加 | xml:lang, xml:space
csv | CSV形式を表形式に変換 | -
image | イメージファイルのファイル名を調整 | src
href | `href`属性の値をコンテンツに反映 | href
program | プログラムソースの修飾 | -
console | コンソールデータの修飾 | consolePrompt, consolePromptRegex
line | 行番号の付加 | -
regex | 正規表現によるテキストの編集 | regexExtract, regexHilight, regexUnit, regexRange, regexClass
javasrc | Javaプログラムソースの修飾 | javasrcKeyword, javasrcCount, javasrcHilight, javasrcSyntaxHilight
tex | TeX数式-MathML変換 |

# デフォルトノーマライザ

カテゴリ,要素,機能,アダプタ

- 文書要素

doc | SmartDoc文書のルート要素 | none
head | SmartDoc文書の文書情報 | none
body | SmartDoc文書の本体 | natural

- ヘッダ要素

title | 文書のタイトル | none
subtitle | 文書のサブタイトル | none
author | 著者 | none
org | 組織 | none
date | 日時 | none
hp | ホームページアドレス | none
email | Eメールアドレス | none
abstract |  | none
header | ページヘッダ情報 | none
footer | ページフッタ情報 | none
prologue | ページプロローグ情報 | none
native | ターゲットフォーマットのネーティブ記述 | none

- 文書構造要素

part | 部 | natural
chapter | 章 | natural
section | 節 | natural
subsection | 小節 | natural
subsubsection | 少少節 | natural
appendix | 付録 | natural

- 補助構造要素

fyi | コメント的な参考情報 | natural
note | 注釈 | naturallabel

- リスト

ul | 番号なしリスト | tag
ol | 番号つきリスト | tag
li | ulまたはolのリスト項目 | naturallabel
dl | 定義リスト | tag
dt | dlの定義項目 | naturallabel
dd | dlの定義内容 | naturallabel

- ブロック

div | 矩形領域 | natural
p | パラグラフ | none
pre | 整形済みテキスト | text

- テーブル

table | 表のルート要素 | none
thead | ヘッダ情報 | csv
tfoot | フッタ情報 | csv
tbody | データ情報 | csv
tr | レコード | csv
th | ヘッダセル | naturallabel
td | データセル | naturallabel
colgroup | カラムグループの宣言 | tag
col | カラム情報の定義 | none
tnote | 表の注釈 | natural

- イメージ

figure | 図版の取り込み | none
img | イメージの取り込み | none

- ハイパーテキストリンク

a | ハイパーテキストリンク | href
cite | 引用リンク | natural

- 引用

blockquote | 長い引用 | natural
q | 短い引用 | natural

- 数式

equation | 数式の記述 | tex

- テキスト

span | テキストの範囲指定 | natural
em | 強調 | natural
strong | 強い強調 | natural
dfn | 用語の定義 | natural
code | プログラムコード | natural
b | ボールド体 | natural
i | イタリック体 | natural
tt | タイプライタ体 | natural

- プログラム

program | プログラムの記述 | program
console | コンソール画面の記述 | console

- 特殊要素

native | ターゲットフォーマットのネーティブ記述 | none

- 属性要素

title | タイトル属性 | naturallabel
attribute | 属性値の指定 | none

- 参考文献要素

bibliography | 参考文献 | none
bibliopole | 参考文献データ | none
book | 書籍 | none
article | 記事 | none
journal | 雑誌 | none
author | 著者 | none
editor | 編者 | none
title | タイトル | none
subtitle | サブタイトル | none
edition | エディション | none
publisher | 出版社 | none
year | 年 | none
month | 月 | none
volume | 巻 | none
number | 号 | none
a | URI | none

# none

入力 | なし
出力 | なし

## 機能

noneノーマライザは何もノーマライザです。 noneノーマライザを指定することで、要素のデフォルトのノーマライザの動作を 抑止することができます。

## 属性

なし

## 使用例

none
ノーマライザの使用例を に示します。

none.sdoc

# natural

入力 | 要素,テキスト
出力 | `p`要素

## 機能

naturalノーマライザは、テキストに関して以下の正規化を行うノーマライザです。

- 空白のみの行を区切り記号にしてパラグラフを識別
- レイアウト上の改行コードを自動削除

naturalノーマライザを使うことで、テキストエディタ上での編集が容易になります。

SmartDocで文章を入力する際に使用する要素はほとんどがこの`natural` ノーマライザがデフォルトになっています。

## 属性

属性,意味
xml:lang | 言語

## 使用例

naturalノーマライザの使用例をに示します。

natural.sdoc

この例では、`div`要素内に空行で区切られた2つのパラグラフがあります が、 naturalノーマライザの働きにより2つの`p`要素に変換されます。

# naturallabel

入力 | 要素,テキスト
出力 | `p`要素,テキスト

## 機能

naturallabelノーマライザは、naturalノーマライザと同様に、テキストに関する 正規化を行うノーマライザです。

正規化の結果、テキストが2つ以上のパラグラフで構成されていた場合には、 そのまま`p`要素のリストを出力します。

パラグラフが1つしかなかった場合には、`p`要素は出力せず、 テキストのみを出力します。

naturallabelノーマライザは、`td`要素や`li`要素など、 パラグラフ処理の必要のない短いテキストが多用される要素で有効です。

## 属性

属性,意味
xml:lang | 言語

## 使用例

naturallabelノーマライザの使用例をに 示します。

naturallabel.sdoc

この例では、`table`要素の中の`td`要素において、 以下の2つのパターンの文字列が記述されています。

- ラベル的な使い方をするテキスト
- 文章を記述する目的の長いテキスト

naturalノーマライザはこの2つのテキストを自動判定し、 前者の場合は`p`要素の出力を行わず、 後者の場合は`p`要素でパラグラフを明示する処理を行います。

# csv

入力 | CSV形式テキスト
出力 | `tbody`要素, `tr`要素, `th`要素, `td`要素

## 機能

csvノーマライザは、CSV形式の入力からテーブルの構成情報を生成する ノーマライザです。

csvノーマライザは、指定された要素の種別に合わせた要素を生成します。 指定された要素と生成する要素の対応を に示します。

指定された要素,生成する要素
`table`要素 | `tbody`要素
`thead`要素 | `th`要素によって構成される`tr`要素のリスト
`tfoot`要素 | `th`要素によって構成される`tr`要素のリスト
`tbody`要素 | `td`要素によって構成される`tr`要素のリスト
`tr`要素 | `td`要素または`th`要素のリスト

## 属性

なし

## 使用例

csvノーマライザの使用例をに 示します。

csv.sdoc

この例では、`table`要素の`thead`要素および `tbody`要素のデータの入力にcsvノーマライザを使用しています。

このような簡単なデータの場合は、`tr`要素や`td`要素を 駆使しなくても、csvノーマライザを使用することで 手軽に表を記述することができます。

なお、以下の要素のデフォルトのノーマライザはcsvノーマライザと なっていますので、そのままcsvノーマライザを前提とした入力ができます。

- `table`要素
- `thead`要素
- `tfoot`要素
- `tbody`要素
- `tr`要素

# href

入力 | `href`属性
出力 | テキスト

## 機能

hrefノーマライザは、`href`属性に設定されている情報を、 テキストに反映させるノーマライザです。

テキストへの反映は、テキストが設定されていない時に行われます。

## 属性

属性,意味
href | ハイパーテキストリンク

## 使用例

hrefノーマライザの使用例をに示します。

href.sdoc

hrefノーマライザを指定することで、`href`属性の内容が `a`要素の内容に反映されています。

# program

入力 | テキスト
出力 | 修飾されたテキスト

## 機能

programノーマライザは、プログラムテキストを修飾するためのノーマライザです。

## 属性

なし

## 使用例

programノーマライザの使用例をに示します。

program.sdoc

# console

入力 | テキスト
出力 | 修飾されたテキスト

## 機能

consoleノーマライザは、コンソール出力のテキストを修飾するための ノーマライザです。

consoleノーマライザでは以下の3つの領域から構成されるコンソール出力を想定して しています。

- プロンプト
- ユーザ入力
- 実行結果

consoleノーマライザでは、これらの領域を自動的に検出し、適切な表示が行われる ように出力を修飾します。

## 属性

属性,意味
consolePrompt | プロンプトの文字列
consolePromptRegex | プロンプトの正規表現
consolePromptRange | 有効なプロンプトの範囲

consolePrompt属性

consolePrompt
属性は、プロンプトの右端の文字を指定します。 デフォルト値は「>」なので、Windowsのコンソールの場合は、 デフォルト値のままで使用できます。

プロンプトの右端の文字に続く空白はプロンプトの一部として処理されます。

consolePromptRegex属性

consolePromptRegex
属性は、プロンプトを正規表現で指定します。 プロンプトの右側の空白も含めてプロンプト全体がマッチする 正確な指定をする必要があります。

consolePromptRange属性

consolePromptRange
属性は、`consolePrompt`属性や `consolePromptRegex`属性にマッチするプロンプト候補の中で、 何番目のものを使うのかを指定するものです。 デフォルトは1、つまり最初のものを使用する、となっています。

consolePromptRegex
属性には、以下のような指定ができます。

- 数字 (例 1)
- 数字の範囲 (例 1-10)
- 数字の指定 (例 1,2,4,5)

## 使用例

consoleノーマライザの使用例をに 示します。

console.sdoc

# line

入力 | テキスト
出力 | テキスト

## 機能

lineノーマライザは、テキストに行番号を付加するノーマライザです。

## 属性

なし

## 使用例

lineノーマライザの使用例を に示します。

line.sdoc

# regex

入力 | テキスト
出力 | 修飾されたテキスト

## 機能

regexノーマライザは、正規表現を使用してテキストの部分抽出とハイライト表示を 行うノーマライザです。

## 属性

属性,意味
regexExtract | 抽出対象の正規表現
regexHilight | ハイライト対象の正規表現
regexUnit | 抽出する対象の単位(行または領域)
regexRange | 有効な検索結果の範囲
regexClass | 生成する`em`要素のクラス

regexExtract属性

regexExtract
属性は 抽出する範囲を表す正規表現を指定します。

regexHilight属性

regexHilight
属性は ハイライト表示する範囲を表す正規表現を指定します。

regexUnit属性

regexUnit
属性は 抽出する範囲の特定方法を指定します。

spot
  正規表現のパターンにマッチした文字のみを抽出
line
  正規表現のパターンにマッチした文字を含む行をすべて抽出

regexRange属性

正規表現がテキスト内の複数の領域にマッチする場合、何個目のマッチから何個目の マッチまでを有効にする、といった指定が行えると便利です。 `regexRange`属性は、このような目的で、マッチした領域の中から、 有効となる領域を指定するために使用します。

regexRange
属性には、以下の形式が指定できます。

数字
  指定された数字番目のマッチが有効
数字-数字
  ハイフンで指定された範囲のマッチが有効

regexClass属性

regexClass
属性は、出力される`em`要素の `class`属性に設定される値を指定します。

## 使用例

regexノーマライザの使用例をに示します。

regex.sdoc

この例では、`regexHilight`属性を使用して、ハイライトを行う範囲を 指定しています。 `regexHilgith`属性に指定されている"System[^;]+;"という 正規表現は、「"System"で始まり、";"でない文字列が1つ以上続き最後は";"で終わる文字列」という意味ですが、これは`program` 要素内の「System.out.println("hello");」にマッチし、この部分がハイライト表示されるわけです。

# javasrc

入力 | テキスト
出力 | 修飾されたテキスト

## 機能

javasrcノーマライザは、Javaのソースコードを修飾するためのノーマライザです。

## 属性

属性,意味
javasrcKeyword | 表示する内容を指定するキーワード
javasrcCount | キーワードに対する何番目のマッチを表示するかの指定
javasrcHilight | ハイライトする領域の指定
javasrcSyntaxHilight |

javasrcKeyword属性

javasrcKeyword
属性は、抽出領域を特定するためのキーワードを 指定します。

javasrcCount属性

javasrcCount
属性は、キーワードにマッチした何番目の領域を 抽出領域とするかを指定します。

javasrcHilight属性

javasrcHilight
属性は、ハイライト処理を行う領域を指定するための 正規表現を指定します。

javasrcSyntaxHilight属性

javasrcSyntaxHilight
属性は、Java文法を意識したハイライト表示を 行うか否かを指定します。

## 使用例

javasrcノーマライザの使用例をに示します。

javasrc.sdoc

この例では、`main`メソッドの切り出しを`javasrcKeyword`属性を用いて行っています。

javasrcノーマライザは `javasrcKeyword`属性で指定された正規表現にマッチした文字列を 見つけると、この文字列を含んでいる行および行内の「{」に対応する「}」を含む 行までを切り出します。

この例で用いたように、Javaのメソッドを切り出したい時に、この指定はとても 便利です。

# tex

入力 | テキスト
出力 | MathML

## 機能

texノーマライザは、TeX数式をMathMLに変換するノーマライザです。

## 属性

なし

## 使用例

texノーマライザの使用例をに示します。

tex.sdoc

この例では、y=\frac{a+b}{z}という数式を TeX数式の形式で記述しています。 SmartDocではMathML数式を記述することができますが、 テキストエディタから数式を入力する場合にはTeX数式を使う方が はるかに便利です。