コード例 #1
0
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)
コード例 #2
0
    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}")
コード例 #3
0
 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)