LibreOffice5(147)TCUの改良

2018-03-02

旧ブログ

t f B! P L
LibreOffice5(86)拡張機能: TCU - Tree Command for UNO の作成をv2に改めました。
GitHub: p--q/TCU 拡張機能ファイル Download
(2018.3.9追記。v3になりました。LibreOffice5(150)TCU v3。)

前の関連記事:LibreOffice5(146)コントロールダイアログとコントロールコンテナのサービスとインターフェイスの比較


アルゴリズムを変更


これまで出力しないものを指定していましたが、それだとwcompare()のときに、スーパークラスが出力されなかったりするので、出力しないものを指定していたのをやめて、出力するものを指定するようにしました。

これによってwcompare()で間違って出力されていたものも正しく出力されるようになりました(LibreOffice5(96)デスクトップとフレーㇺとのサービスとインターフェイスの比較XComponentLoaderインターフェイスなど)。

ツリーを出力する前にまずすべてのサービスとインターフェイスを取得するので、余分にループを回すことになります。

さらに、すべてのサービスやインターフェイスのなかでどれから出力するのかを、すべてのスーパークラスを調べて決定しないといけませんの、それもオーバーヘッドになります。

tree()メソッドとwcompare()メソッドは同じ関数を使うように統一しました。

これに伴ってtree.pyを廃止して、wcompare.pyを追加しました。

getPropertySetInfo().getProperties()でプロパティ名以外にアトリビュート名も返ってくることがわかったので、アトリビュートででてきたものはサービスを介さないプロパティ名としては出力しないようにしました(v2.0.2以降)。

サービスやインターフェイスに属しないプロパティ


オブジェクトのgetProperties()メソッドかgetPropertySetInfo().getProperties()メソッドですべてのプロパティが取得できるので、これらプロパティのうち、TypeDescriptionオブジェクトをもとにサービスのプロパティやインターフェイスのアトリビュートとしてでてこなかったものを、「サービスやインターフェイスに属しないプロパティ」として最後に出力しています。

つまりこれらのプロパティはTypeDescriptionManagerサービスのgetByHierarchicalName()メソッドにIDL名を渡して取得できるTypeDescriptionオブジェクトから取得できないプロパティに該当します。

この「サービスやインターフェイスに属しないプロパティ」は所属するサービスやインターフェイスがないのでAPIリファレンスで探すことはできません。

LibreOffice5(148)ConfigurationAccessとConfigurationUpdateAccessのサービスとインターフェイスの比較ではコンフィギュレーションノードのプロパティが「サービスやインターフェイスに属しないプロパティ」としてでてきます。

おそらくこれら「サービスやインターフェイスに属しないプロパティ」は、実装サービスやインターフェイスに属するプロパティやアトリビュートなのだと思いますが、ソースを読んだわけでないのでいまのところ確証はありません。

無視するインターフェイスの変更




XComponentインターフェイスとXInitializationインターフェイスを出力しないインターフェイスからはずしました。

出力しないインターフェイスでPythonの正規表現パターンを指定できるようにしました。

正規表現パターンかどうかは、ドット、アンダースコア、英数字以外のものが含まれるかどうかで判断しています。

なのでドットしか含んでいないインターフェイス名は正規表現パターンとは認識されません。

逆に、正規表現パターンではドットは\.というようにエスケープしないといけません。

オブジェクトのリスナーのメソッドを実装することはないと思うので、デフォルトでX\w*Listenerを指定して、リスナーのメソッドは出力しないようにしました。

lst_levelリストの要素は枝番号


TCU/wcompare.py at master · p--q/TCU

ツリーを作成している関数consumeStack()で、lst_levelリストの入っている数値の意味を「階層」から「枝番号」に改めました。

lst_levelリストはスタックと同じサイクルで消費されるリストで、スタックの要素に対応して1から始まる数値が入っています。

このコンポーネントコンテクストのサービスとインターフェイスを出力したツリーでは4本の枝が存在し、上図のように枝番号をつけています。

TCUのツリーは枝番号が大きな枝先にあるほど、スーパークラスになります。


API Referenceの継承図は下から上に属性をさがしにいく図になっています。

このほか、HTML出力の行を折り返さないようにwhite-space: nowrap;をttタグのスタイルに指定しました。

定数のAPI Referenceへのリンクは相変わらずできていません。

次の関連記事:LibreOffice5(148)ConfigurationAccessとConfigurationUpdateAccessのサービスとインターフェイスの比較

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ