2010-01-01から1ヶ月間の記事一覧

Script Provider

OpenOffice.org には Scripting Framework がありマクロを色々な言語で書くことができる。新しく言語を追加することもできるため好きな言語でマクロを書くこともできる。もちろん言語 - UNO ブリッジが必要であるが Ruby でもマクロが書けるようにしたいとこ…

SimpleFileAccess とネイティブの File

Script provider を書くといつも迷うのは css.ucb.SimpleFileAccess (sfa) サービスを利用してファイルシステムにアクセスするか、それとも言語備え付けのファイルアクセスを利用するかということ。 OpenOffice.org では基本的に URL を利用しているため sfa…

Component Loader

コンポーネントローダーは Ruby で書かれたファイルを読み込み、クラスを UNO コンポーネントとしてインスタンス化するための sigle component factory インスタンスを返す。Java ではファイル単位、Python でもファイルのモジュールで単位に分かれているた…

CMS

http://github.com/hanya/RUNO

Exception

例外をラップして rb_exc_raise した例外でプログラムが終了すると Segmentation fault! rescue すると起きない。別の例外のインスタンスの attribute にラップ済みの別の例外を設定して raise すれば問題ないみたい。例外を吐いて終了したときの処理と関連…

ローダー

アダプタがあれば Ruby で UNO コンポーネントを作成できるがサービスまでは実装できない。それを行うにはローダーが必要。ローダーは要求があったコンポーネントのインスタンスを作成して返す。要するに組込み型 Ruby なわけ。README.EXT.ja に載っている組…

変になった

アダプタの追加が終わったのでダイアログでリスナーの例を書いてたらダイアログにモデルを設定するところでエラー。 前のバージョンでは問題ないのでどっかおかしい・・・。問題は uno.rb での初期化らしい。原因は local component context を使っていたか…

インターフェースのインポート

インターフェースをインポートできるようにしたが、これは adapter と関係していてそれを実装しなければ必要ない。 インターフェースをインポートするときに作成したモジュールは親インターフェースのクラスを継承しないといけないのかな・・・。内部の実装…

アダプタ

ブリッジは Ruby から UNO コンポーネントのメソッドなどを呼び出す肩代わりをしてくれる。一方でアダプタは Ruby のメソッドを UNO から呼び出す仲介をしてくれる。例えば、ダイアログのボタンにリスナーを設定するときには Ruby でインターフェースを実装…

VC 2008 Express でコンパイル

Windows 上でも利用できるようにコンパイル。VC の GUI からはコンパイルできるようになったけど extconf.rb を利用した Makefile でコンパイルできるようにできるかどうか・・・。あと、MinGW でもコンパイルできるようにしたい・・・。E:\usr\local\OOo\De…

空の Sequence と ByteSequence

配列が変だと思ったら空の配列が ByteSequence になってしまっていた。配列が空だと Sequence へのテンプレートに一致する。代わりの方法は・・・。 Any a; if (a >>= bytes)こうした。 TypeDescription desc(OUString(RTL_CONSTASCII_USTRINGPARAM("[]byte"…

uno.rb

uno.rb を入れておこうと思ったけど問題は中身。bootstrap 関連だけでいいか。

Encoding

エンコーディングなんて嫌いだけど仕方ない。ruby/encoding.h をインクルードして rb_utf8_encoding() ってしてたらエラーが出ると思ってたけど ruby/io.h 経由でインクルードしたら直った。 symbol lookup error: /.../runo.so: undefined symbol: _Z16rb_u…

has_interface?

has_interface? method for RunoProxy to check the UNO object supports specific interface.

変なエラー

struct のフィールド値を設定しようとするとメソッドがありませんとエラーが出た。おかしいと思ったら uno.rb でのブートストラップがおかしいらしい。とりあえず残るは ByteSequence と String のエンコード関係。・・・と思ったら内部のエラーだった。

Connector

Runo モジュール用に柔軟なコネクタを書いてみた。 # Connecting to OpenOffice.org. module Connector class << self def create_resolver local_ctx = Runo.component_context smgr = local_ctx.getServiceManager smgr.createInstanceWithContext( "com.s…

inspect

Py-UNO みたいに色々表示しようかと思ったけどやめた。インターフェースとかは型名だけでいいか。

Filter Names

A. FilterNames - N->N->N を Ruby で書き直したもの。 # coding: utf-8 require 'runo' # Shows list of filter names that are installed your environment. # # meaning of the list: # UIName: name shown in the file open dialog # Name: filter name …

rb_funcall の引数指定

Segmentation fault 出ると思ったらまた rb_funcall の引数が間違ってた。 VALUE rb_funcall(VALUE recv, ID mid, int argc, ...) recv: メソッドを呼び出す対象。 mid: メソッドを ID で指定。rb_intern("new") とか argc: メソッドに与えたい引数の数 ...:…

Struct とか

四角書くだけ。 desktop = get_desktop(local_ctx) doc = desktop.loadComponentFromURL("private:factory/sdraw", "_blank", 0, []) draw_page = doc.getDrawPages().getByIndex(0) Point, Size = Runo.uno_require("com.sun.star.awt.Point", "com.sun.sta…

ToDo

思いつくリストはこれくらい。だんだん面倒だから後回し・・・と思ったのが残ってきた。 Structs modifiable returned Type value ByteSequence Any invoke VALUE to any conversion for T_DATA type raise exception comparizon operators inspect Method o…

メソッド名

キャメルケースな UNO のメソッドを _ 区切りで〜と思ってたけど。 getServiceManager get_service_manager くらいならいいけど、loadComponentFromURL load_component_from_url こんな変換は無駄な気がする。css.script.XInvocation インターフェースのメソ…

require

Python-UNO だと import をフックして enum, constant, struct, interface をインポートしている。でも RUNO では require をフックしたくないから uno_require モジュールメソッドを定義することにする。イメージとしてはこんな感じ。 require 'runo' Point…

相性悪い

UNO の struct を動的にクラスとして定義しようとしたら Ruby ではモジュール名は大文字で始まらないといけないんだった。com.honyo.geho.Point みたいな名前を仕方なく Runo::Com::Honyo::Geho::Point クラスとして定義することにしよう。UNO の struct は…

Type Mapping

大体決まってこんな感じ。 UNO Ruby C++ UNO Type Description void nil void Empty type, used only as method return type and in any. boolean TrueClass, FalseClass sal_Bool Can be true or false. byte Fixnum sal_Int8 Signed 8-bit integer type (r…

Hello World

動くかどうか確認するには Hello World が最適 (?)。OpenOffice.org を次のような引数付きで起動して。 ~/opt/ooo-dev3/program/soffice '-accept=socket,host=localhost,port=2083;urp;StarOffice.ServiceManager' -norestore"環境変数に次の値を設定。 exp…

RUNO

Ruby-UNO ブリッジが欲しくて作り始めた RUNO。 完成までたどり着けるのかどうなのか・・・。