1
###################################################################################
3
# Embperl - Copyright (c) 1997-2004 Gerald Richter / ECOS
5
# You may distribute under the terms of either the GNU General Public
6
# License or the Artistic License, as specified in the Perl README file.
7
# For use with Apache httpd and mod_perl, see also Apache copyright.
9
# THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
10
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
11
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13
# $Id: DOM.xs,v 1.9 2004/01/23 06:50:54 richter Exp $
15
###################################################################################
19
MODULE = XML::Embperl::DOM PACKAGE = XML::Embperl::DOM PREFIX = embperl_
22
################################################################################
24
MODULE = XML::Embperl::DOM PACKAGE = XML::Embperl::DOM::Node PREFIX = embperl_Node_
27
embperl_Node_attach (pRV,xDomTree,xNode)
34
SV * pSV = SvRV(pRV) ;
35
if ((mg = mg_find (pSV, '~')))
37
pDomNode = (tDomNode *)(mg -> mg_ptr) ;
39
pDomNode -> xDomTree = xDomTree ;
41
pDomNode -> xNode = xNode ;
45
Newc (0, pDomNode, 1, sizeof (tDomNode), tDomNode) ;
46
pDomNode -> xDomTree = xDomTree ;
47
pDomNode -> xNode = xNode ;
48
pDomNode -> pDomNodeSV = pRV ;
49
/* sv_unmagic ((SV *)pSV, '~') ; */
50
sv_magic ((SV *)pSV, NULL, '~', (char *)&pDomNode, sizeof (pDomNode)) ;
51
/* sv_bless (pRV, gv_stashpv ("XML::Embperl::DOM::Node", 0)) ; */
57
embperl_Node_replaceChildWithCDATA (CurrApp, pDomNode,sText)
65
RETVAL = NULL ; /* avoid warning */
66
SvGETMAGIC_P4(sText) ;
67
s = SV2String (sText, l) ;
68
Node_replaceChildWithCDATA (CurrApp, DomTree_self(pDomNode -> xDomTree), pDomNode -> xNode, r -> Component.nCurrRepeatLevel, s, l, (r -> Component.nCurrEscMode & 11)== 3?1 + (r -> Component.nCurrEscMode & 4):r -> Component.nCurrEscMode, 0) ;
69
r -> Component.nCurrEscMode = r -> Component.Config.nEscMode ;
70
r -> Component.bEscModeSet = -1 ;
71
/*SvREFCNT_inc (sText) ;*/
77
embperl_Node_XXiReplaceChildWithCDATA (xDomTree, xOldChild,sText)
86
RETVAL = NULL ; /* avoid warning */
87
SvGETMAGIC_P4(sText) ;
88
s = SV2String (sText, l) ;
89
Node_replaceChildWithCDATA (CurrApp, DomTree_self(xDomTree), xOldChild, r -> Component.nCurrRepeatLevel, s, l, (r -> Component.nCurrEscMode & 11)== 3?1 + (r -> Component.nCurrEscMode & 4):r -> Component.nCurrEscMode, 0) ;
90
r -> Component.nCurrEscMode = r -> Component.Config.nEscMode ;
91
r -> Component.bEscModeSet = -1 ;
92
/*SvREFCNT_inc (sText) ;*/
98
embperl_Node_iReplaceChildWithCDATA (xOldChild,sText)
106
RETVAL = NULL ; /* avoid warning */
107
SvGETMAGIC_P4(sText) ;
108
s = SV2String (sText, l) ;
109
Node_replaceChildWithCDATA (r -> pApp, DomTree_self(r -> Component.xCurrDomTree), xOldChild, r -> Component.nCurrRepeatLevel, s, l, (r -> Component.nCurrEscMode & 11)== 3?1 + (r -> Component.nCurrEscMode & 4):r -> Component.nCurrEscMode, 0) ;
110
r -> Component.nCurrEscMode = r -> Component.Config.nEscMode ;
111
r -> Component.bEscModeSet = -1 ;
112
/*SvREFCNT_inc (sText) ;*/
118
embperl_Node_iReplaceChildWithMsgId (xOldChild,sId)
126
s = embperl_GetText (r, sId) ;
128
Node_replaceChildWithCDATA (r -> pApp, DomTree_self(r -> Component.xCurrDomTree), xOldChild, r -> Component.nCurrRepeatLevel, s, l, (r -> Component.nCurrEscMode & 11)== 3?1 + (r -> Component.nCurrEscMode & 4):r -> Component.nCurrEscMode, 0) ;
129
r -> Component.nCurrEscMode = r -> Component.Config.nEscMode ;
130
r -> Component.bEscModeSet = -1 ;
135
embperl_Node_replaceChildWithUrlDATA (pDomNode,sText)
142
RETVAL = NULL ; /* avoid warning */
143
SvGETMAGIC_P4(sText) ;
144
sRet = Node_replaceChildWithUrlDATA (r, pDomNode -> xDomTree, pDomNode -> xNode, r -> Component.nCurrRepeatLevel, sText) ;
150
embperl_Node_iReplaceChildWithUrlDATA (xOldChild,sText)
157
RETVAL = NULL ; /* avoid warning */
158
SvGETMAGIC_P4(sText) ;
159
sRet = Node_replaceChildWithUrlDATA (r, r -> Component.xCurrDomTree, xOldChild, r -> Component.nCurrRepeatLevel, sText) ;
166
embperl_Node_removeChild (pDomNode)
169
Node_removeChild (CurrApp, DomTree_self (pDomNode -> xDomTree), -1, pDomNode -> xNode, 0) ;
173
embperl_Node_iRemoveChild (xDomTree, xChild)
177
Node_removeChild (CurrApp, DomTree_self (xDomTree), -1, xChild, 0) ;
181
embperl_Node_appendChild (pParentNode, nType, sText)
182
tDomNode * pParentNode
188
tDomTree * pDomTree ;
191
sT = SV2String (sText, nText) ;
192
pDomTree = DomTree_self(pParentNode -> xDomTree) ;
193
Node_appendChild (r -> pApp, pDomTree, pParentNode -> xNode, r -> Component.nCurrRepeatLevel, (tNodeType)nType, 0, sT, nText, 0, 0, NULL) ;
197
embperl_Node_iAppendChild (xDomTree, xParent, nType, sText)
205
char * sT = SV2String (sText, nText) ;
206
tDomTree * pDomTree = DomTree_self(xDomTree) ;
207
Node_appendChild (r -> pApp, pDomTree, xParent, r -> Component.nCurrRepeatLevel, (tNodeType)nType, 0, sT, nText, 0, 0, NULL) ;
211
embperl_Node_iChildsText (xDomTree, xChild, bDeep=0)
219
sText = Node_childsText (r -> pApp, DomTree_self (xDomTree), xChild, r -> Component.nCurrRepeatLevel, 0, bDeep) ;
220
RETVAL = sText?sText:"" ;
224
StringFree (r -> pApp, &sText) ;
228
embperl_Node_iSetText (xDomTree, xNode, sText)
235
tApp * a = CurrReq -> pApp ;
236
tNodeData * pNode = Node_self(DomTree_self(xDomTree), xNode) ;
238
sT = SV2String (sText, nText) ;
240
NdxStringFree (a, pNode -> nText) ;
241
pNode -> nText = String2Ndx (a, sT, nText) ;
245
################################################################################
247
MODULE = XML::Embperl::DOM PACKAGE = XML::Embperl::DOM::Tree PREFIX = embperl_DomTree_
250
embperl_DomTree_iCheckpoint (nCheckpoint)
255
r -> Component.nCurrEscMode = r -> Component.Config.nEscMode ;
256
r -> Component.bEscModeSet = -1 ;
257
DomTree_checkpoint (r, nCheckpoint) ;
260
embperl_DomTree_iDiscardAfterCheckpoint (nCheckpoint)
263
DomTree_discardAfterCheckpoint (CurrReq, nCheckpoint) ;
266
#Node_parentNode (xChild)
270
#Node_firstChild (xChild)
274
################################################################################
276
MODULE = XML::Embperl::DOM PACKAGE = XML::Embperl::DOM::Element PREFIX = embperl_Element_
280
embperl_Element_setAttribut (pDomNode, sAttr, sText)
289
tDomTree * pDomTree ;
293
sT = SV2String (sText, nText) ;
294
sA = SV2String (sAttr, nAttr) ;
296
sEscapedText = Escape (r, sT, nText, r -> Component.nCurrEscMode, NULL, '\0') ;
297
sT = SV2String (sEscapedText, nText) ;
299
pDomTree = DomTree_self (pDomNode -> xDomTree) ;
301
Element_selfSetAttribut (r -> pApp, pDomTree, Node_self (pDomTree, pDomNode -> xNode), r -> Component.nCurrRepeatLevel, sA, nAttr, sT, nText) ;
305
embperl_Element_iSetAttribut (xDomTree, xNode, sAttr, sText)
313
tDomTree * pDomTree ;
317
char * sT = SV2String (sText, nText) ;
318
char * sA = SV2String (sAttr, nAttr) ;
319
sEscapedText = Escape (r, sT, nText, r -> Component.nCurrEscMode, NULL, '\0') ;
320
sT = SV2String (sEscapedText, nText) ;
321
pDomTree = DomTree_self (xDomTree) ;
323
Element_selfSetAttribut (r -> pApp, pDomTree, Node_self (pDomTree, xNode), r -> Component.nCurrRepeatLevel, sA, nAttr, sT, nText) ;
329
embperl_Element_removeAttribut (pDomNode, xNode, sAttr)
335
tDomTree * pDomTree ;
338
sA = SV2String (sAttr, nAttr) ;
339
pDomTree = DomTree_self (pDomNode -> xDomTree) ;
341
Element_selfRemoveAttribut (r -> pApp, pDomTree, Node_self (pDomTree, pDomNode -> xNode), r -> Component.nCurrRepeatLevel, sA, nAttr) ;
345
embperl_Element_iRemoveAttribut (xDomTree, xNode, sAttr)
353
char * sA = SV2String (sAttr, nAttr) ;
354
tDomTree * pDomTree = DomTree_self (xDomTree) ;
356
Element_selfRemoveAttribut (r -> pApp, pDomTree, Node_self (pDomTree, xNode), r -> Component.nCurrRepeatLevel, sA, nAttr) ;
359
################################################################################
361
MODULE = XML::Embperl::DOM PACKAGE = XML::Embperl::DOM::Attr PREFIX = embperl_Attr_
366
embperl_Attr_value (pAttr)
369
tDomTree * pDomTree ;
370
char * sAttrText = NULL ;
373
pDomTree = DomTree_self (pAttr -> xDomTree) ;
375
Attr_selfValue (r -> pApp, pDomTree, Attr_self(pDomTree, pAttr -> xNode), r -> Component.nCurrRepeatLevel, &sAttrText) ;
376
RETVAL = sAttrText?newSVpv (sAttrText, 0):&sv_undef ;
377
StringFree (r -> pApp, &sAttrText) ;
383
embperl_Attr_iValue (xDomTree, xAttr)
389
tDomTree * pDomTree = DomTree_self (xDomTree) ;
390
char * sAttrText = NULL ;
393
/* lprintf (CurrReq, "xDomTree=%d, xAttr=%d pDomTree=%x\n", xDomTree, xAttr, pDomTree) ;*/
395
pAttr = Attr_self(pDomTree, xAttr) ;
396
Attr_selfValue (r -> pApp, pDomTree, pAttr , r -> Component.nCurrRepeatLevel, &sAttrText) ;
397
RETVAL = sAttrText?newSVpv (sAttrText, 0):&sv_undef ;
398
StringFree (r -> pApp, &sAttrText) ;