Changeset 20881 for lang/cplusplus
- Timestamp:
- 10/07/08 09:25:10 (2 months ago)
- Location:
- lang/cplusplus/llv8call/trunk
- Files:
-
- 3 added
- 7 modified
-
ext/include/llv8-macros.h (modified) (1 diff)
-
ext/libxml/SConscript (modified) (1 diff)
-
ext/libxml/attr.cc (added)
-
ext/libxml/document.cc (modified) (5 diffs)
-
ext/libxml/element.cc (added)
-
ext/libxml/libxml.cc (modified) (2 diffs)
-
ext/libxml/libxml.h (modified) (2 diffs)
-
ext/libxml/node.cc (modified) (1 diff)
-
ext/libxml/node.h (added)
-
t/070_libxml/02_dom.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lang/cplusplus/llv8call/trunk/ext/include/llv8-macros.h
r20827 r20881 103 103 #define SUBMODULE(funcname) void funcname(Handle<Object> target) { 104 104 #define ENDSUBMODULE } 105 #define OBJECT_TEMPLATE __k7_ot 105 106 106 107 #endif -
lang/cplusplus/llv8call/trunk/ext/libxml/SConscript
r20828 r20881 12 12 env.SharedLibrary( 13 13 "libxml", 14 [Split('libxml.cc document.cc node.cc dom.c ')],14 [Split('libxml.cc document.cc node.cc dom.c element.cc attr.cc')], 15 15 LIBS=['v8'] + env['LIBS'], 16 16 ) -
lang/cplusplus/llv8call/trunk/ext/libxml/document.cc
r20866 r20881 80 80 xmlNodePtr node_raw = xmlDocGetRootElement(doc); 81 81 assert(node_raw); 82 return create Node( doc, node_raw );82 return createElem( doc, node_raw ); 83 83 END 84 84 … … 109 109 assert(node_raw); 110 110 xmlAddChild(fragment, node_raw); 111 return createNode( doc, node_raw ); 111 return createElem( doc, node_raw ); 112 END 113 114 // attrnode = doc.createAttribute(name [,value]); 115 FUNCTION(createAttribute) 116 ARG_BETWEEN(1, 2); 117 ARG_str(name, 0); 118 ARG_str(value, 1); 119 EXTERNAL_DOC(); 120 121 xmlAttrPtr attr = xmlNewDocProp(doc, (const xmlChar*)*name, args.Length() == 2 ? (const xmlChar*)*value : NULL); 122 return createAttr(attr); 112 123 END 113 124 … … 174 185 BIND_IM("setDocumentElement", setDocumentElement); 175 186 BIND_IM("createElement", _createElement); 187 BIND_IM("createAttribute", createAttribute); 176 188 BIND_IM("createTextNode", createTextNode); 177 189 BIND_IM("createComment", createComment); … … 202 214 // TODO: doc.documentElement 203 215 // TODO: doc.createElementNS 204 // TODO: doc.createAttribute205 216 // TODO: doc.createAttributeNS 206 217 // TODO: doc.createDocumentFragment … … 223 234 // TODO: doc.getElementById 224 235 // TODO: doc.indexElements 236 -
lang/cplusplus/llv8call/trunk/ext/libxml/libxml.cc
r20828 r20881 35 35 extern void init_document(Handle<Object> target); 36 36 extern void init_node(Handle<Object> target); 37 extern void init_attr(Handle<Object> target); 38 extern void init_elem(Handle<Object> target); 37 39 38 40 V8EXTINIT_FUNC … … 43 45 init_document(target); 44 46 init_node(target); 47 init_attr(target); 48 init_elem(target); 45 49 46 50 return target; -
lang/cplusplus/llv8call/trunk/ext/libxml/libxml.h
r20859 r20881 23 23 } 24 24 25 inline v8::Handle<v8::Function> attr_class() { 26 return Handle<Function>::Cast( libxml_namespace()->Get(String::New("Attr")) ); 27 } 28 29 inline v8::Handle<v8::Function> elem_class() { 30 return Handle<Function>::Cast( libxml_namespace()->Get(String::New("Element")) ); 31 } 32 25 33 inline v8::Handle<v8::Function> document_class() { 26 34 return Handle<Function>::Cast( libxml_namespace()->Get(String::New("Document")) ); … … 34 42 } 35 43 44 static inline Handle<Object> createElem(xmlDocPtr doc, xmlNodePtr elem_raw) { 45 Handle<Value> consarg[2]; 46 consarg[0] = External::New(elem_raw); 47 consarg[1] = External::New(doc); 48 return elem_class()->NewInstance(2, consarg); 49 } 50 51 static inline Handle<Object> createAttr(xmlAttrPtr attr_raw) { 52 Handle<Value> consarg[1]; 53 consarg[0] = External::New(attr_raw); 54 return attr_class()->NewInstance(1, consarg); 55 } 56 36 57 #define ARG_node(name, n) EXTERNAL(xmlNodePtr, name, args[n]->ToObject(), 0) 58 #define ARG_attr(name, n) EXTERNAL(xmlAttrPtr, name, args[n]->ToObject(), 0) 37 59 -
lang/cplusplus/llv8call/trunk/ext/libxml/node.cc
r20866 r20881 21 21 // THE SOFTWARE. 22 22 23 #include "libxml.h" 24 25 #define EXTERNAL_NODE() EXTERNAL(xmlNodePtr, node, args.This(), 0) 26 #define EXTERNAL_DOC() EXTERNAL(xmlDocPtr, doc, args.This(), 1) 27 28 FUNCTION(_new) 29 ARG_COUNT(2); 30 assert(args[0]->IsExternal()); 31 assert(args[1]->IsExternal()); 32 args.This()->SetInternalField(0, args[0]); 33 args.This()->SetInternalField(1, args[1]); 34 return args.This(); 35 END 36 37 FUNCTION(nodeName) 38 ARG_COUNT(0); 39 EXTERNAL_NODE(); 40 return String::New((char*)domName(node)); 41 END 42 43 FUNCTION(toString) 44 ARG_BETWEEN(0, 1); 45 EXTERNAL_NODE(); 46 EXTERNAL_DOC(); 47 int format = args.Length() > 0 ? args[0]->Int32Value() : 0; 48 49 xmlBufferPtr buffer = xmlBufferCreate(); 50 if ( format <= 0 ) { 51 xmlNodeDump( 52 buffer, 53 doc, 54 node, 0, format 55 ); 56 } 57 else { 58 int t_indent_var = xmlIndentTreeOutput; 59 xmlIndentTreeOutput = 1; 60 xmlNodeDump( 61 buffer, 62 doc, 63 node, 0, format 64 ); 65 xmlIndentTreeOutput = t_indent_var; 66 } 67 const xmlChar *ret = xmlBufferContent( buffer ); 68 assert(ret); 69 Handle<String> s = String::New((const char*)ret); 70 xmlBufferFree(buffer); 71 return s; 72 END 73 74 FUNCTION(appendChild) 75 ARG_BETWEEN(0, 1); 76 EXTERNAL_NODE(); 77 EXTERNAL_DOC(); 78 ARG_node(argnode, 0); 79 xmlNodePtr rNode = domAppendChild( node, argnode ); 80 return createNode( doc, rNode ); 81 END 82 83 FUNCTION(insertBefore) 84 ARG_COUNT(2); 85 EXTERNAL_NODE(); 86 EXTERNAL_DOC(); 87 ARG_node(newnode, 0); 88 ARG_node(refnode, 1); 89 xmlNodePtr rNode = domInsertBefore( node, newnode, refnode ); 90 assert(rNode); 91 return createNode( doc, rNode ); 92 END 93 94 FUNCTION(insertAfter) 95 ARG_COUNT(2); 96 EXTERNAL_NODE(); 97 EXTERNAL_DOC(); 98 ARG_node(newnode, 0); 99 ARG_node(refnode, 1); 100 xmlNodePtr rNode = domInsertAfter( node, newnode, refnode ); 101 assert(rNode); 102 return createNode( doc, rNode ); 103 END 104 105 FUNCTION(removeChild) 106 ARG_BETWEEN(0, 1); 107 EXTERNAL_NODE(); 108 EXTERNAL_DOC(); 109 ARG_node(argnode, 0); 110 xmlNodePtr rNode = domRemoveChild( node, argnode ); 111 return createNode( doc, rNode ); 112 END 113 114 // remove whole child nodes 115 FUNCTION(removeChildNodes) 116 ARG_BETWEEN(0, 1); 117 EXTERNAL_NODE(); 118 xmlNodePtr elem = node->children; 119 while (elem ) { 120 xmlUnlinkNode( elem ); 121 elem = elem->next; 122 } 123 node->children = node->last = NULL; 124 return Undefined(); 125 END 126 127 xmlNodePtr 128 _CloneNodeIn( xmlNodePtr node, int recursive ) 129 { 130 xmlNodePtr retval = NULL; 131 132 if ( node != NULL ) { 133 switch ( node->type ) { 134 case XML_ELEMENT_NODE: 135 case XML_TEXT_NODE: 136 case XML_CDATA_SECTION_NODE: 137 case XML_ENTITY_REF_NODE: 138 case XML_PI_NODE: 139 case XML_COMMENT_NODE: 140 case XML_DOCUMENT_FRAG_NODE: 141 case XML_ENTITY_DECL: 142 retval = xmlCopyNode( node, recursive ? 1 : 2 ); 143 break; 144 case XML_ATTRIBUTE_NODE: 145 retval = (xmlNodePtr) xmlCopyProp( NULL, (xmlAttrPtr) node ); 146 break; 147 case XML_DOCUMENT_NODE: 148 case XML_HTML_DOCUMENT_NODE: 149 retval = (xmlNodePtr) xmlCopyDoc( (xmlDocPtr)node, recursive ); 150 break; 151 case XML_DOCUMENT_TYPE_NODE: 152 case XML_DTD_NODE: 153 retval = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr)node ); 154 break; 155 case XML_NAMESPACE_DECL: 156 retval = ( xmlNodePtr ) xmlCopyNamespace( (xmlNsPtr) node ); 157 break; 158 default: 159 break; 160 } 161 } 162 163 return retval; 164 } 165 166 FUNCTION(cloneNode) 167 ARG_BETWEEN(0, 1); 168 EXTERNAL_NODE(); 169 EXTERNAL_DOC(); 170 int deep = args.Length() == 1 ? args[0]->Int32Value() : 0; 171 xmlNodePtr ret = _CloneNodeIn( node, deep ); 172 assert(ret); 173 return createNode( doc, ret ); 174 END 175 176 FUNCTION(firstChild) 177 ARG_COUNT(0); 178 EXTERNAL_NODE(); 179 EXTERNAL_DOC(); 180 return createNode( doc, node->children ); 181 END 182 183 FUNCTION(lastChild) 184 ARG_COUNT(0); 185 EXTERNAL_NODE(); 186 EXTERNAL_DOC(); 187 return createNode( doc, node->last ); 188 END 189 190 FUNCTION(parentNode) 191 ARG_COUNT(0); 192 EXTERNAL_NODE(); 193 EXTERNAL_DOC(); 194 return createNode( doc, node->parent ); 195 END 23 #include "node.h" 196 24 197 25 SUBMODULE(init_node) 198 26 CLASS_WITH_CONSTRUCTOR(_new); 199 BIND_IM("nodeName", nodeName); 200 BIND_IM("toString", toString); 201 BIND_IM("appendChild", appendChild); 202 BIND_IM("insertBefore", insertBefore); 203 BIND_IM("insertAfter", insertAfter); 204 BIND_IM("removeChild", removeChild); 205 BIND_IM("removeChildNodes", removeChildNodes); 206 BIND_IM("cloneNode", cloneNode); 207 BIND_IM("firstChild", firstChild); 208 BIND_IM("lastChild", lastChild); 209 BIND_IM("parentNode", parentNode); 210 INTERNALCOUNT(2); 27 setupNodeIM(OBJECT_TEMPLATE); 211 28 EXPORT_CLASS("Node"); 212 29 ENDSUBMODULE -
lang/cplusplus/llv8call/trunk/t/070_libxml/02_dom.js
r20866 r20881 88 88 }); 89 89 90 test(function () { 91 root.setAttributeNode(doc.createAttribute("foo", "bar")); 92 is(root.toString(), '<foo foo="bar"/>', 'node.createAttribute()'); 93 }); 94 90 95 doc.close(); 91 96
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)