#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
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"
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
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):
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):
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):
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):
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):
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):
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):
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):
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):
k = 0
m = 0
o = 0
+ p = 0
while True:
if j != -1:
j = find_token(document.body, "\\begin_layout Entry", j)
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
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):
# 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):
" 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):
return
document.body[i] = "\\begin_inset Caption Standard"
i = i + 1
-
def revert_captioninsets(document):
def convert_captionlayouts(document):
" Convert caption layouts to caption insets. "
-
+
caption_dict = {
"Captionabove": "Above",
"Captionbelow": "Below",
"CenteredCaption" : "Centered",
"Bicaption" : "Bicaption",
}
-
+
i = 0
while True:
i = find_token(document.body, "\\begin_layout", i)
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:
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{")
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
#
[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]],
[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]],