X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Fparser_tools.py;h=6d64a793ce2e3861b5a922e3930f3bd0351cc005;hb=a84a98b54561044b5902dfce39bc31082877fec1;hp=cfc6a75433fe5ccd5ffda0dfdd668ade7ace7e78;hpb=1246a70abd5e5eec6057daa3b35f7c626270cf4d;p=lyx.git diff --git a/lib/lyx2lyx/parser_tools.py b/lib/lyx2lyx/parser_tools.py index cfc6a75433..6d64a793ce 100644 --- a/lib/lyx2lyx/parser_tools.py +++ b/lib/lyx2lyx/parser_tools.py @@ -15,7 +15,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ''' @@ -307,7 +307,7 @@ def get_quoted_value(lines, token, start, end = 0, default = ""): def get_option_value(line, option): - rx = option + '\s*=\s*"([^"+])"' + rx = option + '\s*=\s*"([^"]+)"' rx = re.compile(rx) m = rx.search(line) if not m: @@ -315,6 +315,15 @@ def get_option_value(line, option): return m.group(1) +def set_option_value(line, option, value): + rx = '(' + option + '\s*=\s*")[^"]+"' + rx = re.compile(rx) + m = rx.search(line) + if not m: + return line + return re.sub(rx, '\g<1>' + value + '"', line) + + def del_token(lines, token, start, end = 0): """ del_token(lines, token, start, end) -> int @@ -411,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 @@ -431,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)