X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7e0c58e92cb173bb192444670535f49583a6bf1d..bc0289bf5e29def4ba504807e45d6b7daf917fad:/src/stc/gen_iface.py diff --git a/src/stc/gen_iface.py b/src/stc/gen_iface.py old mode 100644 new mode 100755 index 2dfea4c444..ed71e5df98 --- a/src/stc/gen_iface.py +++ b/src/stc/gen_iface.py @@ -1,4 +1,4 @@ -#!/bin/env python +#!/usr/bin/env python #---------------------------------------------------------------------------- # Name: gen_iface.py # Purpose: Generate stc.h and stc.cpp from the info in Scintilla.iface @@ -21,7 +21,7 @@ H_TEMPLATE = os.path.abspath('./stc.h.in') CPP_TEMPLATE = os.path.abspath('./stc.cpp.in') H_DEST = os.path.abspath('../../include/wx/stc/stc.h') CPP_DEST = os.path.abspath('./stc.cpp') -DOCSTR_DEST = os.path.abspath('../../../wxPython/contrib/stc/_stc_gendocs.i') +DOCSTR_DEST = '/dev/null' #os.path.abspath('../../../wxPython/contrib/stc/_stc_gendocs.i') # Value prefixes to convert @@ -85,14 +85,14 @@ methodOverrideMap = { '''void %s(const wxString& text) { wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); - SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + SendMsg(%s, strlen(buf), (sptr_t)(const char*)buf);''', 0), 'AddStyledText' : (0, 'void %s(const wxMemoryBuffer& data);', '''void %s(const wxMemoryBuffer& data) { - SendMsg(%s, data.GetDataLen(), (long)data.GetData());''', + SendMsg(%s, data.GetDataLen(), (sptr_t)data.GetData());''', 0), 'AppendText' : (0, @@ -100,7 +100,7 @@ methodOverrideMap = { '''void %s(const wxString& text) { wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); - SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + SendMsg(%s, strlen(buf), (sptr_t)(const char*)buf);''', 0), 'GetViewWS' : ( 'GetViewWhiteSpace', 0, 0, 0), @@ -108,13 +108,13 @@ methodOverrideMap = { 'GetCharAt' : ( 0, 0, - '''int %s(int pos) { + '''int %s(int pos) const { return (unsigned char)SendMsg(%s, pos, 0);''', 0), 'GetStyleAt' : ( 0, 0, - '''int %s(int pos) { + '''int %s(int pos) const { return (unsigned char)SendMsg(%s, pos, 0);''', 0), @@ -135,7 +135,7 @@ methodOverrideMap = { tr.lpstrText = (char*)buf.GetWriteBuf(len*2+1); tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; - len = SendMsg(%s, 0, (long)&tr); + len = SendMsg(%s, 0, (sptr_t)&tr); buf.UngetWriteBuf(len); return buf;''', @@ -144,9 +144,9 @@ methodOverrideMap = { 'PositionFromPoint' : (0, - 'int %s(wxPoint pt);', + 'int %s(wxPoint pt) const;', - '''int %s(wxPoint pt) { + '''int %s(wxPoint pt) const { return SendMsg(%s, pt.x, pt.y);''', 0), @@ -164,7 +164,7 @@ methodOverrideMap = { wxMemoryBuffer mbuf(len+1); char* buf = (char*)mbuf.GetWriteBuf(len+1); - int pos = SendMsg(%s, len+1, (long)buf); + int pos = SendMsg(%s, len+1, (sptr_t)buf); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); if (linePos) *linePos = pos; @@ -211,7 +211,7 @@ methodOverrideMap = { char* buff = new char[len+1]; strm.CopyTo(buff, len); buff[len] = 0; - SendMsg(%s, markerNumber, (long)buff); + SendMsg(%s, markerNumber, (sptr_t)buff); delete [] buff; ''', ('Define a marker from a bitmap',)), @@ -234,7 +234,7 @@ methodOverrideMap = { 'SetSelFore' : ('SetSelForeground', 0, 0, 0), 'SetSelBack' : ('SetSelBackground', 0, 0, 0), 'SetCaretFore' : ('SetCaretForeground', 0, 0, 0), - 'StyleGetFont' : + 'StyleGetFont' : ('StyleGetFaceName', 'wxString %s(int style);', '''wxString %s(int style) { @@ -242,14 +242,14 @@ methodOverrideMap = { long len = SendMsg(msg, style, 0); wxMemoryBuffer mbuf(len+1); char* buf = (char*)mbuf.GetWriteBuf(len+1); - SendMsg(msg, style, (long)buf); + SendMsg(msg, style, (sptr_t)buf); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); return stc2wx(buf);''', ('Get the font facename of a style',)), 'StyleSetFont' : ('StyleSetFaceName', 0, 0, 0), 'StyleSetCharacterSet' : (None, 0, 0, 0), - + 'AssignCmdKey' : ('CmdKeyAssign', 'void %s(int key, int modifiers, int cmd);', @@ -275,7 +275,7 @@ methodOverrideMap = { 'void %s(int length, char* styleBytes);', '''void %s(int length, char* styleBytes) { - SendMsg(%s, length, (long)styleBytes);''', + SendMsg(%s, length, (sptr_t)styleBytes);''', 0), @@ -285,7 +285,7 @@ methodOverrideMap = { 'IndicGetFore' : ('IndicatorGetForeground', 0, 0, 0), 'IndicSetUnder': ('IndicatorSetUnder', 0, 0, 0), 'IndicGetUnder': ('IndicatorGetUnder', 0, 0, 0), - + 'SetWhitespaceFore' : ('SetWhitespaceForeground', 0, 0, 0), 'SetWhitespaceBack' : ('SetWhitespaceBackground', 0, 0, 0), @@ -317,7 +317,7 @@ methodOverrideMap = { 'AutoCSetMaxHeight' : ('AutoCompSetMaxHeight', 0, 0, 0), 'AutoCGetMaxHeight' : ('AutoCompGetMaxHeight', 0, 0, 0), 'AutoCGetMaxHeight' : ('AutoCompGetMaxHeight', 0, 0, 0), - + 'RegisterImage' : (0, '''void %s(int type, const wxBitmap& bmp);''', @@ -332,7 +332,7 @@ methodOverrideMap = { char* buff = new char[len+1]; strm.CopyTo(buff, len); buff[len] = 0; - SendMsg(%s, type, (long)buff); + SendMsg(%s, type, (sptr_t)buff); delete [] buff; ''', ('Register an image for use in autocompletion lists.',)), @@ -365,7 +365,7 @@ methodOverrideMap = { wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); ft.lpstrText = (char*)(const char*)buf; - return SendMsg(%s, flags, (long)&ft);''', + return SendMsg(%s, flags, (sptr_t)&ft);''', 0), 'FormatRange' : @@ -374,14 +374,14 @@ methodOverrideMap = { int startPos, int endPos, wxDC* draw, - wxDC* target, + wxDC* target, wxRect renderRect, wxRect pageRect);''', ''' int %s(bool doDraw, int startPos, int endPos, wxDC* draw, - wxDC* target, + wxDC* target, wxRect renderRect, wxRect pageRect) { RangeToFormat fr; @@ -404,36 +404,36 @@ methodOverrideMap = { fr.chrg.cpMin = startPos; fr.chrg.cpMax = endPos; - return SendMsg(%s, doDraw, (long)&fr);''', + return SendMsg(%s, doDraw, (sptr_t)&fr);''', 0), 'GetLine' : (0, - 'wxString %s(int line);', + 'wxString %s(int line) const;', - '''wxString %s(int line) { + '''wxString %s(int line) const { int len = LineLength(line); if (!len) return wxEmptyString; wxMemoryBuffer mbuf(len+1); char* buf = (char*)mbuf.GetWriteBuf(len+1); - SendMsg(%s, line, (long)buf); + SendMsg(%s, line, (sptr_t)buf); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); return stc2wx(buf);''', ('Retrieve the contents of a line.',)), - 'SetSel' : ('SetSelection', 0, 0, 0), + 'SetSel' : (None, 0,0,0), #'SetSelection', 0, 0, 0), 'GetSelText' : ('GetSelectedText', 'wxString %s();', '''wxString %s() { - int start; - int end; + long start; + long end; GetSelection(&start, &end); int len = end - start; @@ -441,7 +441,7 @@ methodOverrideMap = { wxMemoryBuffer mbuf(len+2); char* buf = (char*)mbuf.GetWriteBuf(len+1); - SendMsg(%s, 0, (long)buf); + SendMsg(%s, 0, (sptr_t)buf); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); return stc2wx(buf);''', @@ -467,7 +467,7 @@ methodOverrideMap = { tr.lpstrText = buf; tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; - SendMsg(%s, 0, (long)&tr); + SendMsg(%s, 0, (sptr_t)&tr); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); return stc2wx(buf);''', @@ -483,13 +483,13 @@ methodOverrideMap = { 'GetText' : (0, - 'wxString %s();', + 'wxString %s() const;', - '''wxString %s() { + '''wxString %s() const { int len = GetTextLength(); wxMemoryBuffer mbuf(len+1); // leave room for the null... char* buf = (char*)mbuf.GetWriteBuf(len+1); - SendMsg(%s, len+1, (long)buf); + SendMsg(%s, len+1, (sptr_t)buf); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); return stc2wx(buf);''', @@ -509,7 +509,7 @@ methodOverrideMap = { 'SetHotspotActiveBack' : ('SetHotspotActiveBackground', 0, 0, 0), 'GetHotspotActiveFore' : ('GetHotspotActiveForeground', 0, 0, 0), 'GetHotspotActiveBack' : ('GetHotspotActiveBackground', 0, 0, 0), - + 'GetCaretLineBack' : ('GetCaretLineBackground', 0, 0, 0), 'SetCaretLineBack' : ('SetCaretLineBackground', 0, 0, 0), @@ -520,7 +520,7 @@ methodOverrideMap = { ''' int %s(const wxString& text) { wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); - return SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + return SendMsg(%s, strlen(buf), (sptr_t)(const char*)buf);''', 0), 'ReplaceTargetRE' : @@ -530,7 +530,7 @@ methodOverrideMap = { ''' int %s(const wxString& text) { wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); - return SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + return SendMsg(%s, strlen(buf), (sptr_t)(const char*)buf);''', 0), 'SearchInTarget' : @@ -540,7 +540,7 @@ methodOverrideMap = { ''' int %s(const wxString& text) { wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); - return SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + return SendMsg(%s, strlen(buf), (sptr_t)(const char*)buf);''', 0), # not sure what to do about these yet @@ -554,12 +554,12 @@ methodOverrideMap = { 'wxString %s(const wxString& key);', '''wxString %s(const wxString& key) { - int len = SendMsg(SCI_GETPROPERTY, (long)(const char*)wx2stc(key), 0); + int len = SendMsg(SCI_GETPROPERTY, (sptr_t)(const char*)wx2stc(key), 0); if (!len) return wxEmptyString; wxMemoryBuffer mbuf(len+1); char* buf = (char*)mbuf.GetWriteBuf(len+1); - SendMsg(%s, (long)(const char*)wx2stc(key), (long)buf); + SendMsg(%s, (uptr_t)(const char*)wx2stc(key), (sptr_t)buf); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); return stc2wx(buf);''', @@ -570,12 +570,12 @@ methodOverrideMap = { 'wxString %s(const wxString& key);', '''wxString %s(const wxString& key) { - int len = SendMsg(SCI_GETPROPERTYEXPANDED, (long)(const char*)wx2stc(key), 0); + int len = SendMsg(SCI_GETPROPERTYEXPANDED, (uptr_t)(const char*)wx2stc(key), 0); if (!len) return wxEmptyString; wxMemoryBuffer mbuf(len+1); char* buf = (char*)mbuf.GetWriteBuf(len+1); - SendMsg(%s, (long)(const char*)wx2stc(key), (long)buf); + SendMsg(%s, (uptr_t)(const char*)wx2stc(key), (sptr_t)buf); mbuf.UngetWriteBuf(len); mbuf.AppendByte(0); return stc2wx(buf);''', @@ -598,7 +598,7 @@ methodOverrideMap = { (0, 'void %s(void* docPointer);', '''void %s(void* docPointer) { - SendMsg(%s, 0, (long)docPointer);''', + SendMsg(%s, 0, (sptr_t)docPointer);''', 0), 'CreateDocument' : @@ -612,14 +612,14 @@ methodOverrideMap = { (0, 'void %s(void* docPointer);', '''void %s(void* docPointer) { - SendMsg(%s, 0, (long)docPointer);''', + SendMsg(%s, 0, (sptr_t)docPointer);''', 0), 'ReleaseDocument' : (0, 'void %s(void* docPointer);', '''void %s(void* docPointer) { - SendMsg(%s, 0, (long)docPointer);''', + SendMsg(%s, 0, (sptr_t)docPointer);''', 0), 'SetCodePage' : @@ -655,6 +655,19 @@ methodOverrideMap = { } +# all Scintilla getters are transformed into const member of wxSTC class but +# some non-getter methods are also logically const and this set contains their +# names (notice that it's useless to include here methods manually overridden +# above) +constNonGetterMethods = set(( + 'LineFromPosition', + 'PositionFromLine', + 'LineLength', + 'CanPaste', + 'CanRedo', + 'CanUndo', +)) + #---------------------------------------------------------------------------- def processIface(iface, h_tmplt, cpp_tmplt, h_dest, cpp_dest, docstr_dest): @@ -680,7 +693,7 @@ def processIface(iface, h_tmplt, cpp_tmplt, h_dest, cpp_dest, docstr_dest): curDocStrings = [] elif op == 'fun ' or op == 'set ' or op == 'get ': - parseFun(line[4:], methods, curDocStrings, cmds) + parseFun(line[4:], methods, curDocStrings, cmds, op == 'get ') curDocStrings = [] elif op == 'cat ': @@ -742,7 +755,7 @@ def processMethods(methods): imps = [] dstr = [] - for retType, name, number, param1, param2, docs in methods: + for retType, name, number, param1, param2, docs, is_const in methods: retType = retTypeMap.get(retType, retType) params = makeParamString(param1, param2) @@ -755,14 +768,17 @@ def processMethods(methods): st = 'DocStr(wxStyledTextCtrl::%s,\n' \ '"%s", "");\n' % (name, '\n'.join(docs)) dstr.append(st) - + # Build the method definition for the .h file if docs: defs.append('') for x in docs: defs.append(' // ' + x) if not theDef: - theDef = ' %s %s(%s);' % (retType, name, params) + theDef = ' %s %s(%s)' % (retType, name, params) + if is_const: + theDef = theDef + ' const' + theDef = theDef + ';' defs.append(theDef) # Build the method implementation string @@ -771,8 +787,10 @@ def processMethods(methods): for x in docs: imps.append('// ' + x) if not theImp: - theImp = '%s wxStyledTextCtrl::%s(%s) {\n ' % (retType, name, params) - + theImp = '%s wxStyledTextCtrl::%s(%s)' % (retType, name, params) + if is_const: + theImp = theImp + ' const' + theImp = theImp + '\n{\n ' if retType == 'wxColour': theImp = theImp + 'long c = ' elif retType != 'void': @@ -823,7 +841,7 @@ def makeArgString(param): typ, name = param if typ == 'string': - return '(long)(const char*)wx2stc(%s)' % name + return '(sptr_t)(const char*)wx2stc(%s)' % name if typ == 'colour': return 'wxColourAsLong(%s)' % name @@ -870,7 +888,7 @@ funregex = re.compile(r'\s*([a-zA-Z0-9_]+)' # return type '\(([ a-zA-Z0-9_]*),' # (param, '([ a-zA-Z0-9_]*)\)') # param) -def parseFun(line, methods, docs, values): +def parseFun(line, methods, docs, values, is_const): def parseParam(param): param = string.strip(param) if param == '': @@ -893,13 +911,14 @@ def parseFun(line, methods, docs, values): for v in cmdValues: if (type(v) == type(()) and v[0] <= num <= v[1]) or v == num: parseVal('CMD_%s=%s' % (string.upper(name), number), values, docs) - + # if we are not also doing a function for CMD values, then # just return, otherwise fall through to the append blow. if not FUNC_FOR_CMD: return - - methods.append( (retType, name, number, param1, param2, tuple(docs)) ) + + methods.append( (retType, name, number, param1, param2, tuple(docs), + is_const or name in constNonGetterMethods) ) #---------------------------------------------------------------------------- @@ -908,6 +927,10 @@ def parseFun(line, methods, docs, values): def main(args): # TODO: parse command line args to replace default input/output files??? + if not os.path.exists(IFACE): + print 'Please run this script from src/stc subdirectory.' + sys.exit(1) + # Now just do it processIface(IFACE, H_TEMPLATE, CPP_TEMPLATE, H_DEST, CPP_DEST, DOCSTR_DEST)