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ファイルに収納。
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.")
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.")
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.")
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.")
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.")