mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-29 05:01:49 +00:00
parent
a69e01d0b4
commit
348b3e5e49
@ -1360,215 +1360,127 @@ def revert_jss(document):
|
|||||||
if document.textclass != "jss":
|
if document.textclass != "jss":
|
||||||
return
|
return
|
||||||
|
|
||||||
h = 0
|
# at first revert the inset layouts because
|
||||||
m = 0
|
# they can be part of the In_Preamble layouts
|
||||||
j = 0
|
il_dict = {
|
||||||
k = 0
|
"Pkg" : "pkg",
|
||||||
n = 0
|
"Proglang" : "proglang",
|
||||||
|
"Code" : "code",
|
||||||
|
"E-mail" : "email",
|
||||||
|
"URL" : "url",
|
||||||
|
}
|
||||||
|
for iltype in il_dict.keys():
|
||||||
|
i = 0
|
||||||
|
while True:
|
||||||
|
i = find_token(document.body, "\\begin_inset Flex " + iltype, i)
|
||||||
|
if i != -1:
|
||||||
|
break
|
||||||
|
|
||||||
|
if iltype == "Code" and document.body[i][-1] != "e":
|
||||||
|
# Code Chunk inset. Continue
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
end = find_end_of_inset(document.body, i)
|
||||||
|
if end == -1:
|
||||||
|
document.warning("Malformed LyX document: No end of Flex " + iltype + " found!")
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
document.body[end - 2 : end + 1] = put_cmd_in_ert("}")
|
||||||
|
document.body[i : i + 4] = put_cmd_in_ert("\\%s{" % il_dict[iltype])
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
# now revert the In_Preamble layouts
|
||||||
|
ipl_dict = {
|
||||||
|
"Title" : "title",
|
||||||
|
"Author" : "author",
|
||||||
|
"Plain Author" : "Plainauthor",
|
||||||
|
"Plain Title" : "Plaintitle",
|
||||||
|
"Short Title" : "Shorttitle",
|
||||||
|
"Abstract" : "Abstract",
|
||||||
|
"Keywords" : "Keywords",
|
||||||
|
"Plain Keywords" : "Plainkeywords",
|
||||||
|
"Address" : "Address",
|
||||||
|
}
|
||||||
|
for ipltype in ipl_dict.keys():
|
||||||
|
i = 0
|
||||||
|
while True:
|
||||||
|
i = find_token(document.body, "\\begin_layout " + ipltype, i)
|
||||||
|
if i == -1:
|
||||||
|
break
|
||||||
|
|
||||||
|
end = find_end_of_layout(document.body, i)
|
||||||
|
if end == -1:
|
||||||
|
document.warning("Malformed LyX document: Can't find end of " + ipltype + " layout")
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
content = lyx2latex(document, document.body[i:end + 1])
|
||||||
|
add_to_preamble(document, ["\\" + ipl_dict[ipltype] + "{" + content + "}"])
|
||||||
|
del document.body[i:end + 1]
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
# Now code chunks
|
||||||
|
i = 0
|
||||||
while True:
|
while True:
|
||||||
# at first revert the inset layouts because they can be part of the In_Preamble layouts
|
|
||||||
while m != -1 or j != -1 or h != -1 or k != -1 or n != -1:
|
|
||||||
# \pkg
|
|
||||||
if h != -1:
|
|
||||||
h = find_token(document.body, "\\begin_inset Flex Pkg", h)
|
|
||||||
if h != -1:
|
|
||||||
endh = find_end_of_inset(document.body, h)
|
|
||||||
document.body[endh - 2 : endh + 1] = put_cmd_in_ert("}")
|
|
||||||
document.body[h : h + 4] = put_cmd_in_ert("\\pkg{")
|
|
||||||
h = h + 5
|
|
||||||
# \proglang
|
|
||||||
if m != -1:
|
|
||||||
m = find_token(document.body, "\\begin_inset Flex Proglang", m)
|
|
||||||
if m != -1:
|
|
||||||
endm = find_end_of_inset(document.body, m)
|
|
||||||
document.body[endm - 2 : endm + 1] = put_cmd_in_ert("}")
|
|
||||||
document.body[m : m + 4] = put_cmd_in_ert("\\proglang{")
|
|
||||||
m = m + 5
|
|
||||||
# \code
|
|
||||||
if j != -1:
|
|
||||||
j = find_token(document.body, "\\begin_inset Flex Code", j)
|
|
||||||
if j != -1:
|
|
||||||
# assure that we are not in a Code Chunk inset
|
|
||||||
if document.body[j][-1] == "e":
|
|
||||||
endj = find_end_of_inset(document.body, j)
|
|
||||||
document.body[endj - 2 : endj + 1] = put_cmd_in_ert("}")
|
|
||||||
document.body[j : j + 4] = put_cmd_in_ert("\\code{")
|
|
||||||
j = j + 5
|
|
||||||
else:
|
|
||||||
j = j + 1
|
|
||||||
# \email
|
|
||||||
if k != -1:
|
|
||||||
k = find_token(document.body, "\\begin_inset Flex E-mail", k)
|
|
||||||
if k != -1:
|
|
||||||
endk = find_end_of_inset(document.body, k)
|
|
||||||
document.body[endk - 2 : endk + 1] = put_cmd_in_ert("}")
|
|
||||||
document.body[k : k + 4] = put_cmd_in_ert("\\email{")
|
|
||||||
k = k + 5
|
|
||||||
# \url
|
|
||||||
if n != -1:
|
|
||||||
n = find_token(document.body, "\\begin_inset Flex URL", n)
|
|
||||||
if n != -1:
|
|
||||||
endn = find_end_of_inset(document.body, n)
|
|
||||||
document.body[endn - 2 : endn + 1] = put_cmd_in_ert("}")
|
|
||||||
document.body[n : n + 4] = put_cmd_in_ert("\\url{")
|
|
||||||
n = n + 5
|
|
||||||
# now revert the In_Preamble layouts
|
|
||||||
# \title
|
|
||||||
i = find_token(document.body, "\\begin_layout Title", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Title layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\title{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \author
|
|
||||||
i = find_token(document.body, "\\begin_layout Author", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Author layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\author{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \Plainauthor
|
|
||||||
i = find_token(document.body, "\\begin_layout Plain Author", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Plain Author layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\Plainauthor{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \Plaintitle
|
|
||||||
i = find_token(document.body, "\\begin_layout Plain Title", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Plain Title layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\Plaintitle{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \Shorttitle
|
|
||||||
i = find_token(document.body, "\\begin_layout Short Title", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Short Title layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\Shorttitle{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \Abstract
|
|
||||||
i = find_token(document.body, "\\begin_layout Abstract", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Abstract layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\Abstract{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \Keywords
|
|
||||||
i = find_token(document.body, "\\begin_layout Keywords", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Keywords layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\Keywords{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \Plainkeywords
|
|
||||||
i = find_token(document.body, "\\begin_layout Plain Keywords", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Plain Keywords layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\Plainkeywords{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# \Address
|
|
||||||
i = find_token(document.body, "\\begin_layout Address", 0)
|
|
||||||
if i == -1:
|
|
||||||
return
|
|
||||||
j = find_end_of_layout(document.body, i)
|
|
||||||
if j == -1:
|
|
||||||
document.warning("Malformed LyX document: Can't find end of Address layout")
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
content = lyx2latex(document, document.body[i:j + 1])
|
|
||||||
add_to_preamble(document, ["\\Address{" + content + "}"])
|
|
||||||
del document.body[i:j + 1]
|
|
||||||
# finally handle the code layouts
|
|
||||||
h = 0
|
|
||||||
m = 0
|
|
||||||
j = 0
|
|
||||||
k = 0
|
|
||||||
while m != -1 or j != -1 or h != -1 or k != -1:
|
|
||||||
# \CodeChunk
|
# \CodeChunk
|
||||||
if h != -1:
|
i = find_token(document.body, "\\begin_inset Flex Code Chunk", i)
|
||||||
h = find_token(document.body, "\\begin_inset Flex Code Chunk", h)
|
if i == -1:
|
||||||
if h != -1:
|
break
|
||||||
endh = find_end_of_inset(document.body, h)
|
|
||||||
document.body[endh : endh + 1] = put_cmd_in_ert("\\end{CodeChunk}")
|
end = find_end_of_inset(document.body, i)
|
||||||
document.body[h : h + 3] = put_cmd_in_ert("\\begin{CodeChunk}")
|
if end == -1:
|
||||||
document.body[h - 1 : h] = ["\\begin_layout Standard"]
|
document.warning("Malformed LyX document: No end of Flex Code Chunk found!")
|
||||||
h = h + 1
|
i += 1
|
||||||
# \CodeInput
|
continue
|
||||||
if j != -1:
|
|
||||||
j = find_token(document.body, "\\begin_layout Code Input", j)
|
document.body[end : end + 1] = ["\\end_layout", "", "\\begin_layout Standard"] + put_cmd_in_ert("\\end{CodeChunk}")
|
||||||
if j != -1:
|
document.body[i : i + 2] = put_cmd_in_ert("\\begin{CodeChunk}")
|
||||||
endj = find_end_of_layout(document.body, j)
|
i += 1
|
||||||
document.body[endj : endj + 1] = ["\\end_layout", "", "\\begin_layout Standard"]
|
|
||||||
document.body[endj + 3 : endj + 4] = put_cmd_in_ert("\\end{CodeInput}")
|
# finally handle the code layouts
|
||||||
document.body[endj + 13 : endj + 13] = ["\\end_layout", "", "\\begin_layout Standard"]
|
codes_dict = {
|
||||||
document.body[j + 1 : j] = ["\\end_layout", "", "\\begin_layout Standard"]
|
"Code Input" : "CodeInput",
|
||||||
document.body[j : j + 1] = put_cmd_in_ert("\\begin{CodeInput}")
|
"Code Output" : "CodeOutput",
|
||||||
j = j + 1
|
"Code" : "Code",
|
||||||
# \CodeOutput
|
}
|
||||||
if k != -1:
|
for ctype in codes_dict.keys():
|
||||||
k = find_token(document.body, "\\begin_layout Code Output", k)
|
i = 0
|
||||||
if k != -1:
|
while True:
|
||||||
endk = find_end_of_layout(document.body, k)
|
i = find_token(document.body, "\\begin_layout " + ctype, i)
|
||||||
document.body[endk : endk + 1] = ["\\end_layout", "", "\\begin_layout Standard"]
|
if i == -1:
|
||||||
document.body[endk + 3 : endk + 4] = put_cmd_in_ert("\\end{CodeOutput}")
|
break
|
||||||
document.body[endk + 13 : endk + 13] = ["\\end_layout", "", "\\begin_layout Standard"]
|
if document.body[i] != "\\begin_layout " + ctype:
|
||||||
document.body[k + 1 : k] = ["\\end_layout", "", "\\begin_layout Standard"]
|
# Not an exact match!
|
||||||
document.body[k : k + 1] = put_cmd_in_ert("\\begin{CodeOutput}")
|
i += 1
|
||||||
k = k + 1
|
continue
|
||||||
# \Code
|
end = find_end_of_layout(document.body, i)
|
||||||
if m != -1:
|
if end == -1:
|
||||||
m = find_token(document.body, "\\begin_layout Code", m)
|
document.warning("Malformed LyX document: No end of " + ctype + " layout found!")
|
||||||
if m != -1:
|
i += 1
|
||||||
endm = find_end_of_layout(document.body, m)
|
continue
|
||||||
document.body[endm : endm + 1] = ["\\end_layout", "", "\\begin_layout Standard"]
|
seq_end = end
|
||||||
document.body[endm + 3 : endm + 4] = put_cmd_in_ert("\\end{Code}")
|
# Handle subsequent layouts
|
||||||
document.body[endm + 13 : endm + 13] = ["\\end_layout", "", "\\begin_layout Standard"]
|
while True:
|
||||||
document.body[m + 1 : m] = ["\\end_layout", "", "\\begin_layout Standard"]
|
j = find_token(document.body, "\\begin_layout ", seq_end)
|
||||||
document.body[m : m + 1] = put_cmd_in_ert("\\begin{Code}")
|
if j == -1 or document.body[j] != "\\begin_layout " + ctype:
|
||||||
m = m + 1
|
break
|
||||||
|
this_end = find_end_of_layout(document.body, j)
|
||||||
|
if this_end == -1:
|
||||||
|
document.warning("Malformed LyX document: No end of " + ctype + " layout found!")
|
||||||
|
j += 1
|
||||||
|
continue
|
||||||
|
seq_end = this_end
|
||||||
|
document.body[seq_end + 1 : seq_end + 1] = ["\\end_inset", "\\end_layout", "", "\\begin_layout Standard"] + put_cmd_in_ert("\\end{%s}" % codes_dict[ctype])
|
||||||
|
if seq_end != end:
|
||||||
|
k = i + 1
|
||||||
|
while k < seq_end:
|
||||||
|
document.body[k] = document.body[k].replace("\\begin_layout " + ctype, "\\begin_layout Plain Layout")
|
||||||
|
k += 1
|
||||||
|
document.body[i : i + 1] = ["\\end_layout", "", "\\begin_layout Standard"] \
|
||||||
|
+ put_cmd_in_ert("\\begin{%s}" % codes_dict[ctype]) \
|
||||||
|
+ ["\\end_layout", "", "\\begin_layout Standard", "", "\\begin_inset ERT", "status open", "", "\\begin_layout Plain Layout"]
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
|
||||||
def convert_subref(document):
|
def convert_subref(document):
|
||||||
|
Loading…
Reference in New Issue
Block a user