def _handle_environment(self, elem): """Parse and handle mintmod environments.""" match = REGEX_PATTERNS["ENV"].search(elem.text) if match is None: raise ParseError("Could not parse LaTeX environment: %s..." % elem.text[:50]) env_name = match.group("env_name") inner_code = match.groups()[1] if (bool(environ.get("INNOCONV_REMOVE_EXERCISES", False)) and env_name in EXERCISE_CMDS_ENVS): return [] # Parse optional arguments env_args, rest = parse_nested_args(inner_code) function_name = "handle_%s" % slugify(env_name) func = getattr(self._environments, function_name, None) if callable(func): return func(rest, env_args, elem) if (not bool(environ.get("INNOCONV_IGNORE_EXERCISES", False)) or env_name not in EXERCISE_CMDS_ENVS): log("Could not handle environment %s." % env_name, level="WARNING") if self._debug: return self._unknown_environment_debug(env_name, elem) return None
def test_parse_nested_args_rest(self): """It should parse nested arguments with rest""" ret = parse_nested_args(r"""{word\bar{two}bbb}{baz} there is more stuff here""") rest = """ there is more stuff here""" self.assertEqual(ret, ([r"word\bar{two}bbb", "baz"], rest))
def test_parse_nested_args_2(self): """It should parse nested arguments: nested 2""" ret = parse_nested_args(r"{cont}{}{\foo{\bla{\stop}}}{\baz{}{}{}}") self.assertEqual( ret, (["cont", "", r"\foo{\bla{\stop}}", r"\baz{}{}{}"], None))
def test_parse_nested_args_1(self): """It should parse nested arguments: nested 1""" ret = parse_nested_args(r"{word\bar{two}bbb}{baz}") self.assertEqual(ret, ([r"word\bar{two}bbb", "baz"], None))
def test_parse_nested_args_simple(self): """It should parse nested arguments: simple""" ret = parse_nested_args("{bbb}{baz}{foo}") self.assertEqual(ret, (["bbb", "baz", "foo"], None))
def test_parse_nested_args_empty(self): """It should parse nested arguments: empty""" ret = parse_nested_args("") self.assertEqual(ret, ([], None))