ยปCore Development>Code coverage>Mac/Modules/mlte/mltesupport.py

Python code coverage for Mac/Modules/mlte/mltesupport.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/a#error missing SetActionFilter
7n/a
8n/aimport string
9n/a
10n/a# Declarations that change for each manager
11n/aMODNAME = '_Mlte' # The name of the module
12n/a
13n/a# The following is *usually* unchanged but may still require tuning
14n/aMODPREFIX = 'Mlte' # The prefix for module-wide routines
15n/aINPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner
16n/aOUTPUTFILE = MODNAME + "module.c" # The file generated by this program
17n/a
18n/afrom macsupport import *
19n/a
20n/a# Create the type objects
21n/a
22n/aincludestuff = includestuff + """
23n/a#include <Carbon/Carbon.h>
24n/a
25n/a/* For now we declare them forward here. They'll go to mactoolbox later */
26n/astatic PyObject *TXNObj_New(TXNObject);
27n/astatic int TXNObj_Convert(PyObject *, TXNObject *);
28n/astatic PyObject *TXNFontMenuObj_New(TXNFontMenuObject);
29n/astatic int TXNFontMenuObj_Convert(PyObject *, TXNFontMenuObject *);
30n/a
31n/a// ADD declarations
32n/a#ifdef NOTYET_USE_TOOLBOX_OBJECT_GLUE
33n/a//extern PyObject *_CFTypeRefObj_New(CFTypeRef);
34n/a//extern int _CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
35n/a
36n/a//#define CFTypeRefObj_New _CFTypeRefObj_New
37n/a//#define CFTypeRefObj_Convert _CFTypeRefObj_Convert
38n/a#endif
39n/a
40n/a/*
41n/a** Parse an optional fsspec
42n/a*/
43n/astatic int
44n/aOptFSSpecPtr_Convert(PyObject *v, FSSpec **p_itself)
45n/a{
46n/a static FSSpec fss;
47n/a if (v == Py_None)
48n/a {
49n/a *p_itself = NULL;
50n/a return 1;
51n/a }
52n/a *p_itself = &fss;
53n/a return PyMac_GetFSSpec(v, *p_itself);
54n/a}
55n/a
56n/a/*
57n/a** Parse an optional rect
58n/a*/
59n/astatic int
60n/aOptRectPtr_Convert(PyObject *v, Rect **p_itself)
61n/a{
62n/a static Rect r;
63n/a
64n/a if (v == Py_None)
65n/a {
66n/a *p_itself = NULL;
67n/a return 1;
68n/a }
69n/a *p_itself = &r;
70n/a return PyMac_GetRect(v, *p_itself);
71n/a}
72n/a
73n/a/*
74n/a** Parse an optional GWorld
75n/a*/
76n/astatic int
77n/aOptGWorldObj_Convert(PyObject *v, GWorldPtr *p_itself)
78n/a{
79n/a if (v == Py_None)
80n/a {
81n/a *p_itself = NULL;
82n/a return 1;
83n/a }
84n/a return GWorldObj_Convert(v, p_itself);
85n/a}
86n/a
87n/a"""
88n/a
89n/ainitstuff = initstuff + """
90n/a// PyMac_INIT_TOOLBOX_OBJECT_NEW(xxxx);
91n/a"""
92n/aTXNObject = OpaqueByValueType("TXNObject", "TXNObj")
93n/aTXNFontMenuObject = OpaqueByValueType("TXNFontMenuObject", "TXNFontMenuObj")
94n/a
95n/aTXNFrameID = Type("TXNFrameID", "l")
96n/aTXNVersionValue = Type("TXNVersionValue", "l")
97n/aTXNFeatureBits = Type("TXNFeatureBits", "l")
98n/aTXNInitOptions = Type("TXNInitOptions", "l")
99n/aTXNFrameOptions = Type("TXNFrameOptions", "l")
100n/aTXNContinuousFlags = Type("TXNContinuousFlags", "l")
101n/aTXNMatchOptions = Type("TXNMatchOptions", "l")
102n/aTXNFileType = OSTypeType("TXNFileType")
103n/aTXNFrameType = Type("TXNFrameType", "l")
104n/aTXNDataType = OSTypeType("TXNDataType")
105n/aTXNControlTag = OSTypeType("TXNControlTag")
106n/aTXNActionKey = Type("TXNActionKey", "l")
107n/aTXNTabType = Type("TXNTabType", "b")
108n/aTXNScrollBarState = Type("TXNScrollBarState", "l")
109n/aTXNOffset = Type("TXNOffset", "l")
110n/aTXNObjectRefcon = FakeType("(TXNObjectRefcon)0") # XXXX For now...
111n/aTXNErrors = OSErrType("TXNErrors", "l")
112n/aTXNTypeRunAttributes = OSTypeType("TXNTypeRunAttributes")
113n/aTXNTypeRunAttributeSizes = Type("TXNTypeRunAttributeSizes", "l")
114n/aTXNPermanentTextEncodingType = Type("TXNPermanentTextEncodingType", "l")
115n/aTXTNTag = OSTypeType("TXTNTag")
116n/aTXNBackgroundType = Type("TXNBackgroundType", "l")
117n/aDragReference = OpaqueByValueType("DragReference", "DragObj")
118n/aDragTrackingMessage = Type("DragTrackingMessage", "h")
119n/aRgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
120n/aOptRgnHandle = OpaqueByValueType("RgnHandle", "OptResObj")
121n/aGWorldPtr = OpaqueByValueType("GWorldPtr", "GWorldObj")
122n/aOptGWorldPtr = OpaqueByValueType("GWorldPtr", "OptGWorldObj")
123n/aMlteInBuffer = VarInputBufferType('void *', 'ByteCount', 'l')
124n/a
125n/aOptFSSpecPtr = OpaqueByValueType("FSSpec *", "OptFSSpecPtr")
126n/aOptRectPtr = OpaqueByValueType("Rect *", "OptRectPtr")
127n/a
128n/aUniChar = Type("UniChar", "h") # XXXX For now...
129n/a# ADD object type here
130n/a
131n/aexecfile("mltetypetest.py")
132n/a
133n/a# Our (opaque) objects
134n/a
135n/aclass TXNObjDefinition(PEP253Mixin, GlobalObjectDefinition):
136n/a def outputCheckNewArg(self):
137n/a Output("if (itself == NULL) return PyMac_Error(resNotFound);")
138n/a
139n/aclass TXNFontMenuObjDefinition(PEP253Mixin, GlobalObjectDefinition):
140n/a def outputCheckNewArg(self):
141n/a Output("if (itself == NULL) return PyMac_Error(resNotFound);")
142n/a
143n/a
144n/a# ADD object class here
145n/a
146n/a# From here on it's basically all boiler plate...
147n/a
148n/a# Create the generator groups and link them
149n/amodule = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
150n/aTXNObject_object = TXNObjDefinition("TXNObject", "TXNObj", "TXNObject")
151n/aTXNFontMenuObject_object = TXNFontMenuObjDefinition("TXNFontMenuObject", "TXNFontMenuObj", "TXNFontMenuObject")
152n/a
153n/a# ADD object here
154n/a
155n/amodule.addobject(TXNObject_object)
156n/amodule.addobject(TXNFontMenuObject_object)
157n/a# ADD addobject call here
158n/a
159n/a# Create the generator classes used to populate the lists
160n/aFunction = OSErrWeakLinkFunctionGenerator
161n/aMethod = OSErrWeakLinkMethodGenerator
162n/a
163n/a# Create and populate the lists
164n/afunctions = []
165n/aTXNObject_methods = []
166n/aTXNFontMenuObject_methods = []
167n/a
168n/a# ADD _methods initializer here
169n/aexecfile(INPUTFILE)
170n/a
171n/a
172n/a# add the populated lists to the generator groups
173n/a# (in a different wordl the scan program would generate this)
174n/afor f in functions: module.add(f)
175n/afor f in TXNObject_methods: TXNObject_object.add(f)
176n/afor f in TXNFontMenuObject_methods: TXNFontMenuObject_object.add(f)
177n/a
178n/a# ADD Manual generators here
179n/ainittextension_body = """
180n/aOSStatus _err;
181n/aTXNMacOSPreferredFontDescription * iDefaultFonts = NULL;
182n/aItemCount iCountDefaultFonts = 0;
183n/aTXNInitOptions iUsageFlags;
184n/aPyMac_PRECHECK(TXNInitTextension);
185n/aif (!PyArg_ParseTuple(_args, "l", &iUsageFlags))
186n/a return NULL;
187n/a_err = TXNInitTextension(iDefaultFonts,
188n/a iCountDefaultFonts,
189n/a iUsageFlags);
190n/aif (_err != noErr) return PyMac_Error(_err);
191n/aPy_INCREF(Py_None);
192n/a_res = Py_None;
193n/areturn _res;
194n/a"""
195n/a
196n/af = ManualGenerator("TXNInitTextension", inittextension_body);
197n/af.docstring = lambda: "(TXNInitOptions) -> None"
198n/amodule.add(f)
199n/a
200n/a# generate output (open the output file as late as possible)
201n/aSetOutputFileName(OUTPUTFILE)
202n/amodule.generate()