mcdreforged.command.builder.command_builder_util 源代码

from typing import Tuple, Optional, TypeVar, Callable

DIVIDER = ' '
"""The char to divide elements in a command string —— space"""


[文档] def remove_divider_prefix(text: str) -> str: """ Remove the element divider prefix of the given text. It's usually used before taking the next element in the command str Examples:: >>> remove_divider_prefix('foo bar') 'foo bar' >>> remove_divider_prefix(' foo bar') 'foo bar' :param text: The text for divider prefix removal """ return text.lstrip(DIVIDER)
[文档] def get_element(text: str) -> str: """ Get an element from the remaining input Examples:: >>> get_element('foo bar') 'foo' >>> get_element('foo bar') 'foo' >>> get_element('fooooo') 'fooooo' >>> get_element(' foo') '' :param text: The remaining input to be parsed. It should not start with :data:`DIVIDER` """ pos = text.find(DIVIDER) if pos == -1: return text else: return text[:pos]
T = TypeVar('T') def __get_var(text: str, func: Callable[[str], T]) -> Tuple[Optional[T], int]: """ Returns (value, char_read). value will be None if ValueError occurs """ arg = get_element(text) try: value = func(arg) except ValueError: value = None return value, len(arg)
[文档] def get_int(text: str) -> Tuple[Optional[int], int]: """ Get an int from the remaining input Examples:: >>> get_int('1234 abc') (1234, 4) >>> get_int('foo bar') (None, 3) >>> get_int(' 1234 abc') (None, 0) :param text: The remaining input to be parsed. It should not start with :data:`DIVIDER` :return: a tuple of value, char_read. The value will be None if parsing failed """ return __get_var(text, int)
[文档] def get_float(text: str) -> Tuple[Optional[float], int]: """ Get a float from the remaining input Examples:: >>> get_float('123.4 abc') (123.4, 5) >>> get_float('foo bar') (None, 3) >>> get_int(' 123.4 abc') (None, 0) :param text: The remaining input to be parsed. It should not start with :data:`DIVIDER` :return: a tuple of value, char_read. The value will be None if parsing failed """ return __get_var(text, float)