]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/parser_tools.py
Qt/Mac disappearing menu syndrom, part II
[lyx.git] / lib / lyx2lyx / parser_tools.py
index 9b5a5559093dc585ffcb834b7d324420b225b7b6..4c698903b5cd2388b6c35d1267cad6de115d9a51 100644 (file)
 import string
 import re
 
+
 def check_token(line, token):
     if line[:len(token)] == token:
        return 1
     return 0
 
+
 # We need to check that the char after the token is space, but I think
 # we can ignore this
 def find_token(lines, token, start, end = 0):
@@ -35,6 +37,7 @@ def find_token(lines, token, start, end = 0):
            return i
     return -1
 
+
 def find_token2(lines, token, start, end = 0):
     if end == 0:
        end = len(lines)
@@ -44,6 +47,7 @@ def find_token2(lines, token, start, end = 0):
            return i
     return -1
 
+
 def find_tokens(lines, tokens, start, end = 0):
     if end == 0:
        end = len(lines)
@@ -54,6 +58,7 @@ def find_tokens(lines, tokens, start, end = 0):
                return i
     return -1
 
+
 def find_re(lines, rexp, start, end = 0):
     if end == 0:
        end = len(lines)
@@ -62,6 +67,7 @@ def find_re(lines, rexp, start, end = 0):
                return i
     return -1
 
+
 def find_token_backwards(lines, token, start):
     m = len(token)
     for i in xrange(start, -1, -1):
@@ -70,6 +76,7 @@ def find_token_backwards(lines, token, start):
            return i
     return -1
 
+
 def find_tokens_backwards(lines, tokens, start):
     for i in xrange(start, -1, -1):
        line = lines[i]
@@ -78,6 +85,7 @@ def find_tokens_backwards(lines, tokens, start):
                return i
     return -1
 
+
 def get_value(lines, token, start, end = 0):
     i = find_token2(lines, token, start, end)
     if i == -1:
@@ -87,6 +95,7 @@ def get_value(lines, token, start, end = 0):
     else:
         return ""
 
+
 def del_token(lines, token, i, j):
     k = find_token2(lines, token, i, j)
     if k == -1:
@@ -95,6 +104,7 @@ def del_token(lines, token, i, j):
        del lines[k]
        return j-1
 
+
 # Finds the paragraph that contains line i.
 def get_paragraph(lines, i):
     while i != -1:
@@ -105,6 +115,7 @@ def get_paragraph(lines, i):
        i = find_beginning_of_inset(lines, i)
     return -1
 
+
 # Finds the paragraph after the paragraph that contains line i.
 def get_next_paragraph(lines, i):
     while i != -1:
@@ -114,6 +125,7 @@ def get_next_paragraph(lines, i):
        i = find_end_of_inset(lines, i)
     return -1
 
+
 def find_end_of(lines, i, start_token, end_token):
     count = 1
     n = len(lines)
@@ -127,6 +139,7 @@ def find_end_of(lines, i, start_token, end_token):
            return i
     return -1
 
+
 # Finds the matching \end_inset
 def find_beginning_of(lines, i, start_token, end_token):
     count = 1
@@ -140,17 +153,21 @@ def find_beginning_of(lines, i, start_token, end_token):
            return i
     return -1
 
+
 # Finds the matching \end_inset
 def find_end_of_inset(lines, i):
     return find_end_of(lines, i, "\\begin_inset", "\\end_inset")
 
+
 # Finds the matching \end_inset
 def find_beginning_of_inset(lines, i):
     return find_beginning_of(lines, i, "\\begin_inset", "\\end_inset")
 
+
 def find_end_of_tabular(lines, i):
     return find_end_of(lines, i, "<lyxtabular", "</lyxtabular")
 
+
 def get_tabular_lines(lines, i):
     result = []
     i = i+1
@@ -166,9 +183,11 @@ def get_tabular_lines(lines, i):
            i = i+1
     return result
 
+
 def is_nonempty_line(line):
     return line != " "*len(line)
 
+
 def find_nonempty_line(lines, start, end = 0):
     if end == 0:
        end = len(lines)
@@ -177,6 +196,7 @@ def find_nonempty_line(lines, start, end = 0):
            return i
     return -1
 
+
 ##
 # Tools for file reading
 #
@@ -209,6 +229,7 @@ def read_file(header, body, opt):
             break
         body.append(line[:-1])
 
+
 def write_file(header, body, opt):
     for line in header:
         opt.output.write(line+"\n")
@@ -216,6 +237,7 @@ def write_file(header, body, opt):
     for line in body:
         opt.output.write(line+"\n")
 
+
 ##
 # lyx version
 #
@@ -231,6 +253,7 @@ def read_version(header):
             return result.group(1)
     return None
 
+
 def set_version(lines, version):
     lines[0] = "#LyX %s created this file. For more info see http://www.lyx.org/" % version
     if lines[1][0] == '#':
@@ -242,7 +265,7 @@ def set_version(lines, version):
 format_re = re.compile(r"(\d)[\.,]?(\d\d)")
 fileformat = re.compile(r"\\lyxformat\s*(\S*)")
 lst_ft = [210, 215, 216, 217, 218, 220, 221, 223, 224, 225, 226, 227, 228, 229, 
-          230, 231, 232]
+          230, 231, 232, 233, 234]
 
 format_relation = [("0_10",  [210], ["0.10.7","0.10"]),
                    ("0_12",  [215], ["0.12","0.12.1","0.12"]),
@@ -254,7 +277,8 @@ format_relation = [("0_10",  [210], ["0.10.7","0.10"]),
                    ("1_1_6fix3", [218], ["1.1.6fix3","1.1.6fix4","1.1"]),
                    ("1_2", [220], ["1.2.0","1.2.1","1.2.3","1.2.4","1.2"]),
                    ("1_3", [221], ["1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3"]),
-                   ("1_4", [223,224,225,226,227,228,229,230,231,232], ["1.4.0cvs","1.4"])]
+                   ("1_4", [223,224,225,226,227,228,229,230,231,232,233,234], ["1.4.0cvs","1.4"])]
+
 
 def lyxformat(format, opt):
     result = format_re.match(format)
@@ -266,9 +290,10 @@ def lyxformat(format, opt):
     if format in lst_ft:
         return format
 
-    opt.error(str(format) + ": " + "Format no supported.")
+    opt.error(str(format) + ": " + "Format not supported.")
     return None
 
+
 def read_format(header, opt):
     for line in header:
         result = fileformat.match(line)
@@ -278,15 +303,26 @@ def read_format(header, opt):
         opt.error("Invalid LyX File.")
     return None
 
+
 def set_format(lines, number):
     if int(number) <= 217:
         number = float(number)/100
     i = find_token(lines, "\\lyxformat", 0)
     lines[i] = "\\lyxformat %s" % number
 
+
 def get_end_format():
     return format_relation[-1:][0][1][-1:][0]
 
+
+def get_backend(textclass):
+    if textclass == "linuxdoc" or textclass == "manpage":
+        return "linuxdoc"
+    if textclass[:7] == "docbook":
+        return "docbook"
+    return "latex"
+
+
 def chain(opt, initial_version):
     """ This is where all the decisions related with the convertion are taken"""
 
@@ -341,11 +377,16 @@ def chain(opt, initial_version):
                 steps.append(step[0])
     else:
         mode = "revert"
-        for step in format_relation:
+        relation_format = format_relation
+        relation_format.reverse()
+        last_step = None
+
+        for step in relation_format:
             if  final_step <= step[0] <= initial_step:
-                steps.insert(0, step[0])
+                steps.append(step[0])
+                last_step = step
 
-        if step[1][-1:] == opt.end:
-            del steps[0]
+        if last_step[1][-1] == opt.end:
+            steps.pop()
 
     return mode, steps