commit 5710f68c340dc459e538e62972b7322b6a9027b8
Author: Georg Baum <[email protected]>
Date: Fri Apr 25 22:12:04 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.
diff --git a/lib/lyx2lyx/lyx_2_1.py b/lib/lyx2lyx/lyx_2_1.py
index 8ab0d28..7c439bb 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