commit d9703617bdb438aad302109c320e4531430f3bae
Author: Georg Baum <b...@lyx.org>
Date:   Sat Jun 4 19:40:53 2016 +0200

    Make gen_lfuns.py python3 compatible
    
    Also read files with universal line endings and write files using native 
line
    endings, so the script can also be used on windows without changing the line
    endings.

diff --git a/development/tools/gen_lfuns.py b/development/tools/gen_lfuns.py
index 2c9c5ff..f5d903d 100755
--- a/development/tools/gen_lfuns.py
+++ b/development/tools/gen_lfuns.py
@@ -13,6 +13,7 @@
 # gen_lfuns.py <path/to/LyXAction.cpp> <where/to/save/LFUNs.lyx>
 
 import sys,re,os.path
+import io
 
 def error(message):
     sys.stderr.write(message + '\n')
@@ -24,24 +25,24 @@ def usage(prog_name):
 DOXYGEN_START = "/*!"
 DOXYGEN_END = "},"
 
-LYX_NEWLINE = "\n\\begin_inset Newline newline\n\\end_inset\n\n"
-LYX_BACKSLASH = "\n\\backslash\n"
+LYX_NEWLINE = u"\n\\begin_inset Newline newline\n\\end_inset\n\n"
+LYX_BACKSLASH = u"\n\\backslash\n"
 
-HTMLONLY_START = "\\htmlonly"
-HTMLONLY_END = "\\endhtmlonly"
-LFUN_NAME_ID = "\\var lyx::FuncCode lyx::"
-LFUN_ACTION_ID = "\\li Action: "
-LFUN_NOTION_ID = "\\li Notion: "
-LFUN_SYNTAX_ID = "\\li Syntax: "
-LFUN_PARAMS_ID = "\\li Params: "
-LFUN_SAMPLE_ID = "\\li Sample: "
-LFUN_ORIGIN_ID = "\\li Origin: "
-LFUN_ENDVAR = "\\endvar"
+HTMLONLY_START = u"\\htmlonly"
+HTMLONLY_END = u"\\endhtmlonly"
+LFUN_NAME_ID = u"\\var lyx::FuncCode lyx::"
+LFUN_ACTION_ID = u"\\li Action: "
+LFUN_NOTION_ID = u"\\li Notion: "
+LFUN_SYNTAX_ID = u"\\li Syntax: "
+LFUN_PARAMS_ID = u"\\li Params: "
+LFUN_SAMPLE_ID = u"\\li Sample: "
+LFUN_ORIGIN_ID = u"\\li Origin: "
+LFUN_ENDVAR = u"\\endvar"
 
 ID_DICT = dict(name=LFUN_NAME_ID, action=LFUN_ACTION_ID, 
notion=LFUN_NOTION_ID, 
                 syntax=LFUN_SYNTAX_ID, params=LFUN_PARAMS_ID, 
sample=LFUN_SAMPLE_ID, origin=LFUN_ORIGIN_ID)
 
-LFUNS_HEADER = """# gen_lfuns.py generated this file. For more info see 
http://www.lyx.org/
+LFUNS_HEADER = u"""# gen_lfuns.py generated this file. For more info see 
http://www.lyx.org/
 \\lyxformat 506
 \\begin_document
 \\begin_header
@@ -146,7 +147,7 @@ The \\SpecialChar LyX
 
 """
 
-LFUNS_INTRO ="""\\begin_layout Section*
+LFUNS_INTRO = u"""\\begin_layout Section*
 About this manual
 \\end_layout
 
@@ -200,7 +201,7 @@ In the following, all LFUNs are listed, categorized by 
function.
 """
 
 
-LFUNS_FOOTER = """\\end_body
+LFUNS_FOOTER = u"""\\end_body
 \\end_document
 """
 
@@ -322,58 +323,58 @@ def parse_lfun(str):
 def write_fields(file, lfun):
     """Writes the LFUN contained in the dict lfun to the file. Does not write 
a the file header or footer"""
     # add lfun to LFUNs.lyx
-    file.write("\\begin_layout Subsection*\n")
+    file.write(u"\\begin_layout Subsection*\n")
     file.write(lfun["name"] + "\n")
-    file.write("\\end_layout\n")
-    file.write("\n")
+    file.write(u"\\end_layout\n")
+    file.write(u"\n")
     if lfun["action"] != "":
-        file.write("\\begin_layout Description\n")
+        file.write(u"\\begin_layout Description\n")
         file.write("Action " + lfun["action"] + "\n")
-        file.write("\\end_layout\n")
-        file.write("\n")
+        file.write(u"\\end_layout\n")
+        file.write(u"\n")
     if lfun["notion"] != "":
-        file.write("\\begin_layout Description\n")
+        file.write(u"\\begin_layout Description\n")
         file.write("Notion " + lfun["notion"] + "\n")
-        file.write("\\end_layout\n")
-        file.write("\n")
+        file.write(u"\\end_layout\n")
+        file.write(u"\n")
     if lfun["syntax"] != "":
-        file.write("\\begin_layout Description\n")
+        file.write(u"\\begin_layout Description\n")
         file.write("Syntax " + lfun["syntax"] + "\n")
-        file.write("\\end_layout\n")
-        file.write("\n")
+        file.write(u"\\end_layout\n")
+        file.write(u"\n")
     if lfun["params"] != "":
-        file.write("\\begin_layout Description\n")
+        file.write(u"\\begin_layout Description\n")
         file.write("Params " + lfun["params"] + "\n")
-        file.write("\\end_layout\n")
-        file.write("\n")
+        file.write(u"\\end_layout\n")
+        file.write(u"\n")
     if lfun["sample"] != "":
-        file.write("\\begin_layout Description\n")
+        file.write(u"\\begin_layout Description\n")
         file.write("Sample " + lfun["sample"] + "\n")
-        file.write("\\end_layout\n")
-        file.write("\n")
+        file.write(u"\\end_layout\n")
+        file.write(u"\n")
     if lfun["origin"] != "":
-        file.write("\\begin_layout Description\n")
+        file.write(u"\\begin_layout Description\n")
         file.write("Origin " + lfun["origin"] + "\n")
-        file.write("\\end_layout\n")
-        file.write("\n")
+        file.write(u"\\end_layout\n")
+        file.write(u"\n")
 
 def write_sections(file,lfuns):
     """Write sections of LFUNs"""
     sections = ["Layout", "Edit", "Math", "Buffer", "System", "Hidden"]
     section_headings = {
-        "Layout":  "Layout Functions (Font, Layout and Textclass related)",
-        "Edit":  "Editing Functions (Cursor and Mouse Movement, Copy/Paste 
etc.)",
-        "Math":  "Math Editor Functions",
-        "Buffer":  "Buffer Fuctions (File and Window related)",
-        "System":  "System Functions (Preferences, LyX Server etc.)",
-        "Hidden":  "Hidden Functions (not listed for configuration)"
+        "Layout":  u"Layout Functions (Font, Layout and Textclass related)",
+        "Edit":    u"Editing Functions (Cursor and Mouse Movement, Copy/Paste 
etc.)",
+        "Math":    u"Math Editor Functions",
+        "Buffer":  u"Buffer Fuctions (File and Window related)",
+        "System":  u"System Functions (Preferences, LyX Server etc.)",
+        "Hidden":  u"Hidden Functions (not listed for configuration)"
         }
         # write the lfuns to the file
     for val in sections:
-        file.write("\\begin_layout Section\n")
+        file.write(u"\\begin_layout Section\n")
         file.write(section_headings[val] + "\n")
-        file.write("\\end_layout\n")
-        file.write("\n")
+        file.write(u"\\end_layout\n")
+        file.write(u"\n")
         for lf in lfuns:
             if lf["type"] == val:
                 write_fields(file, lf)
@@ -395,13 +396,13 @@ def main(argv):
             lfuns_path = lfuns_path + "LFUNs.lyx"
         elif os.path.exists(lfuns_path):
             error(script_name + ": %s already exists, delete it and rerun the 
script" % lfuns_path)
-        lfuns_file = open(lfuns_path, 'wb')
+        lfuns_file = io.open(lfuns_path, 'w', encoding='utf_8')
     else:
         lfuns_file = sys.stdout
 
     sys.stderr.write(script_name + ": Start processing " + argv[1] + '\n')
     # Read the input file and write the output file
-    lyxaction_file = open(lyxaction_path, 'rb')
+    lyxaction_file = io.open(lyxaction_path, 'r', encoding='utf_8')
 
     lyxaction_text = lyxaction_file.read()
 

Reply via email to