commit 493dab6881a818133bd49b4c479473ed0e7c7856
Author: Georg Baum <[email protected]>
Date:   Sun Apr 27 18:08:24 2014 +0200

    Fix math package conversion to 2.0 format
    
    When doing the lyx2lyx round trip of the 2.0.8 user guide from format
    413 -> 474 -> 413 you get an invalid document, because the math packages
    mhchem and undertilde are incorrectly converted.
    It turned out that the old reversion code did only work for particular
    package oderings. The new one works for abitrary sorted packages.
    (cherry picked from commit d47a556b46c2dde1a245e9ffa4918111e63fa70e)
    
    Conflicts:
        status.21x

diff --git a/lib/lyx2lyx/lyx_2_1.py b/lib/lyx2lyx/lyx_2_1.py
index 6436ec1..9ecd00a 100644
--- a/lib/lyx2lyx/lyx_2_1.py
+++ b/lib/lyx2lyx/lyx_2_1.py
@@ -546,18 +546,26 @@ def convert_use_packages(document):
 
 def revert_use_packages(document):
     "use_package xxx yyy => use_xxx yyy"
-    packages = ["amsmath", "esint", "mathdots", "mhchem", "undertilde"]
+    packages = ["amsmath", "esint", "mhchem", "mathdots", "undertilde"]
     # the order is arbitrary for the use_package version, and not all packages 
need to be given.
     # Ensure a complete list and correct order (important for older LyX 
versions and especially lyx2lyx)
-    j = 0
+    # first loop: find line with first package
+    j = -1
     for p in packages:
         regexp = re.compile(r'(\\use_package\s+%s)' % p)
-        i = find_re(document.header, regexp, j)
+        i = find_re(document.header, regexp, 0)
+        if i != -1 and (j < 0 or i < j):
+            j = i
+    # second loop: replace or insert packages in front of all existing ones
+    for p in packages:
+        regexp = re.compile(r'(\\use_package\s+%s)' % p)
+        i = find_re(document.header, regexp, 0)
         if i != -1:
             value = get_value(document.header, "\\use_package %s" % p, 
i).split()[1]
             del document.header[i]
-            j = i
-            document.header.insert(j, "\\use_%s %s"  % (p, value))
+            document.header.insert(j, "\\use_%s %s" % (p, value))
+        else:
+            document.header.insert(j, "\\use_%s 1" % p)
         j += 1
 
 

Reply via email to