00001 #ifndef _LINGUISTICDEFINITION_XMLLINGDEFFORMATTER_H_ 00002 #define _LINGUISTICDEFINITION_XMLLINGDEFFORMATTER_H_ 00003 00004 #include <map> 00005 00006 #include <libxml/tree.h> 00007 #include <libxml/xpath.h> 00008 #include <libxml/xmlwriter.h> 00009 00010 #include "LingDef.h" 00011 #include "LingDefFormatter.h" 00012 00013 namespace LinguisticDefinition { 00014 00060 class XmlLingDefFormatter : public LingDefFormatter { 00061 public: 00062 00066 XmlLingDefFormatter(); 00067 00073 LingDef createLingDef(const std::string &xmlData, 00074 const std::string &isoLanguageCode = ""); 00075 00081 LingDef createLingDef(xmlDocPtr doc, 00082 const std::string &isoLanguageCode = ""); 00083 00090 bool populateLingDef(const std::string &xmlData, LingDef &lingDef); 00091 00098 bool populateLingDef(xmlDocPtr doc, LingDef &lingDef); 00099 00103 std::string output(const LingDef &) const; 00104 00108 void output(const LingDef &, std::ostream &) const; 00109 00110 private: 00111 00115 bool langOk(const std::string &, const std::string &) const; 00116 00120 bool langOk(xmlNodePtr, const LingDef &) const; 00121 00125 bool addLingDef(xmlNodePtr, LingDef &); 00126 00130 LingDef::Pos *addPos(xmlNodePtr, LingDef &, LingDef::Pos *parentPos); 00131 00135 LingDef::Feature::Domain getFeatureDomain(xmlNodePtr featureNode); 00136 00140 LingDef::Feature::Type getFeatureType(xmlNodePtr featureNode); 00141 00145 bool addFeature(xmlNodePtr, LingDef::Pos &); 00146 00150 bool addFeature(xmlNodePtr, LingDef::Feature &); 00151 00155 bool addTree(xmlNodePtr, LingDef &); 00156 00160 bool addTreeNode(xmlNodePtr, LingDef &, LingDef::Tree::Node &); 00161 00165 void getPosIds(xmlNodePtr posNode, 00166 std::string &id, 00167 std::string &inheritsId); 00168 00169 00170 private: 00171 }; 00172 00173 } 00174 00175 #endif //_LINGUISTICDEFINITION_XMLLINGDEFFORMATTER_H_