]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/lyx2lyx_tools.py
Use acadian rather than canadien
[lyx.git] / lib / lyx2lyx / lyx2lyx_tools.py
index d59ec15175313010922e3ecd7b8c1d60062a733c..9c4fe0bb0bb0db2262babef1e187c5c64b205bb0 100644 (file)
@@ -578,63 +578,40 @@ def insert_document_option(document, option):
     "Insert _option_ as a document option."
 
     # Find \options in the header
-    options_line = find_token(document.header, "\\options", 0)
-
+    i = find_token(document.header, "\\options", 0)
     # if the options does not exists add it after the textclass
-    if options_line == -1:
-        textclass_line = find_token(document.header, "\\textclass", 0)
-        document.header.insert(textclass_line +1,
-                               r"\options %s" % option)
+    if i == -1:
+        i = find_token(document.header, "\\textclass", 0) + 1
+        document.header.insert(i, r"\options %s" % option)
         return
-
-    # add it to the end of the options
-    document.header[options_line] += ",%s" % option
+    # otherwise append to options
+    if not is_document_option(document, option):
+        document.header[i] += ",%s" % option
 
 
 def remove_document_option(document, option):
-    """ Remove _option_ as a document option.
-
-    It is assumed that option belongs to the \options.
-    That can be done running is_document_option(document, option)."""
+    """ Remove _option_ as a document option."""
 
-    options_line = find_token(document.header, "\\options", 0)
-    option_pos = document.header[options_line].find(option)
+    i = find_token(document.header, "\\options")
+    options = get_value(document.header, "\\options", i)
+    options = [op.strip() for op in options.split(',')]
 
-    # Remove option from \options
-    comma_before_pos = document.header[options_line].rfind(',', 0, option_pos)
-    comma_after_pos  = document.header[options_line].find(',', option_pos)
+    # Remove `option` from \options
+    options = [op for op in options if op != option]
 
-    # if there are no commas then it is the single option
-    # and the options line should be removed since it will be empty
-    if comma_before_pos == comma_after_pos == -1:
-        del document.header[options_line]
-        return
-
-    # last option
-    options = document.header[options_line]
-    if comma_after_pos == -1:
-        document.header[options_line] = options[:comma_before_pos].rsplit()
-        return
-
-    document.header[options_line] = options[comma_before_pos: comma_after_pos]
+    if options:
+        document.header[i] = "\\options " + ','.join(options)
+    else:
+        del document.header[i]
 
 
 def is_document_option(document, option):
     "Find if _option_ is a document option"
 
-    # Find \options in the header
-    options_line = find_token(document.header, "\\options", 0)
-
-    # \options is not present in the header
-    if options_line == -1:
-        return False
-
-    option_pos = document.header[options_line].find(option)
-    # option is not present in the \options
-    if option_pos == -1:
-        return False
+    options = get_value(document.header, "\\options")
+    options = [op.strip() for op in options.split(',')]
+    return option in options
 
-    return True
 
 singlepar_insets = [s.strip() for s in
     u"Argument, Caption Above, Caption Below, Caption Bicaption,"
@@ -657,7 +634,7 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""):
             document.warning("Malformed document! Missing \\language_package")
         else:
             pack = get_value(document.header, "\\language_package", i)
-            if pack == "default" or pack == "auto":
+            if pack in ("default", "auto"):
                 use_polyglossia = True
 
     # Do we use this language with polyglossia?
@@ -704,6 +681,18 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""):
             document.body.insert(i, " ")
             continue
         
+        # TODO: handle nesting issues with font attributes, e.g.
+        # \begin_layout Standard
+        # 
+        # \emph on
+        # \lang macedonian
+        # Македонски јазик
+        # \emph default
+        #  — јужнословенски јазик, дел од групата на словенски јазици од јазичното
+        #  семејство на индоевропски јазици.
+        #  Македонскиот е службен и национален јазик во Македонија.
+        # \end_layout
+        
         # Ensure correct handling of list labels
         if (parent[0] in ["Labeling", "Description"]
             and not " " in "\n".join(document.body[parent[3]:i])):
@@ -767,8 +756,11 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""):
                 end_cmd = "\\end{otherlanguage}"
 
         if (not primary or texname == "english"):
-            document.body[i_e:i_e] = put_cmd_in_ert(end_cmd)
-            document.body[i+1:i+1] = put_cmd_in_ert(begin_cmd)
+            try:
+                document.body[i_e:i_e] = put_cmd_in_ert(end_cmd)
+                document.body[i+1:i+1] = put_cmd_in_ert(begin_cmd)
+            except UnboundLocalError:
+                pass
         del document.body[i]
 
     if not (primary or secondary):
@@ -794,6 +786,6 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""):
             doc_lang_switch = "\\resetdefaultlanguage{%s}" % polyglossianame
 
     # Reset LaTeX main language if required and not already done
-    if doc_lang_switch and doc_lang_switch not in document.body[8:20] != doc_lang_switch:
+    if doc_lang_switch and doc_lang_switch[1:] not in document.body[8:20]:
         document.body[2:2] = put_cmd_in_ert(doc_lang_switch,
                                             is_open=True, as_paragraph=True)