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
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("\"")

View file

@ -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 = "<Unknown>"
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 = "<Unknown>"
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()