aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gtk/ScintillaGTK.cxx36
-rw-r--r--src/Document.cxx31
-rw-r--r--src/Document.h1
3 files changed, 35 insertions, 33 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index 18f57e1e6..b09ba8825 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -1383,36 +1383,6 @@ void ScintillaGTK::ClaimSelection() {
}
}
-// Convert line endings for a piece of text to a particular mode.
-// Stop at len or when a NUL is found.
-char *ConvertLineEnds(int *pLenOut, const char *s, size_t len, int eolMode) {
- char *dest = new char[2 * len + 1];
- const char *sptr = s;
- char *dptr = dest;
- for (size_t i = 0; (i < len) && (*sptr != '\0'); i++) {
- if (*sptr == '\n' || *sptr == '\r') {
- if (eolMode == SC_EOL_CR) {
- *dptr++ = '\r';
- } else if (eolMode == SC_EOL_LF) {
- *dptr++ = '\n';
- } else { // eolMode == SC_EOL_CRLF
- *dptr++ = '\r';
- *dptr++ = '\n';
- }
- if ((*sptr == '\r') && (i+1 < len) && (*(sptr+1) == '\n')) {
- i++;
- sptr++;
- }
- sptr++;
- } else {
- *dptr++ = *sptr++;
- }
- }
- *dptr++ = '\0';
- *pLenOut = (dptr - dest) - 1;
- return dest;
-}
-
// Detect rectangular text, convert line ends to current mode, convert from or to UTF-8
void ScintillaGTK::GetGtkSelectionText(GtkSelectionData *selectionData, SelectionText &selText) {
char *data = reinterpret_cast<char *>(selectionData->data);
@@ -1437,7 +1407,7 @@ void ScintillaGTK::GetGtkSelectionText(GtkSelectionData *selectionData, Selectio
char *dest;
if (selectionType == GDK_TARGET_STRING) {
- dest = ConvertLineEnds(&len, data, len, pdoc->eolMode);
+ dest = Document::TransformLineEnds(&len, data, len, pdoc->eolMode);
if (IsUnicodeMode()) {
// Unknown encoding so assume in Latin1
char *destPrevious = dest;
@@ -1450,7 +1420,7 @@ void ScintillaGTK::GetGtkSelectionText(GtkSelectionData *selectionData, Selectio
vs.styles[STYLE_DEFAULT].characterSet, isRectangular);
}
} else { // UTF-8
- dest = ConvertLineEnds(&len, data, len, pdoc->eolMode);
+ dest = Document::TransformLineEnds(&len, data, len, pdoc->eolMode);
selText.Set(dest, len, SC_CP_UTF8, 0, isRectangular);
#ifdef USE_CONVERTER
const char *charSetBuffer = CharacterSetID();
@@ -1560,7 +1530,7 @@ void ScintillaGTK::GetSelection(GtkSelectionData *selection_data, guint info, Se
// so make a copy of the clip text now with newlines converted
int new_len;
- char *tmpstr = ConvertLineEnds(&new_len, selBuffer, text->len, SC_EOL_LF);
+ char *tmpstr = Document::TransformLineEnds(&new_len, selBuffer, text->len, SC_EOL_LF);
selBuffer = tmpstr;
#endif
char *tmputf = 0;
diff --git a/src/Document.cxx b/src/Document.cxx
index e8d88cc87..a8cca8a00 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -682,6 +682,37 @@ void Document::Indent(bool forwards, int lineBottom, int lineTop) {
}
}
+// Convert line endings for a piece of text to a particular mode.
+// Stop at len or when a NUL is found.
+// Caller must delete the returned pointer.
+char *Document::TransformLineEnds(int *pLenOut, const char *s, size_t len, int eolMode) {
+ char *dest = new char[2 * len + 1];
+ const char *sptr = s;
+ char *dptr = dest;
+ for (size_t i = 0; (i < len) && (*sptr != '\0'); i++) {
+ if (*sptr == '\n' || *sptr == '\r') {
+ if (eolMode == SC_EOL_CR) {
+ *dptr++ = '\r';
+ } else if (eolMode == SC_EOL_LF) {
+ *dptr++ = '\n';
+ } else { // eolMode == SC_EOL_CRLF
+ *dptr++ = '\r';
+ *dptr++ = '\n';
+ }
+ if ((*sptr == '\r') && (i+1 < len) && (*(sptr+1) == '\n')) {
+ i++;
+ sptr++;
+ }
+ sptr++;
+ } else {
+ *dptr++ = *sptr++;
+ }
+ }
+ *dptr++ = '\0';
+ *pLenOut = (dptr - dest) - 1;
+ return dest;
+}
+
void Document::ConvertLineEnds(int eolModeSet) {
BeginUndoAction();
diff --git a/src/Document.h b/src/Document.h
index 54ecadb00..ce27ffc47 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -156,6 +156,7 @@ public:
int GetColumn(int position);
int FindColumn(int line, int column);
void Indent(bool forwards, int lineBottom, int lineTop);
+ static char *TransformLineEnds(int *pLenOut, const char *s, size_t len, int eolMode);
void ConvertLineEnds(int eolModeSet);
void SetReadOnly(bool set) { cb.SetReadOnly(set); }
bool IsReadOnly() { return cb.IsReadOnly(); }