]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/LyX.py
clean up french language handling
[lyx.git] / lib / lyx2lyx / LyX.py
index 2ed68eb1ab41d7fb831560db28a64d77f008beea..7647dc830448578e7f6bbaa286d18dd0ad508536 100644 (file)
@@ -46,7 +46,7 @@ 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.5","1.3"]),
-                   ("1_4", range(223,241), ["1.4.0cvs","1.4"])]
+                   ("1_4", range(223,243), ["1.4.0cvs","1.4"])]
 
 
 def formats_list():
@@ -78,7 +78,7 @@ def get_backend(textclass):
 #
 class LyX_Base:
     """This class carries all the information of the LyX file."""
-    def __init__(self, end_format = 0, input = "", output = "", error = "", debug = default_debug_level):
+    def __init__(self, end_format = 0, input = "", output = "", error = "", debug = default_debug_level, try_hard = 0):
         """Arguments:
         end_format: final format that the file should be converted. (integer)
         input: the name of the input source, if empty resort to standard input.
@@ -101,6 +101,7 @@ class LyX_Base:
             self.err = sys.stderr
 
         self.debug = debug
+        self.try_hard = try_hard
 
         if end_format:
             self.end_format = self.lyxformat(end_format)
@@ -111,19 +112,23 @@ class LyX_Base:
         self.textclass = "article"
         self.header = []
         self.body = []
+        self.status = 0
 
 
     def warning(self, message, debug_level= default_debug_level):
         " Emits warning to self.error, if the debug_level is less than the self.debug."
         if debug_level <= self.debug:
-            self.err.write(message + "\n")
+            self.err.write("Warning: " + message + "\n")
 
 
     def error(self, message):
-        " Emits a warning and exist incondicionally."
+        " Emits a warning and exits if not in try_hard mode."
         self.warning(message)
-        self.warning("Quiting.")
-        sys.exit(1)
+        if not self.try_hard:
+            self.warning("Quiting.")
+            sys.exit(1)
+
+        self.status = 2
 
 
     def read(self):
@@ -148,8 +153,13 @@ class LyX_Base:
             if not preamble:
                 line = string.strip(line)
 
-            if not line and not preamble:
-                break
+            if not preamble:
+                if not line:
+                    continue
+
+                if string.split(line)[0] in ("\\layout", "\\begin_layout", "\\begin_body"):
+                    self.body.append(line)
+                    break
 
             self.header.append(line)
 
@@ -282,9 +292,17 @@ class LyX_Base:
 
                 for conv in table:
                     init_t = time.time()
-                    conv(self)
-                    self.warning("%lf: Elapsed time on %s"  % (time.time() - init_t, str(conv)),
-                                 default_debug_level + 1)
+                    try:
+                        conv(self)
+                    except:
+                        self.warning("An error ocurred in %s, %s" % (version, str(conv)),
+                                     default_debug_level)
+                        if not self.try_hard:
+                            raise
+                        self.status = 2
+                    else:
+                        self.warning("%lf: Elapsed time on %s"  % (time.time() - init_t, str(conv)),
+                                     default_debug_level + 1)
 
                 self.format = version
                 if self.end_format == self.format:
@@ -358,6 +376,7 @@ class LyX_Base:
         " Returns the TOC of this LyX document."
         paragraphs_filter = {'Title' : 0,'Chapter' : 1, 'Section' : 2, 'Subsection' : 3, 'Subsubsection': 4}
         allowed_insets = ['Quotes']
+        allowed_parameters = '\\paragraph_spacing', '\\noindent', '\\align', '\\labelwidthstring', "\\start_of_appendix"
 
         sections = []
         for section in paragraphs_filter.keys():
@@ -383,7 +402,7 @@ class LyX_Base:
 
             k = i + 1
             # skip paragraph parameters
-            while not self.body[k] or self.body[k][0] == '\\':
+            while not string.strip(self.body[k]) and string.split(self.body[k])[0] in allowed_parameters:
                 k = k +1
 
             while k < j:
@@ -413,8 +432,8 @@ class LyX_Base:
 
 class File(LyX_Base):
     " This class reads existing LyX files."
-    def __init__(self, end_format = 0, input = "", output = "", error = "", debug = default_debug_level):
-        LyX_Base.__init__(self, end_format, input, output, error, debug)
+    def __init__(self, end_format = 0, input = "", output = "", error = "", debug = default_debug_level, try_hard = 0):
+        LyX_Base.__init__(self, end_format, input, output, error, debug, try_hard)
         self.read()