# Uncomment only what you need to import, please.
-from parser_tools import find_end_of#, find_token, find_tokens, \
-# find_token_exact, find_end_of_inset, find_end_of_layout, \
-# find_token_backwards, is_in_inset, get_value, get_quoted_value, \
+from parser_tools import find_end_of, find_token_backwards, find_end_of_layout#,
+# find_token, find_tokens, \
+# find_token_exact, find_end_of_inset, \
+# is_in_inset, get_value, get_quoted_value, \
# del_token, check_token, get_option_value, get_bool_value
from parser_tools import find_token, find_end_of_inset, get_value, \
- get_bool_value
+ get_bool_value, get_containing_layout
-#from lyx2lyx_tools import add_to_preamble, put_cmd_in_ert, get_ert, lyx2latex, \
+from lyx2lyx_tools import add_to_preamble, put_cmd_in_ert
+# get_ert, lyx2latex, \
# lyx2verbatim, length_in_bp, convert_info_insets
# insert_to_preamble, latex_length, revert_flex_inset, \
# revert_font_attrs, hex2ratio, str2bool
continue
+def convert_inputenc(document):
+ " Replace no longer supported input encoding settings. "
+ i = find_token(document.header, "\\inputenc", 0)
+ if i == -1:
+ return
+ if get_value(document.header, "\\inputencoding", i) == "pt254":
+ document.header[i] = "\\inputencoding pt154"
+
+
def convert_ibranches(document):
' Add "inverted 0" to branch insets'
i = 0
if document.textclass == "scrarticle-beamer":
inclusion = "scrartcl.layout"
- while True:
- i = find_token(document.header, "\\begin_local_layout", 0)
- if i == -1:
- k = find_token(document.header, "\\language", 0)
- if k == -1:
- # this should not happen
- document.warning("Malformed LyX document! No \\language header found!")
- break
- document.header[k-1 : k-1] = ["\\begin_local_layout", "\\end_local_layout"]
- i = find_token(document.header, "\\begin_local_layout", 0)
- if i != -1:
- j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout")
- if j == -1:
- # this should not happen
- break
-
- document.header[i+1 : i+1] = ["### Inserted by lyx2lyx (more [scr]article styles) ###",
- "Input " + inclusion,
- "Input beamer.layout",
- "Provides geometry 0",
- "Provides hyperref 0",
- "DefaultFont",
- " Family Roman",
- " Series Medium",
- " Shape Up",
- " Size Normal",
- " Color None",
- "EndFont",
- "Preamble",
- " \\usepackage{beamerarticle,pgf}",
- " % this default might be overridden by plain title style",
- " \\newcommand\makebeamertitle{\\frame{\\maketitle}}%",
- " \\AtBeginDocument{",
- " \\let\\origtableofcontents=\\tableofcontents",
- " \\def\\tableofcontents{\\@ifnextchar[{\\origtableofcontents}{\\gobbletableofcontents}}",
- " \\def\\gobbletableofcontents#1{\\origtableofcontents}",
- " }",
- "EndPreamble",
- "### End of insertion by lyx2lyx (more [scr]article styles) ###"]
+ i = find_token(document.header, "\\begin_local_layout", 0)
+ if i == -1:
+ k = find_token(document.header, "\\language", 0)
+ if k == -1:
+ # this should not happen
+ document.warning("Malformed LyX document! No \\language header found!")
+ return
+ document.header[k-1 : k-1] = ["\\begin_local_layout", "\\end_local_layout"]
+ i = k - 1
+
+ j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout")
+ if j == -1:
+ # this should not happen
+ document.warning("Malformed LyX document: Can't find end of local layout!")
return
+ document.header[i+1 : i+1] = [
+ "### Inserted by lyx2lyx (more [scr]article styles) ###",
+ "Input " + inclusion,
+ "Input beamer.layout",
+ "Provides geometry 0",
+ "Provides hyperref 0",
+ "DefaultFont",
+ " Family Roman",
+ " Series Medium",
+ " Shape Up",
+ " Size Normal",
+ " Color None",
+ "EndFont",
+ "Preamble",
+ " \\usepackage{beamerarticle,pgf}",
+ " % this default might be overridden by plain title style",
+ " \\newcommand\makebeamertitle{\\frame{\\maketitle}}%",
+ " \\AtBeginDocument{",
+ " \\let\\origtableofcontents=\\tableofcontents",
+ " \\def\\tableofcontents{\\@ifnextchar[{\\origtableofcontents}{\\gobbletableofcontents}}",
+ " \\def\\gobbletableofcontents#1{\\origtableofcontents}",
+ " }",
+ "EndPreamble",
+ "### End of insertion by lyx2lyx (more [scr]article styles) ###"
+ ]
+
def convert_beamer_article_styles(document):
" Remove included (scr)article styles in beamer article "
if document.textclass not in beamer_articles:
return
+ i = find_token(document.header, "\\begin_local_layout", 0)
+ if i == -1:
+ return
+
+ j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout")
+ if j == -1:
+ # this should not happen
+ document.warning("Malformed LyX document: Can't find end of local layout!")
+ return
+
+ k = find_token(document.header, "### Inserted by lyx2lyx (more [scr]article styles) ###", i, j)
+ if k != -1:
+ l = find_token(document.header, "### End of insertion by lyx2lyx (more [scr]article styles) ###", i, j)
+ if l == -1:
+ # this should not happen
+ document.warning("End of lyx2lyx local layout insertion not found!")
+ return
+
+ if k == i + 1 and l == j - 1:
+ # that was all the local layout there was
+ document.header[i : j + 1] = []
+ else:
+ document.header[k : l + 1] = []
+
+
+def revert_bosnian(document):
+ "Set the document language to English but assure Bosnian output"
+
+ if document.language == "bosnian":
+ document.language = "english"
+ i = find_token(document.header, "\\language bosnian", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package babel"
+ k = find_token(document.header, "\\options", 0)
+ if k != -1:
+ document.header[k] = document.header[k].replace("\\options", "\\options bosnian,")
+ else:
+ l = find_token(document.header, "\\use_default_options", 0)
+ document.header.insert(l + 1, "\\options bosnian")
+
+
+def revert_friulan(document):
+ "Set the document language to English but assure Friulan output"
+
+ if document.language == "friulan":
+ document.language = "english"
+ i = find_token(document.header, "\\language friulan", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package babel"
+ k = find_token(document.header, "\\options", 0)
+ if k != -1:
+ document.header[k] = document.header[k].replace("\\options", "\\options friulan,")
+ else:
+ l = find_token(document.header, "\\use_default_options", 0)
+ document.header.insert(l + 1, "\\options friulan")
+
+
+def revert_macedonian(document):
+ "Set the document language to English but assure Macedonian output"
+
+ if document.language == "macedonian":
+ document.language = "english"
+ i = find_token(document.header, "\\language macedonian", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package babel"
+ k = find_token(document.header, "\\options", 0)
+ if k != -1:
+ document.header[k] = document.header[k].replace("\\options", "\\options macedonian,")
+ else:
+ l = find_token(document.header, "\\use_default_options", 0)
+ document.header.insert(l + 1, "\\options macedonian")
+
+
+def revert_piedmontese(document):
+ "Set the document language to English but assure Piedmontese output"
+
+ if document.language == "piedmontese":
+ document.language = "english"
+ i = find_token(document.header, "\\language piedmontese", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package babel"
+ k = find_token(document.header, "\\options", 0)
+ if k != -1:
+ document.header[k] = document.header[k].replace("\\options", "\\options piedmontese,")
+ else:
+ l = find_token(document.header, "\\use_default_options", 0)
+ document.header.insert(l + 1, "\\options piedmontese")
+
+
+def revert_romansh(document):
+ "Set the document language to English but assure Romansh output"
+
+ if document.language == "romansh":
+ document.language = "english"
+ i = find_token(document.header, "\\language romansh", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package babel"
+ k = find_token(document.header, "\\options", 0)
+ if k != -1:
+ document.header[k] = document.header[k].replace("\\options", "\\options romansh,")
+ else:
+ l = find_token(document.header, "\\use_default_options", 0)
+ document.header.insert(l + 1, "\\options romansh")
+
+
+def revert_amharic(document):
+ "Set the document language to English but assure Amharic output"
+
+ if document.language == "amharic":
+ document.language = "english"
+ i = find_token(document.header, "\\language amharic", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package default"
+ add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{amharic}}"])
+ document.body[2 : 2] = ["\\begin_layout Standard",
+ "\\begin_inset ERT", "status open", "",
+ "\\begin_layout Plain Layout", "", "",
+ "\\backslash",
+ "resetdefaultlanguage{amharic}",
+ "\\end_layout", "", "\\end_inset", "", "",
+ "\\end_layout", ""]
+
+
+def revert_asturian(document):
+ "Set the document language to English but assure Asturian output"
+
+ if document.language == "asturian":
+ document.language = "english"
+ i = find_token(document.header, "\\language asturian", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package default"
+ add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{asturian}}"])
+ document.body[2 : 2] = ["\\begin_layout Standard",
+ "\\begin_inset ERT", "status open", "",
+ "\\begin_layout Plain Layout", "", "",
+ "\\backslash",
+ "resetdefaultlanguage{asturian}",
+ "\\end_layout", "", "\\end_inset", "", "",
+ "\\end_layout", ""]
+
+
+def revert_kannada(document):
+ "Set the document language to English but assure Kannada output"
+
+ if document.language == "kannada":
+ document.language = "english"
+ i = find_token(document.header, "\\language kannada", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package default"
+ add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{kannada}}"])
+ document.body[2 : 2] = ["\\begin_layout Standard",
+ "\\begin_inset ERT", "status open", "",
+ "\\begin_layout Plain Layout", "", "",
+ "\\backslash",
+ "resetdefaultlanguage{kannada}",
+ "\\end_layout", "", "\\end_inset", "", "",
+ "\\end_layout", ""]
+
+
+def revert_khmer(document):
+ "Set the document language to English but assure Khmer output"
+
+ if document.language == "khmer":
+ document.language = "english"
+ i = find_token(document.header, "\\language khmer", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package default"
+ add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{khmer}}"])
+ document.body[2 : 2] = ["\\begin_layout Standard",
+ "\\begin_inset ERT", "status open", "",
+ "\\begin_layout Plain Layout", "", "",
+ "\\backslash",
+ "resetdefaultlanguage{khmer}",
+ "\\end_layout", "", "\\end_inset", "", "",
+ "\\end_layout", ""]
+
+
+def revert_urdu(document):
+ "Set the document language to English but assure Urdu output"
+
+ if document.language == "urdu":
+ document.language = "english"
+ i = find_token(document.header, "\\language urdu", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package default"
+ add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{urdu}}"])
+ document.body[2 : 2] = ["\\begin_layout Standard",
+ "\\begin_inset ERT", "status open", "",
+ "\\begin_layout Plain Layout", "", "",
+ "\\backslash",
+ "resetdefaultlanguage{urdu}",
+ "\\end_layout", "", "\\end_inset", "", "",
+ "\\end_layout", ""]
+
+
+def revert_syriac(document):
+ "Set the document language to English but assure Syriac output"
+
+ if document.language == "syriac":
+ document.language = "english"
+ i = find_token(document.header, "\\language syriac", 0)
+ if i != -1:
+ document.header[i] = "\\language english"
+ j = find_token(document.header, "\\language_package default", 0)
+ if j != -1:
+ document.header[j] = "\\language_package default"
+ add_to_preamble(document, ["\\AtBeginDocument{\setotherlanguage{syriac}}"])
+ document.body[2 : 2] = ["\\begin_layout Standard",
+ "\\begin_inset ERT", "status open", "",
+ "\\begin_layout Plain Layout", "", "",
+ "\\backslash",
+ "resetdefaultlanguage{syriac}",
+ "\\end_layout", "", "\\end_inset", "", "",
+ "\\end_layout", ""]
+
+
+def revert_quotes(document):
+ " Revert Quote Insets in verbatim or Hebrew context to plain quotes "
+
+ # First handle verbatim insets
+ i = 0
+ j = 0
+ while i < len(document.body):
+ words = document.body[i].split()
+ if len(words) > 1 and words[0] == "\\begin_inset" and \
+ ( words[1] in ["ERT", "listings"] or ( len(words) > 2 and words[2] in ["URL", "Chunk", "Sweave", "S/R"]) ):
+ j = find_end_of_inset(document.body, i)
+ if j == -1:
+ document.warning("Malformed LyX document: Can't find end of " + words[1] + " inset at line " + str(i))
+ i += 1
+ continue
+ while True:
+ k = find_token(document.body, '\\begin_inset Quotes', i, j)
+ if k == -1:
+ i += 1
+ break
+ l = find_end_of_inset(document.body, k)
+ if l == -1:
+ document.warning("Malformed LyX document: Can't find end of Quote inset at line " + str(k))
+ i = k
+ continue
+ replace = "\""
+ if document.body[k].endswith("s"):
+ replace = "'"
+ document.body[k:l+1] = [replace]
+ else:
+ i += 1
+ continue
+
+ # Now verbatim layouts
+ i = 0
+ j = 0
+ while i < len(document.body):
+ words = document.body[i].split()
+ if len(words) > 1 and words[0] == "\\begin_layout" and \
+ words[1] in ["Verbatim", "Verbatim*", "Code", "Author_Email", "Author_URL"]:
+ j = find_end_of_layout(document.body, i)
+ if j == -1:
+ document.warning("Malformed LyX document: Can't find end of " + words[1] + " layout at line " + str(i))
+ i += 1
+ continue
+ while True:
+ k = find_token(document.body, '\\begin_inset Quotes', i, j)
+ if k == -1:
+ i += 1
+ break
+ l = find_end_of_inset(document.body, k)
+ if l == -1:
+ document.warning("Malformed LyX document: Can't find end of Quote inset at line " + str(k))
+ i = k
+ continue
+ replace = "\""
+ if document.body[k].endswith("s"):
+ replace = "'"
+ document.body[k:l+1] = [replace]
+ else:
+ i += 1
+ continue
+
+ # Now handle Hebrew
+ if not document.language == "hebrew" and find_token(document.body, '\\lang hebrew', 0) == -1:
+ return
+
+ i = 0
+ j = 0
while True:
- i = find_token(document.header, "\\begin_local_layout", 0)
- if i == -1:
+ k = find_token(document.body, '\\begin_inset Quotes', i)
+ if k == -1:
return
+ l = find_end_of_inset(document.body, k)
+ if l == -1:
+ document.warning("Malformed LyX document: Can't find end of Quote inset at line " + str(k))
+ i = k
+ continue
+ hebrew = False
+ parent = get_containing_layout(document.body, k)
+ ql = find_token_backwards(document.body, "\\lang", k)
+ if ql == -1 or ql < parent[1]:
+ hebrew = document.language == "hebrew"
+ elif document.body[ql] == "\\lang hebrew":
+ hebrew = True
+ if hebrew:
+ replace = "\""
+ if document.body[k].endswith("s"):
+ replace = "'"
+ document.body[k:l+1] = [replace]
+ i = l
+
+
+def revert_iopart(document):
+ " Input new styles via local layout "
+ if document.textclass != "iopart":
+ return
- j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout")
- if j == -1:
+ i = find_token(document.header, "\\begin_local_layout", 0)
+ if i == -1:
+ k = find_token(document.header, "\\language", 0)
+ if k == -1:
# this should not happen
- break
+ document.warning("Malformed LyX document! No \\language header found!")
+ return
+ document.header[k-1 : k-1] = ["\\begin_local_layout", "\\end_local_layout"]
+ i = k-1
- k = find_token(document.header, "### Inserted by lyx2lyx (more [scr]article styles) ###", i, j)
- if k != -1:
- l = find_token(document.header, "### End of insertion by lyx2lyx (more [scr]article styles) ###", i, j)
- if l == -1:
- # this should not happen
- document.warning("End of lyx2lyx local layout insertion not found!")
- break
+ j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout")
+ if j == -1:
+ # this should not happen
+ document.warning("Malformed LyX document! Can't find end of local layout!")
+ return
- document.header[k : l + 1] = []
+ document.header[i+1 : i+1] = [
+ "### Inserted by lyx2lyx (stdlayouts) ###",
+ "Input stdlayouts.inc",
+ "### End of insertion by lyx2lyx (stdlayouts) ###"
+ ]
+
+def convert_iopart(document):
+ " Remove local layout we added, if it is there "
+ if document.textclass != "iopart":
+ return
+
+ i = find_token(document.header, "\\begin_local_layout", 0)
+ if i == -1:
+ return
+
+ j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout")
+ if j == -1:
+ # this should not happen
+ document.warning("Malformed LyX document! Can't find end of local layout!")
return
+ k = find_token(document.header, "### Inserted by lyx2lyx (stdlayouts) ###", i, j)
+ if k != -1:
+ l = find_token(document.header, "### End of insertion by lyx2lyx (stdlayouts) ###", i, j)
+ if l == -1:
+ # this should not happen
+ document.warning("End of lyx2lyx local layout insertion not found!")
+ return
+ if k == i + 1 and l == j - 1:
+ # that was all the local layout there was
+ document.header[i : j + 1] = []
+ else:
+ document.header[k : l + 1] = []
+
##
# Conversion hub
[509, [convert_microtype]],
[510, [convert_dateinset]],
[511, [convert_ibranches]],
- [512, [convert_beamer_article_styles]]
+ [512, [convert_beamer_article_styles]],
+ [513, []],
+ [514, []],
+ [515, []],
+ [516, [convert_inputenc]],
+ [517, []],
+ [518, [convert_iopart]]
]
revert = [
+ [517, [revert_iopart]],
+ [516, [revert_quotes]],
+ [515, []],
+ [514, [revert_urdu, revert_syriac]],
+ [513, [revert_amharic, revert_asturian, revert_kannada, revert_khmer]],
+ [512, [revert_bosnian, revert_friulan, revert_macedonian, revert_piedmontese, revert_romansh]],
[511, [revert_beamer_article_styles]],
[510, [revert_ibranches]],
[509, []],