~ubuntu-branches/debian/sid/libembperl-perl/sid

« back to all changes in this revision

Viewing changes to DOM.xs

  • Committer: Bazaar Package Importer
  • Author(s): Angus Lees
  • Date: 2004-02-15 14:23:39 UTC
  • Revision ID: james.westby@ubuntu.com-20040215142339-n21gqf7mx9tmyb8d
Tags: upstream-2.0b10
ImportĀ upstreamĀ versionĀ 2.0b10

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
###################################################################################
 
2
#
 
3
#   Embperl - Copyright (c) 1997-2004 Gerald Richter / ECOS
 
4
#
 
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.
 
8
#
 
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.
 
12
#
 
13
#   $Id: DOM.xs,v 1.9 2004/01/23 06:50:54 richter Exp $
 
14
#
 
15
###################################################################################
 
16
 
 
17
 
 
18
 
 
19
MODULE = XML::Embperl::DOM      PACKAGE = XML::Embperl::DOM     PREFIX = embperl_
 
20
 
 
21
 
 
22
################################################################################
 
23
 
 
24
MODULE = XML::Embperl::DOM      PACKAGE = XML::Embperl::DOM::Node     PREFIX = embperl_Node_
 
25
 
 
26
void
 
27
embperl_Node_attach (pRV,xDomTree,xNode)
 
28
    SV * pRV ;
 
29
    int  xDomTree
 
30
    int  xNode
 
31
CODE:
 
32
    tDomNode * pDomNode ;
 
33
    MAGIC * mg ;
 
34
    SV *    pSV = SvRV(pRV) ;
 
35
    if ((mg = mg_find (pSV, '~')))
 
36
        {
 
37
        pDomNode = (tDomNode *)(mg -> mg_ptr) ;
 
38
        if (xDomTree)
 
39
            pDomNode -> xDomTree = xDomTree ;
 
40
        if (xNode)    
 
41
            pDomNode -> xNode = xNode ;
 
42
        }    
 
43
    else
 
44
        {
 
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)) ; */
 
52
        }
 
53
    
 
54
 
 
55
 
 
56
SV *
 
57
embperl_Node_replaceChildWithCDATA (CurrApp, pDomNode,sText)
 
58
    tDomNode * pDomNode
 
59
    SV *     sText
 
60
PREINIT:
 
61
    STRLEN l ;
 
62
    char * s  ;
 
63
    tReq * r = CurrReq ;
 
64
PPCODE:
 
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) ;*/
 
72
    ST(0) = sText ;
 
73
    XSRETURN(1) ;
 
74
 
 
75
 
 
76
SV *
 
77
embperl_Node_XXiReplaceChildWithCDATA (xDomTree, xOldChild,sText)
 
78
    int xDomTree
 
79
    int xOldChild
 
80
    SV * sText
 
81
PREINIT:
 
82
    STRLEN l ;
 
83
    char * s  ;
 
84
    tReq * r = CurrReq ;
 
85
PPCODE:
 
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) ;*/
 
93
    ST(0) = sText ;
 
94
    XSRETURN(1) ;
 
95
 
 
96
 
 
97
SV *
 
98
embperl_Node_iReplaceChildWithCDATA (xOldChild,sText)
 
99
    int xOldChild
 
100
    SV * sText
 
101
PREINIT:
 
102
    STRLEN l ;
 
103
    char * s  ;
 
104
    tReq * r = CurrReq ;
 
105
PPCODE:
 
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) ;*/
 
113
    ST(0) = sText ;
 
114
    XSRETURN(1) ;
 
115
 
 
116
 
 
117
void
 
118
embperl_Node_iReplaceChildWithMsgId (xOldChild,sId)
 
119
    int xOldChild
 
120
    char * sId
 
121
PREINIT:
 
122
    STRLEN l ;
 
123
    const char * s  ;
 
124
    tReq * r = CurrReq ;
 
125
PPCODE:
 
126
    s = embperl_GetText (r, sId) ;
 
127
    l = strlen (s) ;
 
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 ;
 
131
 
 
132
 
 
133
 
 
134
SV *
 
135
embperl_Node_replaceChildWithUrlDATA (pDomNode,sText)
 
136
    tDomNode * pDomNode
 
137
    SV * sText
 
138
PREINIT:
 
139
    SV * sRet  ;
 
140
    tReq * r = CurrReq ;
 
141
PPCODE:
 
142
    RETVAL = NULL ; /* avoid warning */
 
143
    SvGETMAGIC_P4(sText) ;
 
144
    sRet = Node_replaceChildWithUrlDATA (r, pDomNode -> xDomTree, pDomNode -> xNode, r -> Component.nCurrRepeatLevel, sText) ;
 
145
 
 
146
    ST(0) = sRet ;
 
147
    XSRETURN(1) ;
 
148
 
 
149
SV *
 
150
embperl_Node_iReplaceChildWithUrlDATA (xOldChild,sText)
 
151
    int xOldChild
 
152
    SV * sText
 
153
PREINIT:
 
154
    SV * sRet  ;
 
155
    tReq * r = CurrReq ;
 
156
PPCODE:
 
157
    RETVAL = NULL ; /* avoid warning */
 
158
    SvGETMAGIC_P4(sText) ;
 
159
    sRet = Node_replaceChildWithUrlDATA (r, r -> Component.xCurrDomTree, xOldChild, r -> Component.nCurrRepeatLevel, sText) ;
 
160
 
 
161
    ST(0) = sRet ;
 
162
    XSRETURN(1) ;
 
163
 
 
164
 
 
165
void
 
166
embperl_Node_removeChild (pDomNode)
 
167
    tDomNode * pDomNode
 
168
CODE:
 
169
    Node_removeChild (CurrApp, DomTree_self (pDomNode -> xDomTree), -1, pDomNode -> xNode, 0) ;
 
170
 
 
171
 
 
172
void
 
173
embperl_Node_iRemoveChild (xDomTree, xChild)
 
174
    int xDomTree
 
175
    int xChild
 
176
CODE:
 
177
    Node_removeChild (CurrApp, DomTree_self (xDomTree), -1, xChild, 0) ;
 
178
 
 
179
 
 
180
void
 
181
embperl_Node_appendChild (pParentNode, nType, sText)
 
182
    tDomNode * pParentNode
 
183
    int nType
 
184
    SV * sText
 
185
PREINIT:
 
186
    STRLEN nText ;
 
187
    char * sT  ;
 
188
    tDomTree * pDomTree  ;
 
189
    tReq * r = CurrReq ;
 
190
CODE:
 
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) ;
 
194
 
 
195
 
 
196
void
 
197
embperl_Node_iAppendChild (xDomTree, xParent, nType, sText)
 
198
    int xDomTree
 
199
    int xParent
 
200
    int nType
 
201
    SV * sText
 
202
    tReq * r = CurrReq ;
 
203
CODE:
 
204
    STRLEN nText ;
 
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) ;
 
208
 
 
209
 
 
210
char *
 
211
embperl_Node_iChildsText (xDomTree, xChild, bDeep=0)
 
212
    int xDomTree
 
213
    int xChild
 
214
    int bDeep
 
215
PREINIT:
 
216
    char * sText ;
 
217
    tReq * r = CurrReq ;
 
218
CODE:
 
219
    sText = Node_childsText (r -> pApp, DomTree_self (xDomTree), xChild, r -> Component.nCurrRepeatLevel, 0, bDeep) ;
 
220
    RETVAL = sText?sText:"" ;
 
221
OUTPUT:
 
222
    RETVAL
 
223
CLEANUP:
 
224
    StringFree (r -> pApp, &sText) ;
 
225
 
 
226
 
 
227
void
 
228
embperl_Node_iSetText (xDomTree, xNode, sText)
 
229
    int xDomTree
 
230
    int xNode
 
231
    SV * sText
 
232
PREINIT:
 
233
    STRLEN nText ;
 
234
    char * sT ;
 
235
    tApp * a = CurrReq  -> pApp ;
 
236
    tNodeData * pNode = Node_self(DomTree_self(xDomTree), xNode) ;
 
237
CODE:
 
238
    sT = SV2String (sText, nText) ;
 
239
    if (pNode -> nText)
 
240
        NdxStringFree (a, pNode -> nText) ;
 
241
    pNode -> nText = String2Ndx (a, sT, nText) ;
 
242
 
 
243
 
 
244
 
 
245
################################################################################
 
246
 
 
247
MODULE = XML::Embperl::DOM      PACKAGE = XML::Embperl::DOM::Tree     PREFIX = embperl_DomTree_
 
248
 
 
249
void
 
250
embperl_DomTree_iCheckpoint (nCheckpoint)
 
251
    int nCheckpoint
 
252
PREINIT:
 
253
    tReq * r = CurrReq ;
 
254
CODE:
 
255
    r -> Component.nCurrEscMode = r -> Component.Config.nEscMode ;
 
256
    r -> Component.bEscModeSet = -1 ;
 
257
    DomTree_checkpoint (r, nCheckpoint) ;
 
258
 
 
259
void
 
260
embperl_DomTree_iDiscardAfterCheckpoint (nCheckpoint)
 
261
    int nCheckpoint
 
262
CODE:
 
263
    DomTree_discardAfterCheckpoint (CurrReq, nCheckpoint) ;
 
264
 
 
265
#void
 
266
#Node_parentNode (xChild)
 
267
#    int xChild
 
268
#
 
269
#void
 
270
#Node_firstChild (xChild)
 
271
#    int xChild
 
272
 
 
273
 
 
274
################################################################################
 
275
 
 
276
MODULE = XML::Embperl::DOM      PACKAGE = XML::Embperl::DOM::Element     PREFIX = embperl_Element_
 
277
 
 
278
 
 
279
void
 
280
embperl_Element_setAttribut (pDomNode, sAttr, sText)
 
281
    tDomNode * pDomNode
 
282
    SV * sAttr
 
283
    SV * sText
 
284
PREINIT:
 
285
    STRLEN nAttr ;
 
286
    STRLEN nText ;
 
287
    char * sT  ;
 
288
    char * sA  ;
 
289
    tDomTree * pDomTree ;
 
290
    tReq * r = CurrReq ;
 
291
    SV * sEscapedText ;
 
292
CODE:
 
293
    sT = SV2String (sText, nText) ;
 
294
    sA = SV2String (sAttr, nAttr) ;
 
295
 
 
296
    sEscapedText = Escape (r, sT, nText, r -> Component.nCurrEscMode, NULL, '\0') ;
 
297
    sT = SV2String (sEscapedText, nText) ;
 
298
 
 
299
    pDomTree = DomTree_self (pDomNode -> xDomTree) ;
 
300
 
 
301
    Element_selfSetAttribut (r -> pApp, pDomTree, Node_self (pDomTree, pDomNode -> xNode), r -> Component.nCurrRepeatLevel, sA, nAttr, sT, nText) ;
 
302
 
 
303
 
 
304
void
 
305
embperl_Element_iSetAttribut (xDomTree, xNode, sAttr, sText)
 
306
    int xDomTree
 
307
    int xNode
 
308
    SV * sAttr
 
309
    SV * sText
 
310
PREINIT:
 
311
    tReq * r = CurrReq ;
 
312
    SV * sEscapedText ;
 
313
    tDomTree * pDomTree ;
 
314
CODE:
 
315
    STRLEN nAttr ;
 
316
    STRLEN nText ;
 
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) ;
 
322
 
 
323
    Element_selfSetAttribut (r -> pApp, pDomTree, Node_self (pDomTree, xNode), r -> Component.nCurrRepeatLevel, sA, nAttr, sT, nText) ;
 
324
 
 
325
 
 
326
 
 
327
 
 
328
void
 
329
embperl_Element_removeAttribut (pDomNode, xNode, sAttr)
 
330
    tDomNode * pDomNode
 
331
    SV * sAttr
 
332
PREINIT:
 
333
    STRLEN nAttr ;
 
334
    char * sA  ;
 
335
    tDomTree * pDomTree ;
 
336
    tReq * r = CurrReq ;
 
337
CODE:
 
338
    sA = SV2String (sAttr, nAttr) ;
 
339
    pDomTree = DomTree_self (pDomNode -> xDomTree) ;
 
340
 
 
341
    Element_selfRemoveAttribut (r -> pApp, pDomTree, Node_self (pDomTree, pDomNode -> xNode), r -> Component.nCurrRepeatLevel, sA, nAttr) ;
 
342
 
 
343
 
 
344
void
 
345
embperl_Element_iRemoveAttribut (xDomTree, xNode, sAttr)
 
346
    int xDomTree
 
347
    int xNode
 
348
    SV * sAttr
 
349
PREINIT:
 
350
    tReq * r = CurrReq ;
 
351
CODE:
 
352
    STRLEN nAttr ;
 
353
    char * sA = SV2String (sAttr, nAttr) ;
 
354
    tDomTree * pDomTree = DomTree_self (xDomTree) ;
 
355
 
 
356
    Element_selfRemoveAttribut (r -> pApp, pDomTree, Node_self (pDomTree, xNode), r -> Component.nCurrRepeatLevel, sA, nAttr) ;
 
357
 
 
358
 
 
359
################################################################################
 
360
 
 
361
MODULE = XML::Embperl::DOM      PACKAGE = XML::Embperl::DOM::Attr     PREFIX = embperl_Attr_
 
362
 
 
363
 
 
364
 
 
365
SV *
 
366
embperl_Attr_value (pAttr)
 
367
    tDomNode * pAttr
 
368
PREINIT:
 
369
    tDomTree * pDomTree  ;
 
370
    char * sAttrText = NULL ;
 
371
    tReq * r = CurrReq ;
 
372
CODE:
 
373
    pDomTree = DomTree_self (pAttr -> xDomTree) ;
 
374
 
 
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) ;
 
378
OUTPUT:
 
379
    RETVAL
 
380
 
 
381
 
 
382
SV *
 
383
embperl_Attr_iValue (xDomTree, xAttr)
 
384
    int xDomTree
 
385
    int xAttr
 
386
PREINIT:
 
387
    tReq * r = CurrReq ;
 
388
CODE:
 
389
    tDomTree * pDomTree = DomTree_self (xDomTree) ;
 
390
    char * sAttrText = NULL ;
 
391
    tAttrData * pAttr  ;
 
392
    
 
393
    /* lprintf (CurrReq, "xDomTree=%d, xAttr=%d pDomTree=%x\n", xDomTree, xAttr, pDomTree) ;*/
 
394
    
 
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) ;
 
399
OUTPUT:
 
400
    RETVAL
 
401