root/lang/cplusplus/llv8call/trunk/ext/libxml/node.cc @ 20852

Revision 20852, 4.3 kB (checked in by tokuhirom, 5 years ago)

added node.removeChild

Line 
1// The MIT License
2//
3// Copyright (c) 2008 Tokuhiro Matsuno
4//
5// Permission is hereby granted, free of charge, to any person obtaining a copy
6// of this software and associated documentation files (the "Software"), to deal
7// in the Software without restriction, including without limitation the rights
8// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9// copies of the Software, and to permit persons to whom the Software is
10// furnished to do so, subject to the following conditions:
11//
12// The above copyright notice and this permission notice shall be included in
13// all copies or substantial portions of the Software.
14//
15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21// THE SOFTWARE.
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#define ARG_node(name, n) EXTERNAL(xmlNodePtr, name, args[n]->ToObject(), 0)
28
29FUNCTION(_new)
30    ARG_COUNT(2);
31    assert(args[0]->IsExternal());
32    assert(args[1]->IsExternal());
33    args.This()->SetInternalField(0, args[0]);
34    args.This()->SetInternalField(1, args[1]);
35    return args.This();
36END
37
38FUNCTION(nodeName)
39    ARG_COUNT(0);
40    EXTERNAL_NODE();
41    return String::New((char*)domName(node));
42END
43
44FUNCTION(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;
73END
74
75FUNCTION(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 );
82END
83
84FUNCTION(removeChild)
85    ARG_BETWEEN(0, 1);
86    EXTERNAL_NODE();
87    EXTERNAL_DOC();
88    ARG_node(argnode, 0);
89    xmlNodePtr rNode = domRemoveChild( node, argnode );
90    return createNode( doc, rNode );
91END
92
93SUBMODULE(init_node)
94    CLASS_WITH_CONSTRUCTOR(_new);
95    BIND_IM("nodeName",       nodeName);
96    BIND_IM("toString",       toString);
97    BIND_IM("appendChild",    appendChild);
98    BIND_IM("removeChild",    removeChild);
99    INTERNALCOUNT(2);
100    EXPORT_CLASS("Node");
101ENDSUBMODULE
102
103// REST: 3/50
104// TODO: node.setNodeName
105// TODO: node.isSameNode
106// TODO: node.isEqual
107// TODO: node.nodeValue
108// TODO: node.textContent
109// TODO: node.nodeType
110// TODO: node.unbindNode
111// TODO: node.removeChild
112// TODO: node.replaceChild
113// TODO: node.replaceNode
114// TODO: node.addChild
115// TODO: node.addNewChild
116// TODO: node.addSibling
117// TODO: node.cloneNode
118// TODO: node.parentNode
119// TODO: node.nextSibling
120// TODO: node.previousSibling
121// TODO: node.hasChildNodes
122// TODO: node.firstChild
123// TODO: node.lastChild
124// TODO: node.ownerDocument
125// TODO: node.getOwner
126// TODO: node.setOwnerDocument
127// TODO: node.insertBefore
128// TODO: node.insertAfter
129// TODO: node.findnodes
130// TODO: node.find
131// TODO: node.findvalue
132// TODO: node.childNodes
133// TODO: node.toStringC14N
134// TODO: node.toStringEC14N
135// TODO: node.serialize
136// TODO: node.serialize_c14n
137// TODO: node.serialize_exc_c14n
138// TODO: node.localname
139// TODO: node.prefix
140// TODO: node.namespaceURI
141// TODO: node.hasAttributes
142// TODO: node.attributes
143// TODO: node.lookupNamespaceURI
144// TODO: node.lookupNamespacePrefix
145// TODO: node.iterator
146// TODO: node.normalize
147// TODO: node.getNamespaces
148// TODO: node.removeChildNodes
149// TODO: node.nodePath
150// TODO: node.line_number
151
Note: See TracBrowser for help on using the browser.