LibreOffice SDKのIDLファイルからstruct, constants, enumを書き出すシェルコマンド

2020-11-20

LibreOffice

t f B! P L

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の解説が載っているページへのリンクになっています。

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ