X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Flyx2lyx%2Flyx2lyx_tools.py;h=9c4fe0bb0bb0db2262babef1e187c5c64b205bb0;hb=6ab3be039ee0d74bbb7782bae8e1e0b278d14b3d;hp=d59ec15175313010922e3ecd7b8c1d60062a733c;hpb=7bb3028607db805ab6cedde302275677e4635959;p=lyx.git diff --git a/lib/lyx2lyx/lyx2lyx_tools.py b/lib/lyx2lyx/lyx2lyx_tools.py index d59ec15175..9c4fe0bb0b 100644 --- a/lib/lyx2lyx/lyx2lyx_tools.py +++ b/lib/lyx2lyx/lyx2lyx_tools.py @@ -578,63 +578,40 @@ def insert_document_option(document, option): "Insert _option_ as a document option." # Find \options in the header - options_line = find_token(document.header, "\\options", 0) - + i = find_token(document.header, "\\options", 0) # if the options does not exists add it after the textclass - if options_line == -1: - textclass_line = find_token(document.header, "\\textclass", 0) - document.header.insert(textclass_line +1, - r"\options %s" % option) + if i == -1: + i = find_token(document.header, "\\textclass", 0) + 1 + document.header.insert(i, r"\options %s" % option) return - - # add it to the end of the options - document.header[options_line] += ",%s" % option + # otherwise append to options + if not is_document_option(document, option): + document.header[i] += ",%s" % option def remove_document_option(document, option): - """ Remove _option_ as a document option. - - It is assumed that option belongs to the \options. - That can be done running is_document_option(document, option).""" + """ Remove _option_ as a document option.""" - options_line = find_token(document.header, "\\options", 0) - option_pos = document.header[options_line].find(option) + i = find_token(document.header, "\\options") + options = get_value(document.header, "\\options", i) + options = [op.strip() for op in options.split(',')] - # Remove option from \options - comma_before_pos = document.header[options_line].rfind(',', 0, option_pos) - comma_after_pos = document.header[options_line].find(',', option_pos) + # Remove `option` from \options + options = [op for op in options if op != option] - # if there are no commas then it is the single option - # and the options line should be removed since it will be empty - if comma_before_pos == comma_after_pos == -1: - del document.header[options_line] - return - - # last option - options = document.header[options_line] - if comma_after_pos == -1: - document.header[options_line] = options[:comma_before_pos].rsplit() - return - - document.header[options_line] = options[comma_before_pos: comma_after_pos] + if options: + document.header[i] = "\\options " + ','.join(options) + else: + del document.header[i] def is_document_option(document, option): "Find if _option_ is a document option" - # Find \options in the header - options_line = find_token(document.header, "\\options", 0) - - # \options is not present in the header - if options_line == -1: - return False - - option_pos = document.header[options_line].find(option) - # option is not present in the \options - if option_pos == -1: - return False + options = get_value(document.header, "\\options") + options = [op.strip() for op in options.split(',')] + return option in options - return True singlepar_insets = [s.strip() for s in u"Argument, Caption Above, Caption Below, Caption Bicaption," @@ -657,7 +634,7 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""): document.warning("Malformed document! Missing \\language_package") else: pack = get_value(document.header, "\\language_package", i) - if pack == "default" or pack == "auto": + if pack in ("default", "auto"): use_polyglossia = True # Do we use this language with polyglossia? @@ -704,6 +681,18 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""): document.body.insert(i, " ") continue + # TODO: handle nesting issues with font attributes, e.g. + # \begin_layout Standard + # + # \emph on + # \lang macedonian + # Македонски јазик + # \emph default + # — јужнословенски јазик, дел од групата на словенски јазици од јазичното + # семејство на индоевропски јазици. + # Македонскиот е службен и национален јазик во Македонија. + # \end_layout + # Ensure correct handling of list labels if (parent[0] in ["Labeling", "Description"] and not " " in "\n".join(document.body[parent[3]:i])): @@ -767,8 +756,11 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""): end_cmd = "\\end{otherlanguage}" if (not primary or texname == "english"): - document.body[i_e:i_e] = put_cmd_in_ert(end_cmd) - document.body[i+1:i+1] = put_cmd_in_ert(begin_cmd) + try: + document.body[i_e:i_e] = put_cmd_in_ert(end_cmd) + document.body[i+1:i+1] = put_cmd_in_ert(begin_cmd) + except UnboundLocalError: + pass del document.body[i] if not (primary or secondary): @@ -794,6 +786,6 @@ def revert_language(document, lyxname, babelname="", polyglossianame=""): doc_lang_switch = "\\resetdefaultlanguage{%s}" % polyglossianame # Reset LaTeX main language if required and not already done - if doc_lang_switch and doc_lang_switch not in document.body[8:20] != doc_lang_switch: + if doc_lang_switch and doc_lang_switch[1:] not in document.body[8:20]: document.body[2:2] = put_cmd_in_ert(doc_lang_switch, is_open=True, as_paragraph=True)