+ i += 1
+ continue
+ if re_LangPreamble.match(lines[i]):
+ i += 1
+ while i < len(lines) and not re_EndLangPreamble.match(lines[i]):
+ i += 1
+ continue
+ if re_BabelPreamble.match(lines[i]):
+ i += 1
+ while i < len(lines) and not re_EndBabelPreamble.match(lines[i]):
+ i += 1
+ continue
+
+ if format >= 50 and format <= 52:
+ # nothing to do.
+ i += 1
+ continue
+
+ if format == 49:
+ separator = []
+
+ # delete separator styles
+ match = re_Style.match(lines[i])
+ if match:
+ style = string.lower(match.group(4))
+ if re_Separator.match(style):
+ del lines[i]
+ while i < len(lines) and not re_End.match(lines[i]):
+ separator.append(lines[i])
+ del lines[i]
+ if i == len(lines):
+ error('Incomplete separator style.')
+ else:
+ del lines[i]
+ continue
+
+ # delete undefinition of separator styles
+ match = re_NoStyle.match(lines[i])
+ if match:
+ style = string.lower(match.group(4))
+ if re_Separator.match(style):
+ del lines[i]
+ continue
+
+ # replace the CopyStyle statement with the definition of the real
+ # style. This may result in duplicate statements, but that is OK
+ # since the second one will overwrite the first one.
+ match = re_CopyStyle.match(lines[i])
+ if match:
+ style = string.lower(match.group(4))
+ if re_Separator.match(style):
+ if len(separator) > 0:
+ lines[i:i+1] = separator
+ else:
+ # FIXME: If this style was redefined in an include file,
+ # we should replace the real style and not this default.
+ lines[i:i+1] = [' Category MainText',
+ ' KeepEmpty 1',
+ ' Margin Dynamic',
+ ' LatexType Paragraph',
+ ' LatexName dummy',
+ ' ParIndent MM',
+ ' Align Block',
+ ' LabelType Static',
+ ' LabelString "--- Separate Environment ---"',
+ ' LabelFont',
+ ' Family Roman',
+ ' Series Medium',
+ ' Size Normal',
+ ' Color Blue',
+ ' EndFont',
+ ' HTMLLabel NONE']
+ i += 1
+ continue
+
+ if format == 48:
+ # The default of ResetsFont in LyX changed from true to false,
+ # because it is now used for all InsetLayouts, not only flex ones.
+ # Therefore we need to set it to true for all flex insets which do
+ # do not already have a ResetsFont.
+ match = re_InsetLayout2.match(lines[i])
+ if not match:
+ i += 1
+ continue
+
+ name = string.lower(match.group(1))
+ if name != "flex" and name != "\"flex\"" and name[0:5] != "flex:" and name [0:6] != "\"flex:":
+ i += 1
+ continue
+
+ resetsfont_found = False
+ inherited = False
+ notdone = True
+ while i < len(lines):
+ match = re_ResetsFont.match(lines[i])
+ if match:
+ resetsfont_found = True
+ else:
+ match = re_CopyStyle.match(lines[i])
+ if match:
+ inherited = True
+ else:
+ match = re_End.match(lines[i])
+ if match:
+ break
+ i += 1
+ if not resetsfont_found and not inherited:
+ lines.insert(i, "\tResetsFont true")
+
+ continue
+
+ if format >= 44 and format <= 47:
+ # nothing to do.
+ i += 1
+ continue
+
+ if format == 43:
+ match = re_LabelTypeIsCounter.match(lines[i])
+ if match:
+ if inchapter:
+ lines[i] = match.group(1) + "LabelType" + match.group(2) + "Above"
+ else:
+ lines[i] = match.group(1) + "LabelType" + match.group(2) + "Static"
+
+ match = re_TopEnvironment.match(lines[i])
+ if match:
+ lines[i] = match.group(1) + "LabelType" + match.group(2) + "Above"
+
+ match = re_CenteredEnvironment.match(lines[i])
+ if match:
+ lines[i] = match.group(1) + "LabelType" + match.group(2) + "Centered"
+
+ if inchapter:
+ match = re_Style.match(lines[i])
+ if match:
+ inchapter = False
+ else:
+ match = re_ChapterStyle.match(lines[i])
+ if match:
+ inchapter = True
+
+ i += 1
+ continue
+
+ if format == 42:
+ if lines[i] == "InsetLayout Caption":
+ lines[i] = "InsetLayout Caption:Standard"
+ i += 1
+ continue
+
+ if format == 41:
+ # nothing to do.
+ i += 1
+ continue
+
+ if format == 40:
+ # reset counters on Style beginning
+ match = re_Style.match(lines[i])
+ if match:
+ opts = 0
+ reqs = 0
+ i += 1
+ continue
+ match = re_OptArgs.match(lines[i])
+ if match:
+ # Save number of optional arguments
+ space1 = match.group(1)
+ opts = int(match.group(3))
+ # OptionalArgs 0 > ResetArgs 1
+ if opts == 0:
+ lines[i] = space1 + "ResetArgs\t1"
+ i += 1
+ else:
+ del lines[i]
+ continue
+ match = re_ReqArgs.match(lines[i])
+ if match:
+ # Save number of required arguments
+ space1 = match.group(1)
+ reqs = int(match.group(3))
+ del lines[i]
+ continue
+ # Insert the required number of arguments at the end of the style definition
+ match = re_End.match(lines[i])
+ if match:
+ newarg = ['']
+ # First the optionals (this is the required order pre 2.1)
+ if opts > 0:
+ if opts == 1:
+ newarg = [ '%sArgument 1' % (space1),
+ '%s\tLabelString\t\"Optional Layout Argument\"' % (space1),
+ '%sEndArgument' % (space1)]
+ elif opts > 1:
+ actopt = 1
+ while actopt < (opts + 1):
+ newarg += [ '%sArgument %d' % (space1, actopt),
+ '%s\tLabelString\t\"Optional Layout Argument %d\"' % (space1, actopt),
+ '%sEndArgument' % (space1)]
+ actopt += 1
+ # Now the mandatories
+ if reqs > 0:
+ actopt = opts + 1
+ while actopt < (opts + reqs + 1):
+ newarg += [ '%sArgument %d' % (space1, actopt),
+ '%s\tLabelString\t"Required Layout Argument %d"' % (space1, actopt - opts),
+ '%s\tMandatory\t1' % (space1),
+ '%sEndArgument' % (space1)]
+ actopt += 1
+ # Since we replace the "End" line, re-add this line
+ if len(newarg) > 1:
+ newarg += ['End']
+ lines[i:i+1] = newarg
+ i += len(newarg)
+ # Reset the counters
+ opts = 0
+ reqs = 0
+ i += 1
+ continue
+
+ if format == 39:
+ # There is a conversion with format 40, but it is done within the
+ # initial comment block and so is above.
+ i += 1
+ continue
+
+ if format == 37 or format == 38:
+ i += 1
+ continue
+
+ if format == 36:
+ match = re_CiteFormat.match(lines[i]);
+ if match and match.group(4) == "":
+ lines[i] = match.group(0) + " default"
+ i += 1
+ continue
+
+ if format == 35:
+ i += 1
+ continue
+
+ if format == 34:
+ match = re_QInsetLayout2.match(lines[i])
+ if not match:
+ match = re_InsetLayout2.match(lines[i])
+ if not match:
+ match = re_CopyStyle2.match(lines[i])
+ if not match:
+ i += 1
+ continue
+ style = match.group(2)
+
+ if flexstyles.count(style):
+ lines[i] = match.group(1) + "\"Flex:" + style + "\""
+ i += 1
+ continue
+
+ name = match.group(1)
+ names = name.split(":", 1)
+ if len(names) > 1 and names[0] == "Flex":
+ i += 1
+ continue
+
+ isflex = False
+ for j in range(i + 1, len(lines)):
+ if re_IsFlex.match(lines[j]):
+ isflex = True
+ break
+ if re_End.match(lines[j]):
+ break
+
+ if isflex:
+ flexstyles.append(name)
+ lines[i] = "InsetLayout \"Flex:" + name + "\""
+
+ i += 1
+ continue
+
+ if format == 33:
+ m = re_Fill.match(lines[i])
+ if m:
+ lines[i] = ""
+ i += 1
+ continue
+
+ if format == 32:
+ match = re_NeedsFloatPkg.match(lines[i])
+ if match:
+ space = match.group(1)
+ val = match.group(2)
+ lines[i] = space + "UsesFloatPkg " + val
+ newval = 'true'
+ if val == '1' or val.lower() == 'true':
+ newval = 'false'
+ lines.insert(i, space + "IsPredefined " + newval)
+ i += 1
+ i += 1
+ continue
+
+ # Only new features
+ if format >= 29 and format <= 31:
+ i += 1
+ continue
+
+ if format == 28:
+ match = re_InsetLayout.match(lines[i])
+ if match:
+ lines[i] = "InsetLayout Flex:" + match.group(1)
+ else:
+ match = re_QInsetLayout.match(lines[i])
+ if match:
+ lines[i] = "InsetLayout \"Flex:" + match.group(1) + "\""
+ else:
+ match = re_InsetLayout_CopyStyle.match(lines[i])
+ if match:
+ lines[i] = "\tCopyStyle Flex:" + match.group(1)
+ else:
+ match = re_QInsetLayout_CopyStyle.match(lines[i])
+ if match:
+ lines[i] = "\tCopyStyle \"Flex:" + match.group(1) + "\""
+ i += 1
+ continue
+
+ # Only new features
+ if format >= 24 and format <= 27:
+ i += 1
+ continue
+
+ if format == 23:
+ match = re_Float.match(lines[i])
+ i += 1
+ if not match:
+ continue
+ # we need to do two things:
+ # (i) Convert Builtin to NeedsFloatPkg
+ # (ii) Write ListCommand lines for the builtin floats table and figure
+ builtin = False
+ cmd = ""
+ while True and i < len(lines):
+ m1 = re_End.match(lines[i])
+ if m1:
+ if builtin and cmd:
+ line = " ListCommand " + cmd
+ lines.insert(i, line)
+ i += 1
+ break
+ m2 = re_Builtin.match(lines[i])
+ if m2:
+ builtin = True
+ ws1 = m2.group(1)
+ arg = m2.group(2)
+ newarg = ""
+ if re_True.match(arg):
+ newarg = "false"
+ else:
+ newarg = "true"
+ lines[i] = ws1 + "NeedsFloatPkg " + newarg
+ m3 = re_Type.match(lines[i])
+ if m3:
+ fltype = m3.group(1)
+ fltype = fltype.lower()
+ if fltype == "table":
+ cmd = "listoftables"
+ elif fltype == "figure":
+ cmd = "listoffigures"
+ # else unknown, which is why we're doing this
+ i += 1
+ continue
+
+ # This just involved new features, not any changes to old ones
+ if format >= 14 and format <= 22:
+ i += 1
+ continue
+
+ # Rename I18NPreamble to BabelPreamble
+ if format == 13:
+ match = re_I18nPreamble.match(lines[i])
+ if match:
+ lines[i] = match.group(1) + "BabelPreamble"
+ i += 1
+ match = re_EndI18nPreamble.match(lines[i])
+ while i < len(lines) and not match:
+ i += 1
+ match = re_EndI18nPreamble.match(lines[i])
+ lines[i] = match.group(1) + "EndBabelPreamble"
+ i += 1
+ continue
+
+ # These just involved new features, not any changes to old ones
+ if format == 11 or format == 12:
+ i += 1
+ continue
+
+ if format == 10:
+ match = re_UseMod.match(lines[i])
+ if match:
+ module = match.group(1)
+ lines[i] = "DefaultModule " + module
+ i += 1
+ continue
+
+ if format == 9:
+ match = re_Counter.match(lines[i])
+ if match:
+ counterline = i
+ i += 1
+ while i < len(lines):
+ namem = re_Name.match(lines[i])
+ if namem:
+ name = namem.group(1)
+ lines.pop(i)
+ lines[counterline] = "Counter %s" % name
+ # we don't need to increment i
+ continue
+ endem = re_End.match(lines[i])
+ if endem:
+ i += 1
+ break
+ i += 1
+ i += 1
+ continue
+
+ if format == 8:
+ # We want to scan for ams-type includes and, if we find them,
+ # add corresponding UseModule tags to the layout.
+ match = re_AMSMaths.match(lines[i])
+ if match:
+ addstring("theorems-ams", usemodules)
+ addstring("theorems-ams-extended", usemodules)
+ addstring("theorems-sec", usemodules)
+ lines.pop(i)
+ continue
+ match = re_AMSMathsPlain.match(lines[i])
+ if match:
+ addstring("theorems-starred", usemodules)
+ lines.pop(i)
+ continue
+ match = re_AMSMathsSeq.match(lines[i])
+ if match:
+ addstring("theorems-ams", usemodules)
+ addstring("theorems-ams-extended", usemodules)
+ lines.pop(i)
+ continue
+ i += 1
+ continue
+
+ # These just involved new features, not any changes to old ones
+ if format >= 5 and format <= 7:
+ i += 1
+ continue
+
+ if format == 4:
+ # Handle conversion to long CharStyle names
+ match = re_CharStyle.match(lines[i])
+ if match:
+ lines[i] = "InsetLayout CharStyle:%s" % (match.group(3))
+ i += 1
+ lines.insert(i, "\tLyXType charstyle")
+ i += 1
+ lines.insert(i, "")
+ lines[i] = "\tLabelString %s" % (match.group(3))
+ i += 1
+ continue
+
+ if format == 3:
+ # convert 'providesamsmath x', 'providesmakeidx x', 'providesnatbib x', 'providesurl x' to
+ # 'provides amsmath x', 'provides makeidx x', 'provides natbib x', 'provides url x'
+ # x is either 0 or 1
+ match = re_Provides.match(lines[i])
+ if match:
+ lines[i] = "%sProvides %s%s%s" % (match.group(1), match.group(2).lower(),
+ match.group(3), match.group(4))
+ i += 1