Update inheritance diagram generator

This commit is contained in:
Robert MacGregor 2016-01-25 21:26:16 -05:00
parent a587d317af
commit 1e4fbbb53f
2 changed files with 77 additions and 63 deletions

View file

@ -199,57 +199,65 @@ class Scraper(object):
# Dictionary containing type name to inheritance list mappings # Dictionary containing type name to inheritance list mappings
type_name_inheritance = { type_name_inheritance = {
"HTTPObject": ["HTTPObject", "TCPObject", "SimObject"], "HTTPObject": "TCPObject",
"FileObject": ["FileObject", "SimObject"], "TCPObject": "SimObject",
"Item": ["Item", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], "FileObject": "SimObject",
"SceneObject": ["SceneObject", "NetObject", "SimObject"], "Item": "ShapeBase",
"Player": ["Player", "Player", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], "ShapeBase": "GameBase",
"DebugView": ["DebugView", "GuiTextCtrl", "GuiControl", "SimGroup", "SimSet", "SimObject"], "GameBase": "SceneObject",
"GameBase": ["GameBase", "SceneObject", "NetObject", "SimObject"], "SceneObject": "NetObject",
"SimpleNetObject": ["SimpleNetObject", "SimObject"], "NetObject": "SimObject",
"SimObject": ["SimObject"], "Player": "ShapeBase",
"Canvas": ["Canvas", "GuiCanvas", "GuiControl", "SimGroup", "SimSet", "SimObject"], "DebugView": "GuiTextCtrl",
"GuiCanvas": ["GuiCanvas", "GuiControl", "SimGroup", "SimSet", "SimObject"], "GuiTextCtrl": "GuiControl",
"AIObjectiveQ": ["AIObjectiveQ", "SimSet", "SimObject"], "GuiControl": "SimGroup",
"ForceFieldBare": ["ForceFieldBare", "GameBase", "SceneObject", "NetObject", "SimObject"], "SimGroup": "SimSet",
"PhysicalZone": ["PhysicalZone", "SceneObject", "NetObject", "SimObject" ], "SimSet": "SimObject",
"AIConnection": ["AIConnection", "GameConnection", "GameConnection", "GameConnection", "NetConnection", "SimGroup", "SimSet", "SimObject"], "Canvas": "GuiCanvas",
"Turret": ["Turret", "StaticShape", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject" ], "GuiCanvas": "GuiControl",
"TerrainBlock": ["TerrainBlock", "SceneObject", "NetObject", "SimObject"], "SimpleNetObject": "SimObject",
"PlayerData": ["PlayerData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], "AIObjectiveQ": "SimSet",
"InheriorInstance": ["InteriorInstance", "SceneObject", "NetObject", "SimObject"], "ForceFieldBare": "GameBase",
"StaticShape": ["StaticShape", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], "AIConnection": "GameConnection",
"Trigger": ["Trigger", "GameBase", "SceneObject", "NetObject", "SimObject"], "GameConnection": "NetConnection",
"WaterBlock": ["WaterBlock", "SceneObject", "NetObject", "SimObject"], "NetConnection": "SimGroup",
"FireballAtmosphere": ["FireballAtmosphere", "GameBase", "SceneObject", "NetObject", "SimObject"], "Turret": "StaticShape",
"MissionArea": ["MissionArea", "NetObject", "SimObject"], "StaticShape": "ShapeBase",
"TSStatic": ["TSStatic", "SceneObject", "NetObject", "SimObject"], "TerrainBlock": "SceneObject",
"InteriorInstance": "SceneObject",
"StaticShape": "ShapeBase",
"Trigger": "GameBase",
"WaterBlock": "SceneObject",
"FireballAtmosphere": "GameBase",
"MissionArea": "NetObject",
"TSStatic": "SceneObject",
# Projectile Types # Projectile Types
"LinearProjectile": ["LinearProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], "LinearProjectile": "Projectile",
"EnergyProjectile": ["EnergyProjectile", "GrenadeProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], "Projectile": "GameBase",
"GrenadeProjectile": ["GrenadeProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], "EnergyProjectile": "GrenadeProjectile",
"TargetProjectile": ["TargetProjectile", "Projectile", "GameBase", "SceneObject", "NetObject", "SimObject"], "GrenadeProjectile": "Projectile",
"TargetProjectile": "Projectile",
# Vehicle Types # Vehicle Types
"HoverVehicle": ["HoverVehicle", "Vehicle", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], "HoverVehicle": "Vehicle",
"FlyingVehicle": ["FlyingVehicle", "Vehicle", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], "Vehicle": "ShapeBase",
"WheeledVehicle": ["WheeledVehicle", "Vehicle", "ShapeBase", "GameBase", "SceneObject", "NetObject", "SimObject"], "FlyingVehicle": "Vehicle",
"WheeledVehicle": "Vehicle",
# Datablock Types # Datablock Types
"HoverVehicleData": ["HoverVehicleData", "VehicleData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], "HoverVehicleData": "VehicleData",
"FlyingVehicleData": ["FlyingVehicleData", "VehicleData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], "VehicleData": "ShapeBaseData",
"WheeledVehicleData": ["WheeledVehicleData", "VehicleData", "ShapeBaseData", "GameBaseData", "SimDataBlock", "SimObject"], "FlyingVehicleData": "VehicleData",
"ForceFieldBareData": ["ForceFieldBareData", "GameBaseData", "SimDataBlock", "SimObject"], "WheeledVehicleData": "VehicleData",
"LinearProjectileData": ["LinearProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], "ForceFieldBareData": "GameBaseData",
"EnergyProjectileData": ["EnergyProjectileData", "GrenadeProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], "LinearProjectileData": "ProjectileData",
"GrenadeProjectileData": ["GrenadeProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], "EnergyProjectileData": "GrenadeProjectileData",
"FireballAtmosphereData": ["FireballAtmosphereData", "GameBaseData", "SimDataBlock", "SimObject"], "GrenadeProjectileData": "ProjectileData",
"TargetProjectileData": ["TargetProjectileData", "ProjectileData", "GameBaseData", "SimDataBlock", "SimObject"], "FireballAtmosphereData": "GameBaseData",
} "TargetProjectileData": "ProjectileData",
""" "PlayerData": "ShapeBaseData",
FIXME: This is a huge pile of filth used for generating the inheritance hierarchy for all the various object types. "ShapeBaseData": "GameBaseData",
""" "GameBaseData": "SimDataBlock",
"SimDataBlock": "SimObject",
}
# Outputs # Outputs
global_functions = None global_functions = None
@ -416,6 +424,15 @@ class Scraper(object):
current_datablock = self.datablocks[datablock_type] current_datablock = self.datablocks[datablock_type]
current_datablock.properties[datablock_property_name] = Datablock.Property(datablock_property_name, datablock_property_address, "Bla") 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 # Helper Functions
def _extract_description(self, source): def _extract_description(self, source):
desc_end = source.rfind("\"") desc_end = source.rfind("\"")

View file

@ -16,19 +16,6 @@ import string
import scraper 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 # Main App
class Application(object): class Application(object):
global_method_heading = "===== Global Methods (%u total) =====\r\n" global_method_heading = "===== Global Methods (%u total) =====\r\n"
@ -102,7 +89,8 @@ class Application(object):
for type_name in scrape.type_methods.keys(): for type_name in scrape.type_methods.keys():
inheritance_tree = "<Unknown>" inheritance_tree = "<Unknown>"
if (type_name in scrape.type_name_inheritance.keys()): 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)) handle.write(self.type_name_template % (type_name, len(scrape.type_methods[type_name]), inheritance_tree))
# Native Methods First # Native Methods First
@ -129,7 +117,7 @@ class Application(object):
for datablock_type in scrape.datablocks.keys(): for datablock_type in scrape.datablocks.keys():
inheritance_tree = "<Unknown>" inheritance_tree = "<Unknown>"
if (datablock_type in scrape.type_name_inheritance.keys()): 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] datablock = scrape.datablocks[datablock_type]
handle.write(self.datablock_heading % (datablock.name, len(datablock.properties.keys()), inheritance_tree)) 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)) 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__": if __name__ == "__main__":
time_before = time.time() time_before = time.time()
Application().main() Application().main()