void DotTypeSystemWriter::writeType()

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);
    }
  }