Of the "trivial" texts that the current parser can handle, these are now being inserted in obj_events.
91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
from operator import itemgetter
|
|
from parse import parse
|
|
from generate.generate import renderer
|
|
|
|
"""
|
|
parse.scripts_list() == {
|
|
'PalletTown_TextPointers':
|
|
({'TEXT_PALLETTOWN_FISHER': 'PalletTownFisherText',
|
|
'TEXT_PALLETTOWN_GIRL': 'PalletTownGirlText',
|
|
'TEXT_PALLETTOWN_OAK': 'PalletTownOakText',
|
|
'TEXT_PALLETTOWN_OAKSLAB_SIGN': 'PalletTownOaksLabSignText',
|
|
'TEXT_PALLETTOWN_PLAYERSHOUSE_SIGN': 'PalletTownPlayersHouseSignText',
|
|
'TEXT_PALLETTOWN_RIVALSHOUSE_SIGN': 'PalletTownRivalsHouseSignText',
|
|
'TEXT_PALLETTOWN_SIGN': 'PalletTownSignText'},
|
|
{'PalletTownFisherText': '_PalletTownFisherText',
|
|
'PalletTownGirlText': '_PalletTownGirlText',
|
|
'PalletTownOaksLabSignText': '_PalletTownOaksLabSignText',
|
|
'PalletTownPlayersHouseSignText': '_PalletTownPlayersHouseSignText',
|
|
'PalletTownRivalsHouseSignText': '_PalletTownRivalsHouseSignText',
|
|
'PalletTownSignText': '_PalletTownSignText'}),
|
|
}
|
|
"""
|
|
|
|
def labels_by_constant(constants, labels):
|
|
# fixme: removes constants with no (parsed) label
|
|
for text_name, label_name in constants.items():
|
|
if label_name in labels:
|
|
yield text_name, labels[label_name]
|
|
|
|
def sorted_text_pointers(constants, labels):
|
|
return sorted(labels_by_constant(constants, labels), key=itemgetter(0))
|
|
|
|
def text_constant_enum(name, constants, labels):
|
|
yield f"enum {name} {{"
|
|
for i, (k, _) in enumerate(sorted_text_pointers(constants, labels)):
|
|
yield f"{k} = {i},"
|
|
yield "};"
|
|
|
|
def header_includes():
|
|
yield "#pragma once"
|
|
yield ""
|
|
|
|
def text_constant_enums():
|
|
map_text_pointers = parse.scripts_list()
|
|
for name, (constants, labels) in map_text_pointers.items():
|
|
yield from text_constant_enum(name, constants, labels)
|
|
|
|
def extern_text_pointer(name, constants, labels):
|
|
pointers = list(sorted_text_pointers(constants, labels))
|
|
yield f"extern const start_size_t {name}[{len(pointers)}];"
|
|
|
|
def extern_text_pointers():
|
|
map_text_pointers = parse.scripts_list()
|
|
for name, (constants, labels) in map_text_pointers.items():
|
|
yield from extern_text_pointer(name, constants, labels)
|
|
|
|
def generate_header():
|
|
render, out = renderer()
|
|
render(header_includes())
|
|
render(text_constant_enums())
|
|
render(extern_text_pointers())
|
|
return out
|
|
|
|
def text_pointer(name, constants, labels):
|
|
yield f"const start_size_t {name}[] = {{"
|
|
pointers = list(sorted_text_pointers(constants, labels))
|
|
for constant, label in pointers:
|
|
yield f"[{constant}] = {{"
|
|
yield f".start = &{label}[0],"
|
|
yield f".size = (sizeof ({label})),"
|
|
yield "},"
|
|
yield "};"
|
|
|
|
def text_pointers():
|
|
map_text_pointers = parse.scripts_list()
|
|
for name, (constants, labels) in map_text_pointers.items():
|
|
yield from text_pointer(name, constants, labels)
|
|
|
|
def source_includes():
|
|
yield '#include "../start_size.hpp"'
|
|
yield ""
|
|
yield '#include "text_pointers.hpp"'
|
|
yield '#include "text.hpp"'
|
|
yield ""
|
|
|
|
def generate_source():
|
|
render, out = renderer()
|
|
render(source_includes())
|
|
render(text_pointers())
|
|
return out
|