X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/37d6243357b65ce2a2fa7a35b848ebefb88a3912..c8b751aa27764b6deb21e56f09c5403f230b0ce3:/src/stc/gen_iface.py diff --git a/src/stc/gen_iface.py b/src/stc/gen_iface.py index 6798593426..8de2af862f 100644 --- a/src/stc/gen_iface.py +++ b/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,32 +68,39 @@ methodOverrideMap = { 'void %s(const wxString& text);', '''void %s(const wxString& text) { - SendMsg(%s, text.Len(), (long)text.c_str());''', + wxWX2MBbuf buf = (wxWX2MBbuf)text.mb_str(wxConvUTF8); + 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);', - - '''wxString %s(int startPos, int endPos) { - wxString text; + '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 buf; TextRange tr; - tr.lpstrText = text.GetWriteBuf(len*2+1); + 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.',)), @@ -107,18 +114,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()); - char* buf = text.GetWriteBuf(len+1); + if (!len) { + if (linePos) *linePos = 0; + return wxEmptyString; + } - int pos = SendMsg(%s, len, (long)buf); - text.UngetWriteBuf(); - 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 wxString(buf, wxConvUTF8);''', 0), @@ -143,7 +155,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), @@ -161,9 +173,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);', @@ -213,6 +222,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), @@ -235,7 +249,7 @@ methodOverrideMap = { flags |= wholeWord ? SCFIND_WHOLEWORD : 0; ft.chrg.cpMin = minPos; ft.chrg.cpMax = maxPos; - ft.lpstrText = (char*)text.c_str(); + ft.lpstrText = (char*)(const char*)text.mb_str(wxConvUTF8); return SendMsg(%s, flags, (long)&ft);''', 0), @@ -257,6 +271,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(); @@ -278,14 +297,15 @@ methodOverrideMap = { 'wxString %s(int line);', '''wxString %s(int line) { - wxString text; int len = LineLength(line); - char* buf = text.GetWriteBuf(len+1); - - int pos = SendMsg(%s, line, (long)buf); - text.UngetWriteBuf(); + if (!len) return wxEmptyString; - 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 wxString(buf, wxConvUTF8);''', ('Retrieve the contents of a line.',)), @@ -294,17 +314,19 @@ methodOverrideMap = { 'wxString %s();', '''wxString %s() { - wxString text; int start; int end; GetSelection(&start, &end); int len = end - start; - char* buff = text.GetWriteBuf(len+1); + if (!len) return wxEmptyString; - SendMsg(%s, 0, (long)buff); - text.UngetWriteBuf(); - 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 wxString(buf, wxConvUTF8);''', ('Retrieve the selected text.',)), @@ -312,17 +334,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; - char* buff = text.GetWriteBuf(len+1); + 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(); - return text;''', + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return wxString(buf, wxConvUTF8);''', ('Retrieve a range of text.',)), @@ -337,14 +365,13 @@ methodOverrideMap = { 'wxString %s();', '''wxString %s() { - wxString text; - int len = GetTextLength(); - char* buff = text.GetWriteBuf(len+1); - - SendMsg(%s, len, (long)buff); - buff[len] = 0; - text.UngetWriteBuf(); - 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 wxString(buf, wxConvUTF8);''', ('Retrieve all the text in the document.', )), @@ -356,6 +383,35 @@ methodOverrideMap = { 'CallTipSetBack' : ('CallTipSetBackground', 0, 0, 0), + 'ReplaceTarget' : (0, + 'int %s(const wxString& text);', + + ''' + int %s(const wxString& text) { + wxWX2MBbuf buf = (wxWX2MBbuf)text.mb_str(wxConvUTF8); + 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)text.mb_str(wxConvUTF8); + 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)text.mb_str(wxConvUTF8); + 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), @@ -402,6 +458,7 @@ methodOverrideMap = { 'UpperCase' : (None, 0, 0, 0), 'LineScrollDown' : (None, 0, 0, 0), 'LineScrollUp' : (None, 0, 0, 0), + 'DeleteBackNotLine' : (None, 0, 0, 0), 'GetDocPointer' : (0, @@ -413,7 +470,7 @@ methodOverrideMap = { 'SetDocPointer' : (0, 'void %s(void* docPointer);', '''void %s(void* docPointer) { - SendMsg(%s, (long)docPointer);''', + SendMsg(%s, 0, (long)docPointer);''', 0), 'CreateDocument' : (0, @@ -433,8 +490,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), @@ -589,7 +662,7 @@ def makeArgString(param): typ, name = param if typ == 'string': - return '(long)%s.c_str()' % name + return '(long)(const char*)%s.mb_str(wxConvUTF8)' % name if typ == 'colour': return 'wxColourAsLong(%s)' % name @@ -658,7 +731,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: @@ -681,4 +754,3 @@ if __name__ == '__main__': #---------------------------------------------------------------------------- -