ยปCore Development>Code coverage>Mac/Modules/te/tesupport.py

Python code coverage for Mac/Modules/te/tesupport.py

#countcontent
1n/a# This script generates a Python interface for an Apple Macintosh Manager.
2n/a# It uses the "bgen" package to generate C code.
3n/a# The function specifications are generated by scanning the mamager's header file,
4n/a# using the "scantools" package (customized for this particular manager).
5n/a
6n/aimport string
7n/a
8n/a# Declarations that change for each manager
9n/aMACHEADERFILE = 'TextEdit.h' # The Apple header file
10n/aMODNAME = '_TE' # The name of the module
11n/aOBJECTNAME = 'TE' # The basic name of the objects used here
12n/aKIND = 'Handle' # Usually 'Ptr' or 'Handle'
13n/a
14n/a# The following is *usually* unchanged but may still require tuning
15n/aMODPREFIX = 'TE' # The prefix for module-wide routines
16n/aOBJECTTYPE = "TEHandle" # The C type used to represent them
17n/aOBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods
18n/aINPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner
19n/aOUTPUTFILE = MODNAME + "module.c" # The file generated by this program
20n/a
21n/afrom macsupport import *
22n/a
23n/a# Create the type objects
24n/aTEHandle = OpaqueByValueType("TEHandle", "TEObj")
25n/aCharsHandle = OpaqueByValueType("CharsHandle", "ResObj")
26n/aHandle = OpaqueByValueType("Handle", "ResObj")
27n/aStScrpHandle = OpaqueByValueType("StScrpHandle", "ResObj")
28n/aTEStyleHandle = OpaqueByValueType("TEStyleHandle", "ResObj")
29n/aRgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
30n/a
31n/aTextStyle = OpaqueType("TextStyle", "TextStyle")
32n/aTextStyle_ptr = TextStyle
33n/a
34n/aincludestuff = includestuff + """
35n/a#include <Carbon/Carbon.h>
36n/a
37n/a#ifdef USE_TOOLBOX_OBJECT_GLUE
38n/aextern PyObject *_TEObj_New(TEHandle);
39n/aextern int _TEObj_Convert(PyObject *, TEHandle *);
40n/a
41n/a#define TEObj_New _TEObj_New
42n/a#define TEObj_Convert _TEObj_Convert
43n/a#endif
44n/a
45n/a#define as_TE(h) ((TEHandle)h)
46n/a#define as_Resource(teh) ((Handle)teh)
47n/a
48n/a/*
49n/a** Parse/generate TextStyle records
50n/a*/
51n/astatic PyObject *
52n/aTextStyle_New(TextStylePtr itself)
53n/a{
54n/a
55n/a return Py_BuildValue("lllO&", (long)itself->tsFont, (long)itself->tsFace, (long)itself->tsSize, QdRGB_New,
56n/a &itself->tsColor);
57n/a}
58n/a
59n/astatic int
60n/aTextStyle_Convert(PyObject *v, TextStylePtr p_itself)
61n/a{
62n/a long font, face, size;
63n/a
64n/a if( !PyArg_ParseTuple(v, "lllO&", &font, &face, &size, QdRGB_Convert, &p_itself->tsColor) )
65n/a return 0;
66n/a p_itself->tsFont = (short)font;
67n/a p_itself->tsFace = (Style)face;
68n/a p_itself->tsSize = (short)size;
69n/a return 1;
70n/a}
71n/a"""
72n/a
73n/ainitstuff = initstuff + """
74n/a PyMac_INIT_TOOLBOX_OBJECT_NEW(TEHandle, TEObj_New);
75n/a PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TEHandle, TEObj_Convert);
76n/a"""
77n/a
78n/aclass TEMethodGenerator(OSErrWeakLinkMethodGenerator):
79n/a """Similar to MethodGenerator, but has self as last argument"""
80n/a
81n/a def parseArgumentList(self, args):
82n/a args, a0 = args[:-1], args[-1]
83n/a t0, n0, m0 = a0
84n/a if m0 != InMode:
85n/a raise ValueError, "method's 'self' must be 'InMode'"
86n/a self.itself = Variable(t0, "_self->ob_itself", SelfMode)
87n/a FunctionGenerator.parseArgumentList(self, args)
88n/a self.argumentList.append(self.itself)
89n/a
90n/a
91n/a
92n/aclass MyObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
93n/a # XXXX Could be subtype of Resource
94n/a # Attributes that can be set.
95n/a getsetlist = [
96n/a (
97n/a 'destRect',
98n/a 'return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->destRect);',
99n/a None,
100n/a 'Destination rectangle'
101n/a ), (
102n/a 'viewRect',
103n/a 'return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->viewRect);',
104n/a None,
105n/a 'Viewing rectangle'
106n/a ), (
107n/a 'selRect',
108n/a 'return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->selRect);',
109n/a None,
110n/a 'Selection rectangle'
111n/a ), (
112n/a 'lineHeight',
113n/a 'return Py_BuildValue("h", (*self->ob_itself)->lineHeight);',
114n/a None,
115n/a 'Height of a line'
116n/a ), (
117n/a 'fontAscent',
118n/a 'return Py_BuildValue("h", (*self->ob_itself)->fontAscent);',
119n/a None,
120n/a 'Ascent of a line'
121n/a ), (
122n/a "selPoint",
123n/a 'return Py_BuildValue("O&", PyMac_BuildPoint, (*self->ob_itself)->selPoint);',
124n/a None,
125n/a 'Selection Point'
126n/a ), (
127n/a 'selStart',
128n/a 'return Py_BuildValue("h", (*self->ob_itself)->selStart);',
129n/a None,
130n/a 'Start of selection'
131n/a ), (
132n/a 'selEnd',
133n/a 'return Py_BuildValue("h", (*self->ob_itself)->selEnd);',
134n/a None,
135n/a 'End of selection'
136n/a ), (
137n/a 'active',
138n/a 'return Py_BuildValue("h", (*self->ob_itself)->active);',
139n/a None,
140n/a 'TBD'
141n/a ), (
142n/a 'just',
143n/a 'return Py_BuildValue("h", (*self->ob_itself)->just);',
144n/a None,
145n/a 'Justification'
146n/a ), (
147n/a 'teLength',
148n/a 'return Py_BuildValue("h", (*self->ob_itself)->teLength);',
149n/a None,
150n/a 'TBD'
151n/a ), (
152n/a 'txFont',
153n/a 'return Py_BuildValue("h", (*self->ob_itself)->txFont);',
154n/a None,
155n/a 'Current font'
156n/a ), (
157n/a 'txFace',
158n/a 'return Py_BuildValue("h", (*self->ob_itself)->txFace);',
159n/a None,
160n/a 'Current font variant'
161n/a ), (
162n/a 'txMode',
163n/a 'return Py_BuildValue("h", (*self->ob_itself)->txMode);',
164n/a None,
165n/a 'Current text-drawing mode'
166n/a ), (
167n/a 'txSize',
168n/a 'return Py_BuildValue("h", (*self->ob_itself)->txSize);',
169n/a None,
170n/a 'Current font size'
171n/a ), (
172n/a 'nLines',
173n/a 'return Py_BuildValue("h", (*self->ob_itself)->nLines);',
174n/a None,
175n/a 'TBD'
176n/a )]
177n/a
178n/a def outputCheckNewArg(self):
179n/a Output("""if (itself == NULL) {
180n/a PyErr_SetString(TE_Error,"Cannot create null TE");
181n/a return NULL;
182n/a }""")
183n/a def outputFreeIt(self, itselfname):
184n/a Output("TEDispose(%s);", itselfname)
185n/a
186n/a
187n/a# From here on it's basically all boiler plate...
188n/a
189n/a# Create the generator groups and link them
190n/amodule = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
191n/aobject = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
192n/amodule.addobject(object)
193n/a
194n/a# Create the generator classes used to populate the lists
195n/aFunction = OSErrWeakLinkFunctionGenerator
196n/aMethod = TEMethodGenerator
197n/a
198n/a# Create and populate the lists
199n/afunctions = []
200n/amethods = []
201n/aexecfile(INPUTFILE)
202n/a
203n/a# Converter from/to handle
204n/af = Function(TEHandle, 'as_TE', (Handle, 'h', InMode))
205n/afunctions.append(f)
206n/af = Method(Handle, 'as_Resource', (TEHandle, 'teh', InMode))
207n/amethods.append(f)
208n/a
209n/a# add the populated lists to the generator groups
210n/a# (in a different wordl the scan program would generate this)
211n/afor f in functions: module.add(f)
212n/afor f in methods: object.add(f)
213n/a
214n/a# generate output (open the output file as late as possible)
215n/aSetOutputFileName(OUTPUTFILE)
216n/amodule.generate()