aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/ScintillaWin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r--win32/ScintillaWin.cxx58
1 files changed, 3 insertions, 55 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index c3501f4b6..b54b4a1c6 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -30,6 +30,7 @@
#include "Document.h"
#include "Editor.h"
#include "ScintillaBase.h"
+#include "UniConversion.h"
//#include "CElapsed.h"
@@ -602,38 +603,6 @@ void ScintillaWin::Copy() {
}
}
-unsigned int UTF8Length(wchar_t *uptr, unsigned int tlen) {
- unsigned int len = 0;
- for (unsigned int i = 0; i < tlen && uptr[i]; i++) {
- unsigned int uch = uptr[i];
- if (uch < 0x80)
- len++;
- else if (uch < 0x800)
- len+=2;
- else
- len +=3;
- }
- return len;
-}
-
-void UTF8FromUCS2(wchar_t *uptr, unsigned int tlen, char *putf, int len) {
- int k = 0;
- for (unsigned int i = 0; i < tlen && uptr[i]; i++) {
- unsigned int uch = uptr[i];
- if (uch < 0x80) {
- putf[k++] = static_cast<char>(uch);
- } else if (uch < 0x800) {
- putf[k++] = static_cast<char>(0xC0 | (uch >> 6));
- putf[k++] = static_cast<char>(0x80 | (uch & 0x3f));
- } else {
- putf[k++] = static_cast<char>(0xE0 | (uch >> 12));
- putf[k++] = static_cast<char>(0x80 | ((uch >> 6) & 0x3f));
- putf[k++] = static_cast<char>(0x80 | (uch & 0x3f));
- }
- }
- putf[len] = '\0';
-}
-
void ScintillaWin::Paste() {
pdoc->BeginUndoAction();
int selStart = SelectionStart();
@@ -1043,33 +1012,12 @@ void ScintillaWin::CopySelTextToClipboard() {
::SetClipboardData(CF_TEXT, hand);
if (SC_CP_UTF8 == pdoc->dbcsCodePage) {
- int uchars = 0;
- for (int i=0;i<bytes;i++) {
- unsigned char ch = static_cast<unsigned char>(selChars[i]);
- if ((ch < 0x80) || (ch > (0x80 + 0x40)))
- uchars++;
- }
+ int uchars = UCS2Length(selChars, bytes);
HGLOBAL uhand = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,
2 * (uchars + 1));
if (uhand) {
wchar_t *uptr = static_cast<wchar_t *>(::GlobalLock(uhand));
- int k=0;
- for (int j=0; j<uchars; j++) {
- unsigned char ch = static_cast<unsigned char>(selChars[k++]);
- if (ch < 0x80) {
- uptr[j] = ch;
- } else if (ch < 0x80 + 0x40 + 0x20) {
- uptr[j] = (ch & 0x1F) << 6;
- ch = static_cast<unsigned char>(selChars[k++]);
- uptr[j] += ch & 0x7F;
- } else {
- uptr[j] = (ch & 0xF) << 12;
- ch = static_cast<unsigned char>(selChars[k++]);
- uptr[j] += (ch & 0x7F) << 6;
- ch = static_cast<unsigned char>(selChars[k++]);
- uptr[j] += ch & 0x7F;
- }
- }
+ UCS2FromUTF8(selChars, bytes, uptr, uchars);
uptr[uchars] = 0;
::GlobalUnlock(uhand);
}