///|
/// Python's `%`-formatting with a mapping: `%(key)s` is replaced by
/// `values[key]` and `%%` by `%`.
fn percent_format(template : String, values : Map[String, String]) -> String {
let buf = StringBuilder()
let n = template.length()
let mut i = 0
while i < n {
let c = template.unsafe_get(i)
if c.to_int() == '%'.to_int() && i + 1 < n {
let d = template.unsafe_get(i + 1)
if d.to_int() == '%'.to_int() {
buf.write_char('%')
i += 2
continue
}
if d.to_int() == '('.to_int() {
match template.view(start_offset=i + 2).find(")s") {
Some(j) => {
let key = template.unsafe_substring(start=i + 2, end=i + 2 + j)
buf.write_string(values.get(key).unwrap_or(""))
i = i + 2 + j + 2
continue
}
None => ()
}
}
}
buf.write_char(c.to_int().unsafe_to_char())
i += 1
}
buf.to_string()
}
///|
/// Python's `latex.STYLE_TEMPLATE`.
let latex_style_template : String =
#|
#|\makeatletter
#|\def\%(cp)s@reset{\let\%(cp)s@it=\relax \let\%(cp)s@bf=\relax%%
#| \let\%(cp)s@ul=\relax \let\%(cp)s@tc=\relax%%
#| \let\%(cp)s@bc=\relax \let\%(cp)s@ff=\relax}
#|\def\%(cp)s@tok#1{\csname %(cp)s@tok@#1\endcsname}
#|\def\%(cp)s@toks#1+{\ifx\relax#1\empty\else%%
#| \%(cp)s@tok{#1}\expandafter\%(cp)s@toks\fi}
#|\def\%(cp)s@do#1{\%(cp)s@bc{\%(cp)s@tc{\%(cp)s@ul{%%
#| \%(cp)s@it{\%(cp)s@bf{\%(cp)s@ff{#1}}}}}}}
#|\def\%(cp)s#1#2{\%(cp)s@reset\%(cp)s@toks#1+\relax+\%(cp)s@do{#2}}
#|
#|%(styles)s
#|
#|\def\%(cp)sZbs{\char`\\}
#|\def\%(cp)sZus{\char`\_}
#|\def\%(cp)sZob{\char`\{}
#|\def\%(cp)sZcb{\char`\}}
#|\def\%(cp)sZca{\char`\^}
#|\def\%(cp)sZam{\char`\&}
#|\def\%(cp)sZlt{\char`\<}
#|\def\%(cp)sZgt{\char`\>}
#|\def\%(cp)sZsh{\char`\#}
#|\def\%(cp)sZpc{\char`\%%}
#|\def\%(cp)sZdl{\char`\$}
#|\def\%(cp)sZhy{\char`\-}
#|\def\%(cp)sZsq{\char`\'}
#|\def\%(cp)sZdq{\char`\"}
#|\def\%(cp)sZti{\char`\~}
#|%% for compatibility with earlier versions
#|\def\%(cp)sZat{@}
#|\def\%(cp)sZlb{[}
#|\def\%(cp)sZrb{]}
#|\makeatother
#|
///|
/// Python's `latex.DOC_TEMPLATE`.
let latex_doc_template : String =
#|
#|\documentclass{%(docclass)s}
#|\usepackage{fancyvrb}
#|\usepackage{color}
#|\usepackage[%(encoding)s]{inputenc}
#|%(preamble)s
#|
#|%(styledefs)s
#|
#|\begin{document}
#|
#|\section*{%(title)s}
#|
#|%(code)s
#|\end{document}
#|