Fri, 13 Aug 2010 11:15:18 +0200
Fixed an issue in the editor related to unicode handling.
--- a/APIs/Python3/eric5.api Thu Aug 12 16:43:33 2010 +0200 +++ b/APIs/Python3/eric5.api Fri Aug 13 11:15:18 2010 +0200 @@ -5187,6 +5187,7 @@ eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.ArrowFoldStyle?7 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.ArrowTreeFoldStyle?7 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.UserSeparator?7 +eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat._encodeString?5(string) eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.byteAt?4(pos) eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.charAt?4(pos) eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.clearAllIndicators?4(indicator)
--- a/Documentation/Help/source.qhp Thu Aug 12 16:43:33 2010 +0200 +++ b/Documentation/Help/source.qhp Fri Aug 13 11:15:18 2010 +0200 @@ -5439,6 +5439,7 @@ <keyword name="QsciScintillaCompat (Constructor)" id="QsciScintillaCompat (Constructor)" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__init__" /> <keyword name="QsciScintillaCompat.__doSearchTarget" id="QsciScintillaCompat.__doSearchTarget" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__doSearchTarget" /> <keyword name="QsciScintillaCompat.__setFoldMarker" id="QsciScintillaCompat.__setFoldMarker" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__setFoldMarker" /> + <keyword name="QsciScintillaCompat._encodeString" id="QsciScintillaCompat._encodeString" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat._encodeString" /> <keyword name="QsciScintillaCompat.byteAt" id="QsciScintillaCompat.byteAt" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.byteAt" /> <keyword name="QsciScintillaCompat.charAt" id="QsciScintillaCompat.charAt" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.charAt" /> <keyword name="QsciScintillaCompat.clearAllIndicators" id="QsciScintillaCompat.clearAllIndicators" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.clearAllIndicators" />
--- a/Documentation/Source/eric5.QScintilla.QsciScintillaCompat.html Thu Aug 12 16:43:33 2010 +0200 +++ b/Documentation/Source/eric5.QScintilla.QsciScintillaCompat.html Fri Aug 13 11:15:18 2010 +0200 @@ -70,6 +70,9 @@ <td><a href="#QsciScintillaCompat.__setFoldMarker">__setFoldMarker</a></td> <td>Private method to define a fold marker.</td> </tr><tr> +<td><a href="#QsciScintillaCompat._encodeString">_encodeString</a></td> +<td>Protected method to encode a string depending on the current mode.</td> +</tr><tr> <td><a href="#QsciScintillaCompat.byteAt">byteAt</a></td> <td>Public method to get the raw character (bytes) at a position in the text.</td> </tr><tr> @@ -335,6 +338,21 @@ <dd> fold mark symbol to be used (integer) </dd> +</dl><a NAME="QsciScintillaCompat._encodeString" ID="QsciScintillaCompat._encodeString"></a> +<h4>QsciScintillaCompat._encodeString</h4> +<b>_encodeString</b>(<i>string</i>) +<p> + Protected method to encode a string depending on the current mode. +</p><dl> +<dt><i>string</i></dt> +<dd> +string to be encoded (str) +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +encoded string (bytes) +</dd> </dl><a NAME="QsciScintillaCompat.byteAt" ID="QsciScintillaCompat.byteAt"></a> <h4>QsciScintillaCompat.byteAt</h4> <b>byteAt</b>(<i>pos</i>) @@ -507,7 +525,7 @@ </p><dl> <dt><i>cmd</i></dt> <dd> -the scintilla command to be performed +the scintilla command to be performed (integer) </dd> </dl><a NAME="QsciScintillaCompat.extendSelectionLeft" ID="QsciScintillaCompat.extendSelectionLeft"></a> <h4>QsciScintillaCompat.extendSelectionLeft</h4> @@ -1118,7 +1136,12 @@ <b>setStyleBits</b>(<i>bits</i>) <p> Public method to set the number of bits to be used for styling. -</p><a NAME="QsciScintillaCompat.setStyling" ID="QsciScintillaCompat.setStyling"></a> +</p><dl> +<dt><i>bits</i></dt> +<dd> +number of style bits (integer) +</dd> +</dl><a NAME="QsciScintillaCompat.setStyling" ID="QsciScintillaCompat.setStyling"></a> <h4>QsciScintillaCompat.setStyling</h4> <b>setStyling</b>(<i>length, style</i>) <p>
--- a/QScintilla/Editor.py Thu Aug 12 16:43:33 2010 +0200 +++ b/QScintilla/Editor.py Fri Aug 13 11:15:18 2010 +0200 @@ -3636,24 +3636,24 @@ cv = self.callTipsVisible() if cv > 0: # this is just a safe guard - ct = "\n".join(callTips[:cv]) + ct = self._encodeString("\n".join(callTips[:cv])) else: # until here and unindent below - ct = "\n".join(callTips) + ct = self._encodeString("\n".join(callTips)) self.SendScintilla(QsciScintilla.SCI_CALLTIPSHOW, self.__adjustedCallTipPosition(ctshift, pos), ct) - if '\n' in ct: + if b'\n' in ct: return # Highlight the current argument if commas == 0: - astart = ct.find('(') + astart = ct.find(b'(') else: - astart = ct.find(',') + astart = ct.find(b',') commas -= 1 while astart != -1 and commas > 0: - astart = ct.find(',', astart + 1) + astart = ct.find(b',', astart + 1) commas -= 1 if astart == -1: @@ -3661,20 +3661,20 @@ depth = 0 for aend in range(astart + 1, len(ct)): - ch = ct[aend] + ch = ct[aend:aend + 1] - if ch == ',' and depth == 0: + if ch == b',' and depth == 0: break - elif ch == '(': + elif ch == b'(': depth += 1 - elif ch == ')': + elif ch == b')': if depth == 0: break depth -= 1 if astart != aend: - self.SendScintilla(QsciScintilla.SCI_CALLTIPSETHLT, astart, aend) + self.SendScintilla(QsciScintilla.SCI_CALLTIPSETHLT, astart + 1, aend) def __adjustedCallTipPosition(self, ctshift, pos): """
--- a/QScintilla/QsciScintillaCompat.py Thu Aug 12 16:43:33 2010 +0200 +++ b/QScintilla/QsciScintillaCompat.py Fri Aug 13 11:15:18 2010 +0200 @@ -188,6 +188,8 @@ def setStyleBits(self, bits): """ Public method to set the number of bits to be used for styling. + + @param bits number of style bits (integer) """ self.SendScintilla(QsciScintilla.SCI_SETSTYLEBITS, bits) @@ -331,7 +333,7 @@ """ Public method to perform a simple editor command. - @param cmd the scintilla command to be performed + @param cmd the scintilla command to be performed (integer) """ self.SendScintilla(cmd) @@ -639,9 +641,10 @@ self.SendScintilla(QsciScintilla.SCI_SETTARGETSTART, self.__targetSearchStart) self.SendScintilla(QsciScintilla.SCI_SETTARGETEND, self.__targetSearchEnd) self.SendScintilla(QsciScintilla.SCI_SETSEARCHFLAGS, self.__targetSearchFlags) - pos = self.SendScintilla(QsciScintilla.SCI_SEARCHINTARGET, - len(self.__targetSearchExpr), - self.__targetSearchExpr) + targetSearchExpr = self._encodeString(self.__targetSearchExpr) + pos = self.SendScintilla(QsciScintilla.SCI_SEARCHINTARGET, + len(targetSearchExpr), + targetSearchExpr) if pos == -1: self.__targetSearchActive = False @@ -739,16 +742,15 @@ if self.__targetSearchFlags & QsciScintilla.SCFIND_REGEXP: cmd = QsciScintilla.SCI_REPLACETARGETRE + r = replaceStr else: cmd = QsciScintilla.SCI_REPLACETARGET + r = self._encodeString(replaceStr) start = self.SendScintilla(QsciScintilla.SCI_GETTARGETSTART) - - r = replaceStr - self.SendScintilla(cmd, len(r), r) - self.__targetSearchStart = start + len(replaceStr) + self.__targetSearchStart = start + len(r) ##################################################################################### # indicator handling methods @@ -1038,11 +1040,27 @@ self.SendScintilla(QsciScintilla.SCI_AUTOCSETSEPARATOR, ord(self.UserSeparator)) - if self.isUtf8(): - lst = self.UserSeparator.join(lst).encode("utf-8") + self.SendScintilla(QsciScintilla.SCI_USERLISTSHOW, id, + self._encodeString(self.UserSeparator.join(lst))) + + ##################################################################################### + # utility methods + ##################################################################################### + + def _encodeString(self, string): + """ + Protected method to encode a string depending on the current mode. + + @param string string to be encoded (str) + @return encoded string (bytes) + """ + if isinstance(string, bytes): + return string else: - lst = self.UserSeparator.join(lst).encode("latin-1") - self.SendScintilla(QsciScintilla.SCI_USERLISTSHOW, id, lst) + if self.isUtf8(): + return string.encode("utf-8") + else: + return string.encode("latin-1") ## ##################################################################################### ## # methods below have been added to QScintilla starting with version after 2.x