1 # HFacer.py - regenerate the Scintilla.h and SciLexer.h files from the Scintilla.iface interface
\r
3 # The header files are copied to a temporary file apart from the section between a //++Autogenerated
\r
4 # comment and a //--Autogenerated comment which is generated by the printHFile and printLexHFile
\r
5 # functions. After the temporary file is created, it is copied back to the original file name.
\r
12 def Contains(s,sub):
\r
13 return string.find(s, sub) != -1
\r
15 def printLexHFile(f,out):
\r
16 for name in f.order:
\r
17 v = f.features[name]
\r
18 if v["FeatureType"] in ["val"]:
\r
19 if Contains(name, "SCE_") or Contains(name, "SCLEX_"):
\r
20 out.write("#define " + name + " " + v["Value"] + "\n")
\r
22 def printHFile(f,out):
\r
23 for name in f.order:
\r
24 v = f.features[name]
\r
25 if v["Category"] != "Deprecated":
\r
26 if v["FeatureType"] in ["fun", "get", "set"]:
\r
27 featureDefineName = "SCI_" + string.upper(name)
\r
28 out.write("#define " + featureDefineName + " " + v["Value"] + "\n")
\r
29 elif v["FeatureType"] in ["evt"]:
\r
30 featureDefineName = "SCN_" + string.upper(name)
\r
31 out.write("#define " + featureDefineName + " " + v["Value"] + "\n")
\r
32 elif v["FeatureType"] in ["val"]:
\r
33 if not (Contains(name, "SCE_") or Contains(name, "SCLEX_")):
\r
34 out.write("#define " + name + " " + v["Value"] + "\n")
\r
36 def CopyWithInsertion(input, output, genfn, definition):
\r
38 for line in input.readlines():
\r
41 if Contains(line, "//++Autogenerated"):
\r
43 genfn(definition, output)
\r
44 if Contains(line, "//--Autogenerated"):
\r
48 def contents(filename):
\r
54 def Regenerate(filename, genfn, definition):
\r
55 inText = contents(filename)
\r
56 tempname = "HFacer.tmp"
\r
57 out = open(tempname,"w")
\r
58 hfile = open(filename)
\r
59 CopyWithInsertion(hfile, out, genfn, definition)
\r
62 outText = contents(tempname)
\r
63 if inText == outText:
\r
67 os.rename(tempname, filename)
\r
71 f.ReadFromFile("Scintilla.iface")
\r
72 Regenerate("Scintilla.h", printHFile, f)
\r
73 Regenerate("SciLexer.h", printLexHFile, f)
\r
74 print "Maximum ID is", max([x for x in f.values if int(x) < 3000])
\r