Beispiel #1
0
    def stmt(self, stmt):
        name = escape_name(stmt.arg)
        if stmt.keyword == 'grouping':
            name = '%s_Grouping' % camel_case(name)
        elif stmt.keyword == 'identity':
            name = '%s_Identity' % camel_case(name)
        elif stmt.keyword == 'rpc':
            name = camel_case(name) + 'Rpc'
        else:
            name = camel_case(name)
        if iskeyword(name):
            name = '%s_' % name
        self.name = name

        if self.name.startswith('_'):
            self.name = '%s%s' % ('Y', name)

        self._stmt = stmt
        desc = stmt.search_one('description')
        if desc is not None:
            self.comment = desc.arg

        if stmt.keyword == 'module':
            self._module = stmt
        else:
            self._module = stmt.i_module
Beispiel #2
0
    def convert_owner_name(self, stmt):
        name = escape_name(stmt.arg)
        if stmt.keyword == 'grouping':
            name = '%s_Grouping' % camel_case(name)
        elif stmt.keyword == 'identity':
            name = '%s_Identity' % camel_case(name)
        elif stmt.keyword == 'rpc':
            name = camel_case(name) + 'Rpc'
        else:
            name = camel_case(name)
        if iskeyword(name):
            name = '%s_' % name

        if name.startswith('_'):
            name = '%s%s' % ('Y', name)
        return name
Beispiel #3
0
    def stmt(self, stmt):
        self._stmt = stmt
        # the name of the numeration is derived either from the typedef
        # or the leaf under which it is defined
        leaf_or_typedef = stmt
        while leaf_or_typedef.parent is not None and not leaf_or_typedef.keyword in ('leaf', 'leaf-list', 'typedef'):
            leaf_or_typedef = leaf_or_typedef.parent

        name = '%sEnum' % camel_case(escape_name(leaf_or_typedef.arg))
        if iskeyword(name):
            name = '%s_' % name

        if name[0] == '_':
            name = 'Y%s' % name

        self.name = name

        desc = stmt.search_one('description')
        if desc is not None:
            self.comment = desc.arg
        else:
            desc = leaf_or_typedef.search_one('description')
            if desc is not None:
                self.comment = desc.arg
        for enum_stmt in stmt.search('enum'):
            literal = EnumLiteral()
            literal.stmt = enum_stmt
            self.literals.append(literal)
Beispiel #4
0
    def stmt(self, stmt):
        self._stmt = stmt
        self._dictionary = {}
        self._pos_map = {}
        # the name of the enumeration is derived either from the typedef
        # or the leaf under which it is defined
        leaf_or_typedef = stmt
        while leaf_or_typedef.parent is not None and not leaf_or_typedef.keyword in ('leaf', 'leaf-list', 'typedef'):
            leaf_or_typedef = leaf_or_typedef.parent

        name = '%s_Bits' % camel_case(leaf_or_typedef.arg)
        if iskeyword(name):
            name = '%s_' % name
        self.name = name

        desc = stmt.search_one('description')
        if desc is not None:
            self.comment = desc.arg
        else:
            desc = leaf_or_typedef.search_one('description')
            if desc is not None:
                self.comment = desc.arg
        for bit_stmt in stmt.search('bit'):
            self._dictionary[bit_stmt.arg] = False
            pos_stmt = bit_stmt.search_one('position')
            if pos_stmt is not None:
                self._pos_map[bit_stmt.arg] = pos_stmt.arg
Beispiel #5
0
def main():
    particles = []
    ids = {}
    names = {}

    types = load_minecraft_json("protocol.json",
                                "1.16")["types"]["particleData"][1]['fields']
    print(types)

    for particle in load_minecraft_json("particles.json", "1.16"):
        variant = camel_case(particle['name'])
        id = str(particle['id'])
        if id in types.keys():
            data = types[id]
            print(data[1])
            particles.append(generate_particle_data(variant, data[1]))
        else:
            particles.append(variant)
        ids[variant] = id
        names[variant] = particle['name']

    output_data = generate_enum("Particle", particles)
    output_data += generate_enum_property("Particle", "id", "u32", ids, True)
    output_data += generate_enum_property("Particle", "name", "&str", names,
                                          True, "&'static str")
    output("crates/core/src/particle.rs", output_data)
Beispiel #6
0
 def register_files(self, property, root_path, pattern, lifestyle_type = "UNKNOWN"):
     if (lifestyle_type == "UNKNOWN"): lifestyle_type = self.default_lifestyle_type
     self.assert_valid_lifestyle_type(lifestyle_type)        
     
     all_classes = []
     for module_path in common.locate(pattern, root=root_path):
         module = reflection.get_module_from_path(module_path)
         
         class_name = common.camel_case(module.__name__)
         cls = reflection.get_class_for_module(module, class_name)
         
         if cls == None:
             raise AttributeError("The class %s could not be found in file %s. Please make sure that the class has the same name as the file, but Camel Cased." % (class_name, module_path))
         
         all_classes.append(cls)
     
     component_definition = "indirect", lifestyle_type, all_classes, None, None
     self.components[property] = component_definition
from common import load_minecraft_json, load_feather_json, camel_case, generate_enum, generate_enum_property, output
from re import compile

blocks = load_minecraft_json("blocks.json")
simplified_block = load_feather_json("simplified_block.json")

regexes = {}
for name, regex in simplified_block['regexes'].items():
    regexes[name] = compile(regex)

variants = []
mapping = {}
for name in regexes:
    variants.append(camel_case(name))

for block in blocks:
    name = block['name']
    block_variant = camel_case(name)

    # Detect which SimplifiedBlockKind matches this block.
    found = False
    for simplified, regex in regexes.items():
        if regex.match(name) is not None:
            mapping[block_variant] = "SimplifiedBlockKind::" + camel_case(simplified)
            found = True
            break

    if not found:
        # Default to block variant
        variants.append(block_variant)
        mapping[block_variant] = "SimplifiedBlockKind::" + block_variant
Beispiel #8
0
from common import load_minecraft_json, camel_case, generate_enum, generate_enum_property, output

entities = []
ids = {}
internal_ids = {}
names = {}
display_names = {}
bboxes = {}

for entity in load_minecraft_json("entities.json"):
    variant = camel_case(entity['name'])
    entities.append(variant)
    ids[variant] = entity['id']
    internal_ids[variant] = entity['internalId']
    names[variant] = entity['name']
    display_names[variant] = entity['displayName']

    width = entity['width']
    height = entity['height']
    bboxes[
        variant] = f"vek::Aabb {{ min: vek::Vec3::zero(), max: vek::Vec3::new({width} as f64, {height} as f64, {width} as f64), }}"

output_data = generate_enum("EntityKind", entities)
output_data += generate_enum_property("EntityKind", "id", "u32", ids, True)
output_data += generate_enum_property("EntityKind", "internal_id", "u32",
                                      internal_ids, True)
output_data += generate_enum_property("EntityKind", "name", "&str", names,
                                      True, "&'static str")
output_data += generate_enum_property("EntityKind", "display_name", "&str",
                                      display_names, True, "&'static str")
output_data += generate_enum_property("EntityKind", "bounding_box",
Beispiel #9
0
from common import load_minecraft_json, output, generate_enum, generate_enum_property, camel_case

particles = []
ids = {}
names = {}

for particle in load_minecraft_json("particles.json", "1.16"):
    variant = camel_case(particle['name'])
    particles.append(variant)
    ids[variant] = particle['id']
    names[variant] = particle['name']

output_data = generate_enum("Particle", particles)
output_data += generate_enum_property("Particle", "id", "u32", ids, True)
output_data += generate_enum_property("Particle", "name", "&str", names, True, "&'static str")

output("crates/core/src/particle.rs", output_data)

Beispiel #10
0
import common as common

data = common.load_minecraft_json("particles.json", "1.16")

particles = []
ids = {}
names = {}

for particle in data:
    variant = common.camel_case(particle['name'])
    particles.append(variant)
    ids[variant] = particle['id']
    names[variant] = particle['name']

output = common.generate_enum("Particle", particles)
output += common.generate_enum_property("Particle", "id", "u32", ids, True)
output += common.generate_enum_property("Particle", "name", "&str", names, True, "&'static str")

common.output("src/particle.rs", output)
Beispiel #11
0
# Generation of the Biome enum. Uses minecraft-data/biomes.json.
import common

data = common.load_minecraft_json("biomes.json")

variants = []
ids = {}
names = {}
display_names = {}
rainfalls = {}
temperatures = {}

for biome in data:
    variant = common.camel_case(biome['name'])
    variants.append(variant)
    ids[variant] = biome['id']
    names[variant] = biome['name']
    display_names[variant] = biome['displayName']
    rainfalls[variant] = biome['rainfall']
    temperatures[variant] = biome['temperature']

output = common.generate_enum("Biome", variants)
output += common.generate_enum_property("Biome", "id", "u32", ids, True)
output += common.generate_enum_property("Biome", "name", "&str", names, True,
                                        "&'static str")
output += common.generate_enum_property("Biome", "display_name", "&str",
                                        display_names, True, "&'static str")
output += common.generate_enum_property("Biome", "rainfall", "f32", rainfalls)
output += common.generate_enum_property("Biome", "temperature", "f32",
                                        temperatures)
Beispiel #12
0
from common import load_minecraft_json, camel_case, generate_enum, generate_enum_property, output

# build item ID => item kind index
item_kinds_by_id = {}
for item in load_minecraft_json("items.json"):
    item_kinds_by_id[item['id']] = camel_case(item['name'])

# Build material name => dig multipliers index
material_dig_multipliers = {}
for name, material in load_minecraft_json("materials.json").items():
    dig_multipliers = {}
    for item_id, multiplier in material.items():
        dig_multipliers[item_kinds_by_id[int(item_id)]] = float(multiplier)
    material_dig_multipliers[name] = dig_multipliers

# Build material dig multipliers constants
material_constants = ""
material_constant_refs = {}
for name, dig_multipliers in material_dig_multipliers.items():
    dm = ""
    for item, multiplier in dig_multipliers.items():
        dm += f"(libcraft_items::Item::{item}, {multiplier}_f32),"
    constant = f"DIG_MULTIPLIERS_{name}"
    material_constants += f"#[allow(dead_code, non_upper_case_globals)] const {constant}: &[(libcraft_items::Item, f32)] = &[{dm}];"
    material_constant_refs[name] = constant

blocks = []
ids = {}
names = {}
display_names = {}
hardnesses = {}
Beispiel #13
0
from pathlib import Path
import common
import collections

data = common.load_feather_json("inventory.json")

# Areas
areas = []
for area in data['areas']:
    areas.append(common.camel_case(area))

# Windows
windows = []
names = {}
inventories = {}
area_offsets = collections.OrderedDict()

for name, window in data['windows'].items():
    variant = common.camel_case(name)
    windows.append(variant)

    names[variant] = name
    inventories[variant] = window['inventories']

    ao = collections.OrderedDict()
    slot_counter = 0
    for inventory_and_area, number_of_slots in window['slots'].items():
        parts = inventory_and_area.split(":")
        inventory = parts[0]
        area_in_inventory = parts[1]
        ao[(inventory, area_in_inventory)] = (slot_counter, number_of_slots)
Beispiel #14
0
"""Generation of the Biome enum. Uses minecraft-data/biomes.json."""
from common import load_minecraft_json, camel_case, generate_enum, generate_enum_property, output

variants = []
ids = {}
names = {}
display_names = {}
rainfalls = {}
temperatures = {}

for biome in load_minecraft_json("biomes.json"):
    variant = camel_case(biome['name'])
    variants.append(variant)
    ids[variant] = biome['id']
    names[variant] = biome['name']
    display_names[variant] = biome['displayName']
    rainfalls[variant] = biome['rainfall']
    temperatures[variant] = biome['temperature']

output_data = generate_enum("Biome", variants)
output_data += generate_enum_property("Biome", "id", "u32", ids, True)
output_data += generate_enum_property("Biome", "name", "&str", names, True,
                                      "&'static str")
output_data += generate_enum_property("Biome", "display_name", "&str",
                                      display_names, True, "&'static str")
output_data += generate_enum_property("Biome", "rainfall", "f32", rainfalls)
output_data += generate_enum_property("Biome", "temperature", "f32",
                                      temperatures)

output("crates/core/src/biome.rs", output_data)
Beispiel #15
0
import common

data = common.load_minecraft_json("items.json", "1.16.2")

items = []
ids = {}
names = {}
display_names = {}
stack_sizes = {}
durabilities = {}

for item in data:
    variant = common.camel_case(item['name'])
    items.append(variant)
    ids[variant] = item['id']
    names[variant] = item['name']
    display_names[variant] = item['displayName']
    stack_sizes[variant] = item['stackSize']

    durability = item.get('durability')
    if durability is None:
        durabilities[variant] = "None"
    else:
        durabilities[variant] = f"Some({durability})"

output = common.generate_enum("Item", items)
output += common.generate_enum_property("Item", "id", "u32", ids, True)
output += common.generate_enum_property("Item", "name", "&str", names, True,
                                        "&'static str")
output += common.generate_enum_property("Item", "display_name", "&str",
                                        display_names, True, "&'static str")
Beispiel #16
0
import common
import re

blocks = common.load_minecraft_json("blocks.json")
simplified_block = common.load_feather_json("simplified_block.json")

regexes = {}
for name, regex in simplified_block['regexes'].items():
    regexes[name] = re.compile(regex)

variants = []
mapping = {}
for name in regexes:
    variants.append(common.camel_case(name))

for block in blocks:
    name = block['name']
    block_variant = common.camel_case(name)

    # Detect which SimplifiedBlockKind matches this block.
    found = False
    for simplified, regex in regexes.items():
        if regex.match(name) is not None:
            mapping[
                block_variant] = "SimplifiedBlockKind::" + common.camel_case(
                    simplified)
            found = True
            break

    if not found:
        # Default to block variant
Beispiel #17
0
from common import load_minecraft_json, camel_case, generate_enum, generate_enum_property, output

items = []
ids = {}
names = {}
display_names = {}
stack_sizes = {}
durabilities = {}

for item in load_minecraft_json("items.json", "1.16.2"):
    variant = camel_case(item['name'])
    items.append(variant)
    ids[variant] = item['id']
    names[variant] = item['name']
    display_names[variant] = item['displayName']
    stack_sizes[variant] = item['stackSize']

    durability = item.get('durability')
    if durability is None:
        durabilities[variant] = "None"
    else:
        durabilities[variant] = f"Some({durability})"

output_data = "#[derive(serde::Serialize, serde::Deserialize)]" + generate_enum("Item", items)
output_data += generate_enum_property("Item", "id", "u32", ids, True)
output_data += generate_enum_property("Item", "name", "&str", names, True, "&'static str")
output_data += generate_enum_property("Item", "display_name", "&str", display_names, False, "&'static str")
output_data += generate_enum_property("Item", "stack_size", "u32", stack_sizes)
output_data += generate_enum_property("Item", "durability", "Option<u32>", durabilities)

output("crates/items/src/item.rs", output_data)
Beispiel #18
0
import common

data = common.load_minecraft_json("entities.json", "1.16.2")

entities = []
ids = {}
internal_ids = {}
names = {}
display_names = {}
bboxes = {}

for entity in data:
    variant = common.camel_case(entity['name'])
    entities.append(variant)
    ids[variant] = entity['id']
    internal_ids[variant] = entity['internalId']
    names[variant] = entity['name']
    display_names[variant] = entity['displayName']

    width = entity['width']
    height = entity['height']
    bboxes[
        variant] = f"vek::Aabb {{ min: vek::Vec3::zero(), max: vek::Vec3::new({width} as f64, {height} as f64, {width} as f64), }}"

output = common.generate_enum("EntityKind", entities)
output += common.generate_enum_property("EntityKind", "id", "u32", ids, True)
output += common.generate_enum_property("EntityKind", "internal_id", "u32",
                                        internal_ids, True)
output += common.generate_enum_property("EntityKind", "name", "&str", names,
                                        True, "&'static str")
output += common.generate_enum_property("EntityKind", "display_name", "&str",