annotate Modules/_elementtree.c @ 51271:87fbbf22adf3 3.0

Merged revisions 69214 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r69214 | mark.dickinson | 2009-02-02 20:36:42 +0000 (Mon, 02 Feb 2009) | 4 lines Issue #1717: rename tp_compare to tp_reserved. I'll change the type of tp_compare in a separate commit, for ease of reversion should things go wrong. ........
author Mark Dickinson <dickinsm@gmail.com>
date Mon, 02 Feb 2009 20:41:29 +0000
parents e9675d72e3e3
children 911df82bc25d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1 /*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2 * ElementTree
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
3 * $Id: _elementtree.c 2657 2006-03-12 20:50:32Z fredrik $
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
4 *
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
5 * elementtree accelerator
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
6 *
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
7 * History:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
8 * 1999-06-20 fl created (as part of sgmlop)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
9 * 2001-05-29 fl effdom edition
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
10 * 2001-06-05 fl backported to unix; fixed bogus free in clear
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
11 * 2001-07-10 fl added findall helper
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
12 * 2003-02-27 fl elementtree edition (alpha)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
13 * 2004-06-03 fl updates for elementtree 1.2
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
14 * 2005-01-05 fl added universal name cache, Element/SubElement factories
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
15 * 2005-01-06 fl moved python helpers into C module; removed 1.5.2 support
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
16 * 2005-01-07 fl added 2.1 support; work around broken __copy__ in 2.3
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
17 * 2005-01-08 fl added makeelement method; fixed path support
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
18 * 2005-01-10 fl optimized memory usage
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
19 * 2005-01-11 fl first public release (cElementTree 0.8)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
20 * 2005-01-12 fl split element object into base and extras
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
21 * 2005-01-13 fl use tagged pointers for tail/text (cElementTree 0.9)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
22 * 2005-01-17 fl added treebuilder close method
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
23 * 2005-01-17 fl fixed crash in getchildren
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
24 * 2005-01-18 fl removed observer api, added iterparse (cElementTree 0.9.3)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
25 * 2005-01-23 fl revised iterparse api; added namespace event support (0.9.8)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
26 * 2005-01-26 fl added VERSION module property (cElementTree 1.0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
27 * 2005-01-28 fl added remove method (1.0.1)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
28 * 2005-03-01 fl added iselement function; fixed makeelement aliasing (1.0.2)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
29 * 2005-03-13 fl export Comment and ProcessingInstruction/PI helpers
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
30 * 2005-03-26 fl added Comment and PI support to XMLParser
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
31 * 2005-03-27 fl event optimizations; complain about bogus events
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
32 * 2005-08-08 fl fixed read error handling in parse
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
33 * 2005-08-11 fl added runtime test for copy workaround (1.0.3)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
34 * 2005-12-13 fl added expat_capi support (for xml.etree) (1.0.4)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
35 * 2005-12-16 fl added support for non-standard encodings
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
36 * 2006-03-08 fl fixed a couple of potential null-refs and leaks
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
37 * 2006-03-12 fl merge in 2.5 ssize_t changes
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
38 *
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
39 * Copyright (c) 1999-2006 by Secret Labs AB. All rights reserved.
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
40 * Copyright (c) 1999-2006 by Fredrik Lundh.
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
41 *
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
42 * info@pythonware.com
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
43 * http://www.pythonware.com
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
44 */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
45
36051
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
46 /* Licensed to PSF under a Contributor Agreement. */
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
47 /* See http://www.python.org/2.4/license for licensing details. */
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
48
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
49 #include "Python.h"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
50
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
51 #define VERSION "1.0.6"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
52
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
53 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
54 /* configuration */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
55
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
56 /* Leave defined to include the expat-based XMLParser type */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
57 #define USE_EXPAT
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
58
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
59 /* Define to to all expat calls via pyexpat's embedded expat library */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
60 /* #define USE_PYEXPAT_CAPI */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
61
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
62 /* An element can hold this many children without extra memory
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
63 allocations. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
64 #define STATIC_CHILDREN 4
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
65
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
66 /* For best performance, chose a value so that 80-90% of all nodes
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
67 have no more than the given number of children. Set this to zero
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
68 to minimize the size of the element structure itself (this only
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
69 helps if you have lots of leaf nodes with attributes). */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
70
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
71 /* Also note that pymalloc always allocates blocks in multiples of
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
72 eight bytes. For the current version of cElementTree, this means
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
73 that the number of children should be an even number, at least on
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
74 32-bit platforms. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
75
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
76 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
77
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
78 #if 0
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
79 static int memory = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
80 #define ALLOC(size, comment)\
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
81 do { memory += size; printf("%8d - %s\n", memory, comment); } while (0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
82 #define RELEASE(size, comment)\
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
83 do { memory -= size; printf("%8d - %s\n", memory, comment); } while (0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
84 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
85 #define ALLOC(size, comment)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
86 #define RELEASE(size, comment)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
87 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
88
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
89 /* compiler tweaks */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
90 #if defined(_MSC_VER)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
91 #define LOCAL(type) static __inline type __fastcall
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
92 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
93 #define LOCAL(type) static type
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
94 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
95
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
96 /* macros used to store 'join' flags in string object pointers. note
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
97 that all use of text and tail as object pointers must be wrapped in
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
98 JOIN_OBJ. see comments in the ElementObject definition for more
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
99 info. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
100 #define JOIN_GET(p) ((Py_uintptr_t) (p) & 1)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
101 #define JOIN_SET(p, flag) ((void*) ((Py_uintptr_t) (JOIN_OBJ(p)) | (flag)))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
102 #define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~1))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
103
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
104 /* glue functions (see the init function for details) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
105 static PyObject* elementtree_copyelement_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
106 static PyObject* elementtree_deepcopy_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
107 static PyObject* elementtree_getiterator_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
108 static PyObject* elementpath_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
109
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
110 /* helpers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
111
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
112 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
113 deepcopy(PyObject* object, PyObject* memo)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
114 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
115 /* do a deep copy of the given object */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
116
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
117 PyObject* args;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
118 PyObject* result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
119
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
120 if (!elementtree_deepcopy_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
121 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
122 PyExc_RuntimeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
123 "deepcopy helper not found"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
124 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
125 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
126 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
127
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
128 args = PyTuple_New(2);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
129 if (!args)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
130 return NULL;
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
131
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
132 Py_INCREF(object); PyTuple_SET_ITEM(args, 0, (PyObject*) object);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
133 Py_INCREF(memo); PyTuple_SET_ITEM(args, 1, (PyObject*) memo);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
134
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
135 result = PyObject_CallObject(elementtree_deepcopy_obj, args);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
136
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
137 Py_DECREF(args);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
138
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
139 return result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
140 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
141
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
142 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
143 list_join(PyObject* list)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
144 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
145 /* join list elements (destroying the list in the process) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
146
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
147 PyObject* joiner;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
148 PyObject* function;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
149 PyObject* args;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
150 PyObject* result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
151
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
152 switch (PyList_GET_SIZE(list)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
153 case 0:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
154 Py_DECREF(list);
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
155 return PyBytes_FromString("");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
156 case 1:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
157 result = PyList_GET_ITEM(list, 0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
158 Py_INCREF(result);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
159 Py_DECREF(list);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
160 return result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
161 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
162
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
163 /* two or more elements: slice out a suitable separator from the
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
164 first member, and use that to join the entire list */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
165
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
166 joiner = PySequence_GetSlice(PyList_GET_ITEM(list, 0), 0, 0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
167 if (!joiner)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
168 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
169
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
170 function = PyObject_GetAttrString(joiner, "join");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
171 if (!function) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
172 Py_DECREF(joiner);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
173 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
174 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
175
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
176 args = PyTuple_New(1);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
177 if (!args)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
178 return NULL;
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
179
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
180 PyTuple_SET_ITEM(args, 0, list);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
181
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
182 result = PyObject_CallObject(function, args);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
183
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
184 Py_DECREF(args); /* also removes list */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
185 Py_DECREF(function);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
186 Py_DECREF(joiner);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
187
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
188 return result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
189 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
190
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
191 #if (PY_VERSION_HEX < 0x02020000)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
192 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
193 PyDict_Update(PyObject* dict, PyObject* other)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
194 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
195 /* PyDict_Update emulation for 2.1 and earlier */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
196
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
197 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
198
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
199 res = PyObject_CallMethod(dict, "update", "O", other);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
200 if (!res)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
201 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
202
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
203 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
204 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
205 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
206 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
207
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
208 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
209 /* the element type */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
210
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
211 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
212
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
213 /* attributes (a dictionary object), or None if no attributes */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
214 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
215
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
216 /* child elements */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
217 int length; /* actual number of items */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
218 int allocated; /* allocated items */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
219
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
220 /* this either points to _children or to a malloced buffer */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
221 PyObject* *children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
222
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
223 PyObject* _children[STATIC_CHILDREN];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
224
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
225 } ElementObjectExtra;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
226
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
227 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
228 PyObject_HEAD
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
229
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
230 /* element tag (a string). */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
231 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
232
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
233 /* text before first child. note that this is a tagged pointer;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
234 use JOIN_OBJ to get the object pointer. the join flag is used
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
235 to distinguish lists created by the tree builder from lists
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
236 assigned to the attribute by application code; the former
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
237 should be joined before being returned to the user, the latter
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
238 should be left intact. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
239 PyObject* text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
240
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
241 /* text after this element, in parent. note that this is a tagged
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
242 pointer; use JOIN_OBJ to get the object pointer. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
243 PyObject* tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
244
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
245 ElementObjectExtra* extra;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
246
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
247 } ElementObject;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
248
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
249 static PyTypeObject Element_Type;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
250
44351
86a2679dca46 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents: 44099
diff changeset
251 #define Element_CheckExact(op) (Py_TYPE(op) == &Element_Type)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
252
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
253 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
254 /* element constructor and destructor */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
255
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
256 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
257 element_new_extra(ElementObject* self, PyObject* attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
258 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
259 self->extra = PyObject_Malloc(sizeof(ElementObjectExtra));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
260 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
261 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
262
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
263 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
264 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
265
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
266 Py_INCREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
267 self->extra->attrib = attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
268
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
269 self->extra->length = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
270 self->extra->allocated = STATIC_CHILDREN;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
271 self->extra->children = self->extra->_children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
272
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
273 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
274 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
275
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
276 LOCAL(void)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
277 element_dealloc_extra(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
278 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
279 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
280
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
281 Py_DECREF(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
282
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
283 for (i = 0; i < self->extra->length; i++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
284 Py_DECREF(self->extra->children[i]);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
285
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
286 if (self->extra->children != self->extra->_children)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
287 PyObject_Free(self->extra->children);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
288
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
289 PyObject_Free(self->extra);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
290 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
291
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
292 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
293 element_new(PyObject* tag, PyObject* attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
294 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
295 ElementObject* self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
296
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
297 self = PyObject_New(ElementObject, &Element_Type);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
298 if (self == NULL)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
299 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
300
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
301 /* use None for empty dictionaries */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
302 if (PyDict_CheckExact(attrib) && !PyDict_Size(attrib))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
303 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
304
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
305 self->extra = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
306
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
307 if (attrib != Py_None) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
308
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37144
diff changeset
309 if (element_new_extra(self, attrib) < 0) {
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37144
diff changeset
310 PyObject_Del(self);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
311 return NULL;
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37144
diff changeset
312 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
313
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
314 self->extra->length = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
315 self->extra->allocated = STATIC_CHILDREN;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
316 self->extra->children = self->extra->_children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
317
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
318 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
319
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
320 Py_INCREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
321 self->tag = tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
322
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
323 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
324 self->text = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
325
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
326 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
327 self->tail = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
328
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
329 ALLOC(sizeof(ElementObject), "create element");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
330
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
331 return (PyObject*) self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
332 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
333
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
334 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
335 element_resize(ElementObject* self, int extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
336 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
337 int size;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
338 PyObject* *children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
339
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
340 /* make sure self->children can hold the given number of extra
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
341 elements. set an exception and return -1 if allocation failed */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
342
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
343 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
344 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
345
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
346 size = self->extra->length + extra;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
347
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
348 if (size > self->extra->allocated) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
349 /* use Python 2.4's list growth strategy */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
350 size = (size >> 3) + (size < 9 ? 3 : 6) + size;
44742
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
351 /* Coverity CID #182 size_error: Allocating 1 bytes to pointer "children"
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
352 * which needs at least 4 bytes.
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
353 * Although it's a false alarm always assume at least one child to
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
354 * be safe.
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
355 */
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
356 size = size ? size : 1;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
357 if (self->extra->children != self->extra->_children) {
44742
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
358 /* Coverity CID #182 size_error: Allocating 1 bytes to pointer
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
359 * "children", which needs at least 4 bytes. Although it's a
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
360 * false alarm always assume at least one child to be safe.
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
361 */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
362 children = PyObject_Realloc(self->extra->children,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
363 size * sizeof(PyObject*));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
364 if (!children)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
365 goto nomemory;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
366 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
367 children = PyObject_Malloc(size * sizeof(PyObject*));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
368 if (!children)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
369 goto nomemory;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
370 /* copy existing children from static area to malloc buffer */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
371 memcpy(children, self->extra->children,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
372 self->extra->length * sizeof(PyObject*));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
373 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
374 self->extra->children = children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
375 self->extra->allocated = size;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
376 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
377
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
378 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
379
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
380 nomemory:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
381 PyErr_NoMemory();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
382 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
383 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
384
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
385 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
386 element_add_subelement(ElementObject* self, PyObject* element)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
387 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
388 /* add a child element to a parent */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
389
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
390 if (element_resize(self, 1) < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
391 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
392
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
393 Py_INCREF(element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
394 self->extra->children[self->extra->length] = element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
395
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
396 self->extra->length++;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
397
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
398 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
399 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
400
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
401 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
402 element_get_attrib(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
403 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
404 /* return borrowed reference to attrib dictionary */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
405 /* note: this function assumes that the extra section exists */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
406
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
407 PyObject* res = self->extra->attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
408
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
409 if (res == Py_None) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
410 /* create missing dictionary */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
411 res = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
412 if (!res)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
413 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
414 self->extra->attrib = res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
415 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
416
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
417 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
418 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
419
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
420 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
421 element_get_text(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
422 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
423 /* return borrowed reference to text attribute */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
424
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
425 PyObject* res = self->text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
426
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
427 if (JOIN_GET(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
428 res = JOIN_OBJ(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
429 if (PyList_CheckExact(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
430 res = list_join(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
431 if (!res)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
432 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
433 self->text = res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
434 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
435 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
436
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
437 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
438 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
439
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
440 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
441 element_get_tail(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
442 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
443 /* return borrowed reference to text attribute */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
444
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
445 PyObject* res = self->tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
446
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
447 if (JOIN_GET(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
448 res = JOIN_OBJ(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
449 if (PyList_CheckExact(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
450 res = list_join(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
451 if (!res)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
452 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
453 self->tail = res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
454 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
455 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
456
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
457 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
458 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
459
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
460 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
461 element(PyObject* self, PyObject* args, PyObject* kw)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
462 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
463 PyObject* elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
464
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
465 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
466 PyObject* attrib = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
467 if (!PyArg_ParseTuple(args, "O|O!:Element", &tag,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
468 &PyDict_Type, &attrib))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
469 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
470
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
471 if (attrib || kw) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
472 attrib = (attrib) ? PyDict_Copy(attrib) : PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
473 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
474 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
475 if (kw)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
476 PyDict_Update(attrib, kw);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
477 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
478 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
479 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
480 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
481
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
482 elem = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
483
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
484 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
485
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
486 return elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
487 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
488
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
489 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
490 subelement(PyObject* self, PyObject* args, PyObject* kw)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
491 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
492 PyObject* elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
493
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
494 ElementObject* parent;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
495 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
496 PyObject* attrib = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
497 if (!PyArg_ParseTuple(args, "O!O|O!:SubElement",
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
498 &Element_Type, &parent, &tag,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
499 &PyDict_Type, &attrib))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
500 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
501
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
502 if (attrib || kw) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
503 attrib = (attrib) ? PyDict_Copy(attrib) : PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
504 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
505 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
506 if (kw)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
507 PyDict_Update(attrib, kw);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
508 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
509 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
510 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
511 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
512
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
513 elem = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
514
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
515 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
516
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
517 if (element_add_subelement(parent, elem) < 0) {
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
518 Py_DECREF(elem);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
519 return NULL;
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
520 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
521
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
522 return elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
523 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
524
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
525 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
526 element_dealloc(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
527 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
528 if (self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
529 element_dealloc_extra(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
530
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
531 /* discard attributes */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
532 Py_DECREF(self->tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
533 Py_DECREF(JOIN_OBJ(self->text));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
534 Py_DECREF(JOIN_OBJ(self->tail));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
535
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
536 RELEASE(sizeof(ElementObject), "destroy element");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
537
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
538 PyObject_Del(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
539 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
540
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
541 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
542 /* methods (in alphabetical order) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
543
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
544 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
545 element_append(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
546 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
547 PyObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
548 if (!PyArg_ParseTuple(args, "O!:append", &Element_Type, &element))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
549 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
550
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
551 if (element_add_subelement(self, element) < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
552 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
553
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
554 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
555 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
556
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
557 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
558 element_clear(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
559 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
560 if (!PyArg_ParseTuple(args, ":clear"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
561 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
562
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
563 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
564 element_dealloc_extra(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
565 self->extra = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
566 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
567
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
568 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
569 Py_DECREF(JOIN_OBJ(self->text));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
570 self->text = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
571
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
572 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
573 Py_DECREF(JOIN_OBJ(self->tail));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
574 self->tail = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
575
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
576 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
577 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
578
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
579 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
580 element_copy(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
581 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
582 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
583 ElementObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
584
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
585 if (!PyArg_ParseTuple(args, ":__copy__"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
586 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
587
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
588 element = (ElementObject*) element_new(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
589 self->tag, (self->extra) ? self->extra->attrib : Py_None
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
590 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
591 if (!element)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
592 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
593
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
594 Py_DECREF(JOIN_OBJ(element->text));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
595 element->text = self->text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
596 Py_INCREF(JOIN_OBJ(element->text));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
597
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
598 Py_DECREF(JOIN_OBJ(element->tail));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
599 element->tail = self->tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
600 Py_INCREF(JOIN_OBJ(element->tail));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
601
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
602 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
603
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
604 if (element_resize(element, self->extra->length) < 0) {
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
605 Py_DECREF(element);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
606 return NULL;
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
607 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
608
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
609 for (i = 0; i < self->extra->length; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
610 Py_INCREF(self->extra->children[i]);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
611 element->extra->children[i] = self->extra->children[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
612 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
613
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
614 element->extra->length = self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
615
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
616 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
617
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
618 return (PyObject*) element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
619 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
620
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
621 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
622 element_deepcopy(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
623 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
624 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
625 ElementObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
626 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
627 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
628 PyObject* text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
629 PyObject* tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
630 PyObject* id;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
631
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
632 PyObject* memo;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
633 if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
634 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
635
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
636 tag = deepcopy(self->tag, memo);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
637 if (!tag)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
638 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
639
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
640 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
641 attrib = deepcopy(self->extra->attrib, memo);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
642 if (!attrib) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
643 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
644 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
645 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
646 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
647 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
648 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
649 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
650
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
651 element = (ElementObject*) element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
652
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
653 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
654 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
655
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
656 if (!element)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
657 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
658
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
659 text = deepcopy(JOIN_OBJ(self->text), memo);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
660 if (!text)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
661 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
662 Py_DECREF(element->text);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
663 element->text = JOIN_SET(text, JOIN_GET(self->text));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
664
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
665 tail = deepcopy(JOIN_OBJ(self->tail), memo);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
666 if (!tail)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
667 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
668 Py_DECREF(element->tail);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
669 element->tail = JOIN_SET(tail, JOIN_GET(self->tail));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
670
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
671 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
672
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
673 if (element_resize(element, self->extra->length) < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
674 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
675
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
676 for (i = 0; i < self->extra->length; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
677 PyObject* child = deepcopy(self->extra->children[i], memo);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
678 if (!child) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
679 element->extra->length = i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
680 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
681 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
682 element->extra->children[i] = child;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
683 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
684
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
685 element->extra->length = self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
686
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
687 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
688
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
689 /* add object to memo dictionary (so deepcopy won't visit it again) */
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42491
diff changeset
690 id = PyLong_FromLong((Py_uintptr_t) self);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
691
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
692 i = PyDict_SetItem(memo, id, (PyObject*) element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
693
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
694 Py_DECREF(id);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
695
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
696 if (i < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
697 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
698
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
699 return (PyObject*) element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
700
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
701 error:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
702 Py_DECREF(element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
703 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
704 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
705
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
706 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
707 checkpath(PyObject* tag)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
708 {
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
709 Py_ssize_t i;
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
710 int check = 1;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
711
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
712 /* check if a tag contains an xpath character */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
713
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
714 #define PATHCHAR(ch) (ch == '/' || ch == '*' || ch == '[' || ch == '@')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
715
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
716 if (PyUnicode_Check(tag)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
717 Py_UNICODE *p = PyUnicode_AS_UNICODE(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
718 for (i = 0; i < PyUnicode_GET_SIZE(tag); i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
719 if (p[i] == '{')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
720 check = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
721 else if (p[i] == '}')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
722 check = 1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
723 else if (check && PATHCHAR(p[i]))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
724 return 1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
725 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
726 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
727 }
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
728 if (PyBytes_Check(tag)) {
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
729 char *p = PyBytes_AS_STRING(tag);
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
730 for (i = 0; i < PyBytes_GET_SIZE(tag); i++) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
731 if (p[i] == '{')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
732 check = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
733 else if (p[i] == '}')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
734 check = 1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
735 else if (check && PATHCHAR(p[i]))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
736 return 1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
737 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
738 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
739 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
740
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
741 return 1; /* unknown type; might be path expression */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
742 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
743
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
744 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
745 element_find(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
746 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
747 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
748
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
749 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
750 if (!PyArg_ParseTuple(args, "O:find", &tag))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
751 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
752
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
753 if (checkpath(tag))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
754 return PyObject_CallMethod(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
755 elementpath_obj, "find", "OO", self, tag
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
756 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
757
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
758 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
759 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
760
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
761 for (i = 0; i < self->extra->length; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
762 PyObject* item = self->extra->children[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
763 if (Element_CheckExact(item) &&
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
764 PyObject_RichCompareBool(((ElementObject*)item)->tag, tag, Py_EQ) == 1) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
765 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
766 return item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
767 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
768 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
769
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
770 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
771 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
772
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
773 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
774 element_findtext(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
775 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
776 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
777
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
778 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
779 PyObject* default_value = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
780 if (!PyArg_ParseTuple(args, "O|O:findtext", &tag, &default_value))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
781 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
782
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
783 if (checkpath(tag))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
784 return PyObject_CallMethod(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
785 elementpath_obj, "findtext", "OOO", self, tag, default_value
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
786 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
787
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
788 if (!self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
789 Py_INCREF(default_value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
790 return default_value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
791 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
792
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
793 for (i = 0; i < self->extra->length; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
794 ElementObject* item = (ElementObject*) self->extra->children[i];
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
795 if (Element_CheckExact(item) && (PyObject_RichCompareBool(item->tag, tag, Py_EQ) == 1)) {
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
796
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
797 PyObject* text = element_get_text(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
798 if (text == Py_None)
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
799 return PyBytes_FromString("");
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
800 Py_XINCREF(text);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
801 return text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
802 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
803 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
804
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
805 Py_INCREF(default_value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
806 return default_value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
807 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
808
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
809 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
810 element_findall(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
811 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
812 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
813 PyObject* out;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
814
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
815 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
816 if (!PyArg_ParseTuple(args, "O:findall", &tag))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
817 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
818
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
819 if (checkpath(tag))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
820 return PyObject_CallMethod(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
821 elementpath_obj, "findall", "OO", self, tag
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
822 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
823
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
824 out = PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
825 if (!out)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
826 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
827
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
828 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
829 return out;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
830
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
831 for (i = 0; i < self->extra->length; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
832 PyObject* item = self->extra->children[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
833 if (Element_CheckExact(item) &&
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
834 PyObject_RichCompareBool(((ElementObject*)item)->tag, tag, Py_EQ) == 1) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
835 if (PyList_Append(out, item) < 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
836 Py_DECREF(out);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
837 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
838 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
839 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
840 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
841
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
842 return out;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
843 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
844
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
845 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
846 element_get(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
847 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
848 PyObject* value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
849
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
850 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
851 PyObject* default_value = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
852 if (!PyArg_ParseTuple(args, "O|O:get", &key, &default_value))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
853 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
854
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
855 if (!self->extra || self->extra->attrib == Py_None)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
856 value = default_value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
857 else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
858 value = PyDict_GetItem(self->extra->attrib, key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
859 if (!value)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
860 value = default_value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
861 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
862
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
863 Py_INCREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
864 return value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
865 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
866
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
867 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
868 element_getchildren(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
869 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
870 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
871 PyObject* list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
872
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
873 if (!PyArg_ParseTuple(args, ":getchildren"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
874 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
875
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
876 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
877 return PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
878
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
879 list = PyList_New(self->extra->length);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
880 if (!list)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
881 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
882
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
883 for (i = 0; i < self->extra->length; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
884 PyObject* item = self->extra->children[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
885 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
886 PyList_SET_ITEM(list, i, item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
887 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
888
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
889 return list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
890 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
891
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
892 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
893 element_getiterator(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
894 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
895 PyObject* result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
896
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
897 PyObject* tag = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
898 if (!PyArg_ParseTuple(args, "|O:getiterator", &tag))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
899 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
900
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
901 if (!elementtree_getiterator_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
902 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
903 PyExc_RuntimeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
904 "getiterator helper not found"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
905 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
906 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
907 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
908
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
909 args = PyTuple_New(2);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
910 if (!args)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
911 return NULL;
36450
c193283e63bc Check return results for errors
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
912
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
913 Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
914 Py_INCREF(tag); PyTuple_SET_ITEM(args, 1, (PyObject*) tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
915
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
916 result = PyObject_CallObject(elementtree_getiterator_obj, args);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
917
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
918 Py_DECREF(args);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
919
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
920 return result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
921 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
922
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
923 static PyObject*
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
924 element_getitem(PyObject* self_, Py_ssize_t index)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
925 {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
926 ElementObject* self = (ElementObject*) self_;
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
927
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
928 if (!self->extra || index < 0 || index >= self->extra->length) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
929 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
930 PyExc_IndexError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
931 "child index out of range"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
932 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
933 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
934 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
935
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
936 Py_INCREF(self->extra->children[index]);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
937 return self->extra->children[index];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
938 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
939
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
940 static PyObject*
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
941 element_getslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
942 {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
943 ElementObject* self = (ElementObject*) self_;
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
944 Py_ssize_t i;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
945 PyObject* list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
946
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
947 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
948 return PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
949
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
950 /* standard clamping */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
951 if (start < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
952 start = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
953 if (end < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
954 end = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
955 if (end > self->extra->length)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
956 end = self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
957 if (start > end)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
958 start = end;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
959
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
960 list = PyList_New(end - start);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
961 if (!list)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
962 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
963
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
964 for (i = start; i < end; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
965 PyObject* item = self->extra->children[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
966 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
967 PyList_SET_ITEM(list, i - start, item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
968 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
969
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
970 return list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
971 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
972
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
973 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
974 element_insert(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
975 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
976 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
977
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
978 int index;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
979 PyObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
980 if (!PyArg_ParseTuple(args, "iO!:insert", &index,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
981 &Element_Type, &element))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
982 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
983
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
984 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
985 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
986
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
987 if (index < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
988 index = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
989 if (index > self->extra->length)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
990 index = self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
991
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
992 if (element_resize(self, 1) < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
993 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
994
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
995 for (i = self->extra->length; i > index; i--)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
996 self->extra->children[i] = self->extra->children[i-1];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
997
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
998 Py_INCREF(element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
999 self->extra->children[index] = element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1000
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1001 self->extra->length++;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1002
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1003 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1004 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1005
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1006 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1007 element_items(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1008 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1009 if (!PyArg_ParseTuple(args, ":items"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1010 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1011
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1012 if (!self->extra || self->extra->attrib == Py_None)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1013 return PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1014
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1015 return PyDict_Items(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1016 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1017
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1018 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1019 element_keys(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1020 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1021 if (!PyArg_ParseTuple(args, ":keys"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1022 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1023
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1024 if (!self->extra || self->extra->attrib == Py_None)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1025 return PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1026
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1027 return PyDict_Keys(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1028 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1029
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1030 static Py_ssize_t
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1031 element_length(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1032 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1033 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1034 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1035
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1036 return self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1037 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1038
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1039 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1040 element_makeelement(PyObject* self, PyObject* args, PyObject* kw)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1041 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1042 PyObject* elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1043
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1044 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1045 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1046 if (!PyArg_ParseTuple(args, "OO:makeelement", &tag, &attrib))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1047 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1048
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1049 attrib = PyDict_Copy(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1050 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1051 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1052
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1053 elem = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1054
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1055 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1056
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1057 return elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1058 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1059
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1060 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1061 element_reduce(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1062 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1063 if (!PyArg_ParseTuple(args, ":__reduce__"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1064 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1065
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1066 /* Hack alert: This method is used to work around a __copy__
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1067 problem on certain 2.3 and 2.4 versions. To save time and
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1068 simplify the code, we create the copy in here, and use a dummy
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1069 copyelement helper to trick the copy module into doing the
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1070 right thing. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1071
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1072 if (!elementtree_copyelement_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1073 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1074 PyExc_RuntimeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1075 "copyelement helper not found"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1076 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1077 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1078 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1079
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1080 return Py_BuildValue(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1081 "O(N)", elementtree_copyelement_obj, element_copy(self, args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1082 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1083 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1084
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1085 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1086 element_remove(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1087 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1088 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1089
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1090 PyObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1091 if (!PyArg_ParseTuple(args, "O!:remove", &Element_Type, &element))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1092 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1093
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1094 if (!self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1095 /* element has no children, so raise exception */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1096 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1097 PyExc_ValueError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1098 "list.remove(x): x not in list"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1099 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1100 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1101 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1102
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1103 for (i = 0; i < self->extra->length; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1104 if (self->extra->children[i] == element)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1105 break;
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
1106 if (PyObject_RichCompareBool(self->extra->children[i], element, Py_EQ) == 1)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1107 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1108 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1109
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1110 if (i == self->extra->length) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1111 /* element is not in children, so raise exception */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1112 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1113 PyExc_ValueError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1114 "list.remove(x): x not in list"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1115 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1116 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1117 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1118
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1119 Py_DECREF(self->extra->children[i]);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1120
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1121 self->extra->length--;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1122
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1123 for (; i < self->extra->length; i++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1124 self->extra->children[i] = self->extra->children[i+1];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1125
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1126 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1127 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1128
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1129 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1130 element_repr(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1131 {
41782
bee8d01ef42c Add a format specifier %R to PyUnicode_FromFormat(), which embeds
Walter Dörwald <walter@livinglogic.de>
parents: 41769
diff changeset
1132 return PyUnicode_FromFormat("<Element %R at %p>", self->tag, self);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1133 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1134
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1135 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1136 element_set(ElementObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1137 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1138 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1139
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1140 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1141 PyObject* value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1142 if (!PyArg_ParseTuple(args, "OO:set", &key, &value))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1143 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1144
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1145 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1146 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1147
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1148 attrib = element_get_attrib(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1149 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1150 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1151
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1152 if (PyDict_SetItem(attrib, key, value) < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1153 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1154
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1155 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1156 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1157
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1158 static int
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1159 element_setslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end, PyObject* item)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1160 {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1161 ElementObject* self = (ElementObject*) self_;
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1162 Py_ssize_t i, new, old;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1163 PyObject* recycle = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1164
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1165 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1166 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1167
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1168 /* standard clamping */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1169 if (start < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1170 start = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1171 if (end < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1172 end = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1173 if (end > self->extra->length)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1174 end = self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1175 if (start > end)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1176 start = end;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1177
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1178 old = end - start;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1179
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1180 if (item == NULL)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1181 new = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1182 else if (PyList_CheckExact(item)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1183 new = PyList_GET_SIZE(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1184 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1185 /* FIXME: support arbitrary sequences? */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1186 PyErr_Format(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1187 PyExc_TypeError,
44351
86a2679dca46 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents: 44099
diff changeset
1188 "expected list, not \"%.200s\"", Py_TYPE(item)->tp_name
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1189 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1190 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1191 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1192
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1193 if (old > 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1194 /* to avoid recursive calls to this method (via decref), move
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1195 old items to the recycle bin here, and get rid of them when
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1196 we're done modifying the element */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1197 recycle = PyList_New(old);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1198 for (i = 0; i < old; i++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1199 PyList_SET_ITEM(recycle, i, self->extra->children[i + start]);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1200 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1201
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1202 if (new < old) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1203 /* delete slice */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1204 for (i = end; i < self->extra->length; i++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1205 self->extra->children[i + new - old] = self->extra->children[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1206 } else if (new > old) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1207 /* insert slice */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1208 if (element_resize(self, new - old) < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1209 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1210 for (i = self->extra->length-1; i >= end; i--)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1211 self->extra->children[i + new - old] = self->extra->children[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1212 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1213
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1214 /* replace the slice */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1215 for (i = 0; i < new; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1216 PyObject* element = PyList_GET_ITEM(item, i);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1217 Py_INCREF(element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1218 self->extra->children[i + start] = element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1219 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1220
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1221 self->extra->length += new - old;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1222
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1223 /* discard the recycle bin, and everything in it */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1224 Py_XDECREF(recycle);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1225
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1226 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1227 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1228
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1229 static int
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1230 element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1231 {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1232 ElementObject* self = (ElementObject*) self_;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1233 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1234 PyObject* old;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1235
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1236 if (!self->extra || index < 0 || index >= self->extra->length) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1237 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1238 PyExc_IndexError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1239 "child assignment index out of range");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1240 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1241 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1242
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1243 old = self->extra->children[index];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1244
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1245 if (item) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1246 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1247 self->extra->children[index] = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1248 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1249 self->extra->length--;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1250 for (i = index; i < self->extra->length; i++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1251 self->extra->children[i] = self->extra->children[i+1];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1252 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1253
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1254 Py_DECREF(old);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1255
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1256 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1257 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1258
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1259 static PyMethodDef element_methods[] = {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1260
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1261 {"clear", (PyCFunction) element_clear, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1262
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1263 {"get", (PyCFunction) element_get, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1264 {"set", (PyCFunction) element_set, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1265
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1266 {"find", (PyCFunction) element_find, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1267 {"findtext", (PyCFunction) element_findtext, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1268 {"findall", (PyCFunction) element_findall, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1269
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1270 {"append", (PyCFunction) element_append, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1271 {"insert", (PyCFunction) element_insert, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1272 {"remove", (PyCFunction) element_remove, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1273
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1274 {"getiterator", (PyCFunction) element_getiterator, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1275 {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1276
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1277 {"items", (PyCFunction) element_items, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1278 {"keys", (PyCFunction) element_keys, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1279
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1280 {"makeelement", (PyCFunction) element_makeelement, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1281
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1282 {"__copy__", (PyCFunction) element_copy, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1283 {"__deepcopy__", (PyCFunction) element_deepcopy, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1284
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1285 /* Some 2.3 and 2.4 versions do not handle the __copy__ method on
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1286 C objects correctly, so we have to fake it using a __reduce__-
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1287 based hack (see the element_reduce implementation above for
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1288 details). */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1289
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1290 /* The behaviour has been changed in 2.3.5 and 2.4.1, so we're
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1291 using a runtime test to figure out if we need to fake things
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1292 or now (see the init code below). The following entry is
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1293 enabled only if the hack is needed. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1294
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1295 {"!__reduce__", (PyCFunction) element_reduce, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1296
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1297 {NULL, NULL}
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1298 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1299
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1300 static PyObject*
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1301 element_getattro(ElementObject* self, PyObject* nameobj)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1302 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1303 PyObject* res;
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1304 char *name = "";
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1305
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1306 if (PyUnicode_Check(nameobj))
48660
85b67fb5672b Rename PyUnicode_AsString -> _PyUnicode_AsString and
Marc-André Lemburg <mal@egenix.com>
parents: 48414
diff changeset
1307 name = _PyUnicode_AsString(nameobj);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1308
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1309 if (strcmp(name, "tag") == 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1310 res = self->tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1311 else if (strcmp(name, "text") == 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1312 res = element_get_text(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1313 else if (strcmp(name, "tail") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1314 res = element_get_tail(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1315 } else if (strcmp(name, "attrib") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1316 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1317 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1318 res = element_get_attrib(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1319 } else {
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1320 return PyObject_GenericGetAttr((PyObject*) self, nameobj);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1321 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1322
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1323 Py_XINCREF(res);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1324 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1325 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1326
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1327 static int
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1328 element_setattr(ElementObject* self, const char* name, PyObject* value)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1329 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1330 if (value == NULL) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1331 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1332 PyExc_AttributeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1333 "can't delete element attributes"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1334 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1335 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1336 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1337
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1338 if (strcmp(name, "tag") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1339 Py_DECREF(self->tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1340 self->tag = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1341 Py_INCREF(self->tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1342 } else if (strcmp(name, "text") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1343 Py_DECREF(JOIN_OBJ(self->text));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1344 self->text = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1345 Py_INCREF(self->text);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1346 } else if (strcmp(name, "tail") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1347 Py_DECREF(JOIN_OBJ(self->tail));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1348 self->tail = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1349 Py_INCREF(self->tail);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1350 } else if (strcmp(name, "attrib") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1351 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1352 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1353 Py_DECREF(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1354 self->extra->attrib = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1355 Py_INCREF(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1356 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1357 PyErr_SetString(PyExc_AttributeError, name);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1358 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1359 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1360
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1361 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1362 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1363
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1364 static PySequenceMethods element_as_sequence = {
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1365 (lenfunc) element_length,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1366 0, /* sq_concat */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1367 0, /* sq_repeat */
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1368 element_getitem,
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1369 element_getslice,
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1370 element_setitem,
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1371 element_setslice,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1372 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1373
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
1374 static PyTypeObject Element_Type = {
42334
e70cdce0e8b2 Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 41782
diff changeset
1375 PyVarObject_HEAD_INIT(NULL, 0)
e70cdce0e8b2 Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 41782
diff changeset
1376 "Element", sizeof(ElementObject), 0,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1377 /* methods */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1378 (destructor)element_dealloc, /* tp_dealloc */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1379 0, /* tp_print */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1380 0, /* tp_getattr */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1381 (setattrfunc)element_setattr, /* tp_setattr */
51271
87fbbf22adf3 Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 51244
diff changeset
1382 0, /* tp_reserved */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1383 (reprfunc)element_repr, /* tp_repr */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1384 0, /* tp_as_number */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1385 &element_as_sequence, /* tp_as_sequence */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1386 0, /* tp_as_mapping */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1387 0, /* tp_hash */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1388 0, /* tp_call */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1389 0, /* tp_str */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1390 (getattrofunc)element_getattro, /* tp_getattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1391 0, /* tp_setattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1392 0, /* tp_as_buffer */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1393 Py_TPFLAGS_DEFAULT, /* tp_flags */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1394 0, /* tp_doc */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1395 0, /* tp_traverse */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1396 0, /* tp_clear */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1397 0, /* tp_richcompare */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1398 0, /* tp_weaklistoffset */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1399 0, /* tp_iter */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1400 0, /* tp_iternext */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1401 element_methods, /* tp_methods */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1402 0, /* tp_members */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1403 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1404
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1405 /* ==================================================================== */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1406 /* the tree builder type */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1407
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1408 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1409 PyObject_HEAD
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1410
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1411 PyObject* root; /* root node (first created node) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1412
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1413 ElementObject* this; /* current node */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1414 ElementObject* last; /* most recently created node */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1415
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1416 PyObject* data; /* data collector (string or list), or NULL */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1417
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1418 PyObject* stack; /* element stack */
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1419 Py_ssize_t index; /* current stack size (0=empty) */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1420
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1421 /* element tracing */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1422 PyObject* events; /* list of events, or NULL if not collecting */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1423 PyObject* start_event_obj; /* event objects (NULL to ignore) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1424 PyObject* end_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1425 PyObject* start_ns_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1426 PyObject* end_ns_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1427
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1428 } TreeBuilderObject;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1429
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
1430 static PyTypeObject TreeBuilder_Type;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1431
44351
86a2679dca46 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents: 44099
diff changeset
1432 #define TreeBuilder_CheckExact(op) (Py_TYPE(op) == &TreeBuilder_Type)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1433
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1434 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1435 /* constructor and destructor */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1436
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1437 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1438 treebuilder_new(void)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1439 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1440 TreeBuilderObject* self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1441
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1442 self = PyObject_New(TreeBuilderObject, &TreeBuilder_Type);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1443 if (self == NULL)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1444 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1445
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1446 self->root = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1447
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1448 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1449 self->this = (ElementObject*) Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1450
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1451 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1452 self->last = (ElementObject*) Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1453
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1454 self->data = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1455
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1456 self->stack = PyList_New(20);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1457 self->index = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1458
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1459 self->events = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1460 self->start_event_obj = self->end_event_obj = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1461 self->start_ns_event_obj = self->end_ns_event_obj = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1462
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1463 ALLOC(sizeof(TreeBuilderObject), "create treebuilder");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1464
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1465 return (PyObject*) self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1466 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1467
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1468 static PyObject*
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1469 treebuilder(PyObject* self_, PyObject* args)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1470 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1471 if (!PyArg_ParseTuple(args, ":TreeBuilder"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1472 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1473
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1474 return treebuilder_new();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1475 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1476
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1477 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1478 treebuilder_dealloc(TreeBuilderObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1479 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1480 Py_XDECREF(self->end_ns_event_obj);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1481 Py_XDECREF(self->start_ns_event_obj);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1482 Py_XDECREF(self->end_event_obj);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1483 Py_XDECREF(self->start_event_obj);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1484 Py_XDECREF(self->events);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1485 Py_DECREF(self->stack);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1486 Py_XDECREF(self->data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1487 Py_DECREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1488 Py_DECREF(self->this);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1489 Py_XDECREF(self->root);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1490
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1491 RELEASE(sizeof(TreeBuilderObject), "destroy treebuilder");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1492
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1493 PyObject_Del(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1494 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1495
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1496 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1497 /* handlers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1498
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1499 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1500 treebuilder_handle_xml(TreeBuilderObject* self, PyObject* encoding,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1501 PyObject* standalone)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1502 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1503 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1504 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1505
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1506 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1507 treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1508 PyObject* attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1509 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1510 PyObject* node;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1511 PyObject* this;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1512
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1513 if (self->data) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1514 if (self->this == self->last) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1515 Py_DECREF(JOIN_OBJ(self->last->text));
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1516 self->last->text = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1517 self->data, PyList_CheckExact(self->data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1518 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1519 } else {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1520 Py_DECREF(JOIN_OBJ(self->last->tail));
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1521 self->last->tail = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1522 self->data, PyList_CheckExact(self->data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1523 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1524 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1525 self->data = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1526 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1527
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1528 node = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1529 if (!node)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1530 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1531
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1532 this = (PyObject*) self->this;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1533
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1534 if (this != Py_None) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1535 if (element_add_subelement((ElementObject*) this, node) < 0)
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1536 goto error;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1537 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1538 if (self->root) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1539 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1540 PyExc_SyntaxError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1541 "multiple elements on top level"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1542 );
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1543 goto error;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1544 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1545 Py_INCREF(node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1546 self->root = node;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1547 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1548
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1549 if (self->index < PyList_GET_SIZE(self->stack)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1550 if (PyList_SetItem(self->stack, self->index, this) < 0)
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1551 goto error;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1552 Py_INCREF(this);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1553 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1554 if (PyList_Append(self->stack, this) < 0)
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1555 goto error;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1556 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1557 self->index++;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1558
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1559 Py_DECREF(this);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1560 Py_INCREF(node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1561 self->this = (ElementObject*) node;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1562
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1563 Py_DECREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1564 Py_INCREF(node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1565 self->last = (ElementObject*) node;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1566
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1567 if (self->start_event_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1568 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1569 PyObject* action = self->start_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1570 res = PyTuple_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1571 if (res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1572 Py_INCREF(action); PyTuple_SET_ITEM(res, 0, (PyObject*) action);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1573 Py_INCREF(node); PyTuple_SET_ITEM(res, 1, (PyObject*) node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1574 PyList_Append(self->events, res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1575 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1576 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1577 PyErr_Clear(); /* FIXME: propagate error */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1578 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1579
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1580 return node;
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1581
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1582 error:
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1583 Py_DECREF(node);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1584 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1585 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1586
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1587 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1588 treebuilder_handle_data(TreeBuilderObject* self, PyObject* data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1589 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1590 if (!self->data) {
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1591 if (self->last == (ElementObject*) Py_None) {
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1592 /* ignore calls to data before the first call to start */
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1593 Py_RETURN_NONE;
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1594 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1595 /* store the first item as is */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1596 Py_INCREF(data); self->data = data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1597 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1598 /* more than one item; use a list to collect items */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1599 if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 &&
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1600 PyBytes_CheckExact(data) && PyBytes_GET_SIZE(data) == 1) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1601 /* expat often generates single character data sections; handle
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1602 the most common case by resizing the existing string... */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1603 Py_ssize_t size = PyBytes_GET_SIZE(self->data);
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1604 if (_PyBytes_Resize(&self->data, size + 1) < 0)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1605 return NULL;
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1606 PyBytes_AS_STRING(self->data)[size] = PyBytes_AS_STRING(data)[0];
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1607 } else if (PyList_CheckExact(self->data)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1608 if (PyList_Append(self->data, data) < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1609 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1610 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1611 PyObject* list = PyList_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1612 if (!list)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1613 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1614 PyList_SET_ITEM(list, 0, self->data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1615 Py_INCREF(data); PyList_SET_ITEM(list, 1, data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1616 self->data = list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1617 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1618 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1619
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1620 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1621 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1622
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1623 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1624 treebuilder_handle_end(TreeBuilderObject* self, PyObject* tag)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1625 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1626 PyObject* item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1627
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1628 if (self->data) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1629 if (self->this == self->last) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1630 Py_DECREF(JOIN_OBJ(self->last->text));
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1631 self->last->text = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1632 self->data, PyList_CheckExact(self->data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1633 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1634 } else {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1635 Py_DECREF(JOIN_OBJ(self->last->tail));
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1636 self->last->tail = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1637 self->data, PyList_CheckExact(self->data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1638 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1639 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1640 self->data = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1641 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1642
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1643 if (self->index == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1644 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1645 PyExc_IndexError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1646 "pop from empty stack"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1647 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1648 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1649 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1650
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1651 self->index--;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1652
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1653 item = PyList_GET_ITEM(self->stack, self->index);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1654 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1655
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1656 Py_DECREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1657
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1658 self->last = (ElementObject*) self->this;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1659 self->this = (ElementObject*) item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1660
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1661 if (self->end_event_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1662 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1663 PyObject* action = self->end_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1664 PyObject* node = (PyObject*) self->last;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1665 res = PyTuple_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1666 if (res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1667 Py_INCREF(action); PyTuple_SET_ITEM(res, 0, (PyObject*) action);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1668 Py_INCREF(node); PyTuple_SET_ITEM(res, 1, (PyObject*) node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1669 PyList_Append(self->events, res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1670 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1671 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1672 PyErr_Clear(); /* FIXME: propagate error */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1673 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1674
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1675 Py_INCREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1676 return (PyObject*) self->last;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1677 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1678
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1679 LOCAL(void)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1680 treebuilder_handle_namespace(TreeBuilderObject* self, int start,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1681 const char* prefix, const char *uri)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1682 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1683 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1684 PyObject* action;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1685 PyObject* parcel;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1686
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1687 if (!self->events)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1688 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1689
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1690 if (start) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1691 if (!self->start_ns_event_obj)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1692 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1693 action = self->start_ns_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1694 /* FIXME: prefix and uri use utf-8 encoding! */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1695 parcel = Py_BuildValue("ss", (prefix) ? prefix : "", uri);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1696 if (!parcel)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1697 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1698 Py_INCREF(action);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1699 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1700 if (!self->end_ns_event_obj)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1701 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1702 action = self->end_ns_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1703 Py_INCREF(action);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1704 parcel = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1705 Py_INCREF(parcel);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1706 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1707
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1708 res = PyTuple_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1709
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1710 if (res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1711 PyTuple_SET_ITEM(res, 0, action);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1712 PyTuple_SET_ITEM(res, 1, parcel);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1713 PyList_Append(self->events, res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1714 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1715 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1716 PyErr_Clear(); /* FIXME: propagate error */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1717 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1718
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1719 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1720 /* methods (in alphabetical order) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1721
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1722 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1723 treebuilder_data(TreeBuilderObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1724 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1725 PyObject* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1726 if (!PyArg_ParseTuple(args, "O:data", &data))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1727 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1728
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1729 return treebuilder_handle_data(self, data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1730 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1731
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1732 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1733 treebuilder_end(TreeBuilderObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1734 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1735 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1736 if (!PyArg_ParseTuple(args, "O:end", &tag))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1737 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1738
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1739 return treebuilder_handle_end(self, tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1740 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1741
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1742 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1743 treebuilder_done(TreeBuilderObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1744 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1745 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1746
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1747 /* FIXME: check stack size? */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1748
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1749 if (self->root)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1750 res = self->root;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1751 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1752 res = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1753
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1754 Py_INCREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1755 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1756 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1757
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1758 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1759 treebuilder_close(TreeBuilderObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1760 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1761 if (!PyArg_ParseTuple(args, ":close"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1762 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1763
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1764 return treebuilder_done(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1765 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1766
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1767 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1768 treebuilder_start(TreeBuilderObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1769 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1770 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1771 PyObject* attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1772 if (!PyArg_ParseTuple(args, "O|O:start", &tag, &attrib))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1773 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1774
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1775 return treebuilder_handle_start(self, tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1776 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1777
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1778 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1779 treebuilder_xml(TreeBuilderObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1780 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1781 PyObject* encoding;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1782 PyObject* standalone;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1783 if (!PyArg_ParseTuple(args, "OO:xml", &encoding, &standalone))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1784 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1785
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1786 return treebuilder_handle_xml(self, encoding, standalone);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1787 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1788
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1789 static PyMethodDef treebuilder_methods[] = {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1790 {"data", (PyCFunction) treebuilder_data, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1791 {"start", (PyCFunction) treebuilder_start, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1792 {"end", (PyCFunction) treebuilder_end, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1793 {"xml", (PyCFunction) treebuilder_xml, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1794 {"close", (PyCFunction) treebuilder_close, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1795 {NULL, NULL}
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1796 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1797
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
1798 static PyTypeObject TreeBuilder_Type = {
42334
e70cdce0e8b2 Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 41782
diff changeset
1799 PyVarObject_HEAD_INIT(NULL, 0)
e70cdce0e8b2 Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 41782
diff changeset
1800 "TreeBuilder", sizeof(TreeBuilderObject), 0,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1801 /* methods */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1802 (destructor)treebuilder_dealloc, /* tp_dealloc */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1803 0, /* tp_print */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1804 0, /* tp_getattr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1805 0, /* tp_setattr */
51271
87fbbf22adf3 Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 51244
diff changeset
1806 0, /* tp_reserved */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1807 0, /* tp_repr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1808 0, /* tp_as_number */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1809 0, /* tp_as_sequence */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1810 0, /* tp_as_mapping */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1811 0, /* tp_hash */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1812 0, /* tp_call */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1813 0, /* tp_str */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1814 0, /* tp_getattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1815 0, /* tp_setattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1816 0, /* tp_as_buffer */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1817 Py_TPFLAGS_DEFAULT, /* tp_flags */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1818 0, /* tp_doc */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1819 0, /* tp_traverse */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1820 0, /* tp_clear */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1821 0, /* tp_richcompare */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1822 0, /* tp_weaklistoffset */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1823 0, /* tp_iter */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1824 0, /* tp_iternext */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1825 treebuilder_methods, /* tp_methods */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1826 0, /* tp_members */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1827 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1828
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1829 /* ==================================================================== */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1830 /* the expat interface */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1831
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1832 #if defined(USE_EXPAT)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1833
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1834 #include "expat.h"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1835
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1836 #if defined(USE_PYEXPAT_CAPI)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1837 #include "pyexpat.h"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1838 static struct PyExpat_CAPI* expat_capi;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1839 #define EXPAT(func) (expat_capi->func)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1840 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1841 #define EXPAT(func) (XML_##func)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1842 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1843
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1844 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1845 PyObject_HEAD
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1846
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1847 XML_Parser parser;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1848
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1849 PyObject* target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1850 PyObject* entity;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1851
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1852 PyObject* names;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1853
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1854 PyObject* handle_xml;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1855 PyObject* handle_start;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1856 PyObject* handle_data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1857 PyObject* handle_end;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1858
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1859 PyObject* handle_comment;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1860 PyObject* handle_pi;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1861
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1862 } XMLParserObject;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1863
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
1864 static PyTypeObject XMLParser_Type;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1865
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1866 /* helpers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1867
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1868 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1869 makeuniversal(XMLParserObject* self, const char* string)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1870 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1871 /* convert a UTF-8 tag/attribute name from the expat parser
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1872 to a universal name string */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1873
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1874 int size = strlen(string);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1875 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1876 PyObject* value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1877
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1878 /* look the 'raw' name up in the names dictionary */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1879 key = PyBytes_FromStringAndSize(string, size);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1880 if (!key)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1881 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1882
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1883 value = PyDict_GetItem(self->names, key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1884
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1885 if (value) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1886 Py_INCREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1887 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1888 /* new name. convert to universal name, and decode as
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1889 necessary */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1890
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1891 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1892 char* p;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1893 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1894
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1895 /* look for namespace separator */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1896 for (i = 0; i < size; i++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1897 if (string[i] == '}')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1898 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1899 if (i != size) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1900 /* convert to universal name */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1901 tag = PyBytes_FromStringAndSize(NULL, size+1);
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1902 p = PyBytes_AS_STRING(tag);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1903 p[0] = '{';
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1904 memcpy(p+1, string, size);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1905 size++;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1906 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1907 /* plain name; use key as tag */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1908 Py_INCREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1909 tag = key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1910 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1911
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1912 /* decode universal name */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1913 p = PyBytes_AS_STRING(tag);
42491
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1914 value = PyUnicode_DecodeUTF8(p, size, "strict");
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1915 Py_DECREF(tag);
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1916 if (!value) {
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1917 Py_DECREF(key);
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1918 return NULL;
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1919 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1920
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1921 /* add to names dictionary */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1922 if (PyDict_SetItem(self->names, key, value) < 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1923 Py_DECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1924 Py_DECREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1925 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1926 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1927 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1928
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1929 Py_DECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1930 return value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1931 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1932
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1933 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1934 /* handlers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1935
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1936 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1937 expat_default_handler(XMLParserObject* self, const XML_Char* data_in,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1938 int data_len)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1939 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1940 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1941 PyObject* value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1942 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1943
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1944 if (data_len < 2 || data_in[0] != '&')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1945 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1946
42491
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1947 key = PyUnicode_DecodeUTF8(data_in + 1, data_len - 2, "strict");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1948 if (!key)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1949 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1950
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1951 value = PyDict_GetItem(self->entity, key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1952
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1953 if (value) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1954 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1955 res = treebuilder_handle_data(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1956 (TreeBuilderObject*) self->target, value
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1957 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1958 else if (self->handle_data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1959 res = PyObject_CallFunction(self->handle_data, "O", value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1960 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1961 res = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1962 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1963 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1964 PyErr_Format(
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1965 PyExc_SyntaxError, "undefined entity &%s;: line %ld, column %ld",
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1966 PyBytes_AS_STRING(key),
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1967 EXPAT(GetErrorLineNumber)(self->parser),
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1968 EXPAT(GetErrorColumnNumber)(self->parser)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1969 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1970 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1971
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1972 Py_DECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1973 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1974
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1975 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1976 expat_start_handler(XMLParserObject* self, const XML_Char* tag_in,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1977 const XML_Char **attrib_in)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1978 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1979 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1980 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1981 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1982 int ok;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1983
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1984 /* tag name */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1985 tag = makeuniversal(self, tag_in);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1986 if (!tag)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1987 return; /* parser will look for errors */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1988
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1989 /* attributes */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1990 if (attrib_in[0]) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1991 attrib = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1992 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1993 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1994 while (attrib_in[0] && attrib_in[1]) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1995 PyObject* key = makeuniversal(self, attrib_in[0]);
42491
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1996 PyObject* value = PyUnicode_DecodeUTF8(attrib_in[1], strlen(attrib_in[1]), "strict");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1997 if (!key || !value) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1998 Py_XDECREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1999 Py_XDECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2000 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2001 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2002 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2003 ok = PyDict_SetItem(attrib, key, value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2004 Py_DECREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2005 Py_DECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2006 if (ok < 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2007 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2008 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2009 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2010 attrib_in += 2;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2011 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2012 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2013 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2014 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2015 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2016
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2017 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2018 /* shortcut */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2019 res = treebuilder_handle_start((TreeBuilderObject*) self->target,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2020 tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2021 else if (self->handle_start)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2022 res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2023 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2024 res = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2025
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2026 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2027 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2028
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2029 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2030 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2031
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2032 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2033 expat_data_handler(XMLParserObject* self, const XML_Char* data_in,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2034 int data_len)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2035 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2036 PyObject* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2037 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2038
42491
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
2039 data = PyUnicode_DecodeUTF8(data_in, data_len, "strict");
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2040 if (!data)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2041 return; /* parser will look for errors */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2042
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2043 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2044 /* shortcut */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2045 res = treebuilder_handle_data((TreeBuilderObject*) self->target, data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2046 else if (self->handle_data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2047 res = PyObject_CallFunction(self->handle_data, "O", data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2048 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2049 res = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2051 Py_DECREF(data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2052
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2053 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2054 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2055
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2056 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2057 expat_end_handler(XMLParserObject* self, const XML_Char* tag_in)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2058 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2059 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2060 PyObject* res = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2061
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2062 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2063 /* shortcut */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2064 /* the standard tree builder doesn't look at the end tag */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2065 res = treebuilder_handle_end(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2066 (TreeBuilderObject*) self->target, Py_None
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2067 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2068 else if (self->handle_end) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2069 tag = makeuniversal(self, tag_in);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2070 if (tag) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2071 res = PyObject_CallFunction(self->handle_end, "O", tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2072 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2073 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2074 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2075
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2076 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2077 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2078
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2079 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2080 expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2081 const XML_Char *uri)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2082 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2083 treebuilder_handle_namespace(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2084 (TreeBuilderObject*) self->target, 1, prefix, uri
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2085 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2086 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2087
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2088 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2089 expat_end_ns_handler(XMLParserObject* self, const XML_Char* prefix_in)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2090 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2091 treebuilder_handle_namespace(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2092 (TreeBuilderObject*) self->target, 0, NULL, NULL
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2093 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2094 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2095
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2096 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2097 expat_comment_handler(XMLParserObject* self, const XML_Char* comment_in)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2098 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2099 PyObject* comment;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2100 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2101
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2102 if (self->handle_comment) {
42491
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
2103 comment = PyUnicode_DecodeUTF8(comment_in, strlen(comment_in), "strict");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2104 if (comment) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2105 res = PyObject_CallFunction(self->handle_comment, "O", comment);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2106 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2107 Py_DECREF(comment);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2108 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2109 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2110 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2111
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2112 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2113 expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2114 const XML_Char* data_in)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2115 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2116 PyObject* target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2117 PyObject* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2118 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2119
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2120 if (self->handle_pi) {
42491
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
2121 target = PyUnicode_DecodeUTF8(target_in, strlen(target_in), "strict");
a8f13a43eaa1 SF patch # 1769767, get test_xml_etree_c working. More conversions are probably needed.
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
2122 data = PyUnicode_DecodeUTF8(data_in, strlen(data_in), "strict");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2123 if (target && data) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2124 res = PyObject_CallFunction(self->handle_pi, "OO", target, data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2125 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2126 Py_DECREF(data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2127 Py_DECREF(target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2128 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2129 Py_XDECREF(data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2130 Py_XDECREF(target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2131 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2132 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2133 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2134
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2135 static int
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2136 expat_unknown_encoding_handler(XMLParserObject *self, const XML_Char *name,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2137 XML_Encoding *info)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2138 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2139 PyObject* u;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2140 Py_UNICODE* p;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2141 unsigned char s[256];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2142 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2143
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2144 memset(info, 0, sizeof(XML_Encoding));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2145
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2146 for (i = 0; i < 256; i++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2147 s[i] = i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2148
36117
7d6ab9f39996 SF#1389809
Fredrik Lundh <fredrik@pythonware.com>
parents: 36083
diff changeset
2149 u = PyUnicode_Decode((char*) s, 256, name, "replace");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2150 if (!u)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2151 return XML_STATUS_ERROR;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2152
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2153 if (PyUnicode_GET_SIZE(u) != 256) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2154 Py_DECREF(u);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2155 return XML_STATUS_ERROR;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2156 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2157
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2158 p = PyUnicode_AS_UNICODE(u);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2159
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2160 for (i = 0; i < 256; i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2161 if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2162 info->map[i] = p[i];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2163 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2164 info->map[i] = -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2165 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2166
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2167 Py_DECREF(u);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2168
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2169 return XML_STATUS_OK;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2170 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2171
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2172 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2173 /* constructor and destructor */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2174
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2175 static PyObject*
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
2176 xmlparser(PyObject* self_, PyObject* args, PyObject* kw)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2177 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2178 XMLParserObject* self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2179 /* FIXME: does this need to be static? */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2180 static XML_Memory_Handling_Suite memory_handler;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2181
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2182 PyObject* target = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2183 char* encoding = NULL;
36684
0bebeb393045 More unconsting.
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2184 static char* kwlist[] = { "target", "encoding", NULL };
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2185 if (!PyArg_ParseTupleAndKeywords(args, kw, "|Oz:XMLParser", kwlist,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2186 &target, &encoding))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2187 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2188
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2189 #if defined(USE_PYEXPAT_CAPI)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2190 if (!expat_capi) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2191 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2192 PyExc_RuntimeError, "cannot load dispatch table from pyexpat"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2193 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2194 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2195 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2196 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2197
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2198 self = PyObject_New(XMLParserObject, &XMLParser_Type);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2199 if (self == NULL)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2200 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2201
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2202 self->entity = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2203 if (!self->entity) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2204 PyObject_Del(self);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2205 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2206 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2207
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2208 self->names = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2209 if (!self->names) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2210 PyObject_Del(self->entity);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2211 PyObject_Del(self);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2212 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2213 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2214
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2215 memory_handler.malloc_fcn = PyObject_Malloc;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2216 memory_handler.realloc_fcn = PyObject_Realloc;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2217 memory_handler.free_fcn = PyObject_Free;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2218
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2219 self->parser = EXPAT(ParserCreate_MM)(encoding, &memory_handler, "}");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2220 if (!self->parser) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2221 PyObject_Del(self->names);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2222 PyObject_Del(self->entity);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2223 PyObject_Del(self);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2224 PyErr_NoMemory();
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2225 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2226 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2227
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2228 /* setup target handlers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2229 if (!target) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2230 target = treebuilder_new();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2231 if (!target) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2232 EXPAT(ParserFree)(self->parser);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2233 PyObject_Del(self->names);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2234 PyObject_Del(self->entity);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2235 PyObject_Del(self);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2236 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2237 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2238 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2239 Py_INCREF(target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2240 self->target = target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2241
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2242 self->handle_xml = PyObject_GetAttrString(target, "xml");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2243 self->handle_start = PyObject_GetAttrString(target, "start");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2244 self->handle_data = PyObject_GetAttrString(target, "data");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2245 self->handle_end = PyObject_GetAttrString(target, "end");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2246 self->handle_comment = PyObject_GetAttrString(target, "comment");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2247 self->handle_pi = PyObject_GetAttrString(target, "pi");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2248
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2249 PyErr_Clear();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2250
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2251 /* configure parser */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2252 EXPAT(SetUserData)(self->parser, self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2253 EXPAT(SetElementHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2254 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2255 (XML_StartElementHandler) expat_start_handler,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2256 (XML_EndElementHandler) expat_end_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2257 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2258 EXPAT(SetDefaultHandlerExpand)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2259 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2260 (XML_DefaultHandler) expat_default_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2261 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2262 EXPAT(SetCharacterDataHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2263 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2264 (XML_CharacterDataHandler) expat_data_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2265 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2266 if (self->handle_comment)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2267 EXPAT(SetCommentHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2268 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2269 (XML_CommentHandler) expat_comment_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2270 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2271 if (self->handle_pi)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2272 EXPAT(SetProcessingInstructionHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2273 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2274 (XML_ProcessingInstructionHandler) expat_pi_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2275 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2276 EXPAT(SetUnknownEncodingHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2277 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2278 (XML_UnknownEncodingHandler) expat_unknown_encoding_handler, NULL
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2279 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2280
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2281 ALLOC(sizeof(XMLParserObject), "create expatparser");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2282
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2283 return (PyObject*) self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2284 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2285
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2286 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2287 xmlparser_dealloc(XMLParserObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2288 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2289 EXPAT(ParserFree)(self->parser);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2290
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2291 Py_XDECREF(self->handle_pi);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2292 Py_XDECREF(self->handle_comment);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2293 Py_XDECREF(self->handle_end);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2294 Py_XDECREF(self->handle_data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2295 Py_XDECREF(self->handle_start);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2296 Py_XDECREF(self->handle_xml);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2297
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2298 Py_DECREF(self->target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2299 Py_DECREF(self->entity);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2300 Py_DECREF(self->names);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2301
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2302 RELEASE(sizeof(XMLParserObject), "destroy expatparser");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2303
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2304 PyObject_Del(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2305 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2306
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2307 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2308 /* methods (in alphabetical order) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2309
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2310 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2311 expat_parse(XMLParserObject* self, char* data, int data_len, int final)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2312 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2313 int ok;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2314
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2315 ok = EXPAT(Parse)(self->parser, data, data_len, final);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2316
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2317 if (PyErr_Occurred())
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2318 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2319
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2320 if (!ok) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2321 PyErr_Format(
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
2322 PyExc_SyntaxError, "%s: line %ld, column %ld",
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2323 EXPAT(ErrorString)(EXPAT(GetErrorCode)(self->parser)),
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2324 EXPAT(GetErrorLineNumber)(self->parser),
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2325 EXPAT(GetErrorColumnNumber)(self->parser)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2326 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2327 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2328 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2329
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2330 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2331 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2332
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2333 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2334 xmlparser_close(XMLParserObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2335 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2336 /* end feeding data to parser */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2337
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2338 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2339 if (!PyArg_ParseTuple(args, ":close"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2340 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2341
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2342 res = expat_parse(self, "", 0, 1);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2343
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2344 if (res && TreeBuilder_CheckExact(self->target)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2345 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2346 return treebuilder_done((TreeBuilderObject*) self->target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2347 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2348
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2349 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2350 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2351
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2352 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2353 xmlparser_feed(XMLParserObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2354 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2355 /* feed data to parser */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2356
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2357 char* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2358 int data_len;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2359 if (!PyArg_ParseTuple(args, "s#:feed", &data, &data_len))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2360 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2361
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2362 return expat_parse(self, data, data_len, 0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2363 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2364
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2365 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2366 xmlparser_parse(XMLParserObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2367 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2368 /* (internal) parse until end of input stream */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2369
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2370 PyObject* reader;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2371 PyObject* buffer;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2372 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2373
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2374 PyObject* fileobj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2375 if (!PyArg_ParseTuple(args, "O:_parse", &fileobj))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2376 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2377
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2378 reader = PyObject_GetAttrString(fileobj, "read");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2379 if (!reader)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2380 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2381
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2382 /* read from open file object */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2383 for (;;) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2384
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2385 buffer = PyObject_CallFunction(reader, "i", 64*1024);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2386
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2387 if (!buffer) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2388 /* read failed (e.g. due to KeyboardInterrupt) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2389 Py_DECREF(reader);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2390 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2391 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2392
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2393 if (!PyBytes_CheckExact(buffer) || PyBytes_GET_SIZE(buffer) == 0) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2394 Py_DECREF(buffer);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2395 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2396 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2397
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2398 res = expat_parse(
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2399 self, PyBytes_AS_STRING(buffer), PyBytes_GET_SIZE(buffer), 0
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2400 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2401
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2402 Py_DECREF(buffer);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2403
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2404 if (!res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2405 Py_DECREF(reader);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2406 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2407 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2408 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2409
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2410 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2411
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2412 Py_DECREF(reader);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2413
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2414 res = expat_parse(self, "", 0, 1);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2415
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2416 if (res && TreeBuilder_CheckExact(self->target)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2417 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2418 return treebuilder_done((TreeBuilderObject*) self->target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2419 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2420
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2421 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2422 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2423
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2424 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2425 xmlparser_setevents(XMLParserObject* self, PyObject* args)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2426 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2427 /* activate element event reporting */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2428
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
2429 Py_ssize_t i;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2430 TreeBuilderObject* target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2431
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2432 PyObject* events; /* event collector */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2433 PyObject* event_set = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2434 if (!PyArg_ParseTuple(args, "O!|O:_setevents", &PyList_Type, &events,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2435 &event_set))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2436 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2437
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2438 if (!TreeBuilder_CheckExact(self->target)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2439 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2440 PyExc_TypeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2441 "event handling only supported for cElementTree.Treebuilder "
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2442 "targets"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2443 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2444 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2445 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2446
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2447 target = (TreeBuilderObject*) self->target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2448
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2449 Py_INCREF(events);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2450 Py_XDECREF(target->events);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2451 target->events = events;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2452
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2453 /* clear out existing events */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2454 Py_XDECREF(target->start_event_obj); target->start_event_obj = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2455 Py_XDECREF(target->end_event_obj); target->end_event_obj = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2456 Py_XDECREF(target->start_ns_event_obj); target->start_ns_event_obj = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2457 Py_XDECREF(target->end_ns_event_obj); target->end_ns_event_obj = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2458
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2459 if (event_set == Py_None) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2460 /* default is "end" only */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2461 target->end_event_obj = PyBytes_FromString("end");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2462 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2463 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2464
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2465 if (!PyTuple_Check(event_set)) /* FIXME: handle arbitrary sequences */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2466 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2467
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2468 for (i = 0; i < PyTuple_GET_SIZE(event_set); i++) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2469 PyObject* item = PyTuple_GET_ITEM(event_set, i);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2470 char* event;
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2471 if (!PyBytes_Check(item))
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2472 goto error;
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2473 event = PyBytes_AS_STRING(item);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2474 if (strcmp(event, "start") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2475 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2476 target->start_event_obj = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2477 } else if (strcmp(event, "end") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2478 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2479 Py_XDECREF(target->end_event_obj);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2480 target->end_event_obj = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2481 } else if (strcmp(event, "start-ns") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2482 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2483 Py_XDECREF(target->start_ns_event_obj);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2484 target->start_ns_event_obj = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2485 EXPAT(SetNamespaceDeclHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2486 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2487 (XML_StartNamespaceDeclHandler) expat_start_ns_handler,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2488 (XML_EndNamespaceDeclHandler) expat_end_ns_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2489 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2490 } else if (strcmp(event, "end-ns") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2491 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2492 Py_XDECREF(target->end_ns_event_obj);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2493 target->end_ns_event_obj = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2494 EXPAT(SetNamespaceDeclHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2495 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2496 (XML_StartNamespaceDeclHandler) expat_start_ns_handler,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2497 (XML_EndNamespaceDeclHandler) expat_end_ns_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2498 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2499 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2500 PyErr_Format(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2501 PyExc_ValueError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2502 "unknown event '%s'", event
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2503 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2504 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2505 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2506 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2507
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2508 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2509
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2510 error:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2511 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2512 PyExc_TypeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2513 "invalid event tuple"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2514 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2515 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2516 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2517
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2518 static PyMethodDef xmlparser_methods[] = {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2519 {"feed", (PyCFunction) xmlparser_feed, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2520 {"close", (PyCFunction) xmlparser_close, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2521 {"_parse", (PyCFunction) xmlparser_parse, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2522 {"_setevents", (PyCFunction) xmlparser_setevents, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2523 {NULL, NULL}
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2524 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2525
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2526 static PyObject*
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2527 xmlparser_getattro(XMLParserObject* self, PyObject* nameobj)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2528 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2529 PyObject* res;
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2530 char *name = "";
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2531
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2532 if (PyUnicode_Check(nameobj))
48660
85b67fb5672b Rename PyUnicode_AsString -> _PyUnicode_AsString and
Marc-André Lemburg <mal@egenix.com>
parents: 48414
diff changeset
2533 name = _PyUnicode_AsString(nameobj);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2534
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2535 PyErr_Clear();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2536
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2537 if (strcmp(name, "entity") == 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2538 res = self->entity;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2539 else if (strcmp(name, "target") == 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2540 res = self->target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2541 else if (strcmp(name, "version") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2542 char buffer[100];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2543 sprintf(buffer, "Expat %d.%d.%d", XML_MAJOR_VERSION,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2544 XML_MINOR_VERSION, XML_MICRO_VERSION);
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2545 return PyBytes_FromString(buffer);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2546 } else {
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2547 return PyObject_GenericGetAttr((PyObject*) self, nameobj);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2548 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2549
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2550 Py_INCREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2551 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2552 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2553
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
2554 static PyTypeObject XMLParser_Type = {
42334
e70cdce0e8b2 Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 41782
diff changeset
2555 PyVarObject_HEAD_INIT(NULL, 0)
e70cdce0e8b2 Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 41782
diff changeset
2556 "XMLParser", sizeof(XMLParserObject), 0,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2557 /* methods */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2558 (destructor)xmlparser_dealloc, /* tp_dealloc */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2559 0, /* tp_print */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2560 0, /* tp_getattr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2561 0, /* tp_setattr */
51271
87fbbf22adf3 Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 51244
diff changeset
2562 0, /* tp_reserved */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2563 0, /* tp_repr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2564 0, /* tp_as_number */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2565 0, /* tp_as_sequence */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2566 0, /* tp_as_mapping */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2567 0, /* tp_hash */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2568 0, /* tp_call */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2569 0, /* tp_str */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2570 (getattrofunc)xmlparser_getattro, /* tp_getattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2571 0, /* tp_setattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2572 0, /* tp_as_buffer */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2573 Py_TPFLAGS_DEFAULT, /* tp_flags */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2574 0, /* tp_doc */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2575 0, /* tp_traverse */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2576 0, /* tp_clear */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2577 0, /* tp_richcompare */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2578 0, /* tp_weaklistoffset */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2579 0, /* tp_iter */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2580 0, /* tp_iternext */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2581 xmlparser_methods, /* tp_methods */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2582 0, /* tp_members */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2583 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2584
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2585 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2586
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2587 /* ==================================================================== */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2588 /* python module interface */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2589
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2590 static PyMethodDef _functions[] = {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2591 {"Element", (PyCFunction) element, METH_VARARGS|METH_KEYWORDS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2592 {"SubElement", (PyCFunction) subelement, METH_VARARGS|METH_KEYWORDS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2593 {"TreeBuilder", (PyCFunction) treebuilder, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2594 #if defined(USE_EXPAT)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2595 {"XMLParser", (PyCFunction) xmlparser, METH_VARARGS|METH_KEYWORDS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2596 {"XMLTreeBuilder", (PyCFunction) xmlparser, METH_VARARGS|METH_KEYWORDS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2597 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2598 {NULL, NULL}
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2599 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2600
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2601
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2602 static struct PyModuleDef _elementtreemodule = {
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2603 PyModuleDef_HEAD_INIT,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2604 "_elementtree",
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2605 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2606 -1,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2607 _functions,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2608 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2609 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2610 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2611 NULL
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2612 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2613
40528
bce7e4a926a9 Cruft removal:
Neal Norwitz <nnorwitz@gmail.com>
parents: 39610
diff changeset
2614 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2615 PyInit__elementtree(void)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2616 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2617 PyObject* m;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2618 PyObject* g;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2619 char* bootstrap;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2620 #if defined(USE_PYEXPAT_CAPI)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2621 struct PyExpat_CAPI* capi;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2622 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2623
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2624 /* Initialize object types */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2625 if (PyType_Ready(&TreeBuilder_Type) < 0)
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2626 return NULL;
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2627 if (PyType_Ready(&Element_Type) < 0)
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2628 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2629 #if defined(USE_EXPAT)
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2630 if (PyType_Ready(&XMLParser_Type) < 0)
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2631 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2632 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2633
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2634 m = PyModule_Create(&_elementtreemodule);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2635 if (!m)
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2636 return NULL;
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2637
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2638 /* The code below requires that the module gets already added
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2639 to sys.modules. */
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2640 PyDict_SetItemString(PyImport_GetModuleDict(),
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2641 _elementtreemodule.m_name,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2642 m);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2643
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2644 /* python glue code */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2645
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2646 g = PyDict_New();
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2647 if (!g)
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2648 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2649
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2650 PyDict_SetItemString(g, "__builtins__", PyEval_GetBuiltins());
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2651
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2652 bootstrap = (
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2653
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2654 #if (PY_VERSION_HEX >= 0x02020000 && PY_VERSION_HEX < 0x02030000)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2655 "from __future__ import generators\n" /* enable yield under 2.2 */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2656 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2657
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2658 "from copy import copy, deepcopy\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2659
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2660 "try:\n"
36051
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
2661 " from xml.etree import ElementTree\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2662 "except ImportError:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2663 " import ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2664 "ET = ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2665 "del ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2666
36051
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
2667 "import _elementtree as cElementTree\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2668
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2669 "try:\n" /* check if copy works as is */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2670 " copy(cElementTree.Element('x'))\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2671 "except:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2672 " def copyelement(elem):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2673 " return elem\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2674
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2675 "def Comment(text=None):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2676 " element = cElementTree.Element(ET.Comment)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2677 " element.text = text\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2678 " return element\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2679 "cElementTree.Comment = Comment\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2680
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2681 "class ElementTree(ET.ElementTree):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2682 " def parse(self, source, parser=None):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2683 " if not hasattr(source, 'read'):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2684 " source = open(source, 'rb')\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2685 " if parser is not None:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2686 " while 1:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2687 " data = source.read(65536)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2688 " if not data:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2689 " break\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2690 " parser.feed(data)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2691 " self._root = parser.close()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2692 " else:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2693 " parser = cElementTree.XMLParser()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2694 " self._root = parser._parse(source)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2695 " return self._root\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2696 "cElementTree.ElementTree = ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2697
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2698 "def getiterator(node, tag=None):\n" /* helper */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2699 " if tag == '*':\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2700 " tag = None\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2701 #if (PY_VERSION_HEX < 0x02020000)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2702 " nodes = []\n" /* 2.1 doesn't have yield */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2703 " if tag is None or node.tag == tag:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2704 " nodes.append(node)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2705 " for node in node:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2706 " nodes.extend(getiterator(node, tag))\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2707 " return nodes\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2708 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2709 " if tag is None or node.tag == tag:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2710 " yield node\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2711 " for node in node:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2712 " for node in getiterator(node, tag):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2713 " yield node\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2714 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2715
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2716 "def parse(source, parser=None):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2717 " tree = ElementTree()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2718 " tree.parse(source, parser)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2719 " return tree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2720 "cElementTree.parse = parse\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2721
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2722 #if (PY_VERSION_HEX < 0x02020000)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2723 "if hasattr(ET, 'iterparse'):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2724 " cElementTree.iterparse = ET.iterparse\n" /* delegate on 2.1 */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2725 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2726 "class iterparse(object):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2727 " root = None\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2728 " def __init__(self, file, events=None):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2729 " if not hasattr(file, 'read'):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2730 " file = open(file, 'rb')\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2731 " self._file = file\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2732 " self._events = events\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2733 " def __iter__(self):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2734 " events = []\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2735 " b = cElementTree.TreeBuilder()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2736 " p = cElementTree.XMLParser(b)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2737 " p._setevents(events, self._events)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2738 " while 1:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2739 " data = self._file.read(16384)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2740 " if not data:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2741 " break\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2742 " p.feed(data)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2743 " for event in events:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2744 " yield event\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2745 " del events[:]\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2746 " root = p.close()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2747 " for event in events:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2748 " yield event\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2749 " self.root = root\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2750 "cElementTree.iterparse = iterparse\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2751 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2752
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2753 "def PI(target, text=None):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2754 " element = cElementTree.Element(ET.ProcessingInstruction)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2755 " element.text = target\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2756 " if text:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2757 " element.text = element.text + ' ' + text\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2758 " return element\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2759
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2760 " elem = cElementTree.Element(ET.PI)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2761 " elem.text = text\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2762 " return elem\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2763 "cElementTree.PI = cElementTree.ProcessingInstruction = PI\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2764
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2765 "def XML(text):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2766 " parser = cElementTree.XMLParser()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2767 " parser.feed(text)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2768 " return parser.close()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2769 "cElementTree.XML = cElementTree.fromstring = XML\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2770
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2771 "def XMLID(text):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2772 " tree = XML(text)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2773 " ids = {}\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2774 " for elem in tree.getiterator():\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2775 " id = elem.get('id')\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2776 " if id:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2777 " ids[id] = elem\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2778 " return tree, ids\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2779 "cElementTree.XMLID = XMLID\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2780
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2781 "cElementTree.dump = ET.dump\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2782 "cElementTree.ElementPath = ElementPath = ET.ElementPath\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2783 "cElementTree.iselement = ET.iselement\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2784 "cElementTree.QName = ET.QName\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2785 "cElementTree.tostring = ET.tostring\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2786 "cElementTree.VERSION = '" VERSION "'\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2787 "cElementTree.__version__ = '" VERSION "'\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2788 "cElementTree.XMLParserError = SyntaxError\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2789
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2790 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2791
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2792 PyRun_String(bootstrap, Py_file_input, g, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2793
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2794 elementpath_obj = PyDict_GetItemString(g, "ElementPath");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2795
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2796 elementtree_copyelement_obj = PyDict_GetItemString(g, "copyelement");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2797 if (elementtree_copyelement_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2798 /* reduce hack needed; enable reduce method */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2799 PyMethodDef* mp;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2800 for (mp = element_methods; mp->ml_name; mp++)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2801 if (mp->ml_meth == (PyCFunction) element_reduce) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2802 mp->ml_name = "__reduce__";
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2803 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2804 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2805 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2806 PyErr_Clear();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2807 elementtree_deepcopy_obj = PyDict_GetItemString(g, "deepcopy");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2808 elementtree_getiterator_obj = PyDict_GetItemString(g, "getiterator");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2809
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2810 #if defined(USE_PYEXPAT_CAPI)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2811 /* link against pyexpat, if possible */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2812 capi = PyCObject_Import("pyexpat", "expat_CAPI");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2813 if (capi &&
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2814 strcmp(capi->magic, PyExpat_CAPI_MAGIC) == 0 &&
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2815 capi->size <= sizeof(*expat_capi) &&
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2816 capi->MAJOR_VERSION == XML_MAJOR_VERSION &&
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2817 capi->MINOR_VERSION == XML_MINOR_VERSION &&
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2818 capi->MICRO_VERSION == XML_MICRO_VERSION)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2819 expat_capi = capi;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2820 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2821 expat_capi = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2822 #endif
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2823 return m;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2824
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2825 }