コード例 #1
0
def main():
    oxtf = os.path.join(src_path, "..", "oxt")  # oxtフォルダの絶対パスの取得。
    if not os.path.exists(oxtf):  # oxtフォルダがなければ作成する。
        os.mkdir(oxtf)
    oxt = os.path.join(oxtf, BASE_NAME + ".oxt")  # 作成するoxtファイルの絶対パスを取得。
    createBK(oxt)  # すでにあるoxtファイルをbkに改名。
    os.chdir(src_path)  # srcフォルダに移動。
    if not shutil.which("zip"):  # zipコマンドの有効を確認。
        print("The zip command must be valid for execution.")
        sys.exit()
    mani = glob.glob(os.path.join("META-INF",
                                  "manifest.xml"))  # manifest.xmlを取得。
    rdbs = glob.glob("*.rdb")  # rdbファイルを取得。
    comps = glob.glob("*.components")  # .componentsファイルを取得。
    pys = glob.glob("*.py")  # Python UNO Componentファイルを取得。
    xcus = glob.glob("*.xcu")  # xcuファイルを取得。
    icons = glob.glob(os.path.join("icons", "*.png"))
    lst_files = list()
    for lst in mani, rdbs, comps, pys, xcus, icons:  # oxtファイルにいれるファイルリストを取得。
        if lst:
            lst_files.extend(lst)
    args = ["zip", oxt]
    args.extend(lst_files)
    subprocess.run(args)  # 必須ファイルをoxtファイルに収納。
    if os.path.exists("pythonpath"):  # pythonpathフォルダがあるとき
        exts = "py", "mo"  # oxtファイルに含めるファイルの拡張子のタプル。
        lst_files = list()  # ファイルリストの初期化。
        for ext in exts:
            g = glob.glob(os.path.join("pythonpath", "**", "*." + ext),
                          recursive=True)  # 指定拡張子のファイルのパスを取得。
            if g: lst_files.extend(g)  # 指定拡張子のファイルがあるのならリストに追加。
        if not g:
            args = ["zip", "-u", oxt]
            args.extend(lst_files)
            subprocess.run(args)  # pythonpathフォルダをoxtファイルに収納。
コード例 #2
0
ファイル: step3createXCUs.py プロジェクト: p--q/UNOIDLtype
def main():
    #Creation of ProtocolHandler.xcu
    os.chdir(src_path)  # srcフォルダに移動。
    for dic in LST:  # 設定リストの各辞書について
        if "HANDLED_PROTOCOL" in dic:  # HANDLED_PROTOCOLが辞書のキーにあるとき
            filename = "ProtocolHandler.xcu"
            createBK(filename)  # すでにあるファイルをbkに改名
            with open(filename, "w", encoding="utf-8") as fp:
                rt = Elem(
                    "oor:component-data", {
                        "oor:name": "ProtocolHandler",
                        "oor:package": "org.openoffice.Office",
                        "xmlns:oor": "http://openoffice.org/2001/registry",
                        "xmlns:xs": "http://www.w3.org/2001/XMLSchema",
                        "xmlns:xsi":
                        "http://www.w3.org/2001/XMLSchema-instance"
                    })  # 根の要素を作成。
                rt.append(Elem("node", {'oor:name': "HandlerSet"}))
                rt[0].append(
                    Elem("node", {
                        'oor:name': dic["IMPLE_NAME"],
                        "oor:op": "replace"
                    }))
                rt[0][0].append(
                    Elem("prop", {
                        'oor:name': "Protocols",
                        "oor:type": "oor:string-list"
                    }))
                rt[0][0][0].append(
                    Elem("value", text=dic["HANDLED_PROTOCOL"] + ":*"))
                tree = ET.ElementTree(
                    rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
                tree.write(fp.name, "utf-8",
                           True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
                print(filename + " has been created.")
            #Creation of Addons.xcu
            filename = "Addons.xcu"
            createBK(filename)  # すでにあるファイルをbkに改名
            with open(filename, "w", encoding="utf-8") as fp:
                rt = Elem(
                    "oor:component-data", {
                        "oor:name": "Addons",
                        "oor:package": "org.openoffice.Office",
                        "xmlns:oor": "http://openoffice.org/2001/registry",
                        "xmlns:xs": "http://www.w3.org/2001/XMLSchema"
                    })  # 根の要素を作成。
                rt.append(Elem("node", {'oor:name': "AddonUI"}))
                rt[0].extend([
                    AddonMenu(dic),
                    OfficeMenuBar(dic),
                    OfficeToolBar(dic),
                    Images(dic),
                    OfficeHelp(dic)
                ])  # 追加するノード。
                tree = ET.ElementTree(
                    rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
                tree.write(fp.name, "utf-8",
                           True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
                print(filename + " has been created.")
コード例 #3
0
def createComponentsFile(filename):  # .componentファイルの作成。
    createBK(filename)  # 引数のファイルがあれば拡張子bkを付ける。
    with open(filename, "w", encoding="utf-8") as fp:
        rt = Elem("components",
                  {"xmlns": "http://openoffice.org/2010/uno-components"})
        for dic in LST:  # Python UNO Component Fileの登録。
            rt.append(createComponentNode(dic))
        tree = ET.ElementTree(
            rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
        tree.write(fp.name, "utf-8",
                   True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
        print(filename + " file has been created.")
コード例 #4
0
def createManifestFile(component_file, unordb_file):  # manifext.xmlファイルの作成
    mani = os.path.join(src_path, "META-INF",
                        "manifest.xml")  # manifest.xmlの絶対パスを取得。
    if not os.path.exists("META-INF"):  # META-INFフォルダがなければ作成する。
        os.mkdir("META-INF")
    else:
        createBK(mani)  # 既存のファイルを拡張子bkでバックアップ。
    with open(mani, "w", encoding="utf-8") as fp:
        rt = Elem("manifest:manifest",
                  {"xmlns:manifest": "http://openoffice.org/2001/manifest"})
        xcus = glob.glob("*.xcu")  # xcuファイルのリストを取得。
        addonsxcu = "Addons.xcu"
        if addonsxcu in xcus:  # "Addons.xcu"ファイルがあるときは先頭のノードにする。
            rt.append(addcfgNode(addonsxcu))
            xcus.remove(addonsxcu)
        for xcu in xcus:
            rt.append(addcfgNode(xcu))
        if os.path.exists(unordb_file):
            rt.append(
                Elem(
                    "manifest:file-entry", {
                        "manifest:full-path":
                        unordb_file,
                        "manifest:media-type":
                        "application/vnd.sun.star.uno-typelibrary;type=RDB"
                    }))
        if os.path.exists(component_file):
            rt.append(
                Elem(
                    "manifest:file-entry", {
                        "manifest:full-path":
                        component_file,
                        "manifest:media-type":
                        "application/vnd.sun.star.uno-components"
                    }))
        tree = ET.ElementTree(
            rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
        tree.write(fp.name, "utf-8",
                   True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
        print("manifest.xml file has been created.")
コード例 #5
0
def main():
    # 各々のパスの取得。
    uno_path = os.environ["UNO_PATH"]  # programフォルダへの絶対パスを取得。
    regmerge = os.path.join(uno_path, "regmerge")  # regmergeの絶対パスを取得。
    regview = os.path.join(uno_path, "regview")  # regviewの絶対パスを取得。
    sdk_path = os.path.join(os.path.dirname(uno_path),
                            "sdk")  # SDKフォルダへの絶対パスを取得。
    idlc = os.path.join(sdk_path, "bin", "idlc")  # idlcの絶対パスを取得。
    sdkidl_path = os.path.join(sdk_path, "idl")  # SDKのidlフォルダへの絶対パスを取得。
    #すべての存在確認をする。ツールがそろっていなければ終了する。
    for p in [regmerge, regview, idlc, sdkidl_path]:
        if not os.path.exists(p):
            print("Erorr: " + p + " does not exit.")
            sys.exit()
    myidl_path = os.path.join(src_path, "idl")  # PyDevプロジェクトのidlフォルダへの絶対パスを取得。
    if os.path.exists(myidl_path):  # idlフォルダがあるとき
        os.chdir(myidl_path)  # idlフォルダに移動
        for i in glob.iglob("*.urd"):  # すでにあるurdファイルを削除。
            os.remove(i)
        for i in glob.iglob("*.idl"):  # 各idlファイルについて
            args = [idlc, "-I.", "-I" + sdkidl_path, "-O..", i]
            subprocess.run(args)  # idlファイルをコンパイルして親フォルダに出力する。
        os.chdir(src_path)  # srcフォルダに移動
        createBK(unordb_file)  # すでにあるrdbファイルをbkに改名
        urds = glob.glob("*.urd")  # urdファイルのリストを取得。
        if urds:  # urdファイルがあるとき
            args = [regmerge, unordb_file, "/UCR"]
            args.extend(urds)
            subprocess.run(
                args
            )  # mergeKeyName /UCR(UNO core reflection)も追加してurdファイルをuno.rdbファイルにまとめる。
        if os.path.exists(unordb_file):  # rdbファイルができていれば、
            args = [regview, unordb_file]
            subprocess.run(args)  # rdbファイルの中身を出力。
            print(unordb_file + " creation succeeded.")
            for i in glob.iglob("*.urd"):  # すでにあるurdファイルを削除。
                os.remove(i)
        else:  # urdファイルが出力されていないとき
            print("urd files are not created.")
コード例 #6
0
ファイル: step3createXCUs.py プロジェクト: p--q/UNOIDLtype
 def createWindwStatexcu(self, dic, ctxt):  # ツールバーのプロパティの設定。
     #Creation of WriterWindwState.xcu、Calcの場合はCalcWindwState.xcu
     filename = ctxt + "WindowState.xcu"
     createBK(filename)  # すでにあるファイルをbkに改名
     with open(filename, "w", encoding="utf-8") as fp:
         rt = Elem(
             "oor:component-data", {
                 "oor:name": ctxt + "WindowState",
                 "oor:package": "org.openoffice.Office.UI",
                 "xmlns:oor": "http://openoffice.org/2001/registry",
                 "xmlns:xs": "http://www.w3.org/2001/XMLSchema"
             })  # 根の要素を作成。
         rt.append(Elem("node", {'oor:name': "UIElements"}))
         rt[0].append(Elem("node", {'oor:name': "States"}))
         rt[0][0].append(
             Elem(
                 "node", {
                     'oor:name':
                     "private:resource/toolbar/addon_" +
                     dic["HANDLED_PROTOCOL"],
                     "oor:op":
                     "replace"
                 }))
         rt[0][0][0].extend(super().createWindowStateNodes(
             dic, {
                 "UIName": {
                     "en-US": "OfficeToolBar Title"
                 },
                 "ContextSensitive": "false",
                 "Visible": "true",
                 "Docked": "false"
             }))  # ツールバーのプロパティを設定。
         tree = ET.ElementTree(
             rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
         tree.write(fp.name, "utf-8",
                    True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
         print(filename + " has been created.")