Papyrus プロジェクト

現在 CYPAC では BeatWord のデザインをベースに、LINUX や FreeBSD などの UNIX 向けの日本語ワープロの開発を行っています。 開発コードネームとして Papyrus と名付けています。

すでに、一部のコーディング作業を開始していましたが、 現在は BeatWordのベータ版の安定化作業を優先させています。


Papyrus の技術情報

Papyrus の技術情報を、簡単に紹介します。

独自 OO デザイン

内部は Model, View, Controller の伝統的な OO デザインを基本 としています。ターゲット環境に依存したコードは極力 View に集中 させ、他のプラットホームに移植しやすくしています。

また Model 部分をさらに Primitive と Instance に分ているのが Papyrus の内部デザインの大きな特徴です。Primitive というのは、 一言で表現するとファイル等にセーブすべきオブジェクトです。

コンピュータのメモリ上に存在するオブジェクトには Primitive 以外 に、一時的な作業用のオブジェクトや、高速化のためのオブジェクトが 存在します。このようなオブジェクトを含んだものを Instance と呼 んで区別しています。

OO の学術的な分野は疎いのですが、Primitive と Instance という アイディアは独自のものかもしれません。

ターゲット OS

最初のターゲット OS は、FreeBSD, LINUX 等のフリーの UNIX です。 利用する X の Widget/ライブラリは jx, xclass, InterViews, GNUSTEP, gtk+ を検討した結果一番機能や国際化が進んでいそうな gtk+ を採用 しました。

gtk+ 版ができたら、Mac OS, Mac OS X, Windows, OPENSTEP(GNUSTEP?) 版にもチャレンジしたいと考えています。

PostScript の内部表現

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 の開発状況

Papyrus は去年(1998年)のクリスマスからコーディングを始め ました。進み具合い(ステータス)は以下のような状況です。

基本ライブラリ

Papyrus のベース用に自作の C++ クラスライブラリの Leafを、 4 年ぶりにメンテナンスしました。最近の C++ コンパイラでもコン パイルできるようになりました(egcs は C++ の解釈があちこち変な ので未対応)。

バッファの実装

バッファ部分は 9 割ほどコーディングが完了しました。ed みたい な、テスト用のテキストベースのレイヤーを通じてすでに簡単な文章 の編集が可能です。真の国際対応を目指すため SBCS, DBCS の混在や 4 byte の charset の混在が可能というのが特徴です。

gtk+ のフレームワーク

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