def test_issue_no21(self): # test for https://github.com/phfaist/pylatexenc/issues/21 def capitalize_acronyms(s, pos): if s[pos] in ('{', '}'): # preserve existing braces return (1, s[pos]) m = re.compile(r'\b[A-Z]{2,}\w*\b').match(s, pos) if m is None: return None return (m.end() - m.start(), "{" + m.group() + "}") u = UnicodeToLatexEncoder(conversion_rules=[ latexencode.UnicodeToLatexConversionRule(latexencode.RULE_CALLABLE, capitalize_acronyms), ] + latexencode.get_builtin_conversion_rules('defaults')) input = "Title with {Some} ABC acronyms LIKe this." self.assertEqual(u.unicode_to_latex(input), "Title with {Some} {ABC} acronyms {LIKe} this.") u = UnicodeToLatexEncoder(conversion_rules=[ latexencode.UnicodeToLatexConversionRule( latexencode.RULE_REGEX, [ (re.compile(r'([{}])'), r'\1'), # keep existing braces (re.compile(r'\b([A-Z]{2,}\w*)\b'), r'{\1}'), ]), ] + latexencode.get_builtin_conversion_rules('defaults')) input = "Title with {Some} ABC acronyms LIKe this." self.assertEqual(u.unicode_to_latex(input), "Title with {Some} {ABC} acronyms {LIKe} this.")
def test_rules_01(self): def acallable(s, pos): if s[pos] == "\N{LATIN SMALL LETTER E WITH ACUTE}": return (1, r"{\'{e}}") if s.startswith('...', pos): return (3, r"\ldots") return None u = UnicodeToLatexEncoder(conversion_rules=[ latexencode.UnicodeToLatexConversionRule( latexencode.RULE_DICT, { ord("\N{LATIN CAPITAL LETTER A WITH GRAVE}"): r"{{\`{A}}}", ord("%"): r"\textpercent", }), latexencode.UnicodeToLatexConversionRule(latexencode.RULE_REGEX, [ (re.compile('v(otre)'), r'n\1'), (re.compile("s'exclama", flags=re.I), r"s'exprima"), (re.compile('\N{LATIN SMALL LETTER I WITH CIRCUMFLEX}'), r"{\^i}"), ]), 'unicode-xml', # expand built-in rule names latexencode.UnicodeToLatexConversionRule(latexencode.RULE_CALLABLE, acallable), ]) input = "\"\N{LATIN CAPITAL LETTER A WITH GRAVE} votre sant\N{LATIN SMALL LETTER E WITH ACUTE}!\" s'exclama le ma\N{LATIN SMALL LETTER I WITH CIRCUMFLEX}tre de maison ... \N{LATIN SMALL LETTER A WITH GRAVE} 100%." self.assertEqual( u.unicode_to_latex(input), "\"{{\\`{A}}} notre sant\\'{e}!\" s'exprima le ma{\\^i}tre de maison {\\ldots} \\`{a} 100{\\textpercent}." )
def test_custom_conversion_rules(self): u = latexencode.PartialLatexToLatexEncoder(conversion_rules=[ latexencode.UnicodeToLatexConversionRule( latexencode.RULE_REGEX, [ # this rule should never kick in because braces are # preserved as keep_latex_chars (re.compile(r'([{}])'), r'BRACE<\1>'), # other replacement rules (re.compile(r'\b([A-Z]{2,}\w*)\b'), r'{\1}'), ]), 'defaults', ]) input = r"Title with {Some} ABC àcr\^onyms LIKe this." self.assertEqual(u.unicode_to_latex(input), r"Title with {Some} {ABC} \`acr\^onyms {LIKe} this.")