Use symbolic constants names in the generated wxSTC files.

Update the script generating stc.cpp to put the symbolic constants names and
not their raw numeric values into the generated code. This makes it much
easier to read and understand.

Closes #15783.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75443 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-12-28 22:20:25 +00:00
parent 03c0dc0235
commit 3d5f3bcac7

View File

@@ -16,6 +16,7 @@ from fileinput import FileInput
IFACE = os.path.abspath('./scintilla/include/Scintilla.iface') IFACE = os.path.abspath('./scintilla/include/Scintilla.iface')
HDR_SCN = os.path.abspath('./scintilla/include/Scintilla.h')
H_TEMPLATE = os.path.abspath('./stc.h.in') H_TEMPLATE = os.path.abspath('./stc.h.in')
IH_TEMPLATE = os.path.abspath('./stc.interface.h.in') IH_TEMPLATE = os.path.abspath('./stc.interface.h.in')
CPP_TEMPLATE = os.path.abspath('./stc.cpp.in') CPP_TEMPLATE = os.path.abspath('./stc.cpp.in')
@@ -243,7 +244,7 @@ methodOverrideMap = {
'wxString %s(int line) const;', 'wxString %s(int line) const;',
'''wxString %s(int line) const { '''wxString %s(int line) const {
long msg = %s; const int msg = %s;
long len = SendMsg(msg, line, 0); long len = SendMsg(msg, line, 0);
wxMemoryBuffer mbuf(len+1); wxMemoryBuffer mbuf(len+1);
@@ -259,7 +260,7 @@ methodOverrideMap = {
'wxString %s(int line) const;', 'wxString %s(int line) const;',
'''wxString %s(int line) const { '''wxString %s(int line) const {
long msg = %s; const int msg = %s;
long len = SendMsg(msg, line, 0); long len = SendMsg(msg, line, 0);
wxMemoryBuffer mbuf(len+1); wxMemoryBuffer mbuf(len+1);
@@ -280,7 +281,7 @@ methodOverrideMap = {
'wxString %s(int line) const;', 'wxString %s(int line) const;',
'''wxString %s(int line) const { '''wxString %s(int line) const {
long msg = %s; const int msg = %s;
long len = SendMsg(msg, line, 0); long len = SendMsg(msg, line, 0);
wxMemoryBuffer mbuf(len+1); wxMemoryBuffer mbuf(len+1);
@@ -296,7 +297,7 @@ methodOverrideMap = {
'wxString %s(int line) const;', 'wxString %s(int line) const;',
'''wxString %s(int line) const { '''wxString %s(int line) const {
long msg = %s; const int msg = %s;
long len = SendMsg(msg, line, 0); long len = SendMsg(msg, line, 0);
wxMemoryBuffer mbuf(len+1); wxMemoryBuffer mbuf(len+1);
@@ -318,7 +319,7 @@ methodOverrideMap = {
('StyleGetFaceName', ('StyleGetFaceName',
'wxString %s(int style);', 'wxString %s(int style);',
'''wxString %s(int style) { '''wxString %s(int style) {
long msg = %s; const int msg = %s;
long len = SendMsg(msg, style, 0); long len = SendMsg(msg, style, 0);
wxMemoryBuffer mbuf(len+1); wxMemoryBuffer mbuf(len+1);
char* buf = (char*)mbuf.GetWriteBuf(len+1); char* buf = (char*)mbuf.GetWriteBuf(len+1);
@@ -761,7 +762,7 @@ methodOverrideMap = {
'wxString %s() const;', 'wxString %s() const;',
'''wxString %s() const { '''wxString %s() const {
int msg = %s; const int msg = %s;
int len = SendMsg(msg, 0, (sptr_t)NULL); int len = SendMsg(msg, 0, (sptr_t)NULL);
if (!len) return wxEmptyString; if (!len) return wxEmptyString;
@@ -779,7 +780,7 @@ methodOverrideMap = {
'wxString %s(int tagNumber) const;', 'wxString %s(int tagNumber) const;',
'''wxString %s(int tagNumber) const { '''wxString %s(int tagNumber) const {
int msg = %s; const int msg = %s;
int len = SendMsg(msg, tagNumber, (sptr_t)NULL); int len = SendMsg(msg, tagNumber, (sptr_t)NULL);
if (!len) return wxEmptyString; if (!len) return wxEmptyString;
@@ -796,7 +797,7 @@ methodOverrideMap = {
'wxString %s() const;', 'wxString %s() const;',
'''wxString %s() const { '''wxString %s() const {
int msg = %s; const int msg = %s;
int len = SendMsg(msg, 0, (sptr_t)NULL); int len = SendMsg(msg, 0, (sptr_t)NULL);
if (!len) return wxEmptyString; if (!len) return wxEmptyString;
@@ -814,7 +815,7 @@ methodOverrideMap = {
'wxString %s() const;', 'wxString %s() const;',
'''wxString %s() const { '''wxString %s() const {
int msg = %s; const int msg = %s;
int len = SendMsg(msg, 0, (sptr_t)NULL); int len = SendMsg(msg, 0, (sptr_t)NULL);
if (!len) return wxEmptyString; if (!len) return wxEmptyString;
@@ -832,7 +833,7 @@ methodOverrideMap = {
'wxString %s() const;', 'wxString %s() const;',
'''wxString %s() const { '''wxString %s() const {
int msg = %s; const int msg = %s;
int len = SendMsg(msg, 0, (sptr_t)NULL); int len = SendMsg(msg, 0, (sptr_t)NULL);
if (!len) return wxEmptyString; if (!len) return wxEmptyString;
@@ -851,7 +852,7 @@ methodOverrideMap = {
'wxString %s(const wxString& name) const;', 'wxString %s(const wxString& name) const;',
'''wxString %s(const wxString& name) const { '''wxString %s(const wxString& name) const {
int msg = %s; const int msg = %s;
int len = SendMsg(msg, (sptr_t)(const char*)wx2stc(name), (sptr_t)NULL); int len = SendMsg(msg, (sptr_t)(const char*)wx2stc(name), (sptr_t)NULL);
if (!len) return wxEmptyString; if (!len) return wxEmptyString;
@@ -870,7 +871,7 @@ methodOverrideMap = {
'wxString %s() const;', 'wxString %s() const;',
'''wxString %s() const { '''wxString %s() const {
int msg = %s; const int msg = %s;
int len = SendMsg(msg, 0, (sptr_t)NULL); int len = SendMsg(msg, 0, (sptr_t)NULL);
if (!len) return wxEmptyString; if (!len) return wxEmptyString;
@@ -942,7 +943,7 @@ constNonGetterMethods = (
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
def processIface(iface, h_tmplt, cpp_tmplt, ih_tmplt, h_dest, cpp_dest, docstr_dest, ih_dest): def processIface(iface, h_tmplt, cpp_tmplt, ih_tmplt, h_dest, cpp_dest, docstr_dest, ih_dest, msgcodes):
curDocStrings = [] curDocStrings = []
values = [] values = []
methods = [] methods = []
@@ -965,7 +966,7 @@ def processIface(iface, h_tmplt, cpp_tmplt, ih_tmplt, h_dest, cpp_dest, docstr_d
curDocStrings = [] curDocStrings = []
elif op == 'fun ' or op == 'set ' or op == 'get ': elif op == 'fun ' or op == 'set ' or op == 'get ':
parseFun(line[4:], methods, curDocStrings, cmds, op == 'get ') parseFun(line[4:], methods, curDocStrings, cmds, op == 'get ', msgcodes)
curDocStrings = [] curDocStrings = []
elif op == 'cat ': elif op == 'cat ':
@@ -1017,6 +1018,30 @@ def joinWithNewLines(values):
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# parse header file for message codes
def processHeader(hdr_scn, codeDict):
fh = FileInput(hdr_scn)
for line in fh:
line = line[:-1]
if line[:8] != '#define ':
continue
op = line[8:]
tokens = op.split()
if len(tokens) != 2:
continue
symbname = tokens[0]
symbval = tokens[1]
if symbname[:4] == 'SCI_':
# add symbol and its value to the dictionary
if symbval in codeDict:
print("***** Duplicated message code for " + symbname)
else:
codeDict[symbval] = symbname
#----------------------------------------------------------------------------
def processVals(values): def processVals(values):
text = [] text = []
for name, value, docs in values: for name, value, docs in values:
@@ -1180,7 +1205,7 @@ funregex = re.compile(r'\s*([a-zA-Z0-9_]+)' # <ws>return type
'\(([ a-zA-Z0-9_]*),' # (param, '\(([ a-zA-Z0-9_]*),' # (param,
'([ a-zA-Z0-9_]*),*\)') # param) '([ a-zA-Z0-9_]*),*\)') # param)
def parseFun(line, methods, docs, values, is_const): def parseFun(line, methods, docs, values, is_const, msgcodes):
def parseParam(param): def parseParam(param):
param = param.strip() param = param.strip()
if param == '': if param == '':
@@ -1209,7 +1234,12 @@ def parseFun(line, methods, docs, values, is_const):
if not FUNC_FOR_CMD: if not FUNC_FOR_CMD:
return return
methods.append( (retType, name, number, param1, param2, tuple(docs), # if possible, replace numeric value with symbol
if number in msgcodes:
code = msgcodes[number]
else:
code = number
methods.append( (retType, name, code, param1, param2, tuple(docs),
is_const or name in constNonGetterMethods) ) is_const or name in constNonGetterMethods) )
@@ -1223,8 +1253,12 @@ def main(args):
print('Please run this script from src/stc subdirectory.') print('Please run this script from src/stc subdirectory.')
sys.exit(1) sys.exit(1)
# parse header file for message codes and create dictionary
msgcodes = {}
processHeader(HDR_SCN, msgcodes)
# Now just do it # Now just do it
processIface(IFACE, H_TEMPLATE, CPP_TEMPLATE, IH_TEMPLATE, H_DEST, CPP_DEST, DOCSTR_DEST, IH_DEST) processIface(IFACE, H_TEMPLATE, CPP_TEMPLATE, IH_TEMPLATE, H_DEST, CPP_DEST, DOCSTR_DEST, IH_DEST, msgcodes)