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 /src/Document.cxx | |
| 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.
Diffstat (limited to 'src/Document.cxx')
| -rw-r--r-- | src/Document.cxx | 31 | 
1 files changed, 31 insertions, 0 deletions
| 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(); | 
