diff --git a/Lua/lib/test.lua b/Lua/lib/test.lua index db22cc5..6b44c84 100644 --- a/Lua/lib/test.lua +++ b/Lua/lib/test.lua @@ -2,5 +2,10 @@ assert(require 'pugilua') local doc=pugi.xml_document() os.execute("cd") -local res=doc:load_file [[..\..\tests\data\latintest_latin1.xml]] -print(res.description) \ No newline at end of file +local res=doc:load_file [[..\..\scripts\pugilua\pugilua.vcxproj]] +print(res.description) + +local node=doc:child('Project') +assert(node.valid) +print(node.valid) +print(node.name) \ No newline at end of file diff --git a/contrib/pugilua/pugilua_lib.cpp b/contrib/pugilua/pugilua_lib.cpp index 50434dc..7e098e7 100644 --- a/contrib/pugilua/pugilua_lib.cpp +++ b/contrib/pugilua/pugilua_lib.cpp @@ -22,13 +22,39 @@ namespace pugi { pugi::xml_parse_result res; }; + class lxml_node { + public: + lxml_node(pugi::xml_node& n):node(n){} + lxml_node() { } + + public: + bool valid() const { + return (bool)node; + } + + RefCountedPtr child(char const* name) { + return RefCountedPtr(new lxml_node(node.child(name))); + } + + std::string name() const { + return node.name(); + } + + private: + pugi::xml_node node; + }; + class lxml_document { public: - RefCountedPtr load_file(char const* path) { return RefCountedPtr(new lxml_parse_result(doc.load_file(path))); } + // redundant, but defined due to composition up to now + RefCountedPtr child(char const* name) { + return RefCountedPtr(new lxml_node(doc.child(name))); + } + private: pugi::xml_document doc; }; @@ -46,9 +72,17 @@ void register_pugilua (lua_State* L) { .addProperty("description",&lxml_parse_result::description) .endClass() + .beginClass("xml_node") + .addConstructor() + .addProperty("valid",&lxml_node::valid) + .addProperty("name",&lxml_node::name) + .addFunction("child",&lxml_node::child) + .endClass() + .beginClass("xml_document") .addConstructor() .addFunction("load_file",&lxml_document::load_file) + .addFunction("child",&lxml_document::child) .endClass() .endNamespace()