diff options
author | Neil Hodgson <nyamatongwe@gmail.com> | 2013-05-25 23:46:20 +1000 |
---|---|---|
committer | Neil Hodgson <nyamatongwe@gmail.com> | 2013-05-25 23:46:20 +1000 |
commit | 1ae516e14d90899e931cd91ed9094e1e14c95df9 (patch) | |
tree | 9e0cc09b73bd78f93aa9b7222792ad16e4780537 | |
parent | 579bb9e9788bb39eec1f4fdf47f96ae76efe1bd5 (diff) | |
download | scintilla-mirror-1ae516e14d90899e931cd91ed9094e1e14c95df9.tar.gz |
Use simplified call to set SelectionText from std::string.
Change input argument of ConvertText to const as it is not changed.
-rw-r--r-- | gtk/ScintillaGTK.cxx | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index d883abdd1..f0fc63310 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -839,7 +839,7 @@ void ScintillaGTK::StartDrag() { reinterpret_cast<GdkEvent *>(evbtn)); } -static std::string ConvertText(char *s, size_t len, const char *charSetDest, +static std::string ConvertText(const char *s, size_t len, const char *charSetDest, const char *charSetSource, bool transliterations, bool silent=false) { // s is not const because of different versions of iconv disagreeing about const std::string destForm; @@ -847,7 +847,8 @@ static std::string ConvertText(char *s, size_t len, const char *charSetDest, if (conv) { size_t outLeft = len*3+1; destForm = std::string(outLeft, '\0'); - char *pin = s; + // g_iconv does not actually write to its input argument so safe to cast away const + char *pin = const_cast<char *>(s); size_t inLeft = len; char *putf = &destForm[0]; char *pout = putf; @@ -856,10 +857,10 @@ static std::string ConvertText(char *s, size_t len, const char *charSetDest, if (!silent) { if (len == 1) fprintf(stderr, "iconv %s->%s failed for %0x '%s'\n", - charSetSource, charSetDest, (unsigned char)(*s), static_cast<char *>(s)); + charSetSource, charSetDest, (unsigned char)(*s), s); else fprintf(stderr, "iconv %s->%s failed for %s\n", - charSetSource, charSetDest, static_cast<char *>(s)); + charSetSource, charSetDest, s); } destForm = std::string(); } else { @@ -1264,7 +1265,7 @@ public: folded[0] = mapping[static_cast<unsigned char>(mixed[0])]; return 1; } else if (*charSet) { - std::string sUTF8 = ConvertText(const_cast<char *>(mixed), lenMixed, + std::string sUTF8 = ConvertText(mixed, lenMixed, "UTF-8", charSet, false); if (!sUTF8.empty()) { gchar *mapped = g_utf8_casefold(sUTF8.c_str(), sUTF8.length()); @@ -1354,7 +1355,7 @@ std::string ScintillaGTK::CaseMapString(const std::string &s, int caseMapping) { return std::string(mapper.mapped, strlen(mapper.mapped)); } else { // Change text to UTF-8 - std::string sUTF8 = ConvertText(const_cast<char *>(s.c_str()), s.length(), + std::string sUTF8 = ConvertText(s.c_str(), s.length(), "UTF-8", charSetBuffer, false); CaseMapper mapper(sUTF8, caseMapping == cmUpper); return ConvertText(mapper.mapped, strlen(mapper.mapped), charSetBuffer, "UTF-8", false); @@ -1479,7 +1480,7 @@ void ScintillaGTK::GetGtkSelectionText(GtkSelectionData *selectionData, Selectio // Return empty string if selection is not a string if ((selectionTypeData != GDK_TARGET_STRING) && (selectionTypeData != atomUTF8)) { - selText.Copy("", 0, SC_CP_UTF8, 0, false, false); + selText.Copy("", 1, SC_CP_UTF8, 0, false, false); return; } @@ -1498,20 +1499,21 @@ void ScintillaGTK::GetGtkSelectionText(GtkSelectionData *selectionData, Selectio if (IsUnicodeMode()) { // Unknown encoding so assume in Latin1 dest = UTF8FromLatin1(dest.c_str(), dest.length()); - selText.Copy(dest.c_str(), dest.length()+1, SC_CP_UTF8, 0, selText.rectangular, false); + selText.Copy(dest, SC_CP_UTF8, 0, isRectangular, false); } else { // Assume buffer is in same encoding as selection - selText.Copy(dest.c_str(), dest.length()+1, pdoc->dbcsCodePage, + selText.Copy(dest, pdoc->dbcsCodePage, vs.styles[STYLE_DEFAULT].characterSet, isRectangular, false); } } else { // UTF-8 - selText.Copy(dest.c_str(), dest.length()+1, SC_CP_UTF8, 0, isRectangular, false); const char *charSetBuffer = CharacterSetID(); if (!IsUnicodeMode() && *charSetBuffer) { // Convert to locale - dest = ConvertText(selText.s, selText.len, charSetBuffer, "UTF-8", true); - selText.Copy(dest.c_str(), dest.length(), pdoc->dbcsCodePage, - vs.styles[STYLE_DEFAULT].characterSet, selText.rectangular, false); + dest = ConvertText(dest.c_str(), dest.length(), charSetBuffer, "UTF-8", true); + selText.Copy(dest, pdoc->dbcsCodePage, + vs.styles[STYLE_DEFAULT].characterSet, isRectangular, false); + } else { + selText.Copy(dest, SC_CP_UTF8, 0, isRectangular, false); } } } @@ -1583,7 +1585,7 @@ void ScintillaGTK::GetSelection(GtkSelectionData *selection_data, guint info, Se { std::string tmpstr = Document::TransformLineEnds(text->s, text->len, SC_EOL_LF); newline_normalized = new SelectionText(); - newline_normalized->Copy(tmpstr.c_str(), tmpstr.length()+1, SC_CP_UTF8, 0, text->rectangular, false); + newline_normalized->Copy(tmpstr, SC_CP_UTF8, 0, text->rectangular, false); text = newline_normalized; } #endif @@ -1593,9 +1595,9 @@ void ScintillaGTK::GetSelection(GtkSelectionData *selection_data, guint info, Se if ((text->codePage != SC_CP_UTF8) && (info == TARGET_UTF8_STRING)) { const char *charSet = ::CharacterSetID(text->characterSet); if (*charSet) { - std::string tmputf = ConvertText(text->s, text->len, "UTF-8", charSet, false); + std::string tmputf = ConvertText(text->s, text->len-1, "UTF-8", charSet, false); converted = new SelectionText(); - converted->Copy(tmputf.c_str(), tmputf.length(), SC_CP_UTF8, 0, text->rectangular, false); + converted->Copy(tmputf, SC_CP_UTF8, 0, text->rectangular, false); text = converted; } } |