package require tdom
fconfigure stdin -buffering line
set packet "";
while {![eof stdin]} {
append packet [gets stdin];
}
set doc [dom parse $packet];
set root [$doc documentElement];
set classData [$root selectNodes {descendant::UML:Class}];
foreach class $classData {
foreach node $class {
set attList [$node attributes *];
foreach attribute $attList {
if {[string tolower $attribute] == "name"} {
set className [$node getAttribute $attribute];
puts "$className:";
set classVarData [$root selectNodes "descendant::UML:Class\[@name='$className'\]/UML:Classifier.feature/UML:Attribute"];
foreach innerClass $classVarData {
foreach innerNode $innerClass {
set vName [$innerNode selectNodes "string(@name)"];
set vType [$innerNode selectNodes "string(@type)"];
puts " V $vType \$this->$vName";
}
}
set classInnerData [$root selectNodes "descendant::UML:Class\[@name='$className'\]/UML:Classifier.feature/UML:Operation"];
foreach innerClass $classInnerData {
foreach innerNode $innerClass {
set mName [$innerNode selectNodes "string(@name)"];
set mType [$innerNode selectNodes "string(@type)"];
set methodData [$root selectNodes "descendant::UML:Class\[@name='$className'\]/UML:Classifier.feature/UML:Operation\[@name='$mName'\]/UML:BehavioralFeature.parameter/UML:Parameter"];
set mParams {};
foreach method $methodData {
foreach methodNode $method {
set mParamType [$methodNode selectNodes "string(@type)"];
set mParam [$methodNode selectNodes "string(@name)"];
lappend mParams "$mParamType \$$mParam";
}
}
puts " M $mType $mName ([join $mParams ", "])";
}
}
puts "";
puts "";
}
}
}
}