Changeset 20859 for lang

Show
Ignore:
Timestamp:
10/06/08 23:59:56 (6 years ago)
Author:
tokuhirom
Message:

added doc.createDocument(), doc.setDocumentElement()

Location:
lang/cplusplus/llv8call/trunk
Files:
1 added
4 modified

Legend:

Unmodified
Added
Removed
  • lang/cplusplus/llv8call/trunk/ext/libxml/document.cc

    r20851 r20859  
    2424 
    2525#define EXTERNAL_DOC() EXTERNAL(xmlDocPtr, doc, args.This(), 0); 
     26 
     27FUNCTION(createDocument) 
     28    ARG_BETWEEN(1, 2); 
     29    ARG_str(version,  0); 
     30    xmlDocPtr doc = xmlNewDoc((const xmlChar*)*version); 
     31    assert(doc); 
     32    if (args.Length() == 2) { 
     33        ARG_str(encoding, 1); 
     34        doc->encoding = (const xmlChar*)xmlStrdup((const xmlChar*)*encoding); 
     35    } 
     36    Handle<Object> t = document_class()->NewInstance(); 
     37    t->SetInternalField(0, External::New(doc)); 
     38    return t; 
     39END 
    2640 
    2741FUNCTION(_readFile) 
     
    5367    assert(node_raw); 
    5468    return createNode( doc,  node_raw ); 
     69END 
     70 
     71FUNCTION(setDocumentElement) 
     72    ARG_COUNT(1); 
     73    EXTERNAL_DOC(); 
     74    ARG_node(node, 0); 
     75 
     76    if (doc!=node->doc) { 
     77        domImportNode(doc, node, 1, 1); 
     78    } 
     79    xmlNodePtr oelem = xmlDocGetRootElement( doc ); 
     80    if ( oelem == NULL || oelem->_private == NULL ) { 
     81        xmlDocSetRootElement( doc, node ); 
     82    } else { 
     83        abort(); // TODO: implement 
     84    } 
     85    return Undefined(); 
    5586END 
    5687 
     
    93124SUBMODULE(init_document) 
    94125    CLASS(); 
     126    BIND_CM("createDocument",         createDocument); 
     127 
    95128    BIND_IM("readFile",               _readFile); 
    96129    BIND_IM("encoding",               _encoding); 
    97130    BIND_IM("version",                _version); 
    98131    BIND_IM("documentElement",        _documentElement); 
     132    BIND_IM("setDocumentElement",     setDocumentElement); 
    99133    BIND_IM("createElement",          _createElement); 
    100134    BIND_IM("toString",               toString); 
     
    106140// rest: 7/51 
    107141 
    108 // TODO: doc.createDocument 
    109142// TODO: doc.actualEncoding 
    110143// TODO: doc.setEncoding 
  • lang/cplusplus/llv8call/trunk/ext/libxml/libxml.h

    r20851 r20859  
    2323} 
    2424 
     25inline v8::Handle<v8::Function> document_class() { 
     26    return Handle<Function>::Cast( libxml_namespace()->Get(String::New("Document")) ); 
     27} 
     28 
    2529static inline Handle<Object> createNode(xmlDocPtr doc, xmlNodePtr node_raw) { 
    2630    Handle<Value> consarg[2]; 
     
    3034} 
    3135 
     36#define ARG_node(name, n) EXTERNAL(xmlNodePtr, name, args[n]->ToObject(), 0) 
     37 
  • lang/cplusplus/llv8call/trunk/ext/libxml/node.cc

    r20855 r20859  
    2525#define EXTERNAL_NODE()   EXTERNAL(xmlNodePtr, node, args.This(),         0) 
    2626#define EXTERNAL_DOC()    EXTERNAL(xmlDocPtr,  doc,  args.This(),         1) 
    27 #define ARG_node(name, n) EXTERNAL(xmlNodePtr, name, args[n]->ToObject(), 0) 
    2827 
    2928FUNCTION(_new) 
  • lang/cplusplus/llv8call/trunk/t/070_libxml/01_simple.js

    r20855 r20859  
    11require('t/util.js'); 
    22 
    3 plan({tests:11}); 
     3plan({tests:7}); 
    44 
    55check_lib("org.coderepos.libxml"); 
     
    1515is(doc.createElement("bar").toString(), "<bar/>", 'node.toString'); 
    1616is(root.toString(), "<foo/>", "node.toString"); 
    17 var bar = doc.createElement("bar"); 
    18 var eee = doc.createElement("eee"); 
    19 root.appendChild(bar); 
    20 is(root.toString(), "<foo><bar/></foo>", "node.appendChild"); 
    21 root.removeChild(bar); 
    22 is(root.toString(), "<foo/>", "node.removeChild"); 
    23 root.appendChild(bar); 
    24 root.appendChild(eee); 
    25 is(root.toString(), "<foo><bar/><eee/></foo>", "node.appendChild"); 
    26 root.removeChildNodes(); 
    27 is(root.toString(), "<foo/>", "node.removeChildNodes"); 
    28 root.appendChild(bar); 
    29 is(root.insertBefore(eee, bar).nodeName(), 'eee', 'node.insertBefore'); 
    30 is(root.toString(), "<foo><eee/><bar/></foo>", "node.insertBefore"); 
    31 root.removeChildNodes(); 
    32 root.appendChild(bar); 
    33 is(root.insertAfter(eee, bar).nodeName(), 'eee', 'node.insertAfter'); 
    34 is(root.toString(), "<foo><bar/><eee/></foo>", "node.insertAfter"); 
    3517doc.close(); 
    3618