]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/lyx_2_1.py
Fix dumb mistake.
[lyx.git] / lib / lyx2lyx / lyx_2_1.py
index a7c78f6242ffc2defbcf68cf8885be2f08707173..e0cefea75c0536d33f72592551d98103ca7ac1f8 100644 (file)
@@ -53,6 +53,167 @@ from lyx2lyx_tools import add_to_preamble, put_cmd_in_ert, get_ert
     #return True
 
 
+def revert_Argument_to_TeX_brace(document, line, endline, n, nmax, environment, opt):
+    '''
+    Reverts an InsetArgument to TeX-code
+    usage:
+    revert_Argument_to_TeX_brace(document, LineOfBegin, LineOfEnd, StartArgument, EndArgument, isEnvironment, isOpt)
+    LineOfBegin is the line  of the \begin_layout or \begin_inset statement
+    LineOfEnd is the line  of the \end_layout or \end_inset statement, if "0" is given, the end of the file is used instead
+    StartArgument is the number of the first argument that needs to be converted
+    EndArgument is the number of the last argument that needs to be converted or the last defined one
+    isEnvironment must be true, if the layout is for a LaTeX environment
+    isOpt must be true, if the argument is an optional one
+    '''
+    lineArg = 0
+    wasOpt = False
+    while lineArg != -1 and n < nmax + 1:
+      lineArg = find_token(document.body, "\\begin_inset Argument " + str(n), line)
+      if lineArg > endline and endline != 0:
+        return wasOpt
+      if lineArg != -1:
+        beginPlain = find_token(document.body, "\\begin_layout Plain Layout", lineArg)
+        # we have to assure that no other inset is in the Argument
+        beginInset = find_token(document.body, "\\begin_inset", beginPlain)
+        endInset = find_token(document.body, "\\end_inset", beginPlain)
+        k = beginPlain + 1
+        l = k
+        while beginInset < endInset and beginInset != -1:
+          beginInset = find_token(document.body, "\\begin_inset", k)
+          endInset = find_token(document.body, "\\end_inset", l)
+          k = beginInset + 1
+          l = endInset + 1
+        if environment == False:
+          if opt == False:
+            document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}{")
+            del(document.body[lineArg : beginPlain + 1])
+            wasOpt = False
+          else:
+            document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("]")
+            document.body[lineArg : beginPlain + 1] = put_cmd_in_ert("[")
+            wasOpt = True
+        else:
+          document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}")
+          document.body[lineArg : beginPlain + 1] = put_cmd_in_ert("{")
+          wasOpt = False
+        n = n + 1
+    return wasOpt
+
+
+def convert_TeX_brace_to_Argument(document, line, n, nmax, inset, environment):
+    '''
+    Converts TeX code for mandatory arguments to an InsetArgument
+    The conversion of TeX code for optional arguments must be done with another routine
+    !!! Be careful if the braces are different in your case as expected here:
+    - "}{" separates mandatory arguments of commands
+    - "}" + "{" separates mandatory arguments of commands
+    - "}" + " " + "{" separates mandatory arguments of commands
+    - { and } surround a mandatory argument of an environment
+    usage:
+    convert_TeX_brace_to_Argument(document, LineOfBeginLayout/Inset, StartArgument, EndArgument, isInset, isEnvironment)
+    LineOfBeginLayout/Inset is the line  of the \begin_layout or \begin_inset statement
+    StartArgument is the number of the first ERT that needs to be converted
+    EndArgument is the number of the last ERT that needs to be converted
+    isInset must be true, if braces inside an InsetLayout needs to be converted
+    isEnvironment must be true, if the layout is for a LaTeX environment
+    
+    Todo: this routine can currently handle only one mandatory argument of environments
+    '''
+    lineERT = line
+    endn = line
+    loop = 1
+    while lineERT != -1 and n < nmax + 1:
+      lineERT = find_token(document.body, "\\begin_inset ERT", lineERT)
+      if environment == False and lineERT != -1:
+        bracePair = find_token(document.body, "}{", lineERT)
+        # assure that the "}{" is in this ERT
+        if bracePair == lineERT + 5:
+          end = find_token(document.body, "\\end_inset", bracePair)
+          document.body[lineERT : end + 1] = ["\\end_layout", "", "\\end_inset"]
+          if loop == 1:
+            # in the case that n > 1 we have optional arguments before
+            # therefore detect them if any
+            if n > 1:
+              # first check if there is an argument
+              lineArg = find_token(document.body, "\\begin_inset Argument", line)
+              if lineArg < lineERT and lineArg != -1:
+                # we have an argument, so now search backwards for its end
+                # we must now assure that we don't find other insets like e.g. a newline
+                endInsetArg = lineERT
+                endLayoutArg = endInsetArg
+                while endInsetArg != endLayoutArg + 2 and endInsetArg != -1:
+                  endInsetArg = endInsetArg - 1
+                  endLayoutArg = endInsetArg
+                  endInsetArg = find_token_backwards(document.body, "\\end_inset", endInsetArg)
+                  endLayoutArg = find_token_backwards(document.body, "\\end_layout", endLayoutArg)
+                line = endInsetArg + 1
+            if inset == False:
+              document.body[line + 1 : line + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
+            else:
+              document.body[line + 4 : line + 4] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
+          else:
+            document.body[endn : endn] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
+          n = n + 1
+          endn = end
+          loop = loop + 1
+        # now check the case that we have "}" + "{" in two ERTs
+        else:
+          endBrace = find_token(document.body, "}", lineERT)
+          if endBrace == lineERT + 5:
+            beginBrace = find_token(document.body, "{", endBrace)
+            # assure that the ERTs are consecutive (11 or 12 depending if there is a space between the ERTs or not)
+            if beginBrace == endBrace + 11 or beginBrace == endBrace + 12:
+              end = find_token(document.body, "\\end_inset", beginBrace)
+              document.body[lineERT : end + 1] = ["\\end_layout", "", "\\end_inset"]
+              if loop == 1:
+                # in the case that n > 1 we have optional arguments before
+                # therefore detect them if any
+                if n > 1:
+                  # first check if there is an argument
+                  lineArg = find_token(document.body, "\\begin_inset Argument", line)
+                  if lineArg < lineERT and lineArg != -1:
+                    # we have an argument, so now search backwards for its end
+                    # we must now assure that we don't find other insets like e.g. a newline
+                    endInsetArg = lineERT
+                    endLayoutArg = endInsetArg
+                    while endInsetArg != endLayoutArg + 2 and endInsetArg != -1:
+                      endInsetArg = endInsetArg - 1
+                      endLayoutArg = endInsetArg
+                      endInsetArg = find_token_backwards(document.body, "\\end_inset", endInsetArg)
+                      endLayoutArg = find_token_backwards(document.body, "\\end_layout", endLayoutArg)
+                    line = endInsetArg + 1
+                if inset == False:
+                  document.body[line + 1 : line + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
+                else:
+                  document.body[line + 4 : line + 4] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
+              else:
+                document.body[endn : endn] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
+              n += 1
+              loop += 1
+              # set the line where the next argument will be inserted
+              if beginBrace == endBrace + 11:
+                endn = end - 11
+              else:
+                endn = end - 12
+            else:
+              lineERT += 1
+          else:
+            lineERT += 1
+      if environment == True and lineERT != -1:
+        opening = find_token(document.body, "{", lineERT)
+        if opening == lineERT + 5: # assure that the "{" is in this ERT
+          end = find_token(document.body, "\\end_inset", opening)
+          document.body[lineERT : end + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
+          n += 1
+          lineERT2 = find_token(document.body, "\\begin_inset ERT", lineERT)
+          closing = find_token(document.body, "}", lineERT2)
+          if closing == lineERT2 + 5: # assure that the "}" is in this ERT
+            end2 = find_token(document.body, "\\end_inset", closing)
+            document.body[lineERT2 : end2 + 1] = ["\\end_layout", "", "\\end_inset"]
+        else:
+          lineERT += 1
+
+
 ###############################################################################
 ###
 ### Conversion and reversion routines
@@ -515,6 +676,31 @@ def revert_cite_engine_type(document):
     document.header[i] = "\\cite_engine natbib_" + engine_type
 
 
+def convert_cite_engine_type_default(document):
+    "Convert \\cite_engine_type to default for the basic citation engine."
+    i = find_token(document.header, "\\cite_engine basic", 0)
+    if i == -1:
+        return
+    i = find_token(document.header, "\\cite_engine_type" , 0)
+    if i == -1:
+        return
+    document.header[i] = "\\cite_engine_type default"
+
+
+def revert_cite_engine_type_default(document):
+    """Revert \\cite_engine_type default.
+
+    Revert to numerical for the basic cite engine, otherwise to authoryear."""
+    engine_type = "authoryear"
+    i = find_token(document.header, "\\cite_engine_type default" , 0)
+    if i == -1:
+        return
+    j = find_token(document.header, "\\cite_engine basic", 0)
+    if j != -1:
+        engine_type = "numerical"
+    document.header[i] = "\\cite_engine_type " + engine_type
+
+
 # this is the same, as revert_use_cancel() except for the default
 def revert_cancel(document):
     "add cancel to the preamble if necessary"
@@ -1366,165 +1552,6 @@ def revert_latexargs(document):
         i = realparbeg + 1 + len(subst)
 
 
-def revert_Argument_to_TeX_brace(document, line, endline, n, nmax, environment, opt):
-    '''
-    Reverts an InsetArgument to TeX-code
-    usage:
-    revert_Argument_to_TeX_brace(document, LineOfBegin, LineOfEnd, StartArgument, EndArgument, isEnvironment, isOpt)
-    LineOfBegin is the line  of the \begin_layout or \begin_inset statement
-    LineOfEnd is the line  of the \end_layout or \end_inset statement, if "0" is given, the end of the file is used instead
-    StartArgument is the number of the first argument that needs to be converted
-    EndArgument is the number of the last argument that needs to be converted or the last defined one
-    isEnvironment must be true, if the layout is for a LaTeX environment
-    isOpt must be true, if the argument is an optional one
-    '''
-    lineArg = 0
-    wasOpt = False
-    while lineArg != -1 and n < nmax + 1:
-      lineArg = find_token(document.body, "\\begin_inset Argument " + str(n), line)
-      if lineArg > endline and endline != 0:
-        return wasOpt
-      if lineArg != -1:
-        beginPlain = find_token(document.body, "\\begin_layout Plain Layout", lineArg)
-        # we have to assure that no other inset is in the Argument
-        beginInset = find_token(document.body, "\\begin_inset", beginPlain)
-        endInset = find_token(document.body, "\\end_inset", beginPlain)
-        k = beginPlain + 1
-        l = k
-        while beginInset < endInset and beginInset != -1:
-          beginInset = find_token(document.body, "\\begin_inset", k)
-          endInset = find_token(document.body, "\\end_inset", l)
-          k = beginInset + 1
-          l = endInset + 1
-        if environment == False:
-          if opt == False:
-            document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}{")
-            del(document.body[lineArg : beginPlain + 1])
-            wasOpt = False
-          else:
-            document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("]")
-            document.body[lineArg : beginPlain + 1] = put_cmd_in_ert("[")
-            wasOpt = True
-        else:
-          document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}")
-          document.body[lineArg : beginPlain + 1] = put_cmd_in_ert("{")
-          wasOpt = False
-        n = n + 1
-    return wasOpt
-
-
-def convert_TeX_brace_to_Argument(document, line, n, nmax, inset, environment):
-    '''
-    Converts TeX code for mandatory arguments to an InsetArgument
-    The conversion of TeX code for optional arguments must be done with another routine
-    !!! Be careful if the braces are different in your case as expected here:
-    - "}{" separates mandatory arguments of commands
-    - "}" + "{" separates mandatory arguments of commands
-    - "}" + " " + "{" separates mandatory arguments of commands
-    - { and } surround a mandatory argument of an environment
-    usage:
-    convert_TeX_brace_to_Argument(document, LineOfBeginLayout/Inset, StartArgument, EndArgument, isInset, isEnvironment)
-    LineOfBeginLayout/Inset is the line  of the \begin_layout or \begin_inset statement
-    StartArgument is the number of the first ERT that needs to be converted
-    EndArgument is the number of the last ERT that needs to be converted
-    isInset must be true, if braces inside an InsetLayout needs to be converted
-    isEnvironment must be true, if the layout is for a LaTeX environment
-    
-    Todo: this routine can currently handle only one mandatory argument of environments
-    '''
-    lineERT = line
-    endn = line
-    loop = 1
-    while lineERT != -1 and n < nmax + 1:
-      lineERT = find_token(document.body, "\\begin_inset ERT", lineERT)
-      if environment == False and lineERT != -1:
-        bracePair = find_token(document.body, "}{", lineERT)
-        # assure that the "}{" is in this ERT
-        if bracePair == lineERT + 5:
-          end = find_token(document.body, "\\end_inset", bracePair)
-          document.body[lineERT : end + 1] = ["\\end_layout", "", "\\end_inset"]
-          if loop == 1:
-            # in the case that n > 1 we have optional arguments before
-            # therefore detect them if any
-            if n > 1:
-              # first check if there is an argument
-              lineArg = find_token(document.body, "\\begin_inset Argument", line)
-              if lineArg < lineERT and lineArg != -1:
-                # we have an argument, so now search backwards for its end
-                # we must now assure that we don't find other insets like e.g. a newline
-                endInsetArg = lineERT
-                endLayoutArg = endInsetArg
-                while endInsetArg != endLayoutArg + 2 and endInsetArg != -1:
-                  endInsetArg = endInsetArg - 1
-                  endLayoutArg = endInsetArg
-                  endInsetArg = find_token_backwards(document.body, "\\end_inset", endInsetArg)
-                  endLayoutArg = find_token_backwards(document.body, "\\end_layout", endLayoutArg)
-                line = endInsetArg + 1
-            if inset == False:
-              document.body[line + 1 : line + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
-            else:
-              document.body[line + 4 : line + 4] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
-          else:
-            document.body[endn : endn] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
-          n = n + 1
-          endn = end
-          loop = loop + 1
-        # now check the case that we have "}" + "{" in two ERTs
-        else:
-          endBrace = find_token(document.body, "}", lineERT)
-          if endBrace == lineERT + 5:
-            beginBrace = find_token(document.body, "{", endBrace)
-            # assure that the ERTs are consecutive (11 or 12 depending if there is a space between the ERTs or not)
-            if beginBrace == endBrace + 11 or beginBrace == endBrace + 12:
-              end = find_token(document.body, "\\end_inset", beginBrace)
-              document.body[lineERT : end + 1] = ["\\end_layout", "", "\\end_inset"]
-              if loop == 1:
-                # in the case that n > 1 we have optional arguments before
-                # therefore detect them if any
-                if n > 1:
-                  # first check if there is an argument
-                  lineArg = find_token(document.body, "\\begin_inset Argument", line)
-                  if lineArg < lineERT and lineArg != -1:
-                    # we have an argument, so now search backwards for its end
-                    # we must now assure that we don't find other insets like e.g. a newline
-                    endInsetArg = lineERT
-                    endLayoutArg = endInsetArg
-                    while endInsetArg != endLayoutArg + 2 and endInsetArg != -1:
-                      endInsetArg = endInsetArg - 1
-                      endLayoutArg = endInsetArg
-                      endInsetArg = find_token_backwards(document.body, "\\end_inset", endInsetArg)
-                      endLayoutArg = find_token_backwards(document.body, "\\end_layout", endLayoutArg)
-                    line = endInsetArg + 1
-                if inset == False:
-                  document.body[line + 1 : line + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
-                else:
-                  document.body[line + 4 : line + 4] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
-              else:
-                document.body[endn : endn] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
-              n = n + 1
-              loop = loop + 1
-              # set the line where the next argument will be inserted
-              if beginBrace == endBrace + 11:
-                endn = end - 11
-              else:
-                endn = end - 12
-          else:
-            lineERT = lineERT + 1
-      if environment == True and lineERT != -1:
-        opening = find_token(document.body, "{", lineERT)
-        if opening == lineERT + 5: # assure that the "{" is in this ERT
-          end = find_token(document.body, "\\end_inset", opening)
-          document.body[lineERT : end + 1] = ["\\begin_inset Argument " + str(n), "status open", "", "\\begin_layout Plain Layout"]
-          n = n + 1
-          lineERT2 = find_token(document.body, "\\begin_inset ERT", lineERT)
-          closing = find_token(document.body, "}", lineERT2)
-          if closing == lineERT2 + 5: # assure that the "}" is in this ERT
-            end2 = find_token(document.body, "\\end_inset", closing)
-            document.body[lineERT2 : end2 + 1] = ["\\end_layout", "", "\\end_inset"]
-        else:
-          lineERT = lineERT + 1
-
-
 def revert_IEEEtran(document):
   '''
   Reverts InsetArgument of
@@ -1575,15 +1602,13 @@ def revert_IEEEtran_2(document):
   if document.textclass == "IEEEtran":
     begin = 0
     while True:
-      if begin != -1:
-        begin = find_token(document.body, "\\begin_inset Flex Paragraph Start", begin)
-      if begin != -1:
-        end1 = find_end_of_inset(document.body, begin)
-        document.body[end1 - 2 : end1 + 1] = put_cmd_in_ert("}")
-        document.body[begin : begin + 4] = put_cmd_in_ert("\\IEEEPARstart{")
-        begin = begin + 5
+      begin = find_token(document.body, "\\begin_inset Flex Paragraph Start", begin)
       if begin == -1:
         return
+      end1 = find_end_of_inset(document.body, begin)
+      document.body[end1 - 2 : end1 + 1] = put_cmd_in_ert("}")
+      document.body[begin : begin + 4] = put_cmd_in_ert("\\IEEEPARstart{")
+      begin = begin + 5
 
 
 def convert_IEEEtran(document):
@@ -1629,13 +1654,11 @@ def revert_AASTeX(document):
   if document.textclass == "aastex":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_layout Altaffilation", i)
-      if i != -1:
-        revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_layout Altaffilation", i)
       if i == -1:
         return
+      revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False)
+      i += 1
 
 
 def convert_AASTeX(document):
@@ -1643,13 +1666,11 @@ def convert_AASTeX(document):
   if document.textclass == "aastex":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_layout Altaffilation", i)
-      if i != -1:
-        convert_TeX_brace_to_Argument(document, i, 1, 1, False, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_layout Altaffilation", i)
       if i == -1:
         return
+      convert_TeX_brace_to_Argument(document, i, 1, 1, False, False)
+      i += 1
 
 
 def revert_AGUTeX(document):
@@ -1657,13 +1678,11 @@ def revert_AGUTeX(document):
   if document.textclass == "agutex":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_layout Author affiliation", i)
-      if i != -1:
-        revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_layout Author affiliation", i)
       if i == -1:
         return
+      revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False)
+      i += 1
 
 
 def convert_AGUTeX(document):
@@ -1671,13 +1690,11 @@ def convert_AGUTeX(document):
   if document.textclass == "agutex":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_layout Author affiliation", i)
-      if i != -1:
-        convert_TeX_brace_to_Argument(document, i, 1, 1, False, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_layout Author affiliation", i)
       if i == -1:
         return
+      convert_TeX_brace_to_Argument(document, i, 1, 1, False, False)
+      i += 1
 
 
 def revert_IJMP(document):
@@ -1685,13 +1702,11 @@ def revert_IJMP(document):
   if document.textclass == "ijmpc" or document.textclass == "ijmpd":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_layout MarkBoth", i)
-      if i != -1:
-        revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_layout MarkBoth", i)
       if i == -1:
         return
+      revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False)
+      i += 1
 
 
 def convert_IJMP(document):
@@ -1699,13 +1714,11 @@ def convert_IJMP(document):
   if document.textclass == "ijmpc" or document.textclass == "ijmpd":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_layout MarkBoth", i)
-      if i != -1:
-        convert_TeX_brace_to_Argument(document, i, 1, 1, False, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_layout MarkBoth", i)
       if i == -1:
         return
+      convert_TeX_brace_to_Argument(document, i, 1, 1, False, False)
+      i += 1
 
 
 def revert_SIGPLAN(document):
@@ -1753,13 +1766,11 @@ def revert_SIGGRAPH(document):
   if document.textclass == "acmsiggraph":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_inset Flex CRcat", i)
-      if i != -1:
-        revert_Argument_to_TeX_brace(document, i, 0, 1, 3, False, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_inset Flex CRcat", i)
       if i == -1:
         return
+      revert_Argument_to_TeX_brace(document, i, 0, 1, 3, False, False)
+      i += 1
 
 
 def convert_SIGGRAPH(document):
@@ -1767,13 +1778,11 @@ def convert_SIGGRAPH(document):
   if document.textclass == "acmsiggraph":
     i = 0
     while True:
-      if i != -1:
-        i = find_token(document.body, "\\begin_inset Flex CRcat", i)
-      if i != -1:
-        convert_TeX_brace_to_Argument(document, i, 1, 3, True, False)
-        i = i + 1
+      i = find_token(document.body, "\\begin_inset Flex CRcat", i)
       if i == -1:
         return
+      convert_TeX_brace_to_Argument(document, i, 1, 3, True, False)
+      i += 1
 
 
 def revert_EuropeCV(document):
@@ -1847,6 +1856,7 @@ def revert_ModernCV(document):
     k = 0
     m = 0
     o = 0
+    p = 0
     while True:
       if j != -1:
         j = find_token(document.body, "\\begin_layout Entry", j)
@@ -1870,7 +1880,12 @@ def revert_ModernCV(document):
         revert_Argument_to_TeX_brace(document, o, 0, 1, 3, False, False)
         document.body[o] = document.body[o].replace("\\begin_layout DoubleItem", "\\begin_layout Computer")
         o = o + 1
-      if j == -1 and k == -1 and m == -1 and o == -1:
+      if p != -1:
+        p = find_token(document.body, "\\begin_layout Social", p)
+      if p != -1:
+        revert_Argument_to_TeX_brace(document, p, 0, 1, 1, False, True)
+        p = p + 1
+      if j == -1 and k == -1 and m == -1 and o == -1 and p == -1:
         return
 
 
@@ -1880,21 +1895,19 @@ def revert_ModernCV_2(document):
     flex = 0
     flexEnd = -1
     while True:
-      if flex != -1:
-        flex = find_token(document.body, "\\begin_inset Flex Column", flex)
-      if flex != -1:
-        flexEnd = find_end_of_inset(document.body, flex)
-        wasOpt = revert_Argument_to_TeX_brace(document, flex, flexEnd, 1, 1, False, True)
-        revert_Argument_to_TeX_brace(document, flex, 0, 2, 2, False, False)
-        flexEnd = find_end_of_inset(document.body, flex)
-        if wasOpt == True:
-          document.body[flex + 0 : flex + 4] = put_cmd_in_ert("\\cvcolumn")
-        else:
-          document.body[flex + 0 : flex + 4] = put_cmd_in_ert("\\cvcolumn{")
-        document.body[flexEnd + 4 : flexEnd + 7] = put_cmd_in_ert("}")
-        flex = flex + 1
+      flex = find_token(document.body, "\\begin_inset Flex Column", flex)
       if flex == -1:
         return flexEnd
+      flexEnd = find_end_of_inset(document.body, flex)
+      wasOpt = revert_Argument_to_TeX_brace(document, flex, flexEnd, 1, 1, False, True)
+      revert_Argument_to_TeX_brace(document, flex, 0, 2, 2, False, False)
+      flexEnd = find_end_of_inset(document.body, flex)
+      if wasOpt == True:
+        document.body[flex + 0 : flex + 4] = put_cmd_in_ert("\\cvcolumn")
+      else:
+        document.body[flex + 0 : flex + 4] = put_cmd_in_ert("\\cvcolumn{")
+      document.body[flexEnd + 4 : flexEnd + 7] = put_cmd_in_ert("}")
+      flex += 1
 
 
 def revert_ModernCV_3(document):
@@ -1906,17 +1919,38 @@ def revert_ModernCV_3(document):
     # get the position of the end of the last column inset
     LastFlexEnd = revert_ModernCV_2(document)
     while True:
-      if p != -1:
-        p = find_token(document.body, "\\begin_layout Columns", p)
-      if p != -1:
-        pEnd = find_end_of_layout(document.body, p)
-        document.body[p] = document.body[p].replace("\\begin_layout Columns", "\\begin_layout Standard")
-        if LastFlexEnd != -1:
-          document.body[p + 1 : p + 1] = put_cmd_in_ert("\\begin{cvcolumns}")
-          document.body[LastFlexEnd + 24 : LastFlexEnd + 24] = put_cmd_in_ert("\\end{cvcolumns}")
-        p = p + 1
+      p = find_token(document.body, "\\begin_layout Columns", p)
+      if p == -1:
+        return
+      pEnd = find_end_of_layout(document.body, p)
+      document.body[p] = document.body[p].replace("\\begin_layout Columns", "\\begin_layout Standard")
+      if LastFlexEnd != -1:
+        document.body[p + 1 : p + 1] = put_cmd_in_ert("\\begin{cvcolumns}")
+        document.body[LastFlexEnd + 24 : LastFlexEnd + 24] = put_cmd_in_ert("\\end{cvcolumns}")
+      p += 1
+
+
+def revert_ModernCV_4(document):
+  " Reverts the style Social to TeX-code "
+  if document.textclass == "moderncv":
+    # revert the layouts
+    revert_ModernCV(document)
+    p = 0
+    while True:
+      p = find_token(document.body, "\\begin_layout Social", p)
       if p == -1:
         return
+      pEnd = find_end_of_layout(document.body, p)
+      document.body[p] = document.body[p].replace("\\begin_layout Social", "\\begin_layout Standard")
+      document.body[p + 1 : p + 1] = put_cmd_in_ert("\\social")
+      hasOpt = find_token(document.body, "[", p + 9)
+      if hasOpt < p + 18:
+        document.body[p + 30 : p + 30] = put_cmd_in_ert("{")
+        document.body[p + 41 : p + 41] = put_cmd_in_ert("}")
+      else:
+        document.body[p + 11 : p + 11] = put_cmd_in_ert("{")
+        document.body[p + 21 : p + 21] = put_cmd_in_ert("}")
+      p += 1
 
 
 def convert_ModernCV(document):
@@ -1957,27 +1991,23 @@ def revert_Initials(document):
   " Reverts InsetArgument of Initial to TeX-code "
   i = 0
   while True:
-    if i != -1:
-      i = find_token(document.body, "\\begin_layout Initial", i)
-    if i != -1:
-      # first arg (optional) and second arg (first mandatory) are supported in LyX 2.0.x
-      revert_Argument_to_TeX_brace(document, i, 0, 3, 3, False, False)
-      i = i + 1
+    i = find_token(document.body, "\\begin_layout Initial", i)
     if i == -1:
       return
+    # first arg (optional) and second arg (first mandatory) are supported in LyX 2.0.x
+    revert_Argument_to_TeX_brace(document, i, 0, 3, 3, False, False)
+    i = i + 1
 
 
 def convert_Initials(document):
   " Converts ERT of Initial to InsetArgument "
   i = 0
   while True:
-    if i != -1:
-      i = find_token(document.body, "\\begin_layout Initial", i)
-    if i != -1:
-      convert_TeX_brace_to_Argument(document, i, 3, 3, False, False)
-      i = i + 1
+    i = find_token(document.body, "\\begin_layout Initial", i)
     if i == -1:
       return
+    convert_TeX_brace_to_Argument(document, i, 3, 3, False, False)
+    i = i + 1
 
 
 def revert_literate(document):
@@ -3161,7 +3191,6 @@ def convert_captioninsets(document):
           return
       document.body[i] = "\\begin_inset Caption Standard"
       i = i + 1
-        
 
 
 def revert_captioninsets(document):
@@ -3178,7 +3207,7 @@ def revert_captioninsets(document):
 
 def convert_captionlayouts(document):
     " Convert caption layouts to caption insets. "
-    
+
     caption_dict = {
         "Captionabove":  "Above",
         "Captionbelow":  "Below",
@@ -3187,7 +3216,7 @@ def convert_captionlayouts(document):
         "CenteredCaption" : "Centered",
         "Bicaption" : "Bicaption",
         }
-    
+
     i = 0
     while True:
         i = find_token(document.body, "\\begin_layout", i)
@@ -3702,8 +3731,8 @@ def convert_lyxframes(document):
         return
    
     framebeg = ["BeginFrame", "BeginPlainFrame"]
-    frameend = ["EndFrame", "BeginFrame", "BeginPlainFrame", "AgainFrame", "Section", "Section*",
-                "Subsection", "Subsection*", "Subsubsection", "Subsubsection*"]
+    frameend = ["Frame", "PlainFrame", "EndFrame", "BeginFrame", "BeginPlainFrame", "AgainFrame",
+                "Section", "Section*", "Subsection", "Subsection*", "Subsubsection", "Subsubsection*"]
     for lay in framebeg:
         i = 0
         while True:
@@ -4070,8 +4099,8 @@ def revert_mbox_fbox(document):
             continue
         BeginLayout = find_token(document.body, "\\begin_layout Plain Layout", j)
         EndLayout = find_token(document.body, "\\end_layout", BeginLayout)
-        # replace if width is "-999col%"
-        if (width == '"-999col%"'):
+        # replace if width is ""
+        if (width == '""'):
             document.body[EndLayout:k + 1] = put_cmd_in_ert("}")
             if document.body[i] == "\\begin_inset Box Frameless":
                 document.body[i:BeginLayout + 1] = put_cmd_in_ert("\\mbox{")
@@ -4080,6 +4109,267 @@ def revert_mbox_fbox(document):
         i = i + 1
 
 
+def revert_starred_caption(document):
+    " Reverts unnumbered longtable caption insets "
+    
+    i = 0
+    while True:
+      i = find_token(document.body, "\\begin_inset Caption LongTableNoNumber", i)
+      if i == -1:
+          return
+      # This is not equivalent, but since the caption inset is a full blown
+      # text inset a true conversion to ERT is too difficult.
+      document.body[i] = "\\begin_inset Caption Standard"
+      i = i + 1
+
+
+def revert_forced_local_layout(document):
+    i = 0
+    while True:
+        i = find_token(document.header, "\\begin_forced_local_layout", i)
+        if i == -1:
+            return
+        j = find_end_of(document.header, i, "\\begin_forced_local_layout", "\\end_forced_local_layout")
+        if j == -1:
+            # this should not happen
+            break
+        regexp = re.compile(r'\s*forcelocal', re.IGNORECASE)
+        k = find_re(document.header, regexp, i, j)
+        while k != -1:
+            del document.header[k]
+            j = j - 1
+            k = find_re(document.header, regexp, i, j)
+        k = find_token(document.header, "\\begin_local_layout", 0)
+        if k == -1:
+            document.header[i] = "\\begin_local_layout"
+            document.header[j] = "\\end_local_layout"
+        else:
+            l = find_end_of(document.header, k, "\\begin_local_layout", "\\end_local_layout")
+            if j == -1:
+                # this should not happen
+                break
+            lines = document.header[i+1 : j]
+            if k > i:
+                document.header[k+1 : k+1] = lines
+                document.header[i   : j  ] = []
+            else:
+                document.header[i   : j  ] = []
+                document.header[k+1 : k+1] = lines
+
+
+def revert_aa1(document):
+  " Reverts InsetArguments of aa to TeX-code "
+  if document.textclass == "aa":
+    i = 0
+    while True:
+      if i != -1:
+        i = find_token(document.body, "\\begin_layout Abstract (structured)", i)
+      if i != -1:
+        revert_Argument_to_TeX_brace(document, i, 0, 1, 4, False, False)
+        i = i + 1
+      if i == -1:
+        return
+
+
+def revert_aa2(document):
+  " Reverts InsetArguments of aa to TeX-code "
+  if document.textclass == "aa":
+    i = 0
+    while True:
+      if i != -1:
+        i = find_token(document.body, "\\begin_layout Abstract (structured)", i)
+      if i != -1:
+        document.body[i] = "\\begin_layout Abstract"
+        i = i + 1
+      if i == -1:
+        return
+
+
+def revert_tibetan(document):
+    "Set the document language for Tibetan to English" 
+
+    if document.language == "tibetan":
+        document.language = "english"
+        i = find_token(document.header, "\\language", 0) 
+        if i != -1: 
+            document.header[i] = "\\language english" 
+    j = 0
+    while j < len(document.body): 
+        j = find_token(document.body, "\\lang tibetan", j)
+        if j != -1:
+            document.body[j] = document.body[j].replace("\\lang tibetan", "\\lang english")
+            j += 1
+        else:
+            j = len(document.body)
+
+
+#############
+#
+# Chunk stuff
+#
+#############
+
+# the idea here is that we will have a sequence of chunk paragraphs
+# we want to convert them to paragraphs in a chunk inset
+# the last will be discarded
+# the first should look like: <<FROGS>>=
+# will will discard the delimiters, and put the contents into the
+# optional argument of the inset
+def convert_chunks(document):
+    first_re = re.compile(r'<<(.*)>>=')
+    k = 0
+    while True:
+        # the beginning of this sequence
+        i = k
+        # find start of a block of chunks
+        i = find_token(document.body, "\\begin_layout Chunk", i)
+        if i == -1:
+            return
+        start = i
+        end = -1
+        contents = []
+
+        while True:
+            # process the one we just found
+            j = find_end_of_layout(document.body, i)
+            if j == -1:
+                document.warning("Malformed LyX documents. Can't find end of Chunk layout!")
+                break
+            thischunk = "".join(document.body[i + 1:j])
+            contents.append(document.body[i + 1:j])
+            
+            if thischunk == "@":
+                break
+
+            # look for the next one
+            #i = j
+            i = find_token(document.body, "\\begin_layout", i)
+            if i == -1:
+                break
+
+            layout = get_value(document.body, "\\begin_layout", i)
+            #sys.stderr.write(layout+ '\n')
+            if layout != "Chunk":
+                break
+
+        if j == -1:
+            # error, but we can try to continue
+            k = j + 1
+            continue
+
+        end = j + 1
+        k = end
+        
+        # the last chunk should simply have an "@" in it
+        
+        if ''.join(contents[-1]) != "@":
+            document.warning("Unexpected chunk contents.")
+            continue
+
+        contents.pop()
+
+        # the first item should look like: <<FROGS>>=
+        # we want the inside
+        optarg = ' '.join(contents[0])
+        optarg.strip()
+        match = first_re.search(optarg)
+        if match:
+            optarg = match.groups()[0]
+            contents.pop(0)
+
+        newstuff = ['\\begin_layout Standard',
+                    '\\begin_inset Flex Chunk',
+                    'status open', '',
+                    '\\begin_layout Plain Layout', '']
+
+        if match:
+            newstuff.extend(
+                ['\\begin_inset Argument 1',
+                 'status open', '',
+                 '\\begin_layout Plain Layout',
+                 optarg,
+                 '\\end_layout', '',
+                 '\\end_inset', ''])
+
+        didone = False
+        for c in contents:
+            if didone:
+                newstuff.extend(['', '\\begin_layout Plain Layout', ''])
+            else:
+                didone = True
+            newstuff.extend(c)
+            newstuff.append('\\end_layout')
+
+        newstuff.extend(['', '\\end_inset', '', '\\end_layout', ''])
+
+        document.body[start:end] = newstuff
+
+        k += len(newstuff) - (end - start)
+
+
+def revert_chunks(document):
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset Flex Chunk", i)
+        if i == -1:
+            return
+
+        iend = find_end_of_inset(document.body, i)
+        if iend == -1:
+            document.warning("Can't find end of Chunk!")
+            i += 1
+            continue
+
+        # Look for optional argument
+        have_optarg = False
+        ostart = find_token(document.body, "\\begin_inset Argument 1", i, iend)
+        if ostart != -1:
+            oend = find_end_of_inset(document.body, ostart)
+            k = find_token(document.body, "\\begin_layout Plain Layout", ostart, oend)
+            if k == -1:
+                document.warning("Malformed LyX document: Can't find argument contents!")
+            else:
+                m = find_end_of_layout(document.body, k)
+                optarg = "".join(document.body[k+1:m])
+                have_optarg = True
+
+            # We now remove the optional argument, so we have something
+            # uniform on which to work
+            document.body[ostart : oend + 1] = []
+            # iend is now invalid
+            iend = find_end_of_inset(document.body, i)
+
+        retval = get_containing_layout(document.body, i)
+        if not retval:
+            document.warning("Can't find containing layout for Chunk!")
+            i = iend
+            continue
+        (lname, lstart, lend, pstart)  = retval
+        # we now want to work through the various paragraphs, and collect their contents
+        parlist = []
+        k = i
+        while True:
+            k = find_token(document.body, "\\begin_layout Plain Layout", k, lend)
+            if k == -1:
+                break
+            j = find_end_of_layout(document.body, k)
+            if j == -1:
+                document.warning("Can't find end of layout inside chunk!")
+                break
+            parlist.append(document.body[k+1:j])
+            k = j
+        # we now need to wrap all of these paragraphs in chunks
+        newlines = []
+        if have_optarg:
+            newlines.extend(["\\begin_layout Chunk", "", "<<" + optarg + ">>=", "\\end_layout", ""])
+        for stuff in parlist:
+            newlines.extend(["\\begin_layout Chunk"] + stuff + ["\\end_layout", ""])
+        newlines.extend(["\\begin_layout Chunk", "", "@", "\\end_layout", ""])
+        # replace old content with new content
+        document.body[lstart : lend + 1] = newlines
+        i = lstart + len(newlines)
+        
+
 ##
 # Conversion hub
 #
@@ -4140,10 +4430,22 @@ convert = [
            [465, [convert_lyxframes, remove_endframes]],
            [466, []],
            [467, []],
-           [468, []]
+           [468, []],
+           [469, []],
+           [470, []],
+           [471, [convert_cite_engine_type_default]],
+           [472, []],
+           [473, []],
+           [474, [convert_chunks]],
           ]
 
 revert =  [
+           [473, [revert_chunks]],
+           [472, [revert_tibetan]],
+           [471, [revert_aa1,revert_aa2]],
+           [470, [revert_cite_engine_type_default]],
+           [469, [revert_forced_local_layout]],
+           [468, [revert_starred_caption]],
            [467, [revert_mbox_fbox]],
            [466, [revert_iwona_fonts]],
            [465, [revert_powerdot_flexes, revert_powerdot_pause, revert_powerdot_itemargs, revert_powerdot_columns]],
@@ -4165,7 +4467,7 @@ revert =  [
            [449, [revert_garamondx, revert_garamondx_newtxmath]],
            [448, [revert_itemargs]],
            [447, [revert_literate]],
-           [446, [revert_IEEEtran, revert_IEEEtran_2, revert_AASTeX, revert_AGUTeX, revert_IJMP, revert_SIGPLAN, revert_SIGGRAPH, revert_EuropeCV, revert_Initials, revert_ModernCV_3]],
+           [446, [revert_IEEEtran, revert_IEEEtran_2, revert_AASTeX, revert_AGUTeX, revert_IJMP, revert_SIGPLAN, revert_SIGGRAPH, revert_EuropeCV, revert_Initials, revert_ModernCV_3, revert_ModernCV_4]],
            [445, [revert_latexargs]],
            [444, [revert_uop]],
            [443, [revert_biolinum]],