예제 #1
0
파일: link.py 프로젝트: gitter-badger/Yo
def unpack(arg):
    arg_type, arg_value = arg
    if arg_type != "link":
        raise UndefinedArgument(f"Нельзя распаковать не-ссылку {arg_type}")
    obj_type, value = get_link(arg_value)
    if obj_type == "link":
        obj_type, value = get.entity(value)
    return arg_type, obj_type, value
예제 #2
0
def Output(arg):
    arg_type, arg_value = arg
    if arg_type == "link":
        value_type, value = get.entity(arg_value)
        if value_type == "link":
            arg_value = value
            value_type, value = get.entity(value)
        if constants.mode == "console":
            draw.entity(arg_value)
        elif constants.mode == "editor":
            if value_type == "none":
                value = "none"
            constants.output_data = constants.output_data + [to_string.entity(arg_value)]
        append.memory_stack("link", 0)
    else:
        raise UndefinedBehaviour(f"Поведение команды Out с аргументом типа"
                                 f"{arg_type} не определено")
예제 #3
0
def list_segment(value):
    result = []
    for link in value:
        obj_type, obj_value = get.entity(link)
        if obj_type == "list_segment":
            obj_value = list_segment(obj_value)
        result += [str(obj_value)]
    return f"[{', '.join(result)}]"
예제 #4
0
def entity(num):
    kind, value = get.entity(num)
    if kind in seg_types:
        if kind in seg_visible_types:
            print(value)
        else:
            raise LowerCommandError(f"Неотображаемый тип сегмента {kind}")
    else:
        return display.entity(num)
예제 #5
0
파일: objects.py 프로젝트: gitter-badger/Yo
def Find(arg):
    arg_type, arg_value = arg
    if arg_type == "link":
        key = get.entity(arg_value)
        # потом: сделать механизм восходящего поиска
        seg_num = find.attribute(seg_links["system"], "target_namespace")
        res_type, res_num = get.namespace_element(seg_num, key)
        append.memory_stack("link", res_num)
    else:
        raise UndefinedArgument(f"Поведение команды Fnd с аргументом типа "
                                f"{arg_type} не определено")
예제 #6
0
파일: objects.py 프로젝트: gitter-badger/Yo
def Length(arg):
    arg_type, arg_value = arg
    if arg_type == "link":
        kind = find.kind(arg_value)
        if kind == "link":
            kind, arg_value = get.entity(arg_value)
            kind = find.kind(arg_value)
        if kind == "string_segment":
            length = get.string_segment_length(arg_value)
        elif kind == "list_segment":
            length = get.list_segment_length(arg_value)
        else:
            raise UndefinedBehaviour(f"Получение длины командой Len для "
                                     f"типа {kind} не определено")
        num = append.data_segment("number", length)
        append.memory_stack("link", num)
    else:
        raise UndefinedArgument(f"Поведение команды Len с аргументом типа "
                                f"{arg_type} не определено")
예제 #7
0
파일: item.py 프로젝트: gitter-badger/Yo
def get_dictionary_item(num):
    key_type, key_link = find.dictionary_item_key(num)
    value_type, value_link = find.dictionary_item_value(num)
    key = get.entity(key_link)
    value = get.entity(value_link)
    return key, value
예제 #8
0
파일: link.py 프로젝트: gitter-badger/Yo
def get_link(link):
    return get.entity(link)
예제 #9
0
def entity(link):
    value_type, value = get.entity(link)
    if value_type == "list_segment":
        return list_segment(value)
    else:
        return str(value)