IDLを定義するのに使い回しできるものを探すために、struct, constants, enumを書き出して一覧を作成することにしました。IDL名を書き出すのにシェルコマンドだけでやってみましたが、いまいちだったので結局Pythonスクリプトでやり直しました(LibreOffice SDKのIDLファイルからENUM, STRUCT, CONSTANTS, TYPEDEFを抜き出すマクロ-p--q)。
シェルコマンドだけ書き出す
IDLファイル内から正規表現を使って抜き出しています。IDLファイルの書き方に少しばらつきがあるので、正確に抽出できていないものが混じってきてしまいます。
structを定義しているIDLファイルを抽出する
SDK内のidlフォルダのパス: /opt/libreoffice6.4/sdk/idl
抽出条件: "published struct"という単語を含むファイル
まずこの条件でgrepでidlファイル名一覧を取得してみます。
grep -r "published struct" /opt/libreoffice6.4/sdk/idl
すごく沢山でてきました、、、
grep -rl "published struct" /opt/libreoffice6.4/sdk/idl
これでidlファイルへのパスだけ取得できました。
grep -rl 'published struct' /opt/libreoffice6.4/sdk/idl|sed -E 's/\/opt\/libreoffice6.4\/sdk\/idl\///; s/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\.idl/<a href="https:\/\/api.libreoffice.org\/docs\/idl\/ref\/struct\1_1_1\2_1_1\3_1_1\4_1_1\5_1_1\6.html">\1\.\2\.\3\.\4\.\5\.\6<\/a><br>/; s/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\.idl/<a href="https:\/\/api.libreoffice.org\/docs\/idl\/ref\/struct\1_1_1\2_1_1\3_1_1\4_1_1\5.html">\1\.\2\.\3\.\4\.\5<\/a><br>/'|sort>output.html
これでAPIリファレンスへのリンクをつけたhtmlファイルを出力できました。
1つの正規表現パターンでなんとかしたかったのですが、なんともできなかったので、6階層のものと5階層のものについてまずは6階層の方から処理しています。正規表現は全部で3パターンを使っています。
sedはEオプションをつけてセミコンマ区切りで複数条件を指定しています(sed コマンドで複数の条件-e, -E, -r(拡張正規表現)を指定する方法 - Qiita)。
constantsを定義しているIDLファイルを抽出する
grep -rl 'published constants' /opt/libreoffice6.4/sdk/idl|sed -E 's/\/opt\/libreoffice6.4\/sdk\/idl\///; s/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\.idl/<a href="https:\/\/api.libreoffice.org\/docs\/idl\/ref\/namespace\1_1_1\2_1_1\3_1_1\4_1_1\5_1_1\6.html">\1\.\2\.\3\.\4\.\5\.\6<\/a><br>/; s/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\.idl/<a href="https:\/\/api.libreoffice.org\/docs\/idl\/ref\/namespace\1_1_1\2_1_1\3_1_1\4_1_1\5.html">\1\.\2\.\3\.\4\.\5<\/a><br>/'|sort>output.html
enumを定義しているIDLファイルを抽出する
grep -Erl '(^enum )|(published enum)' /opt/libreoffice6.4/sdk/idl|sed -E 's/\/opt\/libreoffice6.4\/sdk\/idl\///; s/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)
\/(\S+)
\.idl/<a href="https:\/\/api.libreoffice.org\/docs\/idl\/ref\/namespace\1_1_1\2_1_1\3_1_1\4_1_1
\5_1_1
\6.html#details">\1\.\2\.\3\.\4\.\5\.\6
\.\7
<\/a><br>/; s/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\.idl/<a href="https:\/\/api.libreoffice.org\/docs\/idl\/ref\/namespace\1_1_1\2_1_1\3_1_1\4_1_1\5.html#details">\1\.\2\.\3\.\4\.\5\.\6<\/a><br>/; s/(\S+)\/(\S+)\/(\S+)\/(\S+)\/(\S+)\.idl/<a href="https:\/\/api.libreoffice.org\/docs\/idl\/ref\/namespace\1_1_1\2_1_1\3_1_1\4.html#details">\1\.\2\.\3\.\4\.\5<\/a><br>/'|sort>output.html
enumは7層まであるものがあって正規表現パターンがさらに1つ追加しています。enumにはAPIリファレンスで独立したページが与えられていないので、enumの解説が載っているページへのリンクになっています。
0 件のコメント:
コメントを投稿