get_value(lines, token, start[, end[, default]):
Similar to find_token, but it returns what follows the
token on the found line. Example:
- get_value(document.header, "\use_xetex", 0)
+ get_value(document.header, "\\use_xetex", 0)
will find a line like:
- \use_xetex true
+ \\use_xetex true
and, in that case, return "true". (Note that whitespace
is stripped.) The final argument, default, defaults to "",
and is what is returned if we do not find anything. So you
can use that to set a default.
-get_quoted_value(lines, token, start[, end[, default]):
+get_quoted_value(lines, token, start[, end[, default]]):
Similar to get_value, but it will strip quotes off the
value, if they are present. So use this one for cases
where the value is normally quoted.
option="value"
and returns value. Returns "" if not found.
+get_bool_value(lines, token, start[, end[, default]]):
+ Like get_value, but returns a boolean.
+
del_token(lines, token, start[, end]):
Like find_token, but deletes the line if it finds one.
Returns True if a line got deleted, otherwise False.
find_beginning_of(lines, i, start_token, end_token):
Here, start_token and end_token are meant to be a matching
- pair, like "\begin_layout" and "\end_layout". We look for
+ pair, like "\\begin_layout" and "\\end_layout". We look for
the start_token that pairs with the end_token that occurs
on or after line i. Returns -1 if not found.
- So, in the layout case, this would find the \begin_layout
+ So, in the layout case, this would find the \\begin_layout
for the layout line i is in.
Example:
ec = find_token(document.body, "</cell", i)
if end == 0 or end > len(lines):
end = len(lines)
m = len(token)
- for i in xrange(start, end):
+ for i in range(start, end):
if ignorews:
x = lines[i].split()
y = token.split()
if end == 0 or end > len(lines):
end = len(lines)
- for i in xrange(start, end):
+ for i in range(start, end):
for token in tokens:
if ignorews:
x = lines[i].split()
if end == 0 or end > len(lines):
end = len(lines)
- for i in xrange(start, end):
+ for i in range(start, end):
if rexp.match(lines[i]):
return i
return -1
Return -1 on failure."""
m = len(token)
- for i in xrange(start, -1, -1):
+ for i in range(start, -1, -1):
line = lines[i]
if line[:m] == token:
return i
element, in lines[end, start].
Return -1 on failure."""
- for i in xrange(start, -1, -1):
+ for i in range(start, -1, -1):
line = lines[i]
for token in tokens:
if line[:len(token)] == token:
return val.strip('"')
+def get_bool_value(lines, token, start, end = 0, default = None):
+ """ get_value(lines, token, start[[, end], default]) -> string
+
+ Find the next line that looks like:
+ token bool_value
+
+ Returns True if bool_value is 1 or true and
+ False if bool_value is 0 or false
+ """
+
+ val = get_quoted_value(lines, token, start, end, "")
+
+ if val == "1" or val == "true":
+ return True
+ if val == "0" or val == "false":
+ return False
+ return default
+
+
def get_option_value(line, option):
rx = option + '\s*=\s*"([^"]+)"'
rx = re.compile(rx)
def find_nonempty_line(lines, start, end = 0):
if end == 0:
end = len(lines)
- for i in xrange(start, end):
+ for i in range(start, end):
if is_nonempty_line(lines[i]):
return i
return -1
def get_containing_inset(lines, i):
'''
Finds out what kind of inset line i is within. Returns a
- list containing (i) what follows \begin_inset on the line
+ list containing (i) what follows \begin_inset on the line
on which the inset begins, plus the starting and ending line.
Returns False on any kind of error or if it isn't in an inset.
'''
if endins > j:
break
j = stins - 1
-
+
+ if endins < i:
+ return False
+
inset = get_value(lines, "\\begin_inset", stins)
if inset == "":
# shouldn't happen
def get_containing_layout(lines, i):
'''
Finds out what kind of layout line i is within. Returns a
- list containing what follows \begin_layout on the line
+ list containing what follows \begin_layout on the line
on which the layout begins, plus the starting and ending line
and the start of the paragraph (after all params). I.e, returns:
(layoutname, layoutstart, layoutend, startofcontent)
if endlay > i:
break
j = stlay - 1
-
+
+ if endlay < i:
+ return False
+
lay = get_value(lines, "\\begin_layout", stlay)
if lay == "":
# shouldn't happen
return False
par_params = ["\\noindent", "\\indent", "\\indent-toggle", "\\leftindent",
- "\\start_of_appendix", "\\paragraph_spacing single",
- "\\paragraph_spacing onehalf", "\\paragraph_spacing double",
- "\\paragraph_spacing other", "\\align", "\\labelwidthstring"]
+ "\\start_of_appendix", "\\paragraph_spacing", "\\align",
+ "\\labelwidthstring"]
stpar = stlay
while True:
stpar += 1
- if lines[stpar] not in par_params:
+ if lines[stpar].split(' ', 1)[0] not in par_params:
break
return (lay, stlay, endlay, stpar)
def count_pars_in_inset(lines, i):
- '''
+ '''
Counts the paragraphs within this inset
'''
ins = get_containing_inset(lines, i)
m = re.match(r'\\begin_layout (.*)', lines[j])
if m and get_containing_inset(lines, j)[0] == ins[0]:
pars += 1
-
+
return pars
def find_end_of_sequence(lines, i):
- '''
+ '''
Returns the end of a sequence of identical layouts.
'''
lay = get_containing_layout(lines, i)