Changeset 20947 for lang/cplusplus

Show
Ignore:
Timestamp:
10/08/08 09:00:07 (2 months ago)
Author:
tokuhirom
Message:

added attr.* methods

Location:
lang/cplusplus/llv8call/trunk
Files:
6 modified

Legend:

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

    r20881 r20947  
    2121// THE SOFTWARE. 
    2222 
    23 #include "libxml.h" 
     23#include "node.h" 
    2424 
    2525#define EXTERNAL_ATTR()   EXTERNAL(xmlAttrPtr, attr, args.This(),         0) 
    2626 
    27 FUNCTION(_new) 
     27FUNCTION(setValue) 
    2828    ARG_COUNT(1); 
    29     assert(args[0]->IsExternal()); 
    30     args.This()->SetInternalField(0, args[0]); 
    31     return args.This(); 
     29    ARG_str(val, 0); 
     30    EXTERNAL_NODE(); 
     31    domSetNodeValue(node, (xmlChar*)*val); 
     32    return Undefined(); 
    3233END 
    3334 
    3435SUBMODULE(init_attr) 
    3536    CLASS_WITH_CONSTRUCTOR(_new); 
    36     INTERNALCOUNT(1); 
     37    setupNodeIM(OBJECT_TEMPLATE); 
     38    BIND_IM("getValue",            getValue); 
     39    BIND_IM("value",               getValue); 
     40    BIND_IM("setValue",            setValue); 
     41    BIND_IM("getOwnerElement",     parentNode); 
    3742    EXPORT_CLASS("Attr"); 
    3843ENDSUBMODULE 
    3944 
    40 // REST: 0/8 
    41 // TODO: node.new 
    42 // TODO: node.getValue 
    43 // TODO: node.value 
    44 // TODO: node.setValue 
    45 // TODO: node.getOwnerElement 
    46 // TODO: node.setNamespace 
    47 // TODO: node.isId 
    48 // TODO: node.serializeContent($docencoding) 
     45// REST: 5/8 
     46// TODO: attr.setNamespace 
     47// TODO: attr.isId 
     48// TODO: attr.serializeContent($docencoding) 
     49 
  • lang/cplusplus/llv8call/trunk/ext/libxml/document.cc

    r20881 r20947  
    120120 
    121121    xmlAttrPtr attr = xmlNewDocProp(doc, (const xmlChar*)*name, args.Length() == 2 ? (const xmlChar*)*value : NULL); 
    122     return createAttr(attr); 
     122    return createAttr(doc, attr); 
    123123END 
    124124 
  • lang/cplusplus/llv8call/trunk/ext/libxml/element.cc

    r20882 r20947  
    5656        return Undefined(); 
    5757    } else { 
    58         return createAttr(ret); 
     58        return createAttr(doc, ret); 
    5959    } 
    6060END 
  • lang/cplusplus/llv8call/trunk/ext/libxml/libxml.h

    r20881 r20947  
    4949} 
    5050 
    51 static inline Handle<Object> createAttr(xmlAttrPtr attr_raw) { 
    52     Handle<Value> consarg[1]; 
     51static inline Handle<Object> createAttr(xmlDocPtr doc, xmlAttrPtr attr_raw) { 
     52    Handle<Value> consarg[2]; 
    5353    consarg[0] = External::New(attr_raw); 
    54     return attr_class()->NewInstance(1, consarg); 
     54    consarg[1] = External::New(doc); 
     55    return attr_class()->NewInstance(2, consarg); 
    5556} 
    5657 
  • lang/cplusplus/llv8call/trunk/ext/libxml/node.h

    r20881 r20947  
    173173END 
    174174 
     175FUNCTION(getValue) 
     176    ARG_COUNT(0); 
     177    EXTERNAL_NODE(); 
     178    xmlChar * content = domGetNodeValue(node); 
     179    if (content) { 
     180        Handle<String> s = String::New((const char*)content); 
     181        xmlFree(content); 
     182        return s; 
     183    } else { 
     184        return Undefined(); 
     185    } 
     186END 
     187 
    175188static inline void setupNodeIM(Handle<ObjectTemplate> OBJECT_TEMPLATE) { 
    176189    BIND_IM("nodeName",            nodeName); 
  • lang/cplusplus/llv8call/trunk/t/070_libxml/02_dom.js

    r20882 r20947  
    11require('t/util.js'); 
    22 
    3 plan({tests:19}); 
     3plan({tests:22}); 
    44 
    55check_lib("org.coderepos.libxml"); 
     
    9494 
    9595test(function () { 
    96     root.setAttributeNode(doc.createAttribute("foo", "bar")); 
    97     is(root.toString(),  '<foo foo="bar"/>', 'node.createAttribute()'); 
     96    var attr = doc.createAttribute("foo", "bar"); 
     97    is(attr.getValue(),  'bar', 'attr.getValue()'); 
     98    is(attr.value(),     'bar', 'attr.value()'); 
     99    attr.setValue("baz"); 
     100    root.setAttributeNode(attr); 
     101    is(root.toString(),  '<foo foo="baz"/>',               'doc.createAttribute()'); 
     102    is(attr.getOwnerElement().toString(), root.toString(), "attr.getOwnerElement"); 
    98103}); 
    99104