[gnome-builder] markdown: don't use g_strescape(), as it breaks non-ascii
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] markdown: don't use g_strescape(), as it breaks non-ascii
- Date: Wed, 15 Apr 2015 20:32:17 +0000 (UTC)
commit 1cbf62d7307bfc293416e9fd587558ed1f80359c
Author: Christian Hergert <christian hergert me>
Date: Wed Apr 15 13:31:47 2015 -0700
markdown: don't use g_strescape(), as it breaks non-ascii
g_strescape() will escape anything not in the ASCII range. This breaks
various UTF-8 encoded strings such as those with … in them.
src/html/gb-html-document.c | 52 ++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 51 insertions(+), 1 deletions(-)
---
diff --git a/src/html/gb-html-document.c b/src/html/gb-html-document.c
index dade7ee..89e7eb7 100644
--- a/src/html/gb-html-document.c
+++ b/src/html/gb-html-document.c
@@ -333,13 +333,63 @@ gb_html_document_init_document (GbDocumentInterface *iface)
iface->get_read_only = gb_html_document_get_read_only;
}
+static gchar *
+escape_for_script (const gchar *str)
+{
+ GString *output;
+
+ output = g_string_sized_new (strlen (str) * 2);
+
+ for (; *str; str = g_utf8_next_char (str))
+ {
+ gunichar ch = g_utf8_get_char (str);
+
+ switch (ch)
+ {
+ case '\b':
+ g_string_append (output, "\\b");
+ break;
+
+ case '\f':
+ g_string_append (output, "\\f");
+ break;
+
+ case '\r':
+ g_string_append (output, "\\r");
+ break;
+
+ case '\n':
+ g_string_append (output, "\\n");
+ break;
+
+ case '\t':
+ g_string_append (output, "\\t");
+ break;
+
+ case '\v':
+ g_string_append (output, "\\v");
+ break;
+
+ case '\"':
+ g_string_append (output, "\\\"");
+ break;
+
+ default:
+ g_string_append_unichar (output, ch);
+ break;
+ }
+ }
+
+ return g_string_free (output, FALSE);
+}
+
gchar *
gb_html_markdown_transform (GbHtmlDocument *document,
const gchar *content)
{
gchar *str;
- str = g_strescape (content, NULL);
+ str = escape_for_script (content);
if (str)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]