土日シリーズ「DTPの構造を考える」です。
このシリーズ、第9回までで、本の構造、さらにDTPソフト全体でもつ、フォント、色、ライブラリの構造を概念的に説明してきました。
前回、その内容を、プログラムに落とし込んでいくための、アルゴリズムとメモリ構造について説明していくということを書きました。
今回はまず、メモリ構造からです。
■一般的なメモリ構造の話
といっても、一般的なメモリ構造の話は、ちょうど、
一般的な編集ソフトの作り方 その10:メモリ上への要素展開(共通要素の例)
http://blog.goo.ne.jp/xmldtp/e/84fb2a6adcdabd978b48422a9bff14d7
に書いて、サンプルソースを張ったところです。
つまり、
・子供と、
・属性(座標位置、文字、色など)と
・メソッド
・insertChild(子供の挿入)
・deleteChild(子供の削除)
・読み(readData)
・書き(saveData)
なんかをもっていて、実際の各要素は、さらに、
・表示
・位置決め
ロジックを必要とするというものです。
■各要素について
そこで、DTPソフトをもし作ろうとする場合、
1.構成要素を考える
本、ページ、枠、行、文字、写真、四角形、まる・・・・などなどです。
枠にも、いろんな種類がありますし、文字にもいろんな種類があります。
2.その構成要素の親子関係を考える
本 | ページ |------- | | 枠 写 真 | 行 | 文字
みたいな親子関係です。DTPの場合はツリーになることが多いです。
3.それぞれの属性を考える
たとえば、写真には文字はないですし、文字には斜体はありますが、ページに斜体は普通ありません(いや、そーいう製本をすれば作れるでしょうけど、ふつうそんなことはしない)。
つまり、各要素に応じて、属性があります。それを考えます。
4.それぞれの表示、位置決めのアルゴリズムを考える
ここが中心になります。行に関しては、前回書いたとおり、JIS規格があると。。
それに従ってもいいし、さらに付け加えるなどなど。。ソフトによって、ここが大きく違ってきます。
5.そのクラスを作ります。
たとえば、枠なら
public class Waku extends Item
みたいなかんじで、要素の共通部分(ここではItem)をextendsして、さらに、各要素固有の4で決めた内容である、表示、位置決めなどを入れていきます。
■調査する場合
DTPソフトを比較・調査する場合でも、上記の手順はつまえます
1.要素はどうなっているのか?
→自分がやりたい操作の要素があるほうが便利
2.その要素の親子関係など
→枠の連結も重要
3.各要素における属性
自分が表現したいものが、その属性を使って出来るだけ簡単に表せたほうがいい。
例:文字に縁取りがなくても、文字を2文字おいて、上の字を中央あわせすれば、
たしかにそれっぽく見えるかもしれないが、縁取り属性があったほうが便利
4.表示、位置決めアルゴリズム
→どこまでがんばるかを見る
あとは、実際のものを作ってみてとか、操作性という話になる。
■困る点
でも、これで、困る点が1箇所あります。
検索のとき、1文字1クラスで入っているので、クラスを1文字1文字とってきて、比較する形になります。文字列検索の便利なものは使えません。
この場合・・・
枠の属性として、”枠の中に入る文字”を持ってしまい、文字クラスでは、その枠が持っている文字の何文字目に相当するかの配列番号とかを持っていれば、枠の属性を調べることで、文字列検索が出来ます。めでたしめでたし。。だけど、いまはそんなことしないで、1文字づつ調べたほうが早いかも??
ということで、きょうのメモリ構造のところはおしまいです。