Changeset 20851 for lang/cplusplus
- Timestamp:
- 10/06/08 21:55:17 (2 months ago)
- Location:
- lang/cplusplus/llv8call/trunk
- Files:
-
- 4 modified
-
ext/libxml/document.cc (modified) (4 diffs)
-
ext/libxml/libxml.h (modified) (1 diff)
-
ext/libxml/node.cc (modified) (4 diffs)
-
t/070_libxml/01_simple.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lang/cplusplus/llv8call/trunk/ext/libxml/document.cc
r20850 r20851 24 24 25 25 #define EXTERNAL_DOC() EXTERNAL(xmlDocPtr, doc, args.This(), 0); 26 27 static inline Handle<Object> createNode(xmlNodePtr node_raw) {28 Handle<Value> consarg[1];29 consarg[0] = External::New(node_raw);30 return node_class()->NewInstance(1, consarg);31 }32 26 33 27 FUNCTION(_readFile) … … 58 52 xmlNodePtr node_raw = xmlDocGetRootElement(doc); 59 53 assert(node_raw); 60 return createNode( node_raw );54 return createNode( doc, node_raw ); 61 55 END 62 56 … … 64 58 ARG_COUNT(1); 65 59 ARG_str(elname, 0); 60 EXTERNAL_DOC(); 66 61 67 62 xmlNodePtr node_raw = xmlNewNode(NULL, (const xmlChar*)*elname); 68 63 assert(node_raw); 69 return createNode( node_raw );64 return createNode( doc, node_raw ); 70 65 END 71 66 … … 109 104 ENDSUBMODULE 110 105 111 // rest: 44/51106 // rest: 7/51 112 107 113 108 // TODO: doc.createDocument -
lang/cplusplus/llv8call/trunk/ext/libxml/libxml.h
r20828 r20851 23 23 } 24 24 25 static inline Handle<Object> createNode(xmlDocPtr doc, xmlNodePtr node_raw) { 26 Handle<Value> consarg[2]; 27 consarg[0] = External::New(node_raw); 28 consarg[1] = External::New(doc); 29 return node_class()->NewInstance(2, consarg); 30 } 31 -
lang/cplusplus/llv8call/trunk/ext/libxml/node.cc
r20850 r20851 23 23 #include "libxml.h" 24 24 25 #define EXTERNAL_NODE() EXTERNAL(xmlNodePtr, node, args.This(), 0); 25 #define EXTERNAL_NODE() EXTERNAL(xmlNodePtr, node, args.This(), 0) 26 #define EXTERNAL_DOC() EXTERNAL(xmlDocPtr, doc, args.This(), 1) 27 #define ARG_node(name, n) EXTERNAL(xmlNodePtr, name, args[n]->ToObject(), 0) 26 28 27 29 FUNCTION(_new) 28 ARG_COUNT( 1);30 ARG_COUNT(2); 29 31 assert(args[0]->IsExternal()); 32 assert(args[1]->IsExternal()); 30 33 args.This()->SetInternalField(0, args[0]); 34 args.This()->SetInternalField(1, args[1]); 31 35 return args.This(); 32 36 END … … 38 42 END 39 43 44 FUNCTION(toString) 45 ARG_BETWEEN(0, 1); 46 EXTERNAL_NODE(); 47 EXTERNAL_DOC(); 48 int format = args.Length() > 0 ? args[0]->Int32Value() : 0; 49 50 xmlBufferPtr buffer = xmlBufferCreate(); 51 if ( format <= 0 ) { 52 xmlNodeDump( 53 buffer, 54 doc, 55 node, 0, format 56 ); 57 } 58 else { 59 int t_indent_var = xmlIndentTreeOutput; 60 xmlIndentTreeOutput = 1; 61 xmlNodeDump( 62 buffer, 63 doc, 64 node, 0, format 65 ); 66 xmlIndentTreeOutput = t_indent_var; 67 } 68 const xmlChar *ret = xmlBufferContent( buffer ); 69 assert(ret); 70 Handle<String> s = String::New((const char*)ret); 71 xmlBufferFree(buffer); 72 return s; 73 END 74 75 FUNCTION(appendChild) 76 ARG_BETWEEN(0, 1); 77 EXTERNAL_NODE(); 78 EXTERNAL_DOC(); 79 ARG_node(argnode, 0); 80 xmlNodePtr rNode = domAppendChild( node, argnode ); 81 return createNode( doc, rNode ); 82 END 83 40 84 SUBMODULE(init_node) 41 85 CLASS_WITH_CONSTRUCTOR(_new); 42 BIND_IM("nodeName", nodeName); 43 INTERNALCOUNT(1); 86 BIND_IM("nodeName", nodeName); 87 BIND_IM("toString", toString); 88 BIND_IM("appendChild", appendChild); 89 INTERNALCOUNT(2); 44 90 EXPORT_CLASS("Node"); 45 91 ENDSUBMODULE 46 92 47 // REST: 49/5093 // REST: 3/50 48 94 // TODO: node.setNodeName 49 95 // TODO: node.isSameNode … … 56 102 // TODO: node.replaceChild 57 103 // TODO: node.replaceNode 58 // TODO: node.appendChild59 104 // TODO: node.addChild 60 105 // TODO: node.addNewChild … … 76 121 // TODO: node.findvalue 77 122 // TODO: node.childNodes 78 // TODO: node.toString79 123 // TODO: node.toStringC14N 80 124 // TODO: node.toStringEC14N -
lang/cplusplus/llv8call/trunk/t/070_libxml/01_simple.js
r20850 r20851 7 7 var doc = new libxml.Document(); 8 8 doc.readFile("t/070_libxml/simple.xml"); 9 var root = doc.documentElement(); 9 10 is(doc.encoding(), "UTF-8"); 10 11 is(doc.version(), "1.0"); 11 is( doc.documentElement().nodeName(), "foo");12 is(root.nodeName(), "foo", 'nodeName'); 12 13 is(doc.createElement("bar").nodeName(), "bar", 'createElement'); 13 14 is(doc.toString(), '<?xml version="1.0" encoding="UTF-8"?>' + "\n" + '<foo/>' + "\n", 'toString'); 15 is(doc.createElement("bar").toString(), "<bar/>", 'node.toString'); 16 root.appendChild(doc.createElement("bar")); 17 is(root.toString(), "<foo><bar/></foo>", "node.toString, node.appendChild"); 14 18 doc.close(); 15 19
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)