2021年5月2日日曜日

56: 自分のLibreOfficeまたはOpenOffice拡張機能を作成する基本

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

マクロ(Python、Basic、等)、UNOインターフェイス、UNOコンポーネント、UNOサービス、キーバインディング、メニューアイテム、ツールボタンを登録するために。

話題


About: LibreOffice
About: Apache OpenOffice

この記事の目次


開始コンテキスト



ターゲットコンテキスト



  • 読者は、任意のLibreOfficeまたはApache OpenOffice拡張機能を作成する方法の基本を知る。

オリエンテーション


任意のPythonマクロを格納する任意のLibreOfficeまたはApache OpenOffice拡張機能を作成することについての記事があります。

任意のLibreOfficeまたはApache OpenOfficeマクロ(拡張機能内に格納されているものを含む)をあなたのプログラムから呼び出すことについての記事があります。

任意の拡張機能に特定の内容物を入れる方法についてのいくつかの記事が予定されています。


本体

ト書き
Hypothesizer 7、Objector 56A、Objector 56Bが、コンピューターの前にいる。


1: なぜ、拡張機能を作りたいと思うのか?


Hypothesizer 7
あなたがたは、LibreOfficeまたはApache OpenOfficeのGUIに、「Tools」 -> 「Extension Manager...」というメニューアイテムがあることに気づかれたでしょう?

Objector 56A
ああ、誰か他の奴が作った拡張機能をインストールできるんだろう?

Hypothesizer 7
サー、「誰か他の奴」である必要はありません、あなたでもよいのです。

Objector 56A
俺?俺を誰だと思ってるんだ?

Hypothesizer 7
存じません、サー、皇帝ですか、もしかして?

Objector 56A
俺は独身男だ。

Hypothesizer 7
. . . おめでとうございます!しかし、ご安心ください、独身男の方でも拡張機能を作成できます。

Objector 56B
私は最近、離婚したんです . . .

Hypothesizer 7
えーと、マダム、お祝いを申し上げるべきか、お悔やみを申し上げるべきか、分かりませんが、いずれにせよ、それは、あなたが拡張機能を作成する妨げにはならないでしょう。

Objector 56A
しかし、なぜ、俺が拡張機能を作るべきなのだ?

Hypothesizer 7
あなたの拡張機能は、マクロ、UNOインターフェイスUNOコンポーネントUNOサービス、キーバインディング、メニューアイテム、ツールボタンを格納できます。

Objector 56A
だから?拡張機能の助けなどなくても俺はマクロを作れる。

Hypothesizer 7
おできになるかもしれませんが、いくつのマクロの集まりを1つの拡張機能にパッケージングすることは、それらを配布するのに、またはそれらをご自分のために管理するのに、好都合でしょう。

Objector 56A
そうかい?

Hypothesizer 7
そう思います、それに、キーバインディングのようないくつかのものは、拡張機能を通して登録するのが最もよいでしょう。

Objector 56A
「最もよい」 . . .?、それじゃあ、拡張機能を通してでなくてもよいわけだ . . .

Hypothesizer 7
LibreOfficeまたはApache OpenOfficeのコンフィグレーションファイルをいじって登録することもできるでしょうが、そういう方法は、拡張機能を通して登録するのに比べて良いところがないでしょう、いかなる点においても。

Objector 56B
私はキーバインディングを登録できる、と言いました?

Hypothesizer 7
はい、申しました、マダム。

Objector 56B
あの、私は離婚したんですが . . .

Hypothesizer 7
離婚された方でもキーバインディングは問題なく登録できます。

Objector 56B
「キーバインディング」というのは、'Ctrl' + 'D'を押すと、私の対応するマクロが実行されるということでしょう?

Hypothesizer 7
はい、'Ctrl'の代わりに、'Shift' + 'Ctrl'、'Alt'、'Shift' + ’Alt’でもよいですし、勿論、ファンクションキーも使えますし、'D'の代わりに任意の通常キーでもよいです。

Objector 56B
'D'は'Divorce(離婚)'を表わしているの . . .


2: 拡張機能ファイルの構造


Hypothesizer 7
LibreOfficeまたはApache OpenOffice拡張機能ファイルはZIPファイルです。

Objector 56A
「拡張機能ファイル」というのはどういう意味だ?

Hypothesizer 7
拡張機能はいくつかのファイルからなる1つの機能集合であり、それらのファイルは1つのファイルにパッケージ化されますが、そのファイルが拡張機能ファイルであり、それが、その拡張機能をインストールするために、配布されて使用されます。

Objector 56A
それじゃあ、拡張機能を作成するというのは、拡張機能ファイルを作成することを意味するわけだ。

Hypothesizer 7
拡張機能ファイルの中身の構造は、以下のようなものです。

META-INF
	manifest.xml
KeyBindings.xml
GuiItems.xml
UnoServiceComponents.xml
forLinux64Bits.UnoServiceComponents.xml
. . .
Scripts
	python
		. . .
	java
		. . .
	javascript
		. . .
	beanshell
		. . .
basicLibraries
	. . .
%Jar file name%
%UNO datum types merged file name%
linux64Bits
	%shared library name%
. . .
images
	. . .


Objector 56A
うむ?ふーむ . . .

Hypothesizer 7
'manifest.xml'は、必須であり、まさに、その位置およびそのファイル名でなければなりません。

Objector 56A
それはマニフェストなんだな、明らかに。

Hypothesizer 7
はい、それは、当該拡張機能の他の内容物をリストする、メインのコンフィグレーションファイルです。

他の内容物のそれぞれは、欲しくなければ必要でなく、位置およびファイル名はお好きなように変更できます(少なくともある程度)、ファイルパスはマニフェスト中に指定されますから。

Objector 56A
「少なくともある程度」?

Hypothesizer 7
つまり、少なくとも、マニフェスト以外のファイルは'META-INF'配下に置くべきではありません。

Objector 56B
それらの他の「xml」ファイルは何だ?

Hypothesizer 7
「KeyBindings.xml」は、キーバインディング群のためのコンフィグレーションファイルです。

「GuiItems.xml」は、メニューアイテム群およびツールボタン群のためのコンフィグレーションファイルです。

「UnoServiceComponents.xml」は、Javaで作られた、UNOコンポーネント群およびUNOサービス群のためのコンフィグレーションファイルです。

「forLinux64Bits.UnoServiceComponents.xml」は、C++で作られた、Linux 64bitプラットフォーム用の、UNOコンフィグレーション群およびUNOサービス群のためのコンフィグレーションファイルです。

Objector 56A
うむ?ああ、C++ライブラリはプラットフォーム依存だから、そのようなプラットフォーム依存のコンフィグレーションが必要となるわけか . . .

Objector 56B
私はキーバインディングを登録したいんだけど、その「KeyBindings.xml」ってやつに、何を書けばよいの?

Hypothesizer 7
実のところ、これは、任意の拡張機能を全体として作成する基本のための記事なので、キーバインディングを指定する方法には立ち入りませんが、マニフェストのコンテンツには立ち入ります、次セクションにて。


3: マニフェストのコンテンツ


マニフェストのコンテンツは、以下のようなものです。

@XML ソースコード
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="KeyBindings.xml"/>
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="GuiItems.xml"/>
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-components" manifest:full-path="UnoServiceComponents.xml"/>
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-components;platform=Linux_x86_64" manifest:full-path="forLinux64Bits.UnoServiceComponents.xml"/>
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-typelibrary;type=RDB" manifest:full-path="theBiasPlanet.hiUnoExtensions.rdb"/>
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.framework-script" manifest:full-path="Scripts/python"/>
	<manifest:file-entry manifest:media-type="application/vnd.sun.star.basic-library" manifest:full-path="basicLibraries/theBiasPlanetHiUnoExtensions"/>
</manifest:manifest>

Objector 56A
ふーむ . . .

Hypothesizer 7
それらは、拡張機能の内容物のパスを指定しているだけなので、コードは、見れば分かるものと推測します。

Objector 56A
不要なノードはただ削除すればよいのか?

Hypothesizer 7
はい、削除すればよいです。


4: その構造をZIPファイルにアーカイブする


Hypothesizer 7
構造を準備し終わったら、それをZIPファイルにアーカイブします。

Objector 56B
何を使って?

Hypothesizer 7
任意のZIPツールを使ってです。

Objector 56B
ファイル名はどうすればいいの?

Hypothesizer 7
どのような名前でも構いませんが、通常、ファイル名拡張子は'oxt'です。


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>