def argparse(args, character=None, splitter=argsplit): """ Parses arguments. :param args: A list of arguments to parse. :type args: str or Iterable :return: The parsed arguments. :rtype: :class:`~utils.argparser.ParsedArguments` """ if isinstance(args, str): args = splitter(args) if character: from cogs5e.funcs.scripting.evaluators import MathEvaluator evaluator = MathEvaluator.with_character(character) args = [evaluator.parse(a) for a in args] parsed = collections.defaultdict(lambda: []) index = 0 for a in args: if a.startswith('-'): parsed[a.lstrip('-')].append(list_get(index + 1, True, args)) else: parsed[a].append(True) index += 1 return ParsedArguments(parsed)
def evaluate_math(self, varstr): """Evaluates a cvar expression in a MathEvaluator. :param varstr - the expression to evaluate. :returns int - the value of the expression.""" varstr = str(varstr).strip('<>{}') evaluator = MathEvaluator.with_character(self) try: return int(evaluator.eval(varstr)) except Exception as e: raise InvalidArgument(f"Cannot evaluate {varstr}: {e}")
def parse_math(self, varstr): """Parsed a cvar expression in a MathEvaluator, similar to Dicecloud parsing. :param varstr - the expression to evaluate. :returns str - the resulting expression.""" evaluator = MathEvaluator.with_character(self) return evaluator.transformed_str(varstr)