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;
}