現在 CYPAC では BeatWord のデザインをベースに、LINUX や FreeBSD などの UNIX 向けの日本語ワープロの開発を行っています。 開発コードネームとして Papyrus と名付けています。
すでに、一部のコーディング作業を開始していましたが、 現在は BeatWordのベータ版の安定化作業を優先させています。
Papyrus の技術情報を、簡単に紹介します。
内部は Model, View, Controller の伝統的な OO デザインを基本 としています。ターゲット環境に依存したコードは極力 View に集中 させ、他のプラットホームに移植しやすくしています。
また Model 部分をさらに Primitive と Instance に分ているのが Papyrus の内部デザインの大きな特徴です。Primitive というのは、 一言で表現するとファイル等にセーブすべきオブジェクトです。
コンピュータのメモリ上に存在するオブジェクトには Primitive 以外 に、一時的な作業用のオブジェクトや、高速化のためのオブジェクトが 存在します。このようなオブジェクトを含んだものを Instance と呼 んで区別しています。
OO の学術的な分野は疎いのですが、Primitive と Instance という アイディアは独自のものかもしれません。
最初のターゲット OS は、FreeBSD, LINUX 等のフリーの UNIX です。 利用する X の Widget/ライブラリは jx, xclass, InterViews, GNUSTEP, gtk+ を検討した結果一番機能や国際化が進んでいそうな gtk+ を採用 しました。
gtk+ 版ができたら、Mac OS, Mac OS X, Windows, OPENSTEP(GNUSTEP?) 版にもチャレンジしたいと考えています。
PostScript を内部表現として考え、画面やプリンタなどのデバイ スに極力依存しない作りを考えています。DPS/X が実装の際の重要な プラットホームです。ただし、フリーの DPS/X である dgs の開発が 遅れているため、この部分は GnomeCanvas 等に置き換える可能性が あります。
ソースコードはすべて C++ で書いています。Objective-C の全部 動的という考え方は十分理解していますが、ワープロの場合、フォー マッティングの計算量が非常に重要になってくるので、この効率を重 視して C++ を使用しています。ちなみに gtk+ のインターフェース としてGtk--- は今のところ使っていません。OPENSTEP 版を書くこと があるなら、View 部分は Objective-C という作りが現実的だと考え ています。ANSI C++ の定義にある RTTI や name space は、まだ世 の中の処理系が十分に対応していないので使わない方針です。
マクロ言語として、昔作成した OO 拡張可能な LISP インター プリタの WOOLを組み込む予定です。
SGML の取り扱いを考えています。SGML の自然な拡張として HTML や XML を扱えるようにしたいです。ただし、最初の実装では見送る 可能性は高いです。
また、昔 MIF, RTF などのパーサを書いた経験があるので、MIF, RTF のファイルの読み書きは実現したいです。(word 6 以降の RTF は MS が 公開している仕様通りではないため、かなりの困難が予想できますが、、)
Papyrus は去年(1998年)のクリスマスからコーディングを始め ました。進み具合い(ステータス)は以下のような状況です。
Papyrus のベース用に自作の C++ クラスライブラリの Leafを、 4 年ぶりにメンテナンスしました。最近の C++ コンパイラでもコン パイルできるようになりました(egcs は C++ の解釈があちこち変な ので未対応)。
バッファ部分は 9 割ほどコーディングが完了しました。ed みたい な、テスト用のテキストベースのレイヤーを通じてすでに簡単な文章 の編集が可能です。真の国際対応を目指すため SBCS, DBCS の混在や 4 byte の charset の混在が可能というのが特徴です。
gtk+ を使ったフレームワークは大枠ができ上がった状況です。 gtk+ は UI リソースをソースコードから分離する方法がないため、 gimp では gtkconv のような方法が使われています。この方法では、 同じ英文に対して、別の日本語訳をつけるということができないため、 国際対応可能な、独自の UI リソース管理の仕組みを作ろうかと思っ ています。X のネイティブなリソースファイルは、作業の効率が 非常に悪いため、できたら使いたくないと考えています。
XIM による日本語の入力や、IC のコントロールができるようになり ました(gtktext のコードを参考にした)。ただ XIM では Windows の ように縦書き対応がされていないのが痛いです。Papyrus は縦書きも 当然対応します。
レイアウト関連、フレーム関連は OOD の段階です。BeatWord の時 のデザインモデルにはなかった、下地カラー/パターンのサポート、 背景画像や、画像のトリミング/拡大縮小関連をどう表現するか、自 動拡大縮小する表をどう表現するか、TeX のように表や図をページ中 に自動配置するかどうかなど、デザインの検討段階です。
今は DPS/X、dgs、置き換えの対象と考えられる GnomeCanvas 等の 調査を時間をみて行っています。
Copyright (C) 2000-2008 CYPAC