annotate Modules/_elementtree.c @ 65589:46bbbdcd777f

Refactor interesting use of try-finally.
author Georg Brandl <georg@python.org>
date Fri, 22 Oct 2010 06:35:59 +0000
parents 9108e7dcd7d8
children cff78ffb932a
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
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3 * $Id: _elementtree.c 3473 2009-01-11 22:53:55Z 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 * 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
11 * 2004-06-03 fl updates for elementtree 1.2
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
12 * 2005-01-05 fl major optimization effort
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
13 * 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
14 * 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
15 * 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
16 * 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
17 * 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
18 * 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
19 * 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
20 * 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
21 * 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
22 * 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
23 * 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
24 * 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
25 * 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
26 * 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
27 * 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
28 * 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
29 * 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
30 * 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
31 * 2006-03-12 fl merge in 2.5 ssize_t changes
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
32 * 2007-08-25 fl call custom builder's close method from XMLParser
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
33 * 2007-08-31 fl added iter, extend from ET 1.3
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
34 * 2007-09-01 fl fixed ParseError exception, setslice source type, etc
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
35 * 2007-09-03 fl fixed handling of negative insert indexes
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
36 * 2007-09-04 fl added itertext from ET 1.3
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
37 * 2007-09-06 fl added position attribute to ParseError exception
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
38 * 2008-06-06 fl delay error reporting in iterparse (from Hrvoje Niksic)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
39 *
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
40 * Copyright (c) 1999-2009 by Secret Labs AB. All rights reserved.
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
41 * Copyright (c) 1999-2009 by Fredrik Lundh.
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
42 *
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
43 * info@pythonware.com
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
44 * http://www.pythonware.com
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
45 */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
46
36051
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
47 /* Licensed to PSF under a Contributor Agreement. */
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
48 /* See http://www.python.org/psf/license for licensing details. */
36051
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
49
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
50 #include "Python.h"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
51
39610
3674f20ac781 Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
52 #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
53
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
54 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
55 /* configuration */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
56
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
57 /* 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
58 #define USE_EXPAT
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
59
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
60 /* Define to do all expat calls via pyexpat's embedded expat library */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
61 /* #define USE_PYEXPAT_CAPI */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
62
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
63 /* 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
64 allocations. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
65 #define STATIC_CHILDREN 4
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
66
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
67 /* 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
68 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
69 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
70 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
71
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
72 /* 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
73 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
74 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
75 32-bit platforms. */
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
79 #if 0
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
80 static int memory = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
81 #define ALLOC(size, comment)\
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
82 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
83 #define RELEASE(size, comment)\
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
84 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
85 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
86 #define ALLOC(size, comment)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
87 #define RELEASE(size, comment)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
88 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
89
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
90 /* compiler tweaks */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
91 #if defined(_MSC_VER)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
92 #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
93 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
94 #define LOCAL(type) static type
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
95 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
96
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
97 /* compatibility macros */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
98 #if (PY_VERSION_HEX < 0x02060000)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
99 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
100 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
101 #endif
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
102
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
103 #if (PY_VERSION_HEX < 0x02050000)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
104 typedef int Py_ssize_t;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
105 #define lenfunc inquiry
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
106 #endif
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
107
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
108 #if (PY_VERSION_HEX < 0x02040000)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
109 #define PyDict_CheckExact PyDict_Check
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
110
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
111 #if !defined(Py_RETURN_NONE)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
112 #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
113 #endif
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
114 #endif
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
115
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
116 /* 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
117 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
118 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
119 info. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
120 #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
121 #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
122 #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
123
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
124 /* glue functions (see the init function for details) */
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
125 static PyObject* elementtree_parseerror_obj;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
126 static PyObject* elementtree_copyelement_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
127 static PyObject* elementtree_deepcopy_obj;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
128 static PyObject* elementtree_iter_obj;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
129 static PyObject* elementtree_itertext_obj;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
130 static PyObject* elementpath_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
131
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
132 /* helpers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
133
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
134 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
135 deepcopy(PyObject* object, PyObject* memo)
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 /* 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
138
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
139 PyObject* args;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
140 PyObject* result;
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 if (!elementtree_deepcopy_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
143 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
144 PyExc_RuntimeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
145 "deepcopy helper not found"
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 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
148 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
149
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
150 args = PyTuple_New(2);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
151 if (!args)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
152 return NULL;
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
153
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
154 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
155 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
156
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
157 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
158
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
159 Py_DECREF(args);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
160
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
161 return result;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
164 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
165 list_join(PyObject* list)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
166 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
167 /* 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
168
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
169 PyObject* joiner;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
170 PyObject* function;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
171 PyObject* args;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
172 PyObject* result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
173
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
174 switch (PyList_GET_SIZE(list)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
175 case 0:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
176 Py_DECREF(list);
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
177 return PyBytes_FromString("");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
178 case 1:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
179 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
180 Py_INCREF(result);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
181 Py_DECREF(list);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
182 return result;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
185 /* 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
186 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
187
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
188 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
189 if (!joiner)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
190 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
191
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
192 function = PyObject_GetAttrString(joiner, "join");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
193 if (!function) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
194 Py_DECREF(joiner);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
195 return NULL;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
198 args = PyTuple_New(1);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
199 if (!args)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
200 return NULL;
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
201
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
202 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
203
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
204 result = PyObject_CallObject(function, args);
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 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
207 Py_DECREF(function);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
208 Py_DECREF(joiner);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
209
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
210 return result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
211 }
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 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
214 /* the element type */
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 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
217
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
218 /* 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
219 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
220
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
221 /* child elements */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
222 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
223 int allocated; /* allocated items */
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 /* 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
226 PyObject* *children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
227
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
228 PyObject* _children[STATIC_CHILDREN];
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 } ElementObjectExtra;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
231
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
232 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
233 PyObject_HEAD
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
234
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
235 /* element tag (a string). */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
236 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
237
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
238 /* 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
239 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
240 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
241 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
242 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
243 should be left intact. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
244 PyObject* text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
245
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
246 /* 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
247 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
248 PyObject* tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
249
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
250 ElementObjectExtra* extra;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
251
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
252 } ElementObject;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
253
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
254 static PyTypeObject Element_Type;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
255
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
256 #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
257
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 /* element constructor and destructor */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
260
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
261 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
262 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
263 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
264 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
265 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
266 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
267
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
268 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
269 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
270
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
271 Py_INCREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
272 self->extra->attrib = attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
273
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
274 self->extra->length = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
275 self->extra->allocated = STATIC_CHILDREN;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
276 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
277
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
278 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
279 }
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 LOCAL(void)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
282 element_dealloc_extra(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
283 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
284 int 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 Py_DECREF(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
287
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
288 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
289 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
290
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
291 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
292 PyObject_Free(self->extra->children);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
293
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
294 PyObject_Free(self->extra);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
295 }
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 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
298 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
299 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
300 ElementObject* self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
301
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
302 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
303 if (self == NULL)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
304 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
305
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
306 /* use None for empty dictionaries */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
307 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
308 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
309
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
310 self->extra = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
311
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
312 if (attrib != Py_None) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
313
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37144
diff changeset
314 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
315 PyObject_Del(self);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
316 return NULL;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
317 }
36050
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 self->extra->length = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
320 self->extra->allocated = STATIC_CHILDREN;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
321 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
322
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
323 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
324
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
325 Py_INCREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
326 self->tag = tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
327
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
328 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
329 self->text = Py_None;
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 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
332 self->tail = Py_None;
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 ALLOC(sizeof(ElementObject), "create element");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
335
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
336 return (PyObject*) self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
337 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
338
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
339 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
340 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
341 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
342 int size;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
343 PyObject* *children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
344
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
345 /* 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
346 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
347
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
348 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
349 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
350
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
351 size = self->extra->length + extra;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
352
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
353 if (size > self->extra->allocated) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
354 /* 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
355 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
356 /* 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
357 * 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
358 * 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
359 * be safe.
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
360 */
14d4104976fc Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
361 size = size ? size : 1;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
362 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
363 /* 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
364 * "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
365 * 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
366 */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
367 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
368 size * sizeof(PyObject*));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
369 if (!children)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
370 goto nomemory;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
371 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
372 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
373 if (!children)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
374 goto nomemory;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
375 /* 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
376 memcpy(children, self->extra->children,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
377 self->extra->length * sizeof(PyObject*));
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
378 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
379 self->extra->children = children;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
380 self->extra->allocated = size;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
381 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
382
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
383 return 0;
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 nomemory:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
386 PyErr_NoMemory();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
387 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
388 }
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 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
391 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
392 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
393 /* 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
394
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
395 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
396 return -1;
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 Py_INCREF(element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
399 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
400
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
401 self->extra->length++;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
402
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
403 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
404 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
405
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
406 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
407 element_get_attrib(ElementObject* self)
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 /* 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
410 /* 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
411
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
412 PyObject* res = self->extra->attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
413
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
414 if (res == Py_None) {
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
415 Py_DECREF(res);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
416 /* create missing dictionary */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
417 res = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
418 if (!res)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
419 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
420 self->extra->attrib = res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
421 }
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 res;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
426 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
427 element_get_text(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
428 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
429 /* 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
430
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
431 PyObject* res = self->text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
432
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
433 if (JOIN_GET(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
434 res = JOIN_OBJ(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
435 if (PyList_CheckExact(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
436 res = list_join(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
437 if (!res)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
438 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
439 self->text = res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
440 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
441 }
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 res;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
446 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
447 element_get_tail(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
448 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
449 /* 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
450
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
451 PyObject* res = self->tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
452
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
453 if (JOIN_GET(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
454 res = JOIN_OBJ(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
455 if (PyList_CheckExact(res)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
456 res = list_join(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
457 if (!res)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
458 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
459 self->tail = res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
460 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
461 }
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 return res;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
466 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
467 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
468 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
469 PyObject* elem;
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 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
472 PyObject* attrib = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
473 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
474 &PyDict_Type, &attrib))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
475 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
476
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
477 if (attrib || kw) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
478 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
479 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
480 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
481 if (kw)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
482 PyDict_Update(attrib, kw);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
483 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
484 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
485 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
486 }
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 elem = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
489
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
490 Py_DECREF(attrib);
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 return 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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
495 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
496 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
497 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
498 PyObject* elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
499
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
500 ElementObject* parent;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
501 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
502 PyObject* attrib = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
503 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
504 &Element_Type, &parent, &tag,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
505 &PyDict_Type, &attrib))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
506 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
507
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
508 if (attrib || kw) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
509 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
510 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
511 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
512 if (kw)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
513 PyDict_Update(attrib, kw);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
514 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
515 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
516 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
517 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
518
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
519 elem = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
520
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
521 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
522
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
523 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
524 Py_DECREF(elem);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
525 return NULL;
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
526 }
36050
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 return elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
529 }
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 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
532 element_dealloc(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
533 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
534 if (self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
535 element_dealloc_extra(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
536
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
537 /* discard attributes */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
538 Py_DECREF(self->tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
539 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
540 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
541
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
542 RELEASE(sizeof(ElementObject), "destroy element");
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 PyObject_Del(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
545 }
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 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
548 /* methods (in alphabetical order) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
549
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
550 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
551 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
552 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
553 PyObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
554 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
555 return NULL;
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 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
558 return NULL;
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 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
561 }
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 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
564 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
565 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
566 if (!PyArg_ParseTuple(args, ":clear"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
567 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
568
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
569 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
570 element_dealloc_extra(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
571 self->extra = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
572 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
573
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
574 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
575 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
576 self->text = Py_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 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
579 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
580 self->tail = Py_None;
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 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
583 }
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 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
586 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
587 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
588 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
589 ElementObject* element;
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 (!PyArg_ParseTuple(args, ":__copy__"))
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 element = (ElementObject*) element_new(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
595 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
596 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
597 if (!element)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
598 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
599
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
600 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
601 element->text = self->text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
602 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
603
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
604 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
605 element->tail = self->tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
606 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
607
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
608 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
609
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
610 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
611 Py_DECREF(element);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
612 return NULL;
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
613 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
614
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
615 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
616 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
617 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
618 }
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 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
621
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
622 }
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 return (PyObject*) element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
625 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
626
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
627 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
628 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
629 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
630 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
631 ElementObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
632 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
633 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
634 PyObject* text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
635 PyObject* tail;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
636 PyObject* id;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
637
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
638 PyObject* memo;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
639 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
640 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
641
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
642 tag = deepcopy(self->tag, memo);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
643 if (!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 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
647 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
648 if (!attrib) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
649 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
650 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
651 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
652 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
653 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
654 attrib = Py_None;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
657 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
658
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
659 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
660 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
661
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
662 if (!element)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
663 return NULL;
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 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
666 if (!text)
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->text);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
669 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
670
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
671 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
672 if (!tail)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
673 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
674 Py_DECREF(element->tail);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
675 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
676
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
677 if (self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
678
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
679 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
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 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
683 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
684 if (!child) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
685 element->extra->length = i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
686 goto error;
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 element->extra->children[i] = child;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
689 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
690
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
691 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
692
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
695 /* 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
696 id = PyLong_FromLong((Py_uintptr_t) self);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
697 if (!id)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
698 goto error;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
699
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
700 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
701
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
702 Py_DECREF(id);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
703
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
704 if (i < 0)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
705 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
706
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
707 return (PyObject*) element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
708
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
709 error:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
710 Py_DECREF(element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
711 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
712 }
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 LOCAL(int)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
715 checkpath(PyObject* tag)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
716 {
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
717 Py_ssize_t i;
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
718 int check = 1;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
719
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
720 /* 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
721
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
722 #define PATHCHAR(ch) \
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
723 (ch == '/' || ch == '*' || ch == '[' || ch == '@' || ch == '.')
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
724
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
725 if (PyUnicode_Check(tag)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
726 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
727 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
728 if (p[i] == '{')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
729 check = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
730 else if (p[i] == '}')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
731 check = 1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
732 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
733 return 1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
734 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
735 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
736 }
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
737 if (PyBytes_Check(tag)) {
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
738 char *p = PyBytes_AS_STRING(tag);
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
739 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
740 if (p[i] == '{')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
741 check = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
742 else if (p[i] == '}')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
743 check = 1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
744 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
745 return 1;
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 return 0;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
750 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
751 }
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 static PyObject*
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
754 element_extend(ElementObject* self, PyObject* args)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
755 {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
756 PyObject* seq;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
757 Py_ssize_t i, seqlen = 0;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
758
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
759 PyObject* seq_in;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
760 if (!PyArg_ParseTuple(args, "O:extend", &seq_in))
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
761 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
762
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
763 seq = PySequence_Fast(seq_in, "");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
764 if (!seq) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
765 PyErr_Format(
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
766 PyExc_TypeError,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
767 "expected sequence, not \"%.200s\"", Py_TYPE(seq_in)->tp_name
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
768 );
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
769 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
770 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
771
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
772 seqlen = PySequence_Size(seq);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
773 for (i = 0; i < seqlen; i++) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
774 PyObject* element = PySequence_Fast_GET_ITEM(seq, i);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
775 if (element_add_subelement(self, element) < 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
776 Py_DECREF(seq);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
777 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
778 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
779 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
780
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
781 Py_DECREF(seq);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
782
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
783 Py_RETURN_NONE;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
784 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
785
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
786 static PyObject*
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
787 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
788 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
789 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
790
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
791 PyObject* tag;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
792 PyObject* namespaces = Py_None;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
793 if (!PyArg_ParseTuple(args, "O|O:find", &tag, &namespaces))
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
794 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
795
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
796 if (checkpath(tag) || namespaces != Py_None)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
797 return PyObject_CallMethod(
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
798 elementpath_obj, "find", "OOO", self, tag, namespaces
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
799 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
800
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
801 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
802 Py_RETURN_NONE;
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 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
805 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
806 if (Element_CheckExact(item) &&
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
807 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
808 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
809 return item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
810 }
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
813 Py_RETURN_NONE;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
816 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
817 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
818 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
819 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
820
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
821 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
822 PyObject* default_value = Py_None;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
823 PyObject* namespaces = Py_None;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
824 if (!PyArg_ParseTuple(args, "O|OO:findtext", &tag, &default_value, &namespaces))
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
825 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
826
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
827 if (checkpath(tag) || namespaces != Py_None)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
828 return PyObject_CallMethod(
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
829 elementpath_obj, "findtext", "OOOO", self, tag, default_value, namespaces
36050
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
832 if (!self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
833 Py_INCREF(default_value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
834 return default_value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
835 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
836
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
837 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
838 ElementObject* item = (ElementObject*) self->extra->children[i];
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
839 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
840
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
841 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
842 if (text == Py_None)
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
843 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
844 Py_XINCREF(text);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
845 return text;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
846 }
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
849 Py_INCREF(default_value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
850 return default_value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
851 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
852
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
853 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
854 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
855 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
856 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
857 PyObject* out;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
858
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
859 PyObject* tag;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
860 PyObject* namespaces = Py_None;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
861 if (!PyArg_ParseTuple(args, "O|O:findall", &tag, &namespaces))
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
862 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
863
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
864 if (checkpath(tag) || namespaces != Py_None)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
865 return PyObject_CallMethod(
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
866 elementpath_obj, "findall", "OOO", self, tag, namespaces
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
867 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
868
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
869 out = PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
870 if (!out)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
871 return NULL;
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 (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
874 return out;
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 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
877 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
878 if (Element_CheckExact(item) &&
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
879 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
880 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
881 Py_DECREF(out);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
882 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
883 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
884 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
885 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
886
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
887 return out;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
890 static PyObject*
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
891 element_iterfind(ElementObject* self, PyObject* args)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
892 {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
893 PyObject* tag;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
894 PyObject* namespaces = Py_None;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
895 if (!PyArg_ParseTuple(args, "O|O:iterfind", &tag, &namespaces))
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
896 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
897
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
898 return PyObject_CallMethod(
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
899 elementpath_obj, "iterfind", "OOO", self, tag, namespaces
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
900 );
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
901 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
902
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
903 static PyObject*
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
904 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
905 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
906 PyObject* value;
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 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
909 PyObject* default_value = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
910 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
911 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
912
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
913 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
914 value = default_value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
915 else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
916 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
917 if (!value)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
918 value = default_value;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
921 Py_INCREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
922 return value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
923 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
924
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
925 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
926 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
927 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
928 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
929 PyObject* list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
930
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
931 /* FIXME: report as deprecated? */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
932
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
933 if (!PyArg_ParseTuple(args, ":getchildren"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
934 return NULL;
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 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
937 return PyList_New(0);
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 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
940 if (!list)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
941 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
942
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
943 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
944 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
945 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
946 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
947 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
948
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
949 return list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
950 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
951
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
952 static PyObject*
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
953 element_iter(ElementObject* self, PyObject* args)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
954 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
955 PyObject* result;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
956
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
957 PyObject* tag = Py_None;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
958 if (!PyArg_ParseTuple(args, "|O:iter", &tag))
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
959 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
960
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
961 if (!elementtree_iter_obj) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
962 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
963 PyExc_RuntimeError,
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
964 "iter helper not found"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
965 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
966 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
967 }
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 args = PyTuple_New(2);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
970 if (!args)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
971 return NULL;
36450
c193283e63bc Check return results for errors
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
972
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
973 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
974 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
975
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
976 result = PyObject_CallObject(elementtree_iter_obj, args);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
977
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
978 Py_DECREF(args);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
979
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
980 return result;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
981 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
982
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
983
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
984 static PyObject*
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
985 element_itertext(ElementObject* self, PyObject* args)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
986 {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
987 PyObject* result;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
988
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
989 if (!PyArg_ParseTuple(args, ":itertext"))
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
990 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
991
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
992 if (!elementtree_itertext_obj) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
993 PyErr_SetString(
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
994 PyExc_RuntimeError,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
995 "itertext helper not found"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
996 );
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
997 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
998 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
999
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1000 args = PyTuple_New(1);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1001 if (!args)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1002 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1003
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1004 Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1005
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1006 result = PyObject_CallObject(elementtree_itertext_obj, args);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1007
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1008 Py_DECREF(args);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1009
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1010 return result;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1013 static PyObject*
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1014 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
1015 {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1016 ElementObject* self = (ElementObject*) self_;
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1017
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1018 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
1019 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1020 PyExc_IndexError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1021 "child index out of range"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1022 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1023 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1024 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1025
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1026 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
1027 return self->extra->children[index];
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1030 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1031 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
1032 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1033 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1034
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1035 int index;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1036 PyObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1037 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
1038 &Element_Type, &element))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1039 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1040
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1041 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1042 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1043
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1044 if (index < 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1045 index += self->extra->length;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1046 if (index < 0)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1047 index = 0;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1048 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1049 if (index > self->extra->length)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1050 index = self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1051
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1052 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
1053 return NULL;
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 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
1056 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
1057
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1058 Py_INCREF(element);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1059 self->extra->children[index] = element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1060
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1061 self->extra->length++;
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 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1064 }
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 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1067 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
1068 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1069 if (!PyArg_ParseTuple(args, ":items"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1070 return NULL;
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 (!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
1073 return PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1074
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1075 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
1076 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1077
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1078 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1079 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
1080 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1081 if (!PyArg_ParseTuple(args, ":keys"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1082 return NULL;
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 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
1085 return PyList_New(0);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1086
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1087 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
1088 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1089
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1090 static Py_ssize_t
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1091 element_length(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1092 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1093 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1094 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1095
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1096 return self->extra->length;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1097 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1098
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1099 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1100 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
1101 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1102 PyObject* elem;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1103
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1104 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1105 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1106 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
1107 return NULL;
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 attrib = PyDict_Copy(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1110 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1111 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1112
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1113 elem = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1114
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1115 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1116
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1117 return elem;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1120 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1121 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
1122 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1123 if (!PyArg_ParseTuple(args, ":__reduce__"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1124 return NULL;
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 /* 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
1127 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
1128 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
1129 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
1130 right thing. */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1131
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1132 if (!elementtree_copyelement_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1133 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1134 PyExc_RuntimeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1135 "copyelement helper not found"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1136 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1137 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1138 }
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 return Py_BuildValue(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1141 "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
1142 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1143 }
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 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1146 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
1147 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1148 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1149
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1150 PyObject* element;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1151 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
1152 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1153
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1154 if (!self->extra) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1155 /* 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
1156 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1157 PyExc_ValueError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1158 "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
1159 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1160 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1161 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1162
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1163 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
1164 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
1165 break;
51244
e9675d72e3e3 Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 48660
diff changeset
1166 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
1167 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1168 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1169
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1170 if (i == self->extra->length) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1171 /* 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
1172 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1173 PyExc_ValueError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1174 "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
1175 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1176 return NULL;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1179 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
1180
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1181 self->extra->length--;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1182
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1183 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
1184 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
1185
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1186 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1187 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1188
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1189 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1190 element_repr(ElementObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1191 {
41782
bee8d01ef42c Add a format specifier %R to PyUnicode_FromFormat(), which embeds
Walter Dörwald <walter@livinglogic.de>
parents: 41769
diff changeset
1192 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
1193 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1194
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1195 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1196 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
1197 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1198 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1199
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1200 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1201 PyObject* value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1202 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
1203 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1204
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1205 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1206 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1207
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1208 attrib = element_get_attrib(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1209 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1210 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1211
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1212 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
1213 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1214
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1215 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1216 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1217
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1218 static int
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1219 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
1220 {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1221 ElementObject* self = (ElementObject*) self_;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1222 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1223 PyObject* old;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1224
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1225 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
1226 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1227 PyExc_IndexError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1228 "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
1229 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1230 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1231
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1232 old = self->extra->children[index];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1233
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1234 if (item) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1235 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1236 self->extra->children[index] = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1237 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1238 self->extra->length--;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1239 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
1240 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
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 Py_DECREF(old);
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 return 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1246 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1247
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1248 static PyObject*
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1249 element_subscr(PyObject* self_, PyObject* item)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1250 {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1251 ElementObject* self = (ElementObject*) self_;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1252
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1253 #if (PY_VERSION_HEX < 0x02050000)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1254 if (PyInt_Check(item) || PyLong_Check(item)) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1255 long i = PyInt_AsLong(item);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1256 #else
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1257 if (PyIndex_Check(item)) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1258 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1259 #endif
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1260
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1261 if (i == -1 && PyErr_Occurred()) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1262 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1263 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1264 if (i < 0 && self->extra)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1265 i += self->extra->length;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1266 return element_getitem(self_, i);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1267 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1268 else if (PySlice_Check(item)) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1269 Py_ssize_t start, stop, step, slicelen, cur, i;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1270 PyObject* list;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1271
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1272 if (!self->extra)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1273 return PyList_New(0);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1274
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1275 if (PySlice_GetIndicesEx((PySliceObject *)item,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1276 self->extra->length,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1277 &start, &stop, &step, &slicelen) < 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1278 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1279 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1280
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1281 if (slicelen <= 0)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1282 return PyList_New(0);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1283 else {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1284 list = PyList_New(slicelen);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1285 if (!list)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1286 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1287
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1288 for (cur = start, i = 0; i < slicelen;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1289 cur += step, i++) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1290 PyObject* item = self->extra->children[cur];
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1291 Py_INCREF(item);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1292 PyList_SET_ITEM(list, i, item);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1293 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1294
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1295 return list;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1296 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1297 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1298 else {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1299 PyErr_SetString(PyExc_TypeError,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1300 "element indices must be integers");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1301 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1302 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1303 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1304
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1305 static int
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1306 element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1307 {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1308 ElementObject* self = (ElementObject*) self_;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1309
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1310 #if (PY_VERSION_HEX < 0x02050000)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1311 if (PyInt_Check(item) || PyLong_Check(item)) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1312 long i = PyInt_AsLong(item);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1313 #else
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1314 if (PyIndex_Check(item)) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1315 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1316 #endif
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1317
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1318 if (i == -1 && PyErr_Occurred()) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1319 return -1;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1320 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1321 if (i < 0 && self->extra)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1322 i += self->extra->length;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1323 return element_setitem(self_, i, value);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1324 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1325 else if (PySlice_Check(item)) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1326 Py_ssize_t start, stop, step, slicelen, newlen, cur, i;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1327
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1328 PyObject* recycle = NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1329 PyObject* seq = NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1330
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1331 if (!self->extra)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1332 element_new_extra(self, NULL);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1333
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1334 if (PySlice_GetIndicesEx((PySliceObject *)item,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1335 self->extra->length,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1336 &start, &stop, &step, &slicelen) < 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1337 return -1;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1338 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1339
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1340 if (value == NULL)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1341 newlen = 0;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1342 else {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1343 seq = PySequence_Fast(value, "");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1344 if (!seq) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1345 PyErr_Format(
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1346 PyExc_TypeError,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1347 "expected sequence, not \"%.200s\"", Py_TYPE(value)->tp_name
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1348 );
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1349 return -1;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1350 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1351 newlen = PySequence_Size(seq);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1352 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1353
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1354 if (step != 1 && newlen != slicelen)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1355 {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1356 PyErr_Format(PyExc_ValueError,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1357 #if (PY_VERSION_HEX < 0x02050000)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1358 "attempt to assign sequence of size %d "
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1359 "to extended slice of size %d",
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1360 #else
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1361 "attempt to assign sequence of size %zd "
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1362 "to extended slice of size %zd",
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1363 #endif
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1364 newlen, slicelen
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1365 );
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1366 return -1;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1367 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1368
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1369
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1370 /* Resize before creating the recycle bin, to prevent refleaks. */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1371 if (newlen > slicelen) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1372 if (element_resize(self, newlen - slicelen) < 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1373 if (seq) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1374 Py_DECREF(seq);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1375 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1376 return -1;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1377 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1378 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1379
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1380 if (slicelen > 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1381 /* to avoid recursive calls to this method (via decref), move
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1382 old items to the recycle bin here, and get rid of them when
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1383 we're done modifying the element */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1384 recycle = PyList_New(slicelen);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1385 if (!recycle) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1386 if (seq) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1387 Py_DECREF(seq);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1388 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1389 return -1;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1390 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1391 for (cur = start, i = 0; i < slicelen;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1392 cur += step, i++)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1393 PyList_SET_ITEM(recycle, i, self->extra->children[cur]);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1394 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1395
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1396 if (newlen < slicelen) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1397 /* delete slice */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1398 for (i = stop; i < self->extra->length; i++)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1399 self->extra->children[i + newlen - slicelen] = self->extra->children[i];
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1400 } else if (newlen > slicelen) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1401 /* insert slice */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1402 for (i = self->extra->length-1; i >= stop; i--)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1403 self->extra->children[i + newlen - slicelen] = self->extra->children[i];
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1404 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1405
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1406 /* replace the slice */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1407 for (cur = start, i = 0; i < newlen;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1408 cur += step, i++) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1409 PyObject* element = PySequence_Fast_GET_ITEM(seq, i);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1410 Py_INCREF(element);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1411 self->extra->children[cur] = element;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1412 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1413
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1414 self->extra->length += newlen - slicelen;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1415
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1416 if (seq) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1417 Py_DECREF(seq);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1418 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1419
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1420 /* discard the recycle bin, and everything in it */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1421 Py_XDECREF(recycle);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1422
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1423 return 0;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1424 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1425 else {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1426 PyErr_SetString(PyExc_TypeError,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1427 "element indices must be integers");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1428 return -1;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1429 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1430 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1431
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1432 static PyMethodDef element_methods[] = {
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 {"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
1435
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1436 {"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
1437 {"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
1438
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1439 {"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
1440 {"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
1441 {"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
1442
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1443 {"append", (PyCFunction) element_append, METH_VARARGS},
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1444 {"extend", (PyCFunction) element_extend, METH_VARARGS},
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1445 {"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
1446 {"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
1447
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1448 {"iter", (PyCFunction) element_iter, METH_VARARGS},
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1449 {"itertext", (PyCFunction) element_itertext, METH_VARARGS},
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1450 {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS},
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1451
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1452 {"getiterator", (PyCFunction) element_iter, METH_VARARGS},
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1453 {"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
1454
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1455 {"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
1456 {"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
1457
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1458 {"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
1459
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1460 {"__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
1461 {"__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
1462
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1463 /* 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
1464 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
1465 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
1466 details). */
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 /* 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
1469 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
1470 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
1471 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
1472
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1473 {"!__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
1474
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1475 {NULL, NULL}
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
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1478 static PyObject*
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1479 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
1480 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1481 PyObject* res;
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1482 char *name = "";
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1483
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1484 if (PyUnicode_Check(nameobj))
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1485 name = _PyUnicode_AsString(nameobj);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1486
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1487 /* handle common attributes first */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1488 if (strcmp(name, "tag") == 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1489 res = self->tag;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1490 Py_INCREF(res);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1491 return res;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1492 } else if (strcmp(name, "text") == 0) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1493 res = element_get_text(self);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1494 Py_INCREF(res);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1495 return res;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1496 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1497
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1498 /* methods */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1499 res = PyObject_GenericGetAttr((PyObject*) self, nameobj);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1500 if (res)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1501 return res;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1502
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1503 /* less common attributes */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1504 if (strcmp(name, "tail") == 0) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1505 PyErr_Clear();
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1506 res = element_get_tail(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1507 } else if (strcmp(name, "attrib") == 0) {
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1508 PyErr_Clear();
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1509 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1510 element_new_extra(self, NULL);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1511 res = element_get_attrib(self);
36050
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
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1514 if (!res)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1515 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1516
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1517 Py_INCREF(res);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1518 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1519 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1520
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1521 static int
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1522 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
1523 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1524 if (value == NULL) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1525 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1526 PyExc_AttributeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1527 "can't delete element attributes"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1528 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1529 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1530 }
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 if (strcmp(name, "tag") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1533 Py_DECREF(self->tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1534 self->tag = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1535 Py_INCREF(self->tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1536 } 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
1537 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
1538 self->text = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1539 Py_INCREF(self->text);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1540 } 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
1541 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
1542 self->tail = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1543 Py_INCREF(self->tail);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1544 } 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
1545 if (!self->extra)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1546 element_new_extra(self, NULL);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1547 Py_DECREF(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1548 self->extra->attrib = value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1549 Py_INCREF(self->extra->attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1550 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1551 PyErr_SetString(PyExc_AttributeError, name);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1552 return -1;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1553 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1554
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1555 return 0;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1558 static PySequenceMethods element_as_sequence = {
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1559 (lenfunc) element_length,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1560 0, /* sq_concat */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1561 0, /* sq_repeat */
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1562 element_getitem,
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1563 0,
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36450
diff changeset
1564 element_setitem,
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1565 0,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1566 };
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1567
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1568 static PyMappingMethods element_as_mapping = {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1569 (lenfunc) element_length,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1570 (binaryfunc) element_subscr,
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1571 (objobjargproc) element_ass_subscr,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1572 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1573
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
1574 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
1575 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
1576 "Element", sizeof(ElementObject), 0,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1577 /* methods */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1578 (destructor)element_dealloc, /* tp_dealloc */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1579 0, /* tp_print */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1580 0, /* tp_getattr */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1581 (setattrfunc)element_setattr, /* tp_setattr */
51271
87fbbf22adf3 Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 51244
diff changeset
1582 0, /* tp_reserved */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1583 (reprfunc)element_repr, /* tp_repr */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1584 0, /* tp_as_number */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1585 &element_as_sequence, /* tp_as_sequence */
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1586 &element_as_mapping, /* tp_as_mapping */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1587 0, /* tp_hash */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1588 0, /* tp_call */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1589 0, /* tp_str */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1590 (getattrofunc)element_getattro, /* tp_getattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1591 0, /* tp_setattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1592 0, /* tp_as_buffer */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1593 Py_TPFLAGS_DEFAULT, /* tp_flags */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1594 0, /* tp_doc */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1595 0, /* tp_traverse */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1596 0, /* tp_clear */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1597 0, /* tp_richcompare */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1598 0, /* tp_weaklistoffset */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1599 0, /* tp_iter */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1600 0, /* tp_iternext */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1601 element_methods, /* tp_methods */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
1602 0, /* tp_members */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1603 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1604
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1605 /* ==================================================================== */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1606 /* the tree builder type */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1607
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1608 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1609 PyObject_HEAD
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1610
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1611 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
1612
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1613 ElementObject* this; /* current node */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1614 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
1615
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1616 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
1617
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1618 PyObject* stack; /* element stack */
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1619 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
1620
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1621 /* element tracing */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1622 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
1623 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
1624 PyObject* end_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1625 PyObject* start_ns_event_obj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1626 PyObject* end_ns_event_obj;
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 } TreeBuilderObject;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1629
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
1630 static PyTypeObject TreeBuilder_Type;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1631
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
1632 #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
1633
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1634 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1635 /* constructor and destructor */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1636
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1637 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1638 treebuilder_new(void)
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 TreeBuilderObject* self;
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 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
1643 if (self == NULL)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1644 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1645
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1646 self->root = NULL;
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 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1649 self->this = (ElementObject*) Py_None;
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 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1652 self->last = (ElementObject*) Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1653
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1654 self->data = NULL;
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 self->stack = PyList_New(20);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1657 self->index = 0;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1658
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1659 self->events = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1660 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
1661 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
1662
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1663 ALLOC(sizeof(TreeBuilderObject), "create treebuilder");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1664
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1665 return (PyObject*) self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1666 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1667
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1668 static PyObject*
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1669 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
1670 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1671 if (!PyArg_ParseTuple(args, ":TreeBuilder"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1672 return NULL;
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 return treebuilder_new();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1675 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1676
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1677 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1678 treebuilder_dealloc(TreeBuilderObject* self)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1679 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1680 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
1681 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
1682 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
1683 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
1684 Py_XDECREF(self->events);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1685 Py_DECREF(self->stack);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1686 Py_XDECREF(self->data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1687 Py_DECREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1688 Py_DECREF(self->this);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1689 Py_XDECREF(self->root);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1690
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1691 RELEASE(sizeof(TreeBuilderObject), "destroy treebuilder");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1692
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1693 PyObject_Del(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1694 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1695
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1696 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1697 /* handlers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1698
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1699 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1700 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
1701 PyObject* standalone)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1702 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1703 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1704 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1705
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1706 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1707 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
1708 PyObject* attrib)
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 PyObject* node;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1711 PyObject* this;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1712
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1713 if (self->data) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1714 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
1715 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
1716 self->last->text = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1717 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
1718 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1719 } else {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1720 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
1721 self->last->tail = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1722 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
1723 );
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 self->data = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1726 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1727
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1728 node = element_new(tag, attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1729 if (!node)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1730 return NULL;
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 this = (PyObject*) self->this;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1733
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1734 if (this != Py_None) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1735 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
1736 goto error;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1737 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1738 if (self->root) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1739 PyErr_SetString(
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1740 elementtree_parseerror_obj,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1741 "multiple elements on top level"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1742 );
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1743 goto error;
36050
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 Py_INCREF(node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1746 self->root = node;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1747 }
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->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
1750 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
1751 goto error;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1752 Py_INCREF(this);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1753 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1754 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
1755 goto error;
36050
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 self->index++;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1758
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1759 Py_DECREF(this);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1760 Py_INCREF(node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1761 self->this = (ElementObject*) node;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1762
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1763 Py_DECREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1764 Py_INCREF(node);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1765 self->last = (ElementObject*) node;
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 if (self->start_event_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1768 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1769 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
1770 res = PyTuple_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1771 if (res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1772 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
1773 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
1774 PyList_Append(self->events, res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1775 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1776 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1777 PyErr_Clear(); /* FIXME: propagate error */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1778 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1779
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1780 return node;
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1781
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1782 error:
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1783 Py_DECREF(node);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1784 return NULL;
36050
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1787 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1788 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
1789 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1790 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
1791 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
1792 /* 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
1793 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
1794 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1795 /* 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
1796 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
1797 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1798 /* 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
1799 if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 &&
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1800 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
1801 /* 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
1802 the most common case by resizing the existing string... */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1803 Py_ssize_t size = PyBytes_GET_SIZE(self->data);
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1804 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
1805 return NULL;
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
1806 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
1807 } 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
1808 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
1809 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1810 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1811 PyObject* list = PyList_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1812 if (!list)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1813 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1814 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
1815 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
1816 self->data = list;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1817 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1818 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1819
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1820 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1821 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1822
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1823 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1824 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
1825 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1826 PyObject* item;
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 if (self->data) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1829 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
1830 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
1831 self->last->text = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1832 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
1833 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1834 } else {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
1835 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
1836 self->last->tail = JOIN_SET(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1837 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
1838 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1839 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1840 self->data = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1841 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1842
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1843 if (self->index == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1844 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1845 PyExc_IndexError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1846 "pop from empty stack"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1847 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1848 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1849 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1850
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1851 self->index--;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1852
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1853 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
1854 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1855
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1856 Py_DECREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1857
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1858 self->last = (ElementObject*) self->this;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1859 self->this = (ElementObject*) item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1860
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1861 if (self->end_event_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1862 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1863 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
1864 PyObject* node = (PyObject*) self->last;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1865 res = PyTuple_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1866 if (res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1867 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
1868 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
1869 PyList_Append(self->events, res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1870 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1871 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1872 PyErr_Clear(); /* FIXME: propagate error */
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1875 Py_INCREF(self->last);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1876 return (PyObject*) self->last;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1879 LOCAL(void)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1880 treebuilder_handle_namespace(TreeBuilderObject* self, int start,
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1881 PyObject *prefix, PyObject *uri)
36050
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 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1884 PyObject* action;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1885 PyObject* parcel;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1886
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1887 if (!self->events)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1888 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1889
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1890 if (start) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1891 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
1892 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1893 action = self->start_ns_event_obj;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
1894 parcel = Py_BuildValue("OO", prefix, uri);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1895 if (!parcel)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1896 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1897 Py_INCREF(action);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1898 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1899 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
1900 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1901 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
1902 Py_INCREF(action);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1903 parcel = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1904 Py_INCREF(parcel);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1905 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1906
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1907 res = PyTuple_New(2);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1908
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1909 if (res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1910 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
1911 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
1912 PyList_Append(self->events, res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1913 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1914 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1915 PyErr_Clear(); /* FIXME: propagate error */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1916 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1917
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1918 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1919 /* methods (in alphabetical order) */
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 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1922 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
1923 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1924 PyObject* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1925 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
1926 return NULL;
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 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
1929 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1930
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1931 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1932 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
1933 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1934 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1935 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
1936 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1937
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1938 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
1939 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1940
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1941 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1942 treebuilder_done(TreeBuilderObject* self)
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 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1945
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1946 /* FIXME: check stack size? */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1947
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1948 if (self->root)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1949 res = self->root;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1950 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1951 res = Py_None;
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 Py_INCREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1954 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1955 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1956
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1957 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1958 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
1959 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1960 if (!PyArg_ParseTuple(args, ":close"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1961 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1962
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1963 return treebuilder_done(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1964 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1965
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1966 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1967 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
1968 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1969 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1970 PyObject* attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1971 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
1972 return NULL;
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 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
1975 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1976
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1977 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1978 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
1979 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1980 PyObject* encoding;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1981 PyObject* standalone;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1982 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
1983 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1984
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1985 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
1986 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1987
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1988 static PyMethodDef treebuilder_methods[] = {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1989 {"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
1990 {"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
1991 {"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
1992 {"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
1993 {"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
1994 {NULL, NULL}
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1995 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1996
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
1997 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
1998 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
1999 "TreeBuilder", sizeof(TreeBuilderObject), 0,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2000 /* methods */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2001 (destructor)treebuilder_dealloc, /* tp_dealloc */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2002 0, /* tp_print */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2003 0, /* tp_getattr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2004 0, /* tp_setattr */
51271
87fbbf22adf3 Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 51244
diff changeset
2005 0, /* tp_reserved */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2006 0, /* tp_repr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2007 0, /* tp_as_number */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2008 0, /* tp_as_sequence */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2009 0, /* tp_as_mapping */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2010 0, /* tp_hash */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2011 0, /* tp_call */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2012 0, /* tp_str */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2013 0, /* tp_getattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2014 0, /* tp_setattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2015 0, /* tp_as_buffer */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2016 Py_TPFLAGS_DEFAULT, /* tp_flags */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2017 0, /* tp_doc */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2018 0, /* tp_traverse */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2019 0, /* tp_clear */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2020 0, /* tp_richcompare */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2021 0, /* tp_weaklistoffset */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2022 0, /* tp_iter */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2023 0, /* tp_iternext */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2024 treebuilder_methods, /* tp_methods */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2025 0, /* tp_members */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2026 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2027
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 /* the expat interface */
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 #if defined(USE_EXPAT)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2032
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2033 #include "expat.h"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2034
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2035 #if defined(USE_PYEXPAT_CAPI)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2036 #include "pyexpat.h"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2037 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
2038 #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
2039 #else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2040 #define EXPAT(func) (XML_##func)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2041 #endif
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 typedef struct {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2044 PyObject_HEAD
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2045
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2046 XML_Parser parser;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2047
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2048 PyObject* target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2049 PyObject* entity;
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 PyObject* names;
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 PyObject* handle_xml;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2054
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2055 PyObject* handle_start;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2056 PyObject* handle_data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2057 PyObject* handle_end;
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* handle_comment;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2060 PyObject* handle_pi;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2061
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2062 PyObject* handle_close;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2063
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2064 } XMLParserObject;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2065
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
2066 static PyTypeObject XMLParser_Type;
36050
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 /* helpers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2069
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2070 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2071 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
2072 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2073 /* 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
2074 to a universal name string */
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 int size = strlen(string);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2077 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2078 PyObject* value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2079
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2080 /* look the 'raw' name up in the names dictionary */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2081 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
2082 if (!key)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2083 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2084
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2085 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
2086
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2087 if (value) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2088 Py_INCREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2089 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2090 /* 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
2091 necessary */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2092
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2093 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2094 char* p;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2095 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2096
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2097 /* look for namespace separator */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2098 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
2099 if (string[i] == '}')
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2100 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2101 if (i != size) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2102 /* convert to universal name */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2103 tag = PyBytes_FromStringAndSize(NULL, size+1);
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2104 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
2105 p[0] = '{';
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2106 memcpy(p+1, string, size);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2107 size++;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2108 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2109 /* 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
2110 Py_INCREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2111 tag = key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2112 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2113
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2114 /* decode universal name */
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2115 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
2116 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
2117 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
2118 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
2119 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
2120 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
2121 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2122
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2123 /* add to names dictionary */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2124 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
2125 Py_DECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2126 Py_DECREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2127 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2128 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2129 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2130
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2131 Py_DECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2132 return value;
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
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2135 static void
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2136 expat_set_error(const char* message, int line, int column)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2137 {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2138 PyObject *error;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2139 PyObject *position;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2140 char buffer[256];
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2141
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2142 sprintf(buffer, "%s: line %d, column %d", message, line, column);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2143
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2144 error = PyObject_CallFunction(elementtree_parseerror_obj, "s", buffer);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2145 if (!error)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2146 return;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2147
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2148 /* add position attribute */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2149 position = Py_BuildValue("(ii)", line, column);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2150 if (!position) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2151 Py_DECREF(error);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2152 return;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2153 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2154 if (PyObject_SetAttrString(error, "position", position) == -1) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2155 Py_DECREF(error);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2156 Py_DECREF(position);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2157 return;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2158 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2159 Py_DECREF(position);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2160
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2161 PyErr_SetObject(elementtree_parseerror_obj, error);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2162 Py_DECREF(error);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2163 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2164
36050
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 /* handlers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2167
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2168 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2169 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
2170 int data_len)
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 PyObject* key;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2173 PyObject* value;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2174 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2175
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2176 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
2177 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2178
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
2179 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
2180 if (!key)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2181 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2182
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2183 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
2184
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2185 if (value) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2186 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2187 res = treebuilder_handle_data(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2188 (TreeBuilderObject*) self->target, value
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2189 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2190 else if (self->handle_data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2191 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
2192 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2193 res = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2194 Py_XDECREF(res);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2195 } else if (!PyErr_Occurred()) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2196 /* Report the first error, not the last */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2197 char message[128];
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2198 sprintf(message, "undefined entity &%.100s;", _PyUnicode_AsString(key));
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2199 expat_set_error(
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2200 message,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2201 EXPAT(GetErrorLineNumber)(self->parser),
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2202 EXPAT(GetErrorColumnNumber)(self->parser)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2203 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2204 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2205
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2206 Py_DECREF(key);
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2209 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2210 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
2211 const XML_Char **attrib_in)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2212 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2213 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2214 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2215 PyObject* attrib;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2216 int ok;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2217
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2218 /* tag name */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2219 tag = makeuniversal(self, tag_in);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2220 if (!tag)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2221 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
2222
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2223 /* attributes */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2224 if (attrib_in[0]) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2225 attrib = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2226 if (!attrib)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2227 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2228 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
2229 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
2230 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
2231 if (!key || !value) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2232 Py_XDECREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2233 Py_XDECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2234 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2235 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2236 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2237 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
2238 Py_DECREF(value);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2239 Py_DECREF(key);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2240 if (ok < 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2241 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2242 return;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2243 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2244 attrib_in += 2;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2245 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2246 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2247 Py_INCREF(Py_None);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2248 attrib = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2249 }
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 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2252 /* shortcut */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2253 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
2254 tag, attrib);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2255 else if (self->handle_start) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2256 if (attrib == Py_None) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2257 Py_DECREF(attrib);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2258 attrib = PyDict_New();
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2259 if (!attrib)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2260 return;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2261 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2262 res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2263 } else
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2264 res = NULL;
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 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2267 Py_DECREF(attrib);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2268
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2269 Py_XDECREF(res);
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2272 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2273 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
2274 int data_len)
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 PyObject* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2277 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2278
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
2279 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
2280 if (!data)
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2281 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
2282
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2283 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2284 /* shortcut */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2285 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
2286 else if (self->handle_data)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2287 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
2288 else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2289 res = NULL;
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_DECREF(data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2292
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2293 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2294 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2295
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2296 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2297 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
2298 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2299 PyObject* tag;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2300 PyObject* res = NULL;
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 if (TreeBuilder_CheckExact(self->target))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2303 /* shortcut */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2304 /* 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
2305 res = treebuilder_handle_end(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2306 (TreeBuilderObject*) self->target, Py_None
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 else if (self->handle_end) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2309 tag = makeuniversal(self, tag_in);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2310 if (tag) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2311 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
2312 Py_DECREF(tag);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2313 }
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2316 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2317 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2318
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2319 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2320 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
2321 const XML_Char *uri)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2322 {
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2323 PyObject* sprefix = NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2324 PyObject* suri = NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2325
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2326 suri = PyUnicode_DecodeUTF8(uri, strlen(uri), "strict");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2327 if (!suri)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2328 return;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2329
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2330 if (prefix)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2331 sprefix = PyUnicode_DecodeUTF8(prefix, strlen(prefix), "strict");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2332 else
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2333 sprefix = PyUnicode_FromString("");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2334 if (!sprefix) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2335 Py_DECREF(suri);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2336 return;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2337 }
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2338
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2339 treebuilder_handle_namespace(
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2340 (TreeBuilderObject*) self->target, 1, sprefix, suri
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2341 );
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2342
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2343 Py_DECREF(sprefix);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2344 Py_DECREF(suri);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2345 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2346
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2347 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2348 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
2349 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2350 treebuilder_handle_namespace(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2351 (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
2352 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2353 }
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 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2356 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
2357 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2358 PyObject* comment;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2359 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2360
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2361 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
2362 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
2363 if (comment) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2364 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
2365 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2366 Py_DECREF(comment);
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 }
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2371 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2372 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
2373 const XML_Char* data_in)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2374 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2375 PyObject* target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2376 PyObject* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2377 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2378
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2379 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
2380 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
2381 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
2382 if (target && data) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2383 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
2384 Py_XDECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2385 Py_DECREF(data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2386 Py_DECREF(target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2387 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2388 Py_XDECREF(data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2389 Py_XDECREF(target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2390 }
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 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2393
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2394 static int
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2395 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
2396 XML_Encoding *info)
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 PyObject* u;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2399 Py_UNICODE* p;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2400 unsigned char s[256];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2401 int i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2402
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2403 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
2404
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2405 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
2406 s[i] = i;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2407
36117
7d6ab9f39996 SF#1389809
Fredrik Lundh <fredrik@pythonware.com>
parents: 36083
diff changeset
2408 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
2409 if (!u)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2410 return XML_STATUS_ERROR;
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 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
2413 Py_DECREF(u);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2414 return XML_STATUS_ERROR;
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2417 p = PyUnicode_AS_UNICODE(u);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2418
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2419 for (i = 0; i < 256; i++) {
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2420 if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2421 info->map[i] = p[i];
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2422 else
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2423 info->map[i] = -1;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2424 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2425
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2426 Py_DECREF(u);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2427
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2428 return XML_STATUS_OK;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2429 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2430
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 /* constructor and destructor */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2433
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2434 static PyObject*
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
2435 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
2436 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2437 XMLParserObject* self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2438 /* 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
2439 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
2440
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2441 PyObject* target = NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2442 char* encoding = NULL;
36684
0bebeb393045 More unconsting.
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
2443 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
2444 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
2445 &target, &encoding))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2446 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2447
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2448 #if defined(USE_PYEXPAT_CAPI)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2449 if (!expat_capi) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2450 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2451 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
2452 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2453 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2454 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2455 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2456
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2457 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
2458 if (self == NULL)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2459 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2460
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2461 self->entity = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2462 if (!self->entity) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2463 PyObject_Del(self);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2464 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2465 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2466
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2467 self->names = PyDict_New();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2468 if (!self->names) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2469 PyObject_Del(self->entity);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2470 PyObject_Del(self);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2471 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2472 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2473
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2474 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
2475 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
2476 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
2477
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2478 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
2479 if (!self->parser) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2480 PyObject_Del(self->names);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2481 PyObject_Del(self->entity);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2482 PyObject_Del(self);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2483 PyErr_NoMemory();
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2484 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2485 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2486
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2487 /* setup target handlers */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2488 if (!target) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2489 target = treebuilder_new();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2490 if (!target) {
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2491 EXPAT(ParserFree)(self->parser);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2492 PyObject_Del(self->names);
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2493 PyObject_Del(self->entity);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2494 PyObject_Del(self);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2495 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2496 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2497 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2498 Py_INCREF(target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2499 self->target = target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2500
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2501 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
2502 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
2503 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
2504 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
2505 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
2506 self->handle_pi = PyObject_GetAttrString(target, "pi");
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2507 self->handle_close = PyObject_GetAttrString(target, "close");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2508
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2509 PyErr_Clear();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2510
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2511 /* configure parser */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2512 EXPAT(SetUserData)(self->parser, self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2513 EXPAT(SetElementHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2514 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2515 (XML_StartElementHandler) expat_start_handler,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2516 (XML_EndElementHandler) expat_end_handler
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 EXPAT(SetDefaultHandlerExpand)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2519 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2520 (XML_DefaultHandler) expat_default_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2521 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2522 EXPAT(SetCharacterDataHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2523 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2524 (XML_CharacterDataHandler) expat_data_handler
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 if (self->handle_comment)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2527 EXPAT(SetCommentHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2528 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2529 (XML_CommentHandler) expat_comment_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2530 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2531 if (self->handle_pi)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2532 EXPAT(SetProcessingInstructionHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2533 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2534 (XML_ProcessingInstructionHandler) expat_pi_handler
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2535 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2536 EXPAT(SetUnknownEncodingHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2537 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2538 (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
2539 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2540
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2541 ALLOC(sizeof(XMLParserObject), "create expatparser");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2542
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2543 return (PyObject*) self;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2544 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2545
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2546 static void
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2547 xmlparser_dealloc(XMLParserObject* self)
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 EXPAT(ParserFree)(self->parser);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2550
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2551 Py_XDECREF(self->handle_close);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2552 Py_XDECREF(self->handle_pi);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2553 Py_XDECREF(self->handle_comment);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2554 Py_XDECREF(self->handle_end);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2555 Py_XDECREF(self->handle_data);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2556 Py_XDECREF(self->handle_start);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2557 Py_XDECREF(self->handle_xml);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2558
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2559 Py_DECREF(self->target);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2560 Py_DECREF(self->entity);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2561 Py_DECREF(self->names);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2562
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2563 RELEASE(sizeof(XMLParserObject), "destroy expatparser");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2564
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2565 PyObject_Del(self);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2566 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2567
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2568 /* -------------------------------------------------------------------- */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2569 /* methods (in alphabetical order) */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2570
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2571 LOCAL(PyObject*)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2572 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
2573 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2574 int ok;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2575
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2576 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
2577
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2578 if (PyErr_Occurred())
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2579 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2580
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2581 if (!ok) {
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2582 expat_set_error(
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2583 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
2584 EXPAT(GetErrorLineNumber)(self->parser),
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2585 EXPAT(GetErrorColumnNumber)(self->parser)
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 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2588 }
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 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2591 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2592
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2593 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2594 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
2595 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2596 /* end feeding data to parser */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2597
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2598 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2599 if (!PyArg_ParseTuple(args, ":close"))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2600 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2601
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2602 res = expat_parse(self, "", 0, 1);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2603 if (!res)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2604 return NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2605
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2606 if (TreeBuilder_CheckExact(self->target)) {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2607 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2608 return treebuilder_done((TreeBuilderObject*) self->target);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2609 } if (self->handle_close) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2610 Py_DECREF(res);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2611 return PyObject_CallFunction(self->handle_close, "");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2612 } else
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2613 return res;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2614 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2615
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2616 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2617 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
2618 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2619 /* feed data to parser */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2620
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2621 char* data;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2622 int data_len;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2623 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
2624 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2625
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2626 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
2627 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2628
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2629 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2630 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
2631 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2632 /* (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
2633
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2634 PyObject* reader;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2635 PyObject* buffer;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2636 PyObject* res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2637
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2638 PyObject* fileobj;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2639 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
2640 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2641
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2642 reader = PyObject_GetAttrString(fileobj, "read");
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2643 if (!reader)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2644 return NULL;
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 /* read from open file object */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2647 for (;;) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2648
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2649 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
2650
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2651 if (!buffer) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2652 /* 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
2653 Py_DECREF(reader);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2654 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2655 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2656
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2657 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
2658 Py_DECREF(buffer);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2659 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2660 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2661
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2662 res = expat_parse(
47301
23ab586c427a Renamed PyString to PyBytes
Christian Heimes <christian@cheimes.de>
parents: 44742
diff changeset
2663 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
2664 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2665
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2666 Py_DECREF(buffer);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2667
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2668 if (!res) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2669 Py_DECREF(reader);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2670 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2671 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2672 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2673
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
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2676 Py_DECREF(reader);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2677
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2678 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
2679
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2680 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
2681 Py_DECREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2682 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
2683 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2684
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2685 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2686 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2687
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2688 static PyObject*
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2689 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
2690 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2691 /* activate element event reporting */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2692
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
2693 Py_ssize_t i;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2694 TreeBuilderObject* target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2695
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2696 PyObject* events; /* event collector */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2697 PyObject* event_set = Py_None;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2698 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
2699 &event_set))
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2700 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2701
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2702 if (!TreeBuilder_CheckExact(self->target)) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2703 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2704 PyExc_TypeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2705 "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
2706 "targets"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2707 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2708 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2709 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2710
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2711 target = (TreeBuilderObject*) self->target;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2712
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2713 Py_INCREF(events);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2714 Py_XDECREF(target->events);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2715 target->events = events;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2716
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2717 /* clear out existing events */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2718 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
2719 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
2720 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
2721 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
2722
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2723 if (event_set == Py_None) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2724 /* default is "end" only */
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2725 target->end_event_obj = PyUnicode_FromString("end");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2726 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2727 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2728
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2729 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
2730 goto error;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2731
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2732 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
2733 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
2734 char* event;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2735 if (PyUnicode_Check(item)) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2736 event = _PyUnicode_AsString(item);
59893
2d6178480cc7 Fix a crash in _elementtree related to lone unicode surrogates.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59601
diff changeset
2737 if (event == NULL)
2d6178480cc7 Fix a crash in _elementtree related to lone unicode surrogates.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59601
diff changeset
2738 goto error;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2739 } else if (PyBytes_Check(item))
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2740 event = PyBytes_AS_STRING(item);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2741 else {
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2742 goto error;
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2743 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2744 if (strcmp(event, "start") == 0) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2745 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2746 target->start_event_obj = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2747 } 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
2748 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2749 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
2750 target->end_event_obj = item;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2751 } 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
2752 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2753 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
2754 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
2755 EXPAT(SetNamespaceDeclHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2756 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2757 (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
2758 (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
2759 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2760 } 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
2761 Py_INCREF(item);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2762 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
2763 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
2764 EXPAT(SetNamespaceDeclHandler)(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2765 self->parser,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2766 (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
2767 (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
2768 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2769 } else {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2770 PyErr_Format(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2771 PyExc_ValueError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2772 "unknown event '%s'", event
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2773 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2774 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2775 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2776 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2777
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2778 Py_RETURN_NONE;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2779
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2780 error:
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2781 PyErr_SetString(
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2782 PyExc_TypeError,
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2783 "invalid event tuple"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2784 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2785 return NULL;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2786 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2787
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2788 static PyMethodDef xmlparser_methods[] = {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2789 {"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
2790 {"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
2791 {"_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
2792 {"_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
2793 {NULL, NULL}
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2794 };
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 static PyObject*
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2797 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
2798 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2799 PyObject* res;
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2800 char *name = "";
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2801
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2802 if (PyUnicode_Check(nameobj))
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2803 name = _PyUnicode_AsString(nameobj);
36050
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 PyErr_Clear();
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2806
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2807 if (strcmp(name, "entity") == 0)
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2808 res = self->entity;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2809 else if (strcmp(name, "target") == 0)
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2810 res = self->target;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2811 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
2812 char buffer[100];
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2813 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
2814 XML_MINOR_VERSION, XML_MICRO_VERSION);
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2815 return PyUnicode_DecodeUTF8(buffer, strlen(buffer), "strict");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2816 } else {
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2817 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
2818 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2819
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2820 Py_INCREF(res);
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2821 return res;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2822 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2823
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36954
diff changeset
2824 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
2825 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
2826 "XMLParser", sizeof(XMLParserObject), 0,
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2827 /* methods */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2828 (destructor)xmlparser_dealloc, /* tp_dealloc */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2829 0, /* tp_print */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2830 0, /* tp_getattr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2831 0, /* tp_setattr */
51271
87fbbf22adf3 Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 51244
diff changeset
2832 0, /* tp_reserved */
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2833 0, /* tp_repr */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2834 0, /* tp_as_number */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2835 0, /* tp_as_sequence */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2836 0, /* tp_as_mapping */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2837 0, /* tp_hash */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2838 0, /* tp_call */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2839 0, /* tp_str */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2840 (getattrofunc)xmlparser_getattro, /* tp_getattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2841 0, /* tp_setattro */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2842 0, /* tp_as_buffer */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2843 Py_TPFLAGS_DEFAULT, /* tp_flags */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2844 0, /* tp_doc */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2845 0, /* tp_traverse */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2846 0, /* tp_clear */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2847 0, /* tp_richcompare */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2848 0, /* tp_weaklistoffset */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2849 0, /* tp_iter */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2850 0, /* tp_iternext */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2851 xmlparser_methods, /* tp_methods */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2852 0, /* tp_members */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2853 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2854
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2855 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2856
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2857 /* ==================================================================== */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2858 /* python module interface */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2859
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2860 static PyMethodDef _functions[] = {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2861 {"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
2862 {"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
2863 {"TreeBuilder", (PyCFunction) treebuilder, METH_VARARGS},
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2864 #if defined(USE_EXPAT)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2865 {"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
2866 {"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
2867 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2868 {NULL, NULL}
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2869 };
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2870
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2871
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2872 static struct PyModuleDef _elementtreemodule = {
63924
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2873 PyModuleDef_HEAD_INIT,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2874 "_elementtree",
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2875 NULL,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2876 -1,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2877 _functions,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2878 NULL,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2879 NULL,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2880 NULL,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2881 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2882 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2883
40528
bce7e4a926a9 Cruft removal:
Neal Norwitz <nnorwitz@gmail.com>
parents: 39610
diff changeset
2884 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
2885 PyInit__elementtree(void)
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2886 {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2887 PyObject* m;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2888 PyObject* g;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2889 char* bootstrap;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2890
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2891 /* Initialize object types */
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2892 if (PyType_Ready(&TreeBuilder_Type) < 0)
63924
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2893 return NULL;
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2894 if (PyType_Ready(&Element_Type) < 0)
63924
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2895 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2896 #if defined(USE_EXPAT)
48414
4025f638911f #3247: Get rid of Py_FindMethod:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
2897 if (PyType_Ready(&XMLParser_Type) < 0)
63924
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2898 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2899 #endif
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2900
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2901 m = PyModule_Create(&_elementtreemodule);
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2902 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
2903 return NULL;
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2904
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
2905 /* 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
2906 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
2907 PyDict_SetItemString(PyImport_GetModuleDict(),
63924
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2908 _elementtreemodule.m_name,
9108e7dcd7d8 Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 59893
diff changeset
2909 m);
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2910
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2911 /* python glue code */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2912
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2913 g = PyDict_New();
36954
db5e720b0cef merged with cElementTree development trunk (1.0.6 snapshot):
Fredrik Lundh <fredrik@pythonware.com>
parents: 36684
diff changeset
2914 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
2915 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2916
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2917 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
2918
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2919 bootstrap = (
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2920
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2921 "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
2922
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2923 "try:\n"
36051
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
2924 " 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
2925 "except ImportError:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2926 " import ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2927 "ET = ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2928 "del ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2929
36051
9b897fb7ac6a updating to cElementTree 1.0.5 (step 3 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents: 36050
diff changeset
2930 "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
2931
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2932 "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
2933 " copy(cElementTree.Element('x'))\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2934 "except:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2935 " def copyelement(elem):\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2936 " return elem\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2937
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2938 "class CommentProxy:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2939 " def __call__(self, text=None):\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2940 " 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
2941 " element.text = text\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2942 " return element\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2943 " def __eq__(self, other):\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2944 " return ET.Comment == other\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2945 "cElementTree.Comment = CommentProxy()\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2946
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2947 "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
2948 " 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
2949 " 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
2950 " source = open(source, 'rb')\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2951 " 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
2952 " while 1:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2953 " data = source.read(65536)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2954 " if not data:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2955 " break\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2956 " parser.feed(data)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2957 " self._root = parser.close()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2958 " else:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2959 " parser = cElementTree.XMLParser()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2960 " 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
2961 " return self._root\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2962 "cElementTree.ElementTree = ElementTree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2963
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2964 "def iter(node, tag=None):\n" /* helper */
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2965 " if tag == '*':\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2966 " tag = None\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2967 " 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
2968 " yield node\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2969 " for node in node:\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2970 " for node in iter(node, tag):\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2971 " yield node\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2972
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2973 "def itertext(node):\n" /* helper */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2974 " if node.text:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2975 " yield node.text\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2976 " for e in node:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2977 " for s in e.itertext():\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2978 " yield s\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2979 " if e.tail:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2980 " yield e.tail\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2981
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2982 "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
2983 " tree = ElementTree()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2984 " tree.parse(source, parser)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2985 " return tree\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2986 "cElementTree.parse = parse\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2987
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2988 "class iterparse:\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2989 " root = None\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2990 " 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
2991 " 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
2992 " file = open(file, 'rb')\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2993 " self._file = file\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2994 " self._events = []\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2995 " self._index = 0\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2996 " self.root = self._root = None\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2997 " b = cElementTree.TreeBuilder()\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2998 " self._parser = cElementTree.XMLParser(b)\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
2999 " self._parser._setevents(self._events, events)\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3000 " def __next__(self):\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3001 " while 1:\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3002 " try:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3003 " item = self._events[self._index]\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3004 " except IndexError:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3005 " if self._parser is None:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3006 " self.root = self._root\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3007 " raise StopIteration\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3008 " # load event buffer\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3009 " del self._events[:]\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3010 " self._index = 0\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3011 " data = self._file.read(16384)\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3012 " if data:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3013 " self._parser.feed(data)\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3014 " else:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3015 " self._root = self._parser.close()\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3016 " self._parser = None\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3017 " else:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3018 " self._index = self._index + 1\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3019 " return item\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3020 " def __iter__(self):\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3021 " return self\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3022 "cElementTree.iterparse = iterparse\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3023
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3024 "class PIProxy:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3025 " def __call__(self, target, text=None):\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3026 " element = cElementTree.Element(ET.PI)\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3027 " element.text = target\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3028 " if text:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3029 " 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
3030 " return element\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3031 " def __eq__(self, other):\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3032 " return ET.PI == other\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3033 "cElementTree.PI = cElementTree.ProcessingInstruction = PIProxy()\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3034
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3035 "def XML(text):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3036 " parser = cElementTree.XMLParser()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3037 " parser.feed(text)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3038 " return parser.close()\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3039 "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
3040
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3041 "def XMLID(text):\n" /* public */
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3042 " tree = XML(text)\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3043 " ids = {}\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3044 " for elem in tree.iter():\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3045 " id = elem.get('id')\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3046 " if id:\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3047 " ids[id] = elem\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3048 " return tree, ids\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3049 "cElementTree.XMLID = XMLID\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3050
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3051 "try:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3052 " register_namespace = ET.register_namespace\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3053 "except AttributeError:\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3054 " def register_namespace(prefix, uri):\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3055 " ET._namespace_map[uri] = prefix\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3056 "cElementTree.register_namespace = register_namespace\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3057
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3058 "cElementTree.dump = ET.dump\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3059 "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
3060 "cElementTree.iselement = ET.iselement\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3061 "cElementTree.QName = ET.QName\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3062 "cElementTree.tostring = ET.tostring\n"
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3063 "cElementTree.fromstringlist = ET.fromstringlist\n"
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3064 "cElementTree.tostringlist = ET.tostringlist\n"
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3065 "cElementTree.VERSION = '" VERSION "'\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3066 "cElementTree.__version__ = '" VERSION "'\n"
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3067
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3068 );
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3069
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3070 if (!PyRun_String(bootstrap, Py_file_input, g, NULL))
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3071 return NULL;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3072
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3073 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
3074
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3075 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
3076 if (elementtree_copyelement_obj) {
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3077 /* 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
3078 PyMethodDef* mp;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3079 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
3080 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
3081 mp->ml_name = "__reduce__";
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3082 break;
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3083 }
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3084 } else
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3085 PyErr_Clear();
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3086
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3087 elementtree_deepcopy_obj = PyDict_GetItemString(g, "deepcopy");
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3088 elementtree_iter_obj = PyDict_GetItemString(g, "iter");
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3089 elementtree_itertext_obj = PyDict_GetItemString(g, "itertext");
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3090
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3091 #if defined(USE_PYEXPAT_CAPI)
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3092 /* link against pyexpat, if possible */
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3093 expat_capi = PyCapsule_Import(PyExpat_CAPSULE_NAME, 0);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3094 if (expat_capi) {
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3095 /* check that it's usable */
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3096 if (strcmp(expat_capi->magic, PyExpat_CAPI_MAGIC) != 0 ||
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3097 expat_capi->size < sizeof(struct PyExpat_CAPI) ||
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3098 expat_capi->MAJOR_VERSION != XML_MAJOR_VERSION ||
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3099 expat_capi->MINOR_VERSION != XML_MINOR_VERSION ||
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3100 expat_capi->MICRO_VERSION != XML_MICRO_VERSION)
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3101 expat_capi = NULL;
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3102 }
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3103 #endif
59601
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3104
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3105 elementtree_parseerror_obj = PyErr_NewException(
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3106 "cElementTree.ParseError", PyExc_SyntaxError, NULL
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3107 );
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3108 Py_INCREF(elementtree_parseerror_obj);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3109 PyModule_AddObject(m, "ParseError", elementtree_parseerror_obj);
7a18c2762886 Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53816
diff changeset
3110
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
3111 return m;
36050
6586cd9920e7 updating to cElementTree 1.0.5 (step 2 of 3)
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3112 }