diff options
author | nyamatongwe <unknown> | 2004-08-09 02:59:27 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2004-08-09 02:59:27 +0000 |
commit | 8abd07ed165ff6ff282e01634ec0a83e59f0312c (patch) | |
tree | 93134ef388ffe8a7b1e975fe933ddf250713358f | |
parent | 6cf668234ff7f4d2c8d4e84f248087c83d16913f (diff) | |
download | scintilla-mirror-8abd07ed165ff6ff282e01634ec0a83e59f0312c.tar.gz |
Moved ConvertLineEnds from ScintillaGTK to Document so that it can be used
on other platforms. Changed name to TransformLineEnds as Document already
had a ConvertLineEnds.
-rw-r--r-- | gtk/ScintillaGTK.cxx | 36 | ||||
-rw-r--r-- | src/Document.cxx | 31 | ||||
-rw-r--r-- | src/Document.h | 1 |
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(); } |