"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,"
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?
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])):
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):
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)