+def revert_pdfpages(document):
+ ' Revert pdfpages external inset to ERT '
+ i = 0
+ while 1:
+ i = find_token(document.body, "\\begin_inset External", i)
+ if i == -1:
+ return
+ j = find_end_of_inset(document.body, i)
+ if j == -1:
+ document.warning("Malformed lyx document: Missing '\\end_inset' in revert_pdfpages.")
+ i = i + 1
+ continue
+ if get_value(document.body, 'template', i, j) == "PDFPages":
+ filename = get_value(document.body, 'filename', i, j)
+ extra = ''
+ r = re.compile(r'\textra PDFLaTeX \"(.*)\"$')
+ for k in range(i, j):
+ m = r.match(document.body[k])
+ if m:
+ extra = m.group(1)
+ angle = get_value(document.body, 'rotateAngle', i, j)
+ width = get_value(document.body, 'width', i, j)
+ height = get_value(document.body, 'height', i, j)
+ scale = get_value(document.body, 'scale', i, j)
+ keepAspectRatio = find_token(document.body, "\tkeepAspectRatio", i, j)
+ options = extra
+ if angle != '':
+ if options != '':
+ options += ",angle=" + angle
+ else:
+ options += "angle=" + angle
+ if width != '':
+ if options != '':
+ options += ",width=" + convert_len(width)
+ else:
+ options += "width=" + convert_len(width)
+ if height != '':
+ if options != '':
+ options += ",height=" + convert_len(height)
+ else:
+ options += "height=" + convert_len(height)
+ if scale != '':
+ if options != '':
+ options += ",scale=" + scale
+ else:
+ options += "scale=" + scale
+ if keepAspectRatio != '':
+ if options != '':
+ options += ",keepaspectratio"
+ else:
+ options += "keepaspectratio"
+ if options != '':
+ options = '[' + options + ']'
+ del document.body[i+1:j+1]
+ document.body[i:i+1] = ['\\begin_inset ERT',
+ 'status collapsed',
+ '',
+ '\\begin_layout Standard',
+ '',
+ '\\backslash',
+ 'includepdf' + options + '{' + filename + '}',
+ '\\end_layout',
+ '',
+ '\\end_inset']
+ add_to_preamble(document, ['\\usepackage{pdfpages}\n'])
+ i = i + 1
+ continue
+ i = i + 1
+
+
+def revert_mexican(document):
+ ' Set language Spanish(Mexico) to Spanish '
+ i = 0
+ if document.language == "spanish-mexico":
+ document.language = "spanish"
+ i = find_token(document.header, "\\language", 0)
+ if i != -1:
+ document.header[i] = "\\language spanish"
+ j = 0
+ while True:
+ j = find_token(document.body, "\\lang spanish-mexico", j)
+ if j == -1:
+ return
+ document.body[j] = document.body[j].replace("\\lang spanish-mexico", "\\lang spanish")
+ j = j + 1
+
+
+def remove_embedding(document):
+ ' Remove embed tag from all insets '
+ revert_inset_embedding(document, 'Graphics')
+ revert_inset_embedding(document, 'External')
+ revert_inset_embedding(document, 'CommandInset include')
+ revert_inset_embedding(document, 'CommandInset bibtex')
+
+
+def revert_master(document):
+ ' Remove master param '
+ i = find_token(document.header, "\\master", 0)
+ if i != -1:
+ del document.header[i]
+
+
+def revert_graphics_group(document):
+ ' Revert group information from graphics insets '
+ i = 0
+ while 1:
+ i = find_token(document.body, "\\begin_inset Graphics", i)
+ if i == -1:
+ return
+ j = find_end_of_inset(document.body, i)
+ if j == -1:
+ document.warning("Malformed lyx document: Missing '\\end_inset' in revert_graphics_group.")
+ i = i + 1
+ continue
+ k = find_token(document.body, " groupId", i, j)
+ if k == -1:
+ i = i + 1
+ continue
+ del document.body[k]
+ i = i + 1
+
+
+def update_apa_styles(document):
+ ' Replace obsolete styles '
+
+ if document.textclass != "apa":
+ return
+
+ obsoletedby = { "Acknowledgments": "Acknowledgements",
+ "Section*": "Section",
+ "Subsection*": "Subsection",
+ "Subsubsection*": "Subsubsection",
+ "Paragraph*": "Paragraph",
+ "Subparagraph*": "Subparagraph"}
+ i = 0
+ while 1:
+ i = find_token(document.body, "\\begin_layout", i)
+ if i == -1:
+ return
+
+ layout = document.body[i][14:]
+ if layout in obsoletedby:
+ document.body[i] = "\\begin_layout " + obsoletedby[layout]
+
+ i += 1
+
+
+def convert_paper_sizes(document):
+ ' exchange size options legalpaper and executivepaper to correct order '
+ # routine is needed to fix http://www.lyx.org/trac/ticket/4868
+ i = 0
+ j = 0
+ i = find_token(document.header, "\\papersize executivepaper", 0)
+ if i != -1:
+ document.header[i] = "\\papersize legalpaper"
+ return
+ j = find_token(document.header, "\\papersize legalpaper", 0)
+ if j != -1:
+ document.header[j] = "\\papersize executivepaper"
+
+
+def revert_paper_sizes(document):
+ ' exchange size options legalpaper and executivepaper to correct order '
+ i = 0
+ j = 0
+ i = find_token(document.header, "\\papersize executivepaper", 0)
+ if i != -1:
+ document.header[i] = "\\papersize legalpaper"
+ return
+ j = find_token(document.header, "\\papersize legalpaper", 0)
+ if j != -1:
+ document.header[j] = "\\papersize executivepaper"
+
+
+def convert_InsetSpace(document):
+ " Convert '\\begin_inset Space foo' to '\\begin_inset space foo'"
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Space", i)
+ if i == -1:
+ return
+ document.body[i] = document.body[i].replace('\\begin_inset Space', '\\begin_inset space')
+
+
+def revert_InsetSpace(document):
+ " Revert '\\begin_inset space foo' to '\\begin_inset Space foo'"
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset space", i)
+ if i == -1:
+ return
+ document.body[i] = document.body[i].replace('\\begin_inset space', '\\begin_inset Space')
+
+
+def convert_display_enum(document):
+ " Convert 'display foo' to 'display false/true'"
+ i = 0
+ while True:
+ i = find_token(document.body, "\tdisplay", i)
+ if i == -1:
+ return
+ val = get_value(document.body, 'display', i)
+ if val == "none":
+ document.body[i] = document.body[i].replace('none', 'false')
+ if val == "default":
+ document.body[i] = document.body[i].replace('default', 'true')
+ if val == "monochrome":
+ document.body[i] = document.body[i].replace('monochrome', 'true')
+ if val == "grayscale":
+ document.body[i] = document.body[i].replace('grayscale', 'true')
+ if val == "color":
+ document.body[i] = document.body[i].replace('color', 'true')
+ if val == "preview":
+ document.body[i] = document.body[i].replace('preview', 'true')
+ i += 1
+
+
+def revert_display_enum(document):
+ " Revert 'display false/true' to 'display none/color'"
+ i = 0
+ while True:
+ i = find_token(document.body, "\tdisplay", i)
+ if i == -1:
+ return
+ val = get_value(document.body, 'display', i)
+ if val == "false":
+ document.body[i] = document.body[i].replace('false', 'none')
+ if val == "true":
+ document.body[i] = document.body[i].replace('true', 'default')
+ i += 1
+
+
+def remove_fontsCJK(document):
+ ' Remove font_cjk param '
+ i = find_token(document.header, "\\font_cjk", 0)
+ if i != -1:
+ del document.header[i]
+
+
+def convert_plain_layout(document):
+ " Convert 'PlainLayout' to 'Plain Layout'"
+ i = 0
+ while True:
+ i = find_token(document.body, '\\begin_layout PlainLayout', i)
+ if i == -1:
+ return
+ document.body[i] = document.body[i].replace('\\begin_layout PlainLayout', \
+ '\\begin_layout Plain Layout')
+ i += 1
+
+
+def revert_plain_layout(document):
+ " Revert 'Plain Layout' to 'PlainLayout'"
+ i = 0
+ while True:
+ i = find_token(document.body, '\\begin_layout Plain Layout', i)
+ if i == -1:
+ return
+ document.body[i] = document.body[i].replace('\\begin_layout Plain Layout', \
+ '\\begin_layout PlainLayout')
+ i += 1
+
+
+def revert_plainlayout(document):
+ " Revert 'PlainLayout' to 'Standard'"
+ i = 0
+ while True:
+ i = find_token(document.body, '\\begin_layout PlainLayout', i)
+ if i == -1:
+ return
+ # This will be incorrect for some document classes, since Standard is not always
+ # the default. But (a) it is probably the best we can do and (b) it will actually
+ # work, in fact, since an unknown layout will be converted to default.
+ document.body[i] = document.body[i].replace('\\begin_layout PlainLayout', \
+ '\\begin_layout Standard')
+ i += 1
+
+
+def revert_polytonicgreek(document):
+ "Set language polytonic Greek to Greek"
+ i = 0
+ if document.language == "polutonikogreek":
+ document.language = "greek"
+ i = find_token(document.header, "\\language", 0)
+ if i != -1:
+ document.header[i] = "\\language greek"
+ j = 0
+ while True:
+ j = find_token(document.body, "\\lang polutonikogreek", j)
+ if j == -1:
+ return
+ document.body[j] = document.body[j].replace("\\lang polutonikogreek", "\\lang greek")
+ j = j + 1
+
+
+def revert_removed_modules(document):
+ i = 0
+ while True:
+ i = find_token(document.header, "\\begin_remove_modules", i)
+ if i == -1:
+ return
+ j = find_end_of(document.header, i, "\\begin_remove_modules", "\\end_remove_modules")
+ if j == -1:
+ # this should not happen
+ break
+ document.header[i : j + 1] = []
+
+
+def add_plain_layout(document):
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_layout", i)
+ if i == -1:
+ return
+ if len(document.body[i].split()) == 1:
+ document.body[i] = "\\begin_layout Plain Layout"
+ i += 1
+
+
+def revert_tabulators(document):
+ "Revert tabulators to 4 spaces"
+ i = 0
+ while True:
+ i = find_token(document.body, "\t", i)
+ if i == -1:
+ return
+ document.body[i] = document.body[i].replace("\t", " ")
+ i += 1
+
+
+def revert_tabsize(document):
+ "Revert the tabsize parameter of listings"
+ i = 0
+ j = 0
+ while True:
+ # either it is the only parameter
+ i = find_token(document.body, 'lstparams "tabsize=4"', i)
+ if i != -1:
+ del document.body[i]
+ # or the last one
+ j = find_token(document.body, "lstparams", j)
+ if j == -1:
+ return
+ pos = document.body[j].find(",tabsize=")
+ document.body[j] = document.body[j][:pos] + '"'
+ i += 1
+ j += 1
+
+
+def revert_mongolian(document):
+ "Set language Mongolian to English"
+ i = 0
+ if document.language == "mongolian":
+ document.language = "english"
+ i = find_token(document.header, "\\language", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = 0
+ while True:
+ j = find_token(document.body, "\\lang mongolian", j)
+ if j == -1:
+ return
+ document.body[j] = document.body[j].replace("\\lang mongolian", "\\lang english")
+ j = j + 1
+
+
+def revert_default_options(document):
+ ' Remove param use_default_options '
+ i = find_token(document.header, "\\use_default_options", 0)
+ if i != -1:
+ del document.header[i]
+
+
+def convert_default_options(document):
+ ' Add param use_default_options and set it to false '
+ i = find_token(document.header, "\\textclass", 0)
+ if i == -1:
+ document.warning("Malformed LyX document: Missing `\\textclass'.")
+ return
+ document.header.insert(i, '\\use_default_options false')
+
+
+def revert_backref_options(document):
+ ' Revert option pdf_backref=page to pagebackref '
+ i = find_token(document.header, "\\pdf_backref page", 0)
+ if i != -1:
+ document.header[i] = "\\pdf_pagebackref true"
+
+
+def convert_backref_options(document):
+ ' We have changed the option pagebackref to backref=true '
+ i = find_token(document.header, "\\pdf_pagebackref true", 0)
+ if i != -1:
+ document.header[i] = "\\pdf_backref page"
+ j = find_token(document.header, "\\pdf_pagebackref false", 0)
+ if j != -1:
+ del document.header[j]
+ # backref=true was not a valid option, we meant backref=section
+ k = find_token(document.header, "\\pdf_backref true", 0)
+ if k != -1 and i != -1:
+ del document.header[k]
+ elif k != -1 and j != -1:
+ document.header[k] = "\\pdf_backref section"
+
+
+def convert_charstyle_element(document):
+ "Convert CharStyle to Element for docbook backend"
+ if document.backend != "docbook":
+ return
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Flex CharStyle:", i)
+ if i == -1:
+ return
+ document.body[i] = document.body[i].replace('\\begin_inset Flex CharStyle:',
+ '\\begin_inset Flex Element:')
+
+def revert_charstyle_element(document):
+ "Convert Element to CharStyle for docbook backend"
+ if document.backend != "docbook":
+ return
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Flex Element:", i)
+ if i == -1:
+ return
+ document.body[i] = document.body[i].replace('\\begin_inset Flex Element:',
+ '\\begin_inset Flex CharStyle:')
+