X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/abb69c6c82d61cf18f14270650a68896a3d8ed47..d60bd5b51eede661744d191d053a53ac1ac6ba36:/contrib/src/stc/gen_iface.py diff --git a/contrib/src/stc/gen_iface.py b/contrib/src/stc/gen_iface.py index eba0f3c586..18b28cbdd3 100644 --- a/contrib/src/stc/gen_iface.py +++ b/contrib/src/stc/gen_iface.py @@ -12,15 +12,15 @@ #---------------------------------------------------------------------------- -import sys, string, re +import sys, string, re, os from fileinput import FileInput -IFACE = './scintilla/include/Scintilla.iface' -H_TEMPLATE = './stc.h.in' -CPP_TEMPLATE = './stc.cpp.in' -H_DEST = '../../include/wx/stc/stc.h' -CPP_DEST = './stc.cpp' +IFACE = os.path.abspath('./scintilla/include/Scintilla.iface') +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') # Value prefixes to convert @@ -68,33 +68,49 @@ methodOverrideMap = { 'void %s(const wxString& text);', '''void %s(const wxString& text) { - SendMsg(%s, text.Len(), (long)text.c_str());''', + wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); + SendMsg(%s, strlen(buf), (long)(const char*)buf);''', 0), 'AddStyledText' : (0, - 'void %s(const wxString& text);', + 'void %s(const wxMemoryBuffer& data);', - '''void %s(const wxString& text) { - SendMsg(%s, text.Len(), (long)text.c_str());''', + '''void %s(const wxMemoryBuffer& data) { + SendMsg(%s, data.GetDataLen(), (long)data.GetData());''', 0), 'GetViewWS' : ( 'GetViewWhiteSpace', 0, 0, 0), 'SetViewWS' : ( 'SetViewWhiteSpace', 0, 0, 0), - 'GetStyledText' : (0, - 'wxString %s(int startPos, int endPos);', + 'GetCharAt' : ( 0, 0, + '''int %s(int pos) { + return (unsigned char)SendMsg(%s, pos, 0);''', + 0), + + 'GetStyleAt' : ( 0, 0, + '''int %s(int pos) { + return (unsigned char)SendMsg(%s, pos, 0);''', + 0), - '''wxString %s(int startPos, int endPos) { - wxString text; + 'GetStyledText' : (0, + 'wxMemoryBuffer %s(int startPos, int endPos);', + + '''wxMemoryBuffer %s(int startPos, int endPos) { + wxMemoryBuffer buf; + if (endPos < startPos) { + int temp = startPos; + startPos = endPos; + endPos = temp; + } int len = endPos - startPos; - if (!len) return ""; + if (!len) return buf; TextRange tr; - tr.lpstrText = text.GetWriteBuf(len*2); + tr.lpstrText = (char*)buf.GetWriteBuf(len*2+1); tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; - SendMsg(%s, 0, (long)&tr); - text.UngetWriteBuf(len*2); - return text;''', + len = SendMsg(%s, 0, (long)&tr); + buf.UngetWriteBuf(len); + return buf;''', ('Retrieve a buffer of cells.',)), @@ -108,19 +124,23 @@ methodOverrideMap = { 0), 'GetCurLine' : (0, - 'wxString %s(int* OUTPUT=NULL);', + '#ifdef SWIG\n wxString %s(int* OUTPUT);\n#else\n wxString GetCurLine(int* linePos=NULL);\n#endif', '''wxString %s(int* linePos) { - wxString text; int len = LineLength(GetCurrentLine()); - if (!len) return ""; - char* buf = text.GetWriteBuf(len); + if (!len) { + if (linePos) *linePos = 0; + return wxEmptyString; + } - int pos = SendMsg(%s, len, (long)buf); - text.UngetWriteBuf(len); - if (linePos) *linePos = pos; + wxMemoryBuffer mbuf(len+1); + char* buf = (char*)mbuf.GetWriteBuf(len+1); - return text;''', + int pos = SendMsg(%s, len+1, (long)buf); + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + if (linePos) *linePos = pos; + return stc2wx(buf);''', 0), @@ -145,7 +165,7 @@ methodOverrideMap = { MarkerSetBackground(markerNumber, background);''', ('Set the symbol used for a particular marker number,', - 'and optionally the for and background colours.')), + 'and optionally the fore and background colours.')), 'SetMarginTypeN' : ('SetMarginType', 0, 0, 0), 'GetMarginTypeN' : ('GetMarginType', 0, 0, 0), @@ -163,9 +183,6 @@ methodOverrideMap = { 'SetCaretFore' : ('SetCaretForeground', 0, 0, 0), 'StyleSetFont' : ('StyleSetFaceName', 0, 0, 0), - # need to fix this to map between wx and scintilla encoding flags, leave it out for now... - 'StyleSetCharacterSet' : (None, 0, 0, 0), - 'AssignCmdKey' : ('CmdKeyAssign', 'void %s(int key, int modifiers, int cmd);', @@ -215,6 +232,11 @@ methodOverrideMap = { 'AutoCGetChooseSingle' : ('AutoCompGetChooseSingle', 0, 0, 0), 'AutoCSetIgnoreCase' : ('AutoCompSetIgnoreCase', 0, 0, 0), 'AutoCGetIgnoreCase' : ('AutoCompGetIgnoreCase', 0, 0, 0), + 'AutoCSetAutoHide' : ('AutoCompSetAutoHide', 0, 0, 0), + 'AutoCGetAutoHide' : ('AutoCompGetAutoHide', 0, 0, 0), + 'AutoCSetDropRestOfWord' : ('AutoCompSetDropRestOfWord', 0,0,0), + 'AutoCGetDropRestOfWord' : ('AutoCompGetDropRestOfWord', 0,0,0), + 'SetHScrollBar' : ('SetUseHorizontalScrollBar', 0, 0, 0), 'GetHScrollBar' : ('GetUseHorizontalScrollBar', 0, 0, 0), @@ -224,20 +246,15 @@ methodOverrideMap = { 'GetUsePalette' : (None, 0, 0, 0), 'FindText' : (0, + '''int %s(int minPos, int maxPos, const wxString& text, int flags=0);''', + '''int %s(int minPos, int maxPos, - const wxString& text, - bool caseSensitive, bool wholeWord);''', - '''int %s(int minPos, int maxPos, - const wxString& text, - bool caseSensitive, bool wholeWord) { + const wxString& text, + int flags) { TextToFind ft; - int flags = 0; - - flags |= caseSensitive ? SCFIND_MATCHCASE : 0; - flags |= wholeWord ? SCFIND_WHOLEWORD : 0; ft.chrg.cpMin = minPos; ft.chrg.cpMax = maxPos; - ft.lpstrText = (char*)text.c_str(); + ft.lpstrText = (char*)(const char*)wx2stc(text); return SendMsg(%s, flags, (long)&ft);''', 0), @@ -259,6 +276,11 @@ methodOverrideMap = { wxRect pageRect) { RangeToFormat fr; + if (endPos < startPos) { + int temp = startPos; + startPos = endPos; + endPos = temp; + } fr.hdc = draw; fr.hdcTarget = target; fr.rc.top = renderRect.GetTop(); @@ -280,15 +302,15 @@ methodOverrideMap = { 'wxString %s(int line);', '''wxString %s(int line) { - wxString text; int len = LineLength(line); - if (!len) return ""; - char* buf = text.GetWriteBuf(len); + if (!len) return wxEmptyString; - int pos = SendMsg(%s, line, (long)buf); - text.UngetWriteBuf(len); - - return text;''', + wxMemoryBuffer mbuf(len+1); + char* buf = (char*)mbuf.GetWriteBuf(len+1); + SendMsg(%s, line, (long)buf); + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return stc2wx(buf);''', ('Retrieve the contents of a line.',)), @@ -297,18 +319,19 @@ methodOverrideMap = { 'wxString %s();', '''wxString %s() { - wxString text; int start; int end; GetSelection(&start, &end); int len = end - start; - if (!len) return ""; - char* buff = text.GetWriteBuf(len); + if (!len) return wxEmptyString; - SendMsg(%s, 0, (long)buff); - text.UngetWriteBuf(len); - return text;''', + wxMemoryBuffer mbuf(len+1); + char* buf = (char*)mbuf.GetWriteBuf(len+1); + SendMsg(%s, 0, (long)buf); + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return stc2wx(buf);''', ('Retrieve the selected text.',)), @@ -316,18 +339,23 @@ methodOverrideMap = { 'wxString %s(int startPos, int endPos);', '''wxString %s(int startPos, int endPos) { - wxString text; + if (endPos < startPos) { + int temp = startPos; + startPos = endPos; + endPos = temp; + } int len = endPos - startPos; - if (!len) return ""; - char* buff = text.GetWriteBuf(len); + if (!len) return wxEmptyString; + wxMemoryBuffer mbuf(len+1); + char* buf = (char*)mbuf.GetWriteBuf(len); TextRange tr; - tr.lpstrText = buff; + tr.lpstrText = buf; tr.chrg.cpMin = startPos; tr.chrg.cpMax = endPos; - SendMsg(%s, 0, (long)&tr); - text.UngetWriteBuf(len); - return text;''', + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return stc2wx(buf);''', ('Retrieve a range of text.',)), @@ -342,13 +370,13 @@ methodOverrideMap = { 'wxString %s();', '''wxString %s() { - wxString text; - int len = GetTextLength()+1; - char* buff = text.GetWriteBuf(len); - - SendMsg(%s, len, (long)buff); - text.UngetWriteBuf(len-1); - return text;''', + 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); + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return stc2wx(buf);''', ('Retrieve all the text in the document.', )), @@ -360,6 +388,35 @@ methodOverrideMap = { 'CallTipSetBack' : ('CallTipSetBackground', 0, 0, 0), + 'ReplaceTarget' : (0, + 'int %s(const wxString& text);', + + ''' + int %s(const wxString& text) { + wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); + return SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + 0), + + 'ReplaceTargetRE' : (0, + 'int %s(const wxString& text);', + + ''' + int %s(const wxString& text) { + wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); + return SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + 0), + + 'SearchInTarget' : (0, + 'int %s(const wxString& text);', + + ''' + int %s(const wxString& text) { + wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); + return SendMsg(%s, strlen(buf), (long)(const char*)buf);''', + 0), + + + # Remove all methods that are key commands since they can be # executed with CmdKeyExecute 'LineDown' : (None, 0, 0, 0), @@ -406,6 +463,7 @@ methodOverrideMap = { 'UpperCase' : (None, 0, 0, 0), 'LineScrollDown' : (None, 0, 0, 0), 'LineScrollUp' : (None, 0, 0, 0), + 'DeleteBackNotLine' : (None, 0, 0, 0), 'GetDocPointer' : (0, @@ -417,7 +475,7 @@ methodOverrideMap = { 'SetDocPointer' : (0, 'void %s(void* docPointer);', '''void %s(void* docPointer) { - SendMsg(%s, (long)docPointer);''', + SendMsg(%s, 0, (long)docPointer);''', 0), 'CreateDocument' : (0, @@ -437,8 +495,24 @@ methodOverrideMap = { '''void %s(void* docPointer) { SendMsg(%s, (long)docPointer);''', 0), + 'SetCodePage' : (0, + 0, + '''void %s(int codePage) { +#if wxUSE_UNICODE + wxASSERT_MSG(codePage == wxSTC_CP_UTF8, + wxT("Only wxSTC_CP_UTF8 may be used when wxUSE_UNICODE is on.")); +#else + wxASSERT_MSG(codePage != wxSTC_CP_UTF8, + wxT("wxSTC_CP_UTF8 may not be used when wxUSE_UNICODE is off.")); +#endif + SendMsg(%s, codePage);''', + ("Set the code page used to interpret the bytes of the document as characters.",) ), + 'GrabFocus' : (None, 0, 0, 0), + 'SetFocus' : ('SetSTCFocus', 0, 0, 0), + 'GetFocus' : ('GetSTCFocus', 0, 0, 0), + '' : ('', 0, 0, 0), @@ -573,14 +647,18 @@ def checkMethodOverride(name, number, docs): if methodOverrideMap.has_key(name): item = methodOverrideMap[name] - if item[0] != 0: - name = item[0] - if item[1] != 0: - theDef = ' ' + (item[1] % name) - if item[2] != 0: - theImp = item[2] % ('wxStyledTextCtrl::'+name, number) + '\n}' - if item[3] != 0: - docs = item[3] + try: + if item[0] != 0: + name = item[0] + if item[1] != 0: + theDef = ' ' + (item[1] % name) + if item[2] != 0: + theImp = item[2] % ('wxStyledTextCtrl::'+name, number) + '\n}' + if item[3] != 0: + docs = item[3] + except: + print "*************", name + raise return name, theDef, theImp, docs @@ -593,7 +671,7 @@ def makeArgString(param): typ, name = param if typ == 'string': - return '(long)%s.c_str()' % name + return '(long)(const char*)wx2stc(%s)' % name if typ == 'colour': return 'wxColourAsLong(%s)' % name @@ -662,7 +740,7 @@ def parseFun(line, methods, docs, values): num = string.atoi(number) 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, ()) + parseVal('CMD_%s=%s' % (string.upper(name), number), values, docs) #if retType == 'void' and not param1 and not param2: @@ -685,4 +763,3 @@ if __name__ == '__main__': #---------------------------------------------------------------------------- -