import unicodedata
import sys, os
-from parser_tools import find_token, find_end_of, find_tokens, get_value, get_value_string
+from parser_tools import find_token, find_end_of, find_tokens, get_value
####################################################################
# Private helper functions
+
+def get_value_string(lines, token, start, end = 0, trim = False, default = ""):
+ """ get_value_string(lines, token, start[[, end], trim, default]) -> string
+
+ Return tokens after token as string, in lines, where
+ token is the first element. When trim is used, the first and last character
+ of the string is trimmed."""
+
+ val = get_value(lines, token, start, end, "")
+ if not val:
+ return default
+ if trim:
+ return val[1:-1]
+ return val
+
+
def find_end_of_inset(lines, i):
" Find end of inset, where lines[i] is included."
return find_end_of(lines, i, "\\begin_inset", "\\end_inset")
return (line[:pos + 1], line[pos + 1:])
-def latex2ert(line):
+def latex2ert(line, isindex):
'''Converts LaTeX commands into ERT. line may well be a multi-line
string when it is returned.'''
if not line:
# put all remaining braces in ERT
line = wrap_into_ert(line, '}', '}')
line = wrap_into_ert(line, '{', '{')
+ if isindex:
+ # active character that is not available in all font encodings
+ line = wrap_into_ert(line, '|', '|')
retval += line
return retval
#end up inside ERT. That routine could be modified so that it returned
#a list of lines, and we could then skip ERT bits and only deal with
#the other bits.
-def latex2lyx(data):
+def latex2lyx(data, isindex):
'''Takes a string, possibly multi-line, and returns the result of
converting LaTeX constructs into LyX constructs. Returns a list of
- lines, suitable for insertion into document.body.'''
+ lines, suitable for insertion into document.body.
+ The bool isindex specifies whether we are in an index macro (which
+ has some specific active characters that need to be ERTed).'''
if not data:
return [""]
g = m.group(3)
if s:
# this is non-math!
- s = latex2ert(s)
+ s = latex2ert(s, isindex)
subst = s.split('\n')
retval += subst
retval.append("\\begin_inset Formula " + f)
retval.append("\\end_inset")
m = mathre.match(g)
# Handle whatever is left, which is just text
- g = latex2ert(g)
+ g = latex2ert(g, isindex)
subst = g.split('\n')
retval += subst
return retval
j = find_end_of_inset(document.body, i + 1)
if j == -1:
document.warning("Malformed LyX document: Could not find end of tabular.")
+ i += 1
continue
m = i + 1
i = find_token(document.body, "\\begin_inset Tabular", i)
if i == -1:
return
- j = find_end_of_inset(document.body, i + 1)
+ j = find_end_of_inset(document.body, i)
if j == -1:
document.warning("Malformed LyX document: Could not find end of tabular.")
+ i += 1
continue
m = i + 1
linelist = [""]
else:
fullcontent = m.group(1)
- linelist = latex2lyx(fullcontent)
+ linelist = latex2lyx(fullcontent, True)
#document.warning(fullcontent)
linelist = ["\\begin_inset Index", "status collapsed", "\\begin_layout Standard", ""] + \
j = find_token(document.body, "target", i)
if j == -1:
document.warning("Malformed LyX document: Can't find target for url inset")
- i = j
+ i += 1
continue
target = document.body[j][8:-1]
k = find_token(document.body, "\\end_inset", j)
if k == -1:
document.warning("Malformed LyX document: Can't find end of url inset")
- i = k
+ i = j
continue
newstuff = ["\\begin_inset Flex URL",
"status collapsed", "",
"\\end_layout",
""]
document.body[i:k] = newstuff
- i = k
+ i = i + len(newstuff)
def convert_ams_classes(document):
tc = document.textclass
return
newmodlist = []
for mod in modlist:
- if modulemap.has_key(mod):
+ if mod in modulemap:
newmodlist.append(modulemap[mod])
else:
document.warning("Can't find module %s in the module map!" % mod)
addedLines -= 1
subst = ['\\begin_inset Float figure', 'wide false', 'sideways false',
'status open', '', '\\begin_layout Plain Layout', '\\begin_inset Caption',
- '', '\\begin_layout Plain Layout'] + latex2lyx(caption) + \
+ '', '\\begin_layout Plain Layout'] + latex2lyx(caption, False) + \
[ '\\end_layout', '', '\\end_inset', '',
'\\end_layout', '', '\\begin_layout Plain Layout']
document.body[i : i] = subst