]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/lyx2lyx_tools.py
booktabs: support for \cmidrule trimming
[lyx.git] / lib / lyx2lyx / lyx2lyx_tools.py
index a2930dee43899f6a6636bb9df83a6be8f5ba2cff..75a5c820def0b75b958f5b13505e2780ff08fcec 100644 (file)
@@ -572,7 +572,7 @@ def insert_document_option(document, option):
         return
 
     # add it to the end of the options
-    document.header[options_line] += " ,%s" % option
+    document.header[options_line] += ",%s" % option
 
 
 def remove_document_option(document, option):
@@ -644,6 +644,7 @@ def revert_language(document, lyxname, babelname, polyglossianame):
     primary = False
     secondary = False
 
+    orig_doc_language = document.language
     # Main language first
     if document.language == lyxname:
         primary = True
@@ -669,28 +670,34 @@ def revert_language(document, lyxname, babelname, polyglossianame):
     while True:
         i = find_token(document.body, '\\lang', i)
         if i == -1:
-            return
+            break
         if document.body[i].startswith('\\lang %s' % lyxname):
             secondary = True
+            endlang = get_containing_layout(document.body, i)[2]
+            langswitch = find_token(document.body, '\\lang', i + 1, endlang)
+            startlayout = "\\begin_layout Standard"
+            endlayout = "\\end_layout"
+            if langswitch != -1:
+                endlang = langswitch
+                startlayout = ""
+                endlayout = ""
             if with_polyglossia:
-                add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{%s}}" % polyglossianame])
-                parent = get_containing_layout(document.body, i)
-                document.body[parent[2] : parent[2]] = ["\\begin_layout Standard",
+                add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{%s}}" % polyglossianame])     
+                document.body[endlang : endlang] = [startlayout,
                                         "\\begin_inset ERT", "status open", "",
                                         "\\begin_layout Plain Layout", "", "",
                                         "\\backslash",
                                         "end{%s}" % polyglossianame,
                                         "\\end_layout", "", "\\end_inset", "", "",
-                                        "\\end_layout", ""]
+                                        endlayout, ""]
             elif with_babel:
-                parent = get_containing_layout(document.body, i)
-                document.body[parent[2] : parent[2]] = ["\\begin_layout Standard",
+                document.body[endlang : endlang] = [startlayout,
                                         "\\begin_inset ERT", "status open", "",
                                         "\\begin_layout Plain Layout", "", "",
                                         "\\backslash",
                                         "end{otherlanguage}",
                                         "\\end_layout", "", "\\end_inset", "", "",
-                                        "\\end_layout", ""]
+                                        endlayout, ""]
             del document.body[i]
             if with_polyglossia:
                 document.body[i : i] = ["\\begin_inset ERT", "status open", "",
@@ -708,24 +715,32 @@ def revert_language(document, lyxname, babelname, polyglossianame):
                                         ""]
         elif primary and document.body[i].startswith('\\lang english'):
             # Since we switched the main language manually, English parts need to be marked
+            endlang = get_containing_layout(document.body, i)[2]
+            langswitch = find_token(document.body, '\\lang', i + 1, endlang)
+            startlayout = "\\begin_layout Standard"
+            endlayout = "\\end_layout"
+            if langswitch != -1:
+                endlang = langswitch
+                startlayout = ""
+                endlayout = ""
             if with_polyglossia:
                 parent = get_containing_layout(document.body, i)
-                document.body[parent[2] : parent[2]] = ["\\begin_layout Standard",
+                document.body[endlang : endlang] = [startlayout,
                                         "\\begin_inset ERT", "status open", "",
                                         "\\begin_layout Plain Layout", "", "",
                                         "\\backslash",
                                         "end{english}",
                                         "\\end_layout", "", "\\end_inset", "", "",
-                                        "\\end_layout", ""]
+                                        endlayout, ""]
             elif with_babel:
                 parent = get_containing_layout(document.body, i)
-                document.body[parent[2] : parent[2]] = ["\\begin_layout Standard",
+                document.body[endlang : endlang] = [startlayout,
                                         "\\begin_inset ERT", "status open", "",
                                         "\\begin_layout Plain Layout", "", "",
                                         "\\backslash",
                                         "end{otherlanguage}",
                                         "\\end_layout", "", "\\end_inset", "", "",
-                                        "\\end_layout", ""]
+                                        endlayout, ""]
             del document.body[i]
             if with_polyglossia:
                 document.body[i : i] = ["\\begin_inset ERT", "status open", "",
@@ -744,23 +759,17 @@ def revert_language(document, lyxname, babelname, polyglossianame):
         else:
             i += 1
 
-        # With babel, we need to add the language options
-        if with_babel and (primary or secondary):
-            k = find_token(document.header, "\\options")
-            if k != -1:
-                opts = get_value(document.header, "\\options", i)
-                document.header[k] = "\\options %s,%s" % (opts, babelname)
-            else:
-                l = find_token(document.header, "\\use_default_options")
-                document.header.insert(l + 1, "\\options %s" % babelname)
-            if secondary:
-                # Since the user options are always placed after the babel options,
-                # we need to reset the main language
-                document.body[2 : 2] = ["\\begin_layout Standard",
-                                        "\\begin_inset ERT", "status open", "",
-                                        "\\begin_layout Plain Layout", "", "",
-                                        "\\backslash",
-                                        "selectlanguage{%s}" % document.language,
-                                        "\\end_layout", "", "\\end_inset", "", "",
-                                        "\\end_layout", ""]
+    # With babel, we need to add the language options
+    if with_babel and (primary or secondary):
+        insert_document_option(document, babelname)
+        if secondary and document.body[10] != "selectlanguage{%s}" % orig_doc_language:
+            # Since the user options are always placed after the babel options,
+            # we need to reset the main language
+            document.body[2 : 2] = ["\\begin_layout Standard",
+                                    "\\begin_inset ERT", "status open", "",
+                                    "\\begin_layout Plain Layout", "", "",
+                                    "\\backslash",
+                                    "selectlanguage{%s}" % orig_doc_language,
+                                    "\\end_layout", "", "\\end_inset", "", "",
+                                    "\\end_layout", ""]