def generate_text_from_grammar()

in textworld/generator/text_generation.py [0:0]


def generate_text_from_grammar(game, grammar: Grammar):
    # Assign a specific room type and name to our rooms
    for room in game.world.rooms:
        # First, generate a unique roomtype and name from the grammar
        if game.infos[room.id].room_type is None and grammar.has_tag("#room_type#"):
            game.infos[room.id].room_type = grammar.expand("#room_type#")

        assign_name_to_object(room, grammar, game.infos)

        # Next, assure objects contained in a room must have the same room type
        for obj in game.world.get_all_objects_in(room):
            if game.infos[obj.id].room_type is None:
                game.infos[obj.id].room_type = game.infos[room.id].room_type

    # Objects in inventory can be of any room type.
    for obj in game.world.get_objects_in_inventory():
        if game.infos[obj.id].room_type is None and grammar.has_tag("#room_type#"):
            game.infos[obj.id].room_type = grammar.expand("#room_type#")

    # Assign name and description to objects.
    for obj in game.world.objects:
        if obj.type in ["I", "P"]:
            continue

        assign_name_to_object(obj, grammar, game.infos)
        assign_description_to_object(obj, grammar, game)

    # Generate the room descriptions.
    for room in game.world.rooms:
        if game.infos[room.id].desc is None:  # Skip rooms which already have a description.
            game.infos[room.id].desc = assign_description_to_room(room, game, grammar)

    # Generate the instructions.
    for quest in game.quests:
        if quest.desc is None:
            quest.desc = assign_description_to_quest(quest, game, grammar)

    return game