diff options
Diffstat (limited to 'test/XiteWin.py')
-rw-r--r-- | test/XiteWin.py | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/test/XiteWin.py b/test/XiteWin.py index f875548cb..05553e291 100644 --- a/test/XiteWin.py +++ b/test/XiteWin.py @@ -154,15 +154,16 @@ def RegisterClass(name, func, background = 0): wc.hIcon = 0 wc.hCursor = 0 wc.hbrBackground = background - wc.menu_name = 0 + wc.menu_name = None wc.lpzClassName = name user32.RegisterClassW(ctypes.byref(wc)) class SciCall: - def __init__(self, fn, ptr, msg): + def __init__(self, fn, ptr, msg, stringResult=False): self._fn = fn self._ptr = ptr self._msg = msg + self._stringResult = stringResult def __call__(self, w=0, l=0): if type(w) == type("x"): ww = c_wchar_p(w) @@ -172,15 +173,24 @@ class SciCall: ww = WPARAM() else: ww = WPARAM(w) - if type(l) == type("x"): - ll = c_wchar_p(l) - elif type(l) == type(b"x"): - ll = c_char_p(l) - elif type(l) == type(1): - ll = LPARAM(l) + if self._stringResult: + lengthBytes = self._fn(self._ptr, self._msg, ww, None) + if lengthBytes == 0: + return bytearray() + result = (ctypes.c_byte * lengthBytes)(0) + lengthBytes2 = self._fn(self._ptr, self._msg, ww, result) + assert lengthBytes == lengthBytes2 + return bytearray(result)[:lengthBytes] else: - ll = l - return self._fn(self._ptr, self._msg, ww, ll) + if type(l) == type("x"): + ll = c_wchar_p(l) + elif type(l) == type(b"x"): + ll = c_char_p(l) + elif type(l) == type(1): + ll = LPARAM(l) + else: + ll = l + return self._fn(self._ptr, self._msg, ww, ll) class Scintilla: def __init__(self, face, hwndParent, hinstance): @@ -215,7 +225,11 @@ class Scintilla: self.__dict__[name] = value return value else: - return SciCall(self._scifn, self._sciptr, value) + if feature["Param2Type"] == "stringresult" and \ + name not in ["GetText", "GetLine", "GetCurLine"]: + return SciCall(self._scifn, self._sciptr, value, True) + else: + return SciCall(self._scifn, self._sciptr, value) elif ("Get" + name) in self.face.features: self.used.add("Get" + name) feature = self.face.features["Get" + name] |