Example #1
0
File: Rule.py Project: goc9000/baon
    def apply_on(self, text, aliases=None):
        initial_aliases = dict(aliases) if aliases is not None else dict()

        temp_match = SequenceMatch(
            self.content,
            BetweenMatch(),
            EndAnchorMatch(),
        )
        initial_context = MatchContext(
            text=text,
            position=0,
            aliases=initial_aliases,
            matched_text=None,
            anchored=True,
        )

        for _ in range(MAX_ITERATIONS):
            solution = next(temp_match.execute(initial_context), None)
            if solution is None:
                return ApplyRuleResult(text=text, aliases=initial_aliases)

            if solution.aliases != initial_context.aliases:
                initial_context = initial_context._replace(aliases=solution.aliases)
                continue

            return ApplyRuleResult(text=solution.matched_text, aliases=solution.aliases)

        raise AliasDependenciesTooComplexError()
Example #2
0
    def _test_match(self, text, match, expected_solutions, position=0, aliases=None, anchored=True):

        context = MatchContext(
            text=text,
            position=position,
            aliases=dict() if aliases is None else aliases,
            matched_text=None,
            anchored=anchored,
        )

        expected_solutions = [context._replace(**diff) for diff in expected_solutions]
        solutions = list(match.execute(context))

        self.assertEqual(solutions, expected_solutions)