From d62ba3c333b1a43dc42a29bd1fac6263127f9dbe Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Fri, 1 Aug 2014 09:42:43 +0200 Subject: [PATCH] Improve parsing of ERT arguments in beamer block titles. Fixes: #9225 --- lib/lyx2lyx/lyx_2_1.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/lyx2lyx/lyx_2_1.py b/lib/lyx2lyx/lyx_2_1.py index acb83c45d8..1a24675532 100644 --- a/lib/lyx2lyx/lyx_2_1.py +++ b/lib/lyx2lyx/lyx_2_1.py @@ -3062,14 +3062,30 @@ def convert_beamerblocks(document): if i != -1: if document.body[parbeg] == "\\begin_inset ERT": ertcontfirstline = parbeg + 5 - # Find the last ERT in this paragraph (which might also be the first) - lastertbeg = find_token_backwards(document.body, "\\begin_inset ERT", j) - if lastertbeg == -1: - document.warning("Last ERT not found!") - break - lastertend = find_end_of_inset(document.body, lastertbeg) - if lastertend == -1: - document.warning("End of last ERT not found!") + lastertbeg = -1 + lastertend = -1 + while True: + # Find the last ERT in this paragraph used for arguments + # (which might also be the first) + lastertbeg = find_token_backwards(document.body, "\\begin_inset ERT", j) + if lastertbeg == -1: + document.warning("Last ERT not found!") + break + lastertend = find_end_of_inset(document.body, lastertbeg) + if lastertend == -1: + document.warning("End of last ERT not found!") + break + # Is this ERT really used for an argument? + # Note: This will fail when non-argument ERTs actually use brackets + # (e.g. \pause{}) + regexp = re.compile(r'.*[>\]\}]', re.IGNORECASE) + cbracket = find_re(document.body, regexp, lastertbeg, lastertend) + if cbracket != -1: + break + if lastertbeg == parbeg: + break + j = lastertbeg - 1 + if lastertbeg == -1 or lastertend == -1: break ertcontlastline = lastertend - 3 while True: