From f8df33c2fd14ef12fc64a4e38ef1b360ce5695d5 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Mon, 3 Dec 2012 08:42:26 +0100 Subject: [PATCH] Fix unused get_containing_inset and get_containing layout parser methods and use the latter --- lib/lyx2lyx/lyx_2_1.py | 52 ++++++++++++++++--------------------- lib/lyx2lyx/parser_tools.py | 36 +++++++++++++++---------- 2 files changed, 45 insertions(+), 43 deletions(-) diff --git a/lib/lyx2lyx/lyx_2_1.py b/lib/lyx2lyx/lyx_2_1.py index f6ac766b8c..e7b7c6ef27 100644 --- a/lib/lyx2lyx/lyx_2_1.py +++ b/lib/lyx2lyx/lyx_2_1.py @@ -25,9 +25,9 @@ import sys, os # Uncomment only what you need to import, please. -from parser_tools import del_token, find_token, find_token_backwards, find_end_of, find_end_of_inset, \ - find_end_of_layout, find_re, get_option_value, get_value, get_quoted_value, \ - set_option_value +from parser_tools import del_token, find_token, find_token_backwards, find_end_of, \ + find_end_of_inset, find_end_of_layout, find_re, get_option_value, get_containing_layout, \ + get_value, get_quoted_value, set_option_value #from parser_tools import find_token, find_end_of, find_tokens, \ #find_token_exact, find_end_of_inset, find_end_of_layout, \ @@ -1208,25 +1208,20 @@ def convert_latexargs(document): i = i + 1 continue - # Find beginning and end of the containing paragraph - parbeg = find_token_backwards(document.body, "\\begin_layout", i) - while get_value(document.body, "\\begin_layout", parbeg) == "Plain Layout": - # Probably a preceding inset. Continue searching ... - parbeg = find_token_backwards(document.body, "\\begin_layout", parbeg - 1) - if parbeg == -1: + # Find containing paragraph layout + parent = get_containing_layout(document.body, i) + if parent == False: document.warning("Malformed lyx document: Can't find parent paragraph layout") + i = i + 1 continue - parend = find_end_of_layout(document.body, parbeg) - if parend == -1: - document.warning("Malformed lyx document: Can't find end of parent paragraph layout") - continue + parbeg = parent[1] + parend = parent[2] allowed_opts = -1 first_req = -1 if len(used_caveat_modules) > 0: # We know for now that this must be the initials module with the Initial layout # If we get more such modules, we need some automating. - layoutname = get_value(document.body, "\\begin_layout", parbeg) - if layoutname == "Initial": + if parent[0] == "Initial": # Layout has 1 opt and 1 req arg. # Count the actual arguments actualargs = 0 @@ -1266,18 +1261,14 @@ def revert_latexargs(document): # No ID: inset already reverted i = i + 1 continue - # Find beginning and end of the containing paragraph - parbeg = find_token_backwards(document.body, "\\begin_layout", i) - while get_value(document.body, "\\begin_layout", parbeg) == "Plain Layout": - # Probably a preceding inset. Continue searching ... - parbeg = find_token_backwards(document.body, "\\begin_layout", parbeg - 1) - if parbeg == -1: + # Find containing paragraph layout + parent = get_containing_layout(document.body, i) + if parent == False: document.warning("Malformed lyx document: Can't find parent paragraph layout") + i = i + 1 continue - parend = find_end_of_layout(document.body, parbeg) - if parend == -1: - document.warning("Malformed lyx document: Can't find end of parent paragraph layout") - continue + parbeg = parent[1] + parend = parent[2] # Collect all arguments in this paragraph realparend = parend for p in range(parbeg, parend): @@ -1687,10 +1678,13 @@ def revert_itemargs(document): if i == -1: return j = find_end_of_inset(document.body, i) - parbeg = find_token_backwards(document.body, "\\begin_layout", i) - while get_value(document.body, "\\begin_layout", parbeg) == "Plain Layout": - # Probably a preceding inset. Continue searching ... - parbeg = find_token_backwards(document.body, "\\begin_layout", parbeg - 1) + # Find containing paragraph layout + parent = get_containing_layout(document.body, i) + if parent == False: + document.warning("Malformed lyx document: Can't find parent paragraph layout") + i = i + 1 + continue + parbeg = parent[1] beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i) endPlain = find_end_of_layout(document.body, beginPlain) content = document.body[beginPlain + 1 : endPlain] diff --git a/lib/lyx2lyx/parser_tools.py b/lib/lyx2lyx/parser_tools.py index e32ac5dc4f..6d64a793ce 100644 --- a/lib/lyx2lyx/parser_tools.py +++ b/lib/lyx2lyx/parser_tools.py @@ -420,12 +420,16 @@ def get_containing_inset(lines, i): 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. ''' - stins = find_token_backwards(lines, i, "\\begin_inset") - if stins == -1: - return False - endins = find_end_of_inset(lines, stins) - if endins < i: - return False + j = i + while True: + stins = find_token_backwards(lines, "\\begin_inset", j) + if stins == -1: + return False + endins = find_end_of_inset(lines, stins) + if endins > j: + break + j = stins - 1 + inset = get_value(lines, "\\begin_inset", stins) if inset == "": # shouldn't happen @@ -440,14 +444,18 @@ def get_containing_layout(lines, i): on which the layout begins, plus the starting and ending line. Returns False on any kind of error. ''' - stins = find_token_backwards(lines, i, "\\begin_layout") - if stins == -1: - return False - endins = find_end_of_layout(lines, stins) - if endins < i: - return False - lay = get_value(lines, "\\begin_layout", stins) + j = i + while True: + stlay = find_token_backwards(lines, "\\begin_layout", j) + if stlay == -1: + return False + endlay = find_end_of_layout(lines, stlay) + if endlay > i: + break + j = stlay - 1 + + lay = get_value(lines, "\\begin_layout", stlay) if lay == "": # shouldn't happen return False - return (lay, stins, endins) + return (lay, stlay, endlay)