ยปCore Development>Code coverage>Mac/scripts/mkestrres.py

Python code coverage for Mac/scripts/mkestrres.py

#countcontent
1n/a"""Parse sys/errno.h and Errors.h and create Estr resource"""
2n/a
3n/aimport re
4n/aimport string
5n/afrom Carbon import Res
6n/aimport os
7n/a
8n/aREAD = 1
9n/aWRITE = 2
10n/asmAllScripts = -3
11n/a
12n/aERRNO_PROG="#define[ \t]+" \
13n/a "([A-Z0-9a-z_]+)" \
14n/a "[ \t]+" \
15n/a "([0-9]+)" \
16n/a "[ \t]*/\*[ \t]*" \
17n/a "(.*)" \
18n/a "[ \t]*\*/"
19n/a
20n/aERRORS_PROG="[ \t]*" \
21n/a "([A-Z0-9a-z_]+)" \
22n/a "[ \t]*=[ \t]*" \
23n/a "([-0-9]+)" \
24n/a "[, \t]*/\*[ \t]*" \
25n/a "(.*)" \
26n/a "[ \t]*\*/"
27n/a
28n/aERRORS_PROG_2="[ \t]*" \
29n/a "([A-Z0-9a-z_]+)" \
30n/a "[ \t]*=[ \t]*" \
31n/a "([-0-9]+)" \
32n/a "[, \t]*"
33n/a
34n/adef Pstring(str):
35n/a if len(str) > 255:
36n/a raise ValueError, 'String too large'
37n/a return chr(len(str))+str
38n/a
39n/adef writeestr(dst, edict):
40n/a """Create Estr resource file given a dictionary of errors."""
41n/a
42n/a os.unlink(dst.as_pathname())
43n/a Res.FSpCreateResFile(dst, 'RSED', 'rsrc', smAllScripts)
44n/a output = Res.FSpOpenResFile(dst, WRITE)
45n/a Res.UseResFile(output)
46n/a for num in edict.keys():
47n/a res = Res.Resource(Pstring(edict[num][0]))
48n/a res.AddResource('Estr', num, '')
49n/a res.WriteResource()
50n/a Res.CloseResFile(output)
51n/a
52n/adef writepython(fp, dict):
53n/a k = dict.keys()
54n/a k.sort()
55n/a for i in k:
56n/a fp.write("%s\t=\t%d\t#%s\n"%(dict[i][1], i, dict[i][0]))
57n/a
58n/a
59n/adef parse_errno_h(fp, dict):
60n/a errno_prog = re.compile(ERRNO_PROG)
61n/a for line in fp.readlines():
62n/a m = errno_prog.match(line)
63n/a if m:
64n/a number = string.atoi(m.group(2))
65n/a name = m.group(1)
66n/a desc = string.strip(m.group(3))
67n/a
68n/a if not dict.has_key(number):
69n/a dict[number] = desc, name
70n/a else:
71n/a print 'DUPLICATE', number
72n/a print '\t', dict[number]
73n/a print '\t', (desc, name)
74n/a
75n/adef parse_errors_h(fp, dict):
76n/a errno_prog = re.compile(ERRORS_PROG)
77n/a errno_prog_2 = re.compile(ERRORS_PROG_2)
78n/a for line in fp.readlines():
79n/a match = 0
80n/a m = errno_prog.match(line)
81n/a m2 = errno_prog_2.match(line)
82n/a if m:
83n/a number = string.atoi(m.group(2))
84n/a name = m.group(1)
85n/a desc = string.strip(m.group(3))
86n/a match=1
87n/a elif m2:
88n/a number = string.atoi(m2.group(2))
89n/a name = m2.group(1)
90n/a desc = name
91n/a match=1
92n/a if match:
93n/a if number > 0: continue
94n/a
95n/a if not dict.has_key(number):
96n/a dict[number] = desc, name
97n/a else:
98n/a print 'DUPLICATE', number
99n/a print '\t', dict[number]
100n/a print '\t', (desc, name)
101n/a if len(desc) > len(dict[number][0]):
102n/a print 'Pick second one'
103n/a dict[number] = desc, name
104n/a
105n/adef main():
106n/a dict = {}
107n/a pathname = EasyDialogs.AskFileForOpen(message="Where is GUSI sys/errno.h?")
108n/a if pathname:
109n/a fp = open(pathname)
110n/a parse_errno_h(fp, dict)
111n/a fp.close()
112n/a
113n/a pathname = EasyDialogs.AskFileForOpen(message="Select cerrno (MSL) or cancel")
114n/a if pathname:
115n/a fp = open(pathname)
116n/a parse_errno_h(fp, dict)
117n/a fp.close()
118n/a
119n/a pathname = EasyDialogs.AskFileForOpen(message="Where is MacErrors.h?")
120n/a if pathname:
121n/a fp = open(pathname)
122n/a parse_errors_h(fp, dict)
123n/a fp.close()
124n/a
125n/a pathname = EasyDialogs.AskFileForOpen(message="Where is mkestrres-MacErrors.h?")
126n/a if pathname:
127n/a fp = open(pathname)
128n/a parse_errors_h(fp, dict)
129n/a fp.close()
130n/a
131n/a if not dict:
132n/a return
133n/a
134n/a pathname = EasyDialogs.AskFileForSave(message="Resource output file?", savedFileName="errors.rsrc")
135n/a if pathname:
136n/a writeestr(fss, dict)
137n/a
138n/a pathname = EasyDialogs.AskFileForSave(message="Python output file?", savedFileName="macerrors.py")
139n/a if pathname:
140n/a fp = open(pathname, "w")
141n/a writepython(fp, dict)
142n/a fp.close()
143n/a fss.SetCreatorType('Pyth', 'TEXT')
144n/a
145n/a pathname = EasyDialogs.AskFileForSave(message="Text output file?", savedFileName="errors.txt")
146n/a if pathname:
147n/a fp = open(pathname, "w")
148n/a
149n/a k = dict.keys()
150n/a k.sort()
151n/a for i in k:
152n/a fp.write("%d\t%s\t%s\n"%(i, dict[i][1], dict[i][0]))
153n/a fp.close()
154n/a
155n/a
156n/aif __name__ == '__main__':
157n/a main()