diff options
Diffstat (limited to 'win32/ScintillaWin.cxx')
| -rw-r--r-- | win32/ScintillaWin.cxx | 46 | 
1 files changed, 25 insertions, 21 deletions
| diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 869b1909a..c0b6fb3e2 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -803,9 +803,10 @@ Sci::Position ScintillaWin::EncodedFromUTF8(const char *utf8, char *encoded) con  // the current codepage. Code is similar to HandleCompositionWindowed().  void ScintillaWin::AddCharUTF16(wchar_t const *wcs, unsigned int wclen) {  	if (IsUnicodeMode()) { -		size_t len = UTF8Length(wcs, wclen); +		const std::wstring_view wsv(wcs, wclen); +		size_t len = UTF8Length(wsv);  		char utfval[maxLenInputIME * 3]; -		UTF8FromUTF16(wcs, wclen, utfval, len); +		UTF8FromUTF16(wsv, utfval, len);  		utfval[len] = '\0';  		AddCharUTF(utfval, static_cast<unsigned int>(len));  	} else { @@ -1207,7 +1208,7 @@ sptr_t ScintillaWin::GetTextLength() {  	std::vector<char> docBytes(pdoc->Length(), '\0');  	pdoc->GetCharRange(&docBytes[0], 0, pdoc->Length());  	if (IsUnicodeMode()) { -		return UTF16Length(&docBytes[0], docBytes.size()); +		return UTF16Length(std::string_view(&docBytes[0], docBytes.size()));  	} else {  		return ::MultiByteToWideChar(CodePageOfDocument(), 0, &docBytes[0],  			static_cast<int>(docBytes.size()), NULL, 0); @@ -1223,12 +1224,13 @@ sptr_t ScintillaWin::GetText(uptr_t wParam, sptr_t lParam) {  	std::vector<char> docBytes(pdoc->Length(), '\0');  	pdoc->GetCharRange(&docBytes[0], 0, pdoc->Length());  	if (IsUnicodeMode()) { -		const size_t lengthUTF16 = UTF16Length(&docBytes[0], docBytes.size()); +                const std::string_view sv(&docBytes[0], docBytes.size()); +		const size_t lengthUTF16 = UTF16Length(sv);  		if (lParam == 0)  			return lengthUTF16;  		if (wParam == 0)  			return 0; -		size_t uLen = UTF16FromUTF8(&docBytes[0], docBytes.size(), +		size_t uLen = UTF16FromUTF8(sv,  			ptr, wParam - 1);  		ptr[uLen] = L'\0';  		return uLen; @@ -2051,8 +2053,7 @@ public:  				if (foldedUTF8) {  					// Maximum length of a case conversion is 6 bytes, 3 characters  					wchar_t wFolded[20]; -					const size_t charsConverted = UTF16FromUTF8(foldedUTF8, -							strlen(foldedUTF8), +					const size_t charsConverted = UTF16FromUTF8(std::string_view(foldedUTF8),  							wFolded, ELEMENTS(wFolded));  					for (size_t j=0; j<charsConverted; j++)  						utf16Folded[lenFlat++] = wFolded[j]; @@ -2096,8 +2097,7 @@ CaseFolder *ScintillaWin::CaseFolderForEncoding() {  					const char *caseFolded = CaseConvert(wCharacter[0], CaseConversionFold);  					if (caseFolded) {  						wchar_t wLower[20]; -						const size_t charsConverted = UTF16FromUTF8(caseFolded, -							strlen(caseFolded), +						const size_t charsConverted = UTF16FromUTF8(std::string_view(caseFolded),  							wLower, ELEMENTS(wLower));  						if (charsConverted == 1) {  							char sCharacterLowered[20]; @@ -2262,9 +2262,10 @@ void ScintillaWin::Paste() {  			// Default Scintilla behaviour in Unicode mode  			if (IsUnicodeMode()) {  				const size_t bytes = memUSelection.Size(); -				len = UTF8Length(uptr, bytes / 2); +				const std::wstring_view wsv(uptr, bytes / 2); +				len = UTF8Length(wsv);  				putf.resize(len + 1); -				UTF8FromUTF16(uptr, bytes / 2, &putf[0], len); +				UTF8FromUTF16(wsv, &putf[0], len);  			} else {  				// CF_UNICODETEXT available, but not in Unicode mode  				// Convert from Unicode to current Scintilla code page @@ -2300,9 +2301,10 @@ void ScintillaWin::Paste() {  					const size_t ulen = ::MultiByteToWideChar(CP_ACP, 0,  					                    ptr, ilen, &uptr[0], ilen +1); -					const size_t mlen = UTF8Length(&uptr[0], ulen); +					const std::wstring_view wsv(&uptr[0], ulen); +					const size_t mlen = UTF8Length(wsv);  					std::vector<char> putf(mlen+1); -					UTF8FromUTF16(&uptr[0], ulen, &putf[0], mlen); +					UTF8FromUTF16(wsv, &putf[0], mlen);  					InsertPasteShape(&putf[0], mlen, pasteShape);  				} else { @@ -2684,7 +2686,7 @@ void ScintillaWin::ImeStartComposition() {  			lf.lfFaceName[0] = L'\0';  			if (vs.styles[styleHere].fontName) {  				const char* fontName = vs.styles[styleHere].fontName; -				UTF16FromUTF8(fontName, strlen(fontName)+1, lf.lfFaceName, LF_FACESIZE); +				UTF16FromUTF8(std::string_view(fontName), lf.lfFaceName, LF_FACESIZE);  			}  			::ImmSetCompositionFontW(imc.hIMC, &lf); @@ -2796,11 +2798,11 @@ void ScintillaWin::CopyToClipboard(const SelectionText &selectedText) {  	// Default Scintilla behaviour in Unicode mode  	if (IsUnicodeMode()) { -		const size_t uchars = UTF16Length(selectedText.Data(), -			selectedText.LengthWithTerminator()); +                const std::string_view sv(selectedText.Data(), selectedText.LengthWithTerminator()); +		const size_t uchars = UTF16Length(sv);  		uniText.Allocate(2 * uchars);  		if (uniText) { -			UTF16FromUTF8(selectedText.Data(), selectedText.LengthWithTerminator(), +			UTF16FromUTF8(sv,  				static_cast<wchar_t *>(uniText.ptr), uchars);  		}  	} else { @@ -3101,9 +3103,10 @@ STDMETHODIMP ScintillaWin::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState,  				if (IsUnicodeMode()) {  					const size_t tlen = memUDrop.Size();  					// Convert UTF-16 to UTF-8 -					const size_t dataLen = UTF8Length(udata, tlen/2); +					const std::wstring_view wsv(udata, tlen / 2); +					const size_t dataLen = UTF8Length(wsv);  					data.resize(dataLen+1); -					UTF8FromUTF16(udata, tlen/2, &data[0], dataLen); +					UTF8FromUTF16(wsv, &data[0], dataLen);  				} else {  					// Convert UTF-16 to ANSI  					// @@ -3176,10 +3179,11 @@ STDMETHODIMP ScintillaWin::GetData(FORMATETC *pFEIn, STGMEDIUM *pSTM) {  	GlobalMemory text;  	if (pFEIn->cfFormat == CF_UNICODETEXT) { -		const size_t uchars = UTF16Length(drag.Data(), drag.LengthWithTerminator()); +                const std::string_view sv(drag.Data(), drag.LengthWithTerminator()); +		const size_t uchars = UTF16Length(sv);  		text.Allocate(2 * uchars);  		if (text) { -			UTF16FromUTF8(drag.Data(), drag.LengthWithTerminator(), +			UTF16FromUTF8(sv,  				static_cast<wchar_t *>(text.ptr), uchars);  		}  	} else { | 
