#include "md_pango.h" gchar *md_pango_render(gchar *markup, gint length) { gchar *str; gchar *str2; GRegex *regex; 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("(.+)\n", 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("\n", 0, 0, NULL); str2 = g_regex_replace(regex, str, -1, 0, "\n\n", 0, NULL); g_regex_unref(regex); g_free(str); str = str2; regex = g_regex_new("\\*{2}([^\\*\n]*)\\*{2}", 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("\\*([^\\*\n]*)\\*", 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); 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); str2 = g_regex_replace(regex, str, -1, 0, "\\1", 0, NULL); g_regex_unref(regex); 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); str2 = g_regex_replace(regex, str2, -1, 0, "-- Image \\1 (\\2) --", 0, NULL); g_regex_unref(regex); g_free(str); str = str2; return str; }