]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/LyX.py
Embedding: revert embedding options and extra_embedded_files
[lyx.git] / lib / lyx2lyx / LyX.py
index 0354ca364e666dccc01bd4b73f7593a97a81dbf8..cae99b7e5254342c541eaca5495b0e71f55969f0 100644 (file)
@@ -79,8 +79,8 @@ format_relation = [("0_06",    [200], minor_versions("0.6" , 4)),
                    ("1_2",     [220], minor_versions("1.2" , 4)),
                    ("1_3",     [221], minor_versions("1.3" , 7)),
                    ("1_4", range(222,246), minor_versions("1.4" , 5)),
-                   ("1_5", range(246,277), minor_versions("1.5" , 1)),
-                   ("1_6", range(277,294), minor_versions("1.6" , 0))]
+                   ("1_5", range(246,277), minor_versions("1.5" , 2)),
+                   ("1_6", range(277,329), minor_versions("1.6" , 0))] # Uwe: support for Spanish(Mexico)
 
 
 def formats_list():
@@ -132,6 +132,8 @@ def get_encoding(language, inputencoding, format, cjk_encoding):
         return lang[language][3]
     if inputencoding == "":
         return "latin1"
+    if inputencoding == "utf8x":
+        return "utf8"
     # python does not know the alias latin9
     if inputencoding == "latin9":
         return "iso-8859-15"
@@ -142,7 +144,7 @@ def get_encoding(language, inputencoding, format, cjk_encoding):
 #
 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__, try_hard = 0, cjk_encoding = '',
                  language = "english", encoding = "auto"):
@@ -178,7 +180,6 @@ class LyX_base:
         self.default_layout = ''
         self.header = []
         self.preamble = []
-        self.manifest = []
         self.body = []
         self.status = 0
         self.encoding = encoding
@@ -203,7 +204,7 @@ class LyX_base:
 
 
     def read(self):
-        """Reads a file into the self.header, self.manifest and
+        """Reads a file into the self.header and
         self.body parts, from self.input."""
 
         while True:
@@ -221,10 +222,10 @@ class LyX_base:
                     line = trim_eol(line)
                     if check_token(line, '\\end_preamble'):
                         break
-                    
+
                     if line.split()[:0] in ("\\layout",
                                             "\\begin_layout", "\\begin_body"):
-                        
+
                         self.warning("Malformed LyX file:"
                                      "Missing '\\end_preamble'."
                                      "\nAdding it now and hoping"
@@ -235,27 +236,6 @@ class LyX_base:
             if check_token(line, '\\end_preamble'):
                 continue
 
-            if check_token(line, '\\begin_manifest'):
-                while 1:
-                    line = self.input.readline()
-                    if not line:
-                        self.error("Invalid LyX file.")
-
-                    line = trim_eol(line)
-                    if check_token(line, "\\end_manifest"):
-                        break
-
-                    if not line.startswith('\\filename') and \
-                       not line.startswith('\\inzipName') and \
-                       not line.startswith('\\embed'):
-                        self.warning("Malformed LyX file: Missing"
-                                     "'\\end_manifest'.")
-
-                    self.manifest.append(line)
-            
-            if check_token(line, '\\end_manifest'):
-                continue
-
             line = line.strip()
             if not line:
                 continue
@@ -267,6 +247,12 @@ class LyX_base:
 
             self.header.append(line)
 
+        i = find_token(self.header, '\\textclass', 0)
+        if i == -1:
+            self.warning("Malformed LyX file: Missing '\\textclass'.")
+            i = find_token(self.header, '\\lyxformat', 0) + 1
+            self.header[i:i] = ['\\textclass article']
+
         self.textclass = get_value(self.header, "\\textclass", 0)
         self.backend = get_backend(self.textclass)
         self.format  = self.read_format()
@@ -304,21 +290,11 @@ class LyX_base:
         if self.preamble:
             i = find_token(self.header, '\\textclass', 0) + 1
             preamble = ['\\begin_preamble'] + self.preamble + ['\\end_preamble']
-            if i == 0:
-                self.error("Malformed LyX file: Missing '\\textclass'.")
-            else:
-                header = self.header[:i] + preamble + self.header[i:]
+            header = self.header[:i] + preamble + self.header[i:]
         else:
             header = self.header
 
-        # LyX file format <= 284 does not have a manifest section
-        # so this section is set to None
-        if self.manifest is None:
-            manifest = []
-        else:
-            manifest = ['\\begin_manifest'] + self.manifest + ['\\end_manifest', '']
-
-        for line in header + [''] + manifest + self.body:
+        for line in header + [''] + self.body:
             self.output.write(line.encode(self.encoding)+"\n")
 
 
@@ -336,7 +312,7 @@ class LyX_base:
             try:
                 gzip.open(input).readline()
                 self.input = gzip.open(input)
-                self.output = gzip.GzipFile(mode="wb", fileobj=self.output) 
+                self.output = gzip.GzipFile(mode="wb", fileobj=self.output)
             except:
                 self.input = open(input)
         else:
@@ -419,6 +395,56 @@ class LyX_base:
         self.header[i] = "\\textclass %s" % self.textclass
 
 
+    #Note that the module will be added at the END of the extant ones
+    def add_module(self, module):
+      i = find_token(self.header, "\\begin_modules", 0)
+      if i == -1:
+        #No modules yet included
+        i = find_token(self.header, "\\textclass", 0)
+        if i == -1:
+          self.warning("Malformed LyX document: No \\textclass!!")
+          return
+        modinfo = ["\\begin_modules", module, "\\end_modules"]
+        self.header[i + 1: i + 1] = modinfo
+        return
+      j = find_token(self.header, "\\end_modules", i)
+      if j == -1:
+        self.warning("(add_module)Malformed LyX document: No \\end_modules.")
+        return
+      k = find_token(self.header, module, i)
+      if k != -1 and k < j:
+        return
+      self.header.insert(j, module)
+
+
+    def get_module_list(self):
+      i = find_token(self.header, "\\begin_modules", 0)
+      if (i == -1):
+        return []
+      j = find_token(self.header, "\\end_modules", i)
+      return self.header[i + 1 : j]
+
+
+    def set_module_list(self, mlist):
+      modbegin = find_token(self.header, "\\begin_modules", 0)
+      newmodlist = ['\\begin_modules'] + mlist + ['\\end_modules']
+      if (modbegin == -1):
+        #No modules yet included
+        tclass = find_token(self.header, "\\textclass", 0)
+        if tclass == -1:
+          self.warning("Malformed LyX document: No \\textclass!!")
+          return
+        modbegin = tclass + 1
+        self.header[modbegin:modbegin] = newmodlist
+        return
+      modend = find_token(self.header, "\\end_modules", modbegin)
+      if modend == -1:
+        self.warning("(set_module_list)Malformed LyX document: No \\end_modules.")
+        return
+      newmodlist = ['\\begin_modules'] + mlist + ['\\end_modules']
+      self.header[modbegin:modend + 1] = newmodlist
+
+
     def set_parameter(self, param, value):
         " Set the value of the header parameter."
         i = find_token(self.header, '\\' + param, 0)
@@ -578,7 +604,7 @@ class LyX_base:
             # skip paragraph parameters
             while not self.body[k].strip() or self.body[k].split()[0] \
                       in allowed_parameters:
-                k += 1 
+                k += 1
 
             while k < j:
                 if check_token(self.body[k], '\\begin_inset'):