in src/framework/dottypesystemwriter.cpp [102:156]
void DotTypeSystemWriter::writeType(ostream & os, uima::Type const & crType, size_t uiIndent) const {
if (iv_bOnlyCASTypes &&
(crType != crType.getTypeSystem().getTopType()) && (!isCasType(crType))) {
return;
}
if (iv_bNoCASTypes && isCasType(crType)) {
return;
}
string strIndentString(uiIndent, ' ');
os << strIndentString;
os << adjustTypeName(crType.getName())
<< "[label=\"" << adjustTypeName(crType.getName());
vector<Feature> features;
crType.getAppropriateFeatures(features);
size_t i;
for (i=0; i<features.size(); ++i) {
assert( features[i].isValid());
// print only features which are introduced at this type
Type introType;
features[i].getIntroType(introType);
assert( introType.isValid() );
if (introType == crType) {
Type range;
features[i].getRangeType(range);
assert( range.isValid());
os << "|{" << adjustFeatName(features[i].getName()) << ": " << adjustTypeName(range.getName()) << "}";
}
}
os << "\"];" << endl;
vector<Type> subTypes;
crType.getDirectSubTypes(subTypes);
if (subTypes.size() > 0) {
// print <typename> -> {<sub-type1>, <sub-type2>, ...};
os << strIndentString;
os << adjustTypeName(crType.getName()) << " -> {";
size_t uiTypesWritten = 0;
for (i=0; i<subTypes.size(); ++i) {
if (iv_bOnlyCASTypes && !isCasType(subTypes[i]) ) {
continue;
}
if (iv_bNoCASTypes && isCasType(subTypes[i]) ) {
continue;
}
if (uiTypesWritten > 0 ) {
os << "; ";
}
os << adjustTypeName(subTypes[i].getName());
++uiTypesWritten;
}
os << "};" << endl;
}
for (i=0; i<subTypes.size(); ++i) {
writeType(os, subTypes[i], uiIndent+cuiINDENT);
}
}