diff --git a/scraper.py b/scraper.py index e1b7858..6efb22b 100644 --- a/scraper.py +++ b/scraper.py @@ -199,57 +199,65 @@ class Scraper(object): # Dictionary containing type name to inheritance list mappings type_name_inheritance = { - "HTTPObject": ["HTTPObject", "TCPObject", "SimObject"], - "FileObject": ["FileObject", "SimObject"], - "Item": ["Item", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], - "SceneObject": ["SceneObject", "NetObject", "SimObject"], - "Player": ["Player", "Player", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], - "DebugView": ["DebugView", "GuiTextCtrl", "GuiControl", "SimGroup", "SimSet", "SimObject"], - "GameBase": ["GameBase", "SceneObject", "NetObject", "SimObject"], - "SimpleNetObject": ["SimpleNetObject", "SimObject"], - "SimObject": ["SimObject"], - "Canvas": ["Canvas", "GuiCanvas", "GuiControl", "SimGroup", "SimSet", "SimObject"], - "GuiCanvas": ["GuiCanvas", "GuiControl", "SimGroup", "SimSet", "SimObject"], - "AIObjectiveQ": ["AIObjectiveQ", "SimSet", "SimObject"], - "ForceFieldBare": ["ForceFieldBare", "GameBase", "SceneObject", "NetObject", "SimObject"], - "PhysicalZone": ["PhysicalZone", "SceneObject", "NetObject", "SimObject" ], - "AIConnection": ["AIConnection", "GameConnection", "GameConnection", "GameConnection", "NetConnection", "SimGroup", "SimSet", "SimObject"], - "Turret": ["Turret", "StaticShape", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject" ], - "TerrainBlock": ["TerrainBlock", "SceneObject", "NetObject", "SimObject"], - "PlayerData": ["PlayerData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], - "InheriorInstance": ["InteriorInstance", "SceneObject", "NetObject", "SimObject"], - "StaticShape": ["StaticShape", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], - "Trigger": ["Trigger", "GameBase", "SceneObject", "NetObject", "SimObject"], - "WaterBlock": ["WaterBlock", "SceneObject", "NetObject", "SimObject"], - "FireballAtmosphere": ["FireballAtmosphere", "GameBase", "SceneObject", "NetObject", "SimObject"], - "MissionArea": ["MissionArea", "NetObject", "SimObject"], - "TSStatic": ["TSStatic", "SceneObject", "NetObject", "SimObject"], - + "HTTPObject": "TCPObject", + "TCPObject": "SimObject", + "FileObject": "SimObject", + "Item": "ShapeBase", + "ShapeBase": "GameBase", + "GameBase": "SceneObject", + "SceneObject": "NetObject", + "NetObject": "SimObject", + "Player": "ShapeBase", + "DebugView": "GuiTextCtrl", + "GuiTextCtrl": "GuiControl", + "GuiControl": "SimGroup", + "SimGroup": "SimSet", + "SimSet": "SimObject", + "Canvas": "GuiCanvas", + "GuiCanvas": "GuiControl", + "SimpleNetObject": "SimObject", + "AIObjectiveQ": "SimSet", + "ForceFieldBare": "GameBase", + "AIConnection": "GameConnection", + "GameConnection": "NetConnection", + "NetConnection": "SimGroup", + "Turret": "StaticShape", + "StaticShape": "ShapeBase", + "TerrainBlock": "SceneObject", + "InteriorInstance": "SceneObject", + "StaticShape": "ShapeBase", + "Trigger": "GameBase", + "WaterBlock": "SceneObject", + "FireballAtmosphere": "GameBase", + "MissionArea": "NetObject", + "TSStatic": "SceneObject", # Projectile Types - "LinearProjectile": ["LinearProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], - "EnergyProjectile": ["EnergyProjectile", "GrenadeProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], - "GrenadeProjectile": ["GrenadeProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], - "TargetProjectile": ["TargetProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], - + "LinearProjectile": "Projectile", + "Projectile": "GameBase", + "EnergyProjectile": "GrenadeProjectile", + "GrenadeProjectile": "Projectile", + "TargetProjectile": "Projectile", # Vehicle Types - "HoverVehicle": ["HoverVehicle", "Vehicle", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], - "FlyingVehicle": ["FlyingVehicle", "Vehicle", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], - "WheeledVehicle": ["WheeledVehicle", "Vehicle", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], - + "HoverVehicle": "Vehicle", + "Vehicle": "ShapeBase", + "FlyingVehicle": "Vehicle", + "WheeledVehicle": "Vehicle", # Datablock Types - "HoverVehicleData": ["HoverVehicleData", "VehicleData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], - "FlyingVehicleData": ["FlyingVehicleData", "VehicleData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], - "WheeledVehicleData": ["WheeledVehicleData", "VehicleData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], - "ForceFieldBareData": ["ForceFieldBareData", "GameBaseData", "SimDataBlock", "SimObject"], - "LinearProjectileData": ["LinearProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], - "EnergyProjectileData": ["EnergyProjectileData", "GrenadeProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], - "GrenadeProjectileData": ["GrenadeProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], - "FireballAtmosphereData": ["FireballAtmosphereData", "GameBaseData", "SimDataBlock", "SimObject"], - "TargetProjectileData": ["TargetProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], - } - """ - FIXME: This is a huge pile of filth used for generating the inheritance hierarchy for all the various object types. - """ + "HoverVehicleData": "VehicleData", + "VehicleData": "ShapeBaseData", + "FlyingVehicleData": "VehicleData", + "WheeledVehicleData": "VehicleData", + "ForceFieldBareData": "GameBaseData", + "LinearProjectileData": "ProjectileData", + "EnergyProjectileData": "GrenadeProjectileData", + "GrenadeProjectileData": "ProjectileData", + "FireballAtmosphereData": "GameBaseData", + "TargetProjectileData": "ProjectileData", + "PlayerData": "ShapeBaseData", + "ShapeBaseData": "GameBaseData", + "GameBaseData": "SimDataBlock", + "SimDataBlock": "SimObject", + } # Outputs global_functions = None @@ -416,6 +424,15 @@ class Scraper(object): current_datablock = self.datablocks[datablock_type] current_datablock.properties[datablock_property_name] = Datablock.Property(datablock_property_name, datablock_property_address, "Bla") + def build_inheritance_tree(self, typename): + result = [ typename ] + + while (typename in self.type_name_inheritance.keys()): + typename = self.type_name_inheritance[typename] + result.append(typename) + + return result + # Helper Functions def _extract_description(self, source): desc_end = source.rfind("\"") diff --git a/t2src.py b/t2src.py index 7a471b5..147e049 100755 --- a/t2src.py +++ b/t2src.py @@ -16,19 +16,6 @@ import string import scraper -def build_inheritance_tree(inheritance_list, type_names): - inheritance_tree = "" - - for tree_element in inheritance_list: - if (tree_element in type_names): - inheritance_tree += "[[#%s]] -> " % tree_element - else: - inheritance_tree += "%s -> " % tree_element - - inheritance_tree = inheritance_tree.rstrip(" -> ") - - return inheritance_tree - # Main App class Application(object): global_method_heading = "===== Global Methods (%u total) =====\r\n" @@ -102,7 +89,8 @@ class Application(object): for type_name in scrape.type_methods.keys(): inheritance_tree = "" if (type_name in scrape.type_name_inheritance.keys()): - inheritance_tree = build_inheritance_tree(scrape.type_name_inheritance[type_name], scrape.type_methods.keys()) + inheritance_tree = self.build_inheritance_tree(scrape.build_inheritance_tree(type_name)) + handle.write(self.type_name_template % (type_name, len(scrape.type_methods[type_name]), inheritance_tree)) # Native Methods First @@ -129,7 +117,7 @@ class Application(object): for datablock_type in scrape.datablocks.keys(): inheritance_tree = "" if (datablock_type in scrape.type_name_inheritance.keys()): - inheritance_tree = build_inheritance_tree(scrape.type_name_inheritance[datablock_type], scrape.type_name_inheritance[datablock_type]) + inheritance_tree = self.build_inheritance_tree(scrape.build_inheritance_tree(datablock_type)) datablock = scrape.datablocks[datablock_type] handle.write(self.datablock_heading % (datablock.name, len(datablock.properties.keys()), inheritance_tree)) @@ -139,6 +127,15 @@ class Application(object): handle.write(self.datablock_property_template % (datablock_property.name, datablock_property.address, datablock_property.type_name)) + def build_inheritance_tree(self, tree): + result = "" + + for tree_element in tree: + result += "[[#%s]] -> " % tree_element + + result = result.rstrip(" -> ") + return result + if __name__ == "__main__": time_before = time.time() Application().main()