X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Fparser_tools.py;h=175db00ac3b21de3bc335204a435261f57aec90a;hb=69ed8cb89abd291b19ca2a3423d1f368a0d67f71;hp=c53dbfa1abf5ad83c225740babceff269ebda7e9;hpb=2ddaa0a59b220436ee4f907672ae0dfd6b01f296;p=lyx.git diff --git a/lib/lyx2lyx/parser_tools.py b/lib/lyx2lyx/parser_tools.py index c53dbfa1ab..175db00ac3 100644 --- a/lib/lyx2lyx/parser_tools.py +++ b/lib/lyx2lyx/parser_tools.py @@ -88,6 +88,9 @@ 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. + Use get_* with the optional argument "delete=True", if you want to + get and delete a token. + 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 @@ -226,6 +229,7 @@ def find_tokens(lines, tokens, start=0, end=0, ignorews=False): the first element, in lines[start, end]. Return -1 on failure.""" + if end == 0 or end > len(lines): end = len(lines) @@ -425,25 +429,21 @@ def get_quoted_value(lines, token, start=0, end=0, default="", delete=False): return default return val.strip('"') -bool_values = {True: ("true", "1"), - False: ("false", "0")} + +bool_values = {"true": True, "1": True, + "false": False, "0": False} def get_bool_value(lines, token, start=0, end=0, default=None, delete=False): """ get_bool_value(lines, token, start[[, end], default]) -> string Find the next line that looks like: - token + `token` - Return True if is 1 or "true", False if bool_value + Return True if is 1 or "true", False if is 0 or "false", else `default`. """ - val = get_quoted_value(lines, token, start, end, default, delete) - if val in bool_values[True]: - return True - if val in bool_values[False]: - return False - return default + return bool_values.get(val, default) def set_bool_value(lines, token, value, start=0, end=0): @@ -459,13 +459,11 @@ def set_bool_value(lines, token, value, start=0, end=0): oldvalue = get_bool_value(lines, token, i, i+1) if oldvalue is value: return oldvalue - # Use 0/1 or true/false? + # set to new value if get_quoted_value(lines, token, i, i+1) in ('0', '1'): - value_string = bool_values[value][1] + lines[i] = "%s %d" % (token, value) else: - value_string = bool_values[value][0] - # set to new value - lines[i] = "%s %s" % (token, value_string) + lines[i] = "%s %s" % (token, str(value).lower()) return oldvalue @@ -639,12 +637,15 @@ def get_containing_inset(lines, i): 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 - on which the layout begins, plus the starting and ending line - and the start of the paragraph (after all params). I.e, returns: + Find out what kind of layout line `i` is within. + Return a tuple (layoutname, layoutstart, layoutend, startofcontent) - Returns False on any kind of error. + containing + * layout style/name, + * start line number, + * end line number, and + * number of first paragraph line (after all params). + Return `False` on any kind of error. ''' j = i while True: @@ -659,10 +660,13 @@ def get_containing_layout(lines, i): if endlay < i: return False - lay = get_value(lines, "\\begin_layout", stlay) - if lay == "": - # shouldn't happen - return False + layoutname = get_value(lines, "\\begin_layout", stlay) + if layoutname == "": # layout style missing + # TODO: What shall we do in this case? + pass + # layoutname == "Standard" # use same fallback as the LyX parser: + # raise ValueError("Missing layout name on line %d"%stlay) # diagnosis + # return False # generic error response par_params = ["\\noindent", "\\indent", "\\indent-toggle", "\\leftindent", "\\start_of_appendix", "\\paragraph_spacing", "\\align", "\\labelwidthstring"] @@ -671,7 +675,7 @@ def get_containing_layout(lines, i): stpar += 1 if lines[stpar].split(' ', 1)[0] not in par_params: break - return (lay, stlay, endlay, stpar) + return (layoutname, stlay, endlay, stpar) def count_pars_in_inset(lines, i):