"Revert optional options for wrap floats (wrapfig)."
i = 0
while True:
- i = find_token(document.body, "lines", i)
+ i = find_token(document.body, "\\begin_inset Wrap figure", i)
if i == -1:
return
- j = find_token(document.body, "overhang", i+1)
- if j != i + 2 and j != -1:
- document.warning("Malformed LyX document: Couldn't find overhang parameter of wrap float.")
+ j = find_end_of_inset(document.body, i)
if j == -1:
- return
- del document.body[i]
- del document.body[j-1]
- i = i + 1
+ document.warning("Can't find end of Wrap inset at line " + str(i))
+ i += 1
+ continue
+ k = find_default_layout(document, i, j)
+ if k == -1:
+ document.warning("Can't find default layout for Wrap figure!")
+ i = j
+ continue
+ # Options should be between i and k now
+ l = find_token(document.body, "lines", i, k)
+ if l == -1:
+ document.warning("Can't find lines option for Wrap figure!")
+ i = k
+ continue
+ m = find_token(document.body, "overhang", i + 1, k)
+ if m == -1:
+ document.warning("Malformed LyX document: Couldn't find overhang parameter of wrap float!")
+ i = k
+ continue
+ # Do these in reverse order
+ del document.body[m]
+ del document.body[l]
+ i = k
# To convert and revert indices, we need to convert between LaTeX
r = re.compile('^(.*?)(\$.*?\$)(.*)')
lines = fullcontent.split('\n')
for line in lines:
- #document.warning("LINE: " + line)
- #document.warning(str(i) + ":" + document.body[i])
- #document.warning("LAST: " + document.body[-1])
- g = line
- while r.match(g):
- m = r.match(g)
- s = m.group(1)
- f = m.group(2).replace('\\\\', '\\')
- g = m.group(3)
- if s:
- # this is non-math!
- s = wrap_into_ert(s, r'\\', '\\backslash')
- s = wrap_into_ert(s, '{', '{')
- s = wrap_into_ert(s, '}', '}')
- subst = s.split('\n')
- document.body[i:i] = subst
- i += len(subst)
- document.body.insert(i + 1, "\\begin_inset Formula " + f)
- document.body.insert(i + 2, "\\end_inset")
- i += 2
- # Generic, \\ -> \backslash:
- g = wrap_into_ert(g, r'\\', '\\backslash')
- g = wrap_into_ert(g, '{', '{')
- g = wrap_into_ert(g, '}', '}')
- subst = g.split('\n')
- document.body[i+1:i+1] = subst
- i += len(subst)
+ #document.warning("LINE: " + line)
+ #document.warning(str(i) + ":" + document.body[i])
+ #document.warning("LAST: " + document.body[-1])
+ g = line
+ while r.match(g):
+ m = r.match(g)
+ s = m.group(1)
+ f = m.group(2).replace('\\\\', '\\')
+ g = m.group(3)
+ if s:
+ # this is non-math!
+ s = wrap_into_ert(s, r'\\', '\\backslash')
+ s = wrap_into_ert(s, '{', '{')
+ s = wrap_into_ert(s, '}', '}')
+ subst = s.split('\n')
+ document.body[i:i] = subst
+ i += len(subst)
+ document.body.insert(i + 1, "\\begin_inset Formula " + f)
+ document.body.insert(i + 2, "\\end_inset")
+ i += 2
+ # Generic, \\ -> \backslash:
+ g = wrap_into_ert(g, r'\\', '\\backslash')
+ g = wrap_into_ert(g, '{', '{')
+ g = wrap_into_ert(g, '}', '}')
+ subst = g.split('\n')
+ document.body[i+1:i+1] = subst
+ i += len(subst)
document.body.insert(i + 1, "\\end_layout")
def revert_include(document):
'Reverts include insets to old format.'
i = 0
+ r0 = re.compile('preview.*')
r1 = re.compile('LatexCommand (.+)')
r2 = re.compile('filename (.+)')
- r3 = re.compile('options (.*)')
+ r3 = re.compile('lstparams "(.*)"')
while True:
i = find_token(document.body, "\\begin_inset CommandInset include", i)
if i == -1:
return
- previewline = document.body[i + 1]
- m = r1.match(document.body[i + 2])
+ nextline = i + 1
+ if r0.match(document.body[nextline]):
+ previewline = document.body[nextline]
+ nextline += 1
+ else:
+ previewline = ""
+ m = r1.match(document.body[nextline])
if m == None:
document.warning("Malformed LyX document: No LatexCommand line for `" +
document.body[i] + "' on line " + str(i) + ".")
i += 1
continue
cmd = m.group(1)
- m = r2.match(document.body[i + 3])
+ nextline += 1
+ m = r2.match(document.body[nextline])
if m == None:
document.warning("Malformed LyX document: No filename line for `" + \
document.body[i] + "' on line " + str(i) + ".")
i += 2
continue
fn = m.group(1)
+ nextline += 1
options = ""
- numlines = 4
if (cmd == "lstinputlisting"):
- m = r3.match(document.body[i + 4])
+ m = r3.match(document.body[nextline])
if m != None:
options = m.group(1)
numlines = 5
+ nextline += 1
newline = "\\begin_inset Include \\" + cmd + "{" + fn + "}"
if options:
newline += ("[" + options + "]")
- insertion = [newline, previewline]
- document.body[i : i + numlines] = insertion
+ insertion = [newline]
+ if previewline != "":
+ insertion.append(previewline)
+ document.body[i : nextline] = insertion
i += 2
revert_inset_embedding(document, 'External')
-# FIXME This code can still be cleaned up a fair bit.
def convert_subfig(document):
" Convert subfigures to subfloats. "
i = 0
continue
k = find_token(document.body, '\tsubcaption', i, endInset)
if k == -1:
- i += 1
+ i = endInset
continue
l = find_token(document.body, '\tsubcaptionText', i, endInset)
+ if l == -1:
+ document.warning("Malformed lyx document: Can't find subcaptionText!")
+ i = endInset
+ continue
caption = document.body[l][16:].strip('"')
- savestr = document.body[i]
- laststr = document.body[endInset]
del document.body[l]
del document.body[k]
addedLines = -2
- # savestr should no longer be needed here.
subst = ['\\begin_inset Float figure', 'wide false', 'sideways false',
'status open', '', '\\begin_layout Plain Layout', '\\begin_inset Caption',
'', '\\begin_layout Plain Layout',
caption, '\\end_layout', '', '\\end_inset', '',
- '\\end_layout', '', '\\begin_layout Plain Layout', savestr]
- document.body[i : i+1] = subst
- addedLines += len(subst) - 1
+ '\\end_layout', '', '\\begin_layout Plain Layout']
+ document.body[i : i] = subst
+ addedLines += len(subst)
endInset += addedLines
- # There should be an easier way to do this.
- subst = ['', '\\end_inset', '', '\\end_layout', laststr]
- document.body[endInset : endInset+1] = subst
- addedLines += len(subst) - 1
+ subst = ['', '\\end_inset', '', '\\end_layout']
+ document.body[endInset : endInset] = subst
+ addedLines += len(subst)
i += addedLines + 1
insertion = insertion.split('\n')
document.body[k : k + 1] = insertion
addedLines += len(insertion) - 1
- add_to_preamble(document,
- ['\\usepackage{subfig}\n'])
+ add_to_preamble(document, ['\\usepackage{subfig}\n'])
i += addedLines + 1
" Revert placement options wrap floats (wrapfig). "
i = 0
while True:
- i = find_token(document.body, "lines", i)
+ i = find_token(document.body, "\\begin_inset Wrap figure", i)
if i == -1:
return
- j = find_token(document.body, "placement", i+1)
- if j != i + 1:
+ e = find_end_of_inset(document.body, i)
+ j = find_token(document.body, "placement", i + 1, e)
+ if j == -1:
document.warning("Malformed LyX document: Couldn't find placement parameter of wrap float.")
- return
- document.body[j] = document.body[j].replace("placement O", "placement o")
- document.body[j] = document.body[j].replace("placement I", "placement i")
- document.body[j] = document.body[j].replace("placement L", "placement l")
- document.body[j] = document.body[j].replace("placement R", "placement r")
- i = i + 1
+ i += 1
+ continue
+ r = re.compile("placement (o|i|l|r)")
+ m = r.match(document.body[j])
+ if m == None:
+ document.warning("Malformed LyX document: Placement option isn't O|I|R|L!")
+ document.body[j] = "placement " + m.group(1).lower()
+ i = j
def remove_extra_embedded_files(document):