예제 #1
0
    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.")
예제 #2
0
    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}."
        )
예제 #3
0
    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.")