X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Flyx_1_4.py;h=9fb583f0711a71f039b385e1bcec17bf461037a2;hb=9da74fe2078e24e1e7891784ecbfe33ff77e7f85;hp=5d35f1d0232f66ac84585e6f5ddf6c389c19ee90;hpb=29012f2596a404aedd79b6b187676340daf3c43e;p=lyx.git diff --git a/lib/lyx2lyx/lyx_1_4.py b/lib/lyx2lyx/lyx_1_4.py index 5d35f1d023..9fb583f071 100644 --- a/lib/lyx2lyx/lyx_1_4.py +++ b/lib/lyx2lyx/lyx_1_4.py @@ -16,7 +16,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 """ Convert files to the file format generated by lyx 1.4""" @@ -24,7 +24,7 @@ import re from os import access, F_OK import os.path from parser_tools import check_token, find_token, \ - get_value, del_token, is_nonempty_line, \ + get_value, is_nonempty_line, \ find_tokens, find_end_of, find_beginning_of, find_token_exact, find_tokens_exact, \ find_re, find_tokens_backwards from sys import stdin @@ -84,6 +84,21 @@ def find_end_of_inset(lines, i): "Finds the matching \end_inset" return find_end_of(lines, i, "\\begin_inset", "\\end_inset") +def del_token(lines, token, start, end): + """ del_token(lines, token, start, end) -> int + + Find the lower line in lines where token is the first element and + delete that line. + + Returns the number of lines remaining.""" + + k = find_token_exact(lines, token, start, end) + if k == -1: + return end + else: + del lines[k] + return end - 1 + # End of helper functions #################################################################### @@ -372,7 +387,7 @@ def convert_comment(document): #but if this happens deal with it greacefully adding #the missing \end_deeper. i = len(document.body) - 1 - document.body[i:i] = ["\end_deeper",""] + document.body[i:i] = ["\\end_deeper",""] return else: del document.body[i] @@ -466,6 +481,9 @@ def add_end_layout(document): document.body.insert(i,"") document.body.insert(i,"\\end_layout") i = i + 3 + # consecutive begin_deeper only insert one end_layout + while document.body[i].startswith('\\begin_deeper'): + i += 1 struct_stack.append(token) continue @@ -1823,20 +1841,38 @@ def convert_float(document): def revert_float(document): - " Revert sideway floats. " + " Revert sideways floats. " i = 0 while 1: i = find_token_exact(document.body, '\\begin_inset Float', i) if i == -1: return + line = document.body[i] + r = re.compile(r'\\begin_inset Float (.*)$') + m = r.match(line) + floattype = m.group(1) + if floattype != "figure" and floattype != "table": + i = i + 1 + continue j = find_end_of_inset(document.body, i) if j == -1: document.warning("Malformed lyx document: Missing '\\end_inset'.") i = i + 1 continue if get_value(document.body, 'sideways', i, j) != "false": - document.warning("Conversion of 'sideways true' not yet implemented.") - # Don't remove 'sideways' so that people will get warnings by lyx + l = find_token(document.body, "\\begin_layout Standard", i + 1, j) + if l == -1: + document.warning("Malformed LyX document: Missing `\\begin_layout Standard' in Float inset.") + return + document.body[j] = '\\layout Standard\n\\begin_inset ERT\nstatus Collapsed\n\n' \ + '\\layout Standard\n\n\n\\backslash\n' \ + 'end{sideways' + floattype + '}\n\n\\end_inset\n' + del document.body[i+1:l-1] + document.body[i] = '\\begin_inset ERT\nstatus Collapsed\n\n' \ + '\\layout Standard\n\n\n\\backslash\n' \ + 'begin{sideways' + floattype + '}\n\n\\end_inset\n\n' + add_to_preamble(document, + ['\\usepackage{rotfloat}\n']) i = i + 1 continue del_token(document.body, 'sideways', i, j) @@ -1863,7 +1899,7 @@ def convert_graphics(document): # We could use a heuristic and take the current directory, # and we could try to find out if documentname has an extension, # but that would be just guesses and could be wrong. - document.warning("""Warning: Can not determine whether document + document.warning("""Warning: Cannot determine whether document %s needs an extension when reading from standard input. You may need to correct the document manually or run @@ -2298,11 +2334,11 @@ def convert_ert_paragraphs(document): if k == -1: break document.body[k:k+1] = ["\\end_layout", "", '\\begin_layout %s' % document.default_layout] - k = k + 4 - j = j + 3 + k = k + 3 + j = j + 2 # We need an empty line if document.default_layout == '' - if document.body[k-1] != '': - document.body.insert(k-1, '') + if document.body[k] != '': + document.body.insert(k, '') k = k + 1 j = j + 1 i = i + 1 @@ -2427,7 +2463,7 @@ def convert_sgml_paragraphs(document): i = i + 10 ## -# Convertion hub +# Conversion hub # supported_versions = ["1.4.%d" % i for i in range(3)] + ["1.4"]