From 684b1a46876c34d5d42d68d30b51bbed8a98110a Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Wed, 15 Mar 2017 18:20:47 +0100 Subject: [PATCH] Fixed some bugs in pango renderer --- src/md_pango.c | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/md_pango.c b/src/md_pango.c index 16456a3..dc20f4a 100644 --- a/src/md_pango.c +++ b/src/md_pango.c @@ -6,50 +6,68 @@ gchar *md_pango_render(gchar *markup, gint length) gchar *str2; GRegex *regex; - regex = g_regex_new("\\>", 0, 0, NULL); - str = g_regex_replace(regex, markup, -1, 0, ">", 0, NULL); + str = markup; + + regex = g_regex_new("\\&", 0, 0, NULL); + str2 = g_regex_replace(regex, str, -1, 0, "&", 0, NULL); g_regex_unref(regex); + // Must not g_free(str) + str = str2; + + regex = g_regex_new("\\>", 0, 0, NULL); + str2 = g_regex_replace(regex, str, -1, 0, ">", 0, NULL); + g_regex_unref(regex); + g_free(str); + str = str2; regex = g_regex_new("\\<", 0, 0, NULL); str2 = g_regex_replace(regex, str, -1, 0, "<", 0, NULL); g_regex_unref(regex); g_free(str); + str = str2; regex = g_regex_new("\\*{2}([^\\*]*)\\*{2}", 0, 0, NULL); - str = g_regex_replace(regex, str2, -1, 0, "\\1", 0, NULL); + str2 = g_regex_replace(regex, str, -1, 0, "\\1", 0, NULL); g_regex_unref(regex); - g_free(str2); + g_free(str); + str = str2; regex = g_regex_new("\\*([^\\*]*)\\*", 0, 0, NULL); str2 = g_regex_replace(regex, str, -1, 0, "\\1", 0, NULL); + g_free(str); + str = str2; + + /* TODO: This also matches inline # */ + regex = g_regex_new("\\#{4}(.*)", 0, 0, NULL); + str2 = g_regex_replace(regex, str, -1, 0, "\\1", 0, NULL); g_regex_unref(regex); g_free(str); - - regex = g_regex_new("\\#{4}(.*)", 0, 0, NULL); - str = g_regex_replace(regex, str2, -1, 0, "\\1", 0, NULL); - g_regex_unref(regex); - g_free(str2); + str = str2; regex = g_regex_new("\\#{3}(.*)", 0, 0, NULL); str2 = g_regex_replace(regex, str, -1, 0, "\\1", 0, NULL); g_regex_unref(regex); g_free(str); + str = str2; regex = g_regex_new("\\#{2}(.*)", 0, 0, NULL); - str = g_regex_replace(regex, str2, -1, 0, "\\1", 0, NULL); + str2 = g_regex_replace(regex, str, -1, 0, "\\1", 0, NULL); g_regex_unref(regex); - g_free(str2); + g_free(str); + str = str2; regex = g_regex_new("\\#{1}(.*)", 0, 0, NULL); str2 = g_regex_replace(regex, str, -1, 0, "\\1", 0, NULL); g_regex_unref(regex); g_free(str); + str = str2; regex = g_regex_new("\\!\\[([^\\]]*)\\]\\(([^\\)]*)\\)", 0, 0, NULL); - str = g_regex_replace(regex, str2, -1, 0, "-- Image \\1 (\\2) --", 0, NULL); + str2 = g_regex_replace(regex, str2, -1, 0, "-- Image \\1 (\\2) --", 0, NULL); g_regex_unref(regex); - g_free(str2); + g_free(str); + str = str2; return str; }