summaryrefslogtreecommitdiffstats
path: root/xpcom/io/nsLinebreakConverter.h
diff options
context:
space:
mode:
Diffstat (limited to 'xpcom/io/nsLinebreakConverter.h')
-rw-r--r--xpcom/io/nsLinebreakConverter.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/xpcom/io/nsLinebreakConverter.h b/xpcom/io/nsLinebreakConverter.h
new file mode 100644
index 0000000000..2ecde3beec
--- /dev/null
+++ b/xpcom/io/nsLinebreakConverter.h
@@ -0,0 +1,141 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsLinebreakConverter_h_
+#define nsLinebreakConverter_h_
+
+#include "nscore.h"
+#include "nsString.h"
+
+// utility class for converting between different line breaks.
+
+class nsLinebreakConverter {
+ public:
+ // Note: enum must match char* array in GetLinebreakString
+ typedef enum {
+ eLinebreakAny, // any kind of linebreak (i.e. "don't care" source)
+
+ eLinebreakPlatform, // platform linebreak
+ eLinebreakContent, // Content model linebreak (LF)
+ eLinebreakNet, // Form submission linebreak (CRLF)
+
+ eLinebreakMac, // CR
+ eLinebreakUnix, // LF
+ eLinebreakWindows, // CRLF
+
+ eLinebreakSpace // space characters. Only valid as destination type
+
+ } ELinebreakType;
+
+ enum { kIgnoreLen = -1 };
+
+ /* ConvertLineBreaks
+ * Convert line breaks in the supplied string, allocating and returning
+ * a new buffer. Returns nullptr on failure.
+ * @param aSrc: the source string. if aSrcLen == kIgnoreLen this string is
+ * assumed to be null terminated, otherwise it must be at least
+ * aSrcLen long.
+ * @param aSrcBreaks: the line breaks in the source. If unknown, pass
+ * eLinebreakAny. If known, pass the known value, as this may
+ * be more efficient.
+ * @param aDestBreaks: the line breaks you want in the output.
+ * @param aSrcLen: length of the source. If -1, the source is assumed to be a
+ * null-terminated string.
+ * @param aOutLen: used to return character length of returned buffer, if not
+ * null.
+ */
+ static char* ConvertLineBreaks(const char* aSrc, ELinebreakType aSrcBreaks,
+ ELinebreakType aDestBreaks,
+ int32_t aSrcLen = kIgnoreLen,
+ int32_t* aOutLen = nullptr);
+
+ /* ConvertUnicharLineBreaks
+ * Convert line breaks in the supplied string, allocating and returning
+ * a new buffer. Returns nullptr on failure.
+ * @param aSrc: the source string. if aSrcLen == kIgnoreLen this string is
+ * assumed to be null terminated, otherwise it must be at least
+ * aSrcLen long.
+ * @param aSrcBreaks: the line breaks in the source. If unknown, pass
+ * eLinebreakAny. If known, pass the known value, as this may
+ * be more efficient.
+ * @param aDestBreaks: the line breaks you want in the output.
+ * @param aSrcLen: length of the source, in characters. If -1, the source is
+ * assumed to be a null-terminated string.
+ * @param aOutLen: used to return character length of returned buffer, if not
+ * null.
+ */
+ static char16_t* ConvertUnicharLineBreaks(const char16_t* aSrc,
+ ELinebreakType aSrcBreaks,
+ ELinebreakType aDestBreaks,
+ int32_t aSrcLen = kIgnoreLen,
+ int32_t* aOutLen = nullptr);
+
+ /* ConvertStringLineBreaks
+ * Convert line breaks in the supplied string, changing the string buffer
+ * (i.e. in-place conversion)
+ * @param ioString: the string to be converted.
+ * @param aSrcBreaks: the line breaks in the source. If unknown, pass
+ * eLinebreakAny. If known, pass the known value, as this may
+ * be more efficient.
+ * @param aDestBreaks: the line breaks you want in the output.
+ * @param aSrcLen: length of the source, in characters. If -1, the source is
+ * assumed to be a null-terminated string.
+ */
+ static nsresult ConvertStringLineBreaks(nsString& aIoString,
+ ELinebreakType aSrcBreaks,
+ ELinebreakType aDestBreaks);
+
+ /* ConvertLineBreaksInSitu
+ * Convert line breaks in place if possible. NOTE: THIS MAY REALLOCATE THE
+ * BUFFER, BUT IT WON'T FREE THE OLD BUFFER (because it doesn't know how). So
+ * be prepared to keep a copy of the old pointer, and free it if this passes
+ * back a new pointer. ALSO NOTE: DON'T PASS A STATIC STRING POINTER TO THIS
+ * FUNCTION.
+ *
+ * @param ioBuffer: the source buffer. if aSrcLen == kIgnoreLen this string
+ * is assumed to be null terminated, otherwise it must be at
+ * least aSrcLen long.
+ * @param aSrcBreaks: the line breaks in the source. If unknown, pass
+ * eLinebreakAny. If known, pass the known value, as this may
+ * be more efficient.
+ * @param aDestBreaks: the line breaks you want in the output.
+ * @param aSrcLen: length of the source. If -1, the source is assumed to be a
+ * null-terminated string.
+ * @param aOutLen: used to return character length of returned buffer, if not
+ * null.
+ */
+ static nsresult ConvertLineBreaksInSitu(char** aIoBuffer,
+ ELinebreakType aSrcBreaks,
+ ELinebreakType aDestBreaks,
+ int32_t aSrcLen = kIgnoreLen,
+ int32_t* aOutLen = nullptr);
+
+ /* ConvertUnicharLineBreaksInSitu
+ * Convert line breaks in place if possible. NOTE: THIS MAY REALLOCATE THE
+ * BUFFER, BUT IT WON'T FREE THE OLD BUFFER (because it doesn't know how). So
+ * be prepared to keep a copy of the old pointer, and free it if this passes
+ * back a new pointer.
+ *
+ * @param ioBuffer: the source buffer. if aSrcLen == kIgnoreLen this string
+ * is assumed to be null terminated, otherwise it must be at
+ * least aSrcLen long.
+ * @param aSrcBreaks: the line breaks in the source. If unknown, pass
+ * eLinebreakAny. If known, pass the known value, as this may
+ * be more efficient.
+ * @param aDestBreaks: the line breaks you want in the output.
+ * @param aSrcLen: length of the source in characters. If -1, the source is
+ * assumed to be a null-terminated string.
+ * @param aOutLen: used to return character length of returned buffer, if not
+ * null.
+ */
+ static nsresult ConvertUnicharLineBreaksInSitu(char16_t** aIoBuffer,
+ ELinebreakType aSrcBreaks,
+ ELinebreakType aDestBreaks,
+ int32_t aSrcLen = kIgnoreLen,
+ int32_t* aOutLen = nullptr);
+};
+
+#endif // nsLinebreakConverter_h_