summaryrefslogtreecommitdiff
path: root/Source/cm_utf8.h
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-12-08 15:43:55 -0500
committerBrad King <brad.king@kitware.com>2009-12-08 15:43:55 -0500
commite4beefeb6dcc9637355a83efb89cb0c3c7fb44fd (patch)
treec28669e4dba5074de35f379fc5cebe38264cc94b /Source/cm_utf8.h
parent5872cc7c1f0b41e7b9cfe7060ef88bc69daf8219 (diff)
downloadcmake-e4beefeb6dcc9637355a83efb89cb0c3c7fb44fd.tar.gz
CTest: Do not munge UTF-8 output in XML files
CTest filters the output from tools and tests to ensure that the XML build/test result documents it generates have valid characters. Previously we just converted all non-ASCII bytes into XML-escaped Unicode characters of the corresponding index. This does not preserve tool output encoded in UTF-8. We now assume UTF-8 output from tools and implement decoding as specified in RFC 3629. Valid characters are preserved, possibly with XML escaping. Invalid byte sequences and characters are converted to human-readable hex values with distinguishing tags. See issue #10003.
Diffstat (limited to 'Source/cm_utf8.h')
-rw-r--r--Source/cm_utf8.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/cm_utf8.h b/Source/cm_utf8.h
new file mode 100644
index 0000000000..06e2868d54
--- /dev/null
+++ b/Source/cm_utf8.h
@@ -0,0 +1,29 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#ifndef cm_utf8_h
+#define cm_utf8_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Decode one UTF-8 character from the input byte range. On success,
+ stores the unicode character number in *pc and returns the first
+ position not extracted. On failure, returns 0. */
+const char* cm_utf8_decode_character(const char* first, const char* last,
+ unsigned int* pc);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif