MakeWebj1.0.0

一応自分的にはそれなりのものができてると思ってるので適当にメモ。

概要

MakeWebj1.0.0では大きくわけて3つの階層(パッケージ)から構成されています。

  • Builder(作る人) :テキストからHTMLへの変換を行う
  • Product(変換の材料):変換前のテキストと、変換後のHTMLを保持する
  • Client(利用者) :変換の指示を行う

Clientからの要求に対して、BuilderがProductを使って変換の処理を行うのが、基本的な流れになります。

Builder - 変換処理

Builderパッケージの内部は以下のように構成されています。

抽象クラス

Builderクラスは、MakeWebjの核となるクラスです。MakeWebjの文法の定義から、変換を行う手順までを規定しています。
また、複数の変換を内部的に行えるようにする(HTMLの内部でContentsBuilderを利用する)ために、Builderクラスの内部に、Builderクラスを持つというコンポジットの構造を持っています。変換のさいには、再帰的に、内部のBuilderクラスが実行されます。

  • Builder
具象クラス

以下のクラスはすべてBuilderクラスを継承して作られています。

  • HookCommandBuilder (テキスト→フックコマンドへの変換を行います)
  • HtmlBuilder (フックコマンド→HTMLへの変換を行います。内部的に、HookCommandBuilderとContensBuilderを利用しています)
  • ContentsBuilder(目次の生成を行います)
  • WikiBuilder(TapestryWiki用に作られました。テキストをMakeWebj用にの補完します。内部的にHtmlBuilderを利用しています)

Product - データの持ち方

Productパッケージの内部では、1つのクラスしか存在しません。
PlainListクラスが、(変換の元になる)テキストと、(テキストから変換される)HTMLの両方を保持します。

Client - 利用方法

ClientパッケージはBuilderパッケージへの指示を行います。
具体的には、入力と出力のファイル名と、どのようなタイプの変換を行うのか(HTMLの変換なのか、Wiki用の変換を行うのか)をBuilderパッケージに指示を行います。