mdiary/src/md_pango.c

86 lines
2.3 KiB
C

#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, "&lt;", 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, "<b>\\1</b>", 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, "<i>\\1</i>", 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, "<span font-size=\"large\">\\1</span>", 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, "<span font-size=\"x-large\">\\1</span>", 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, "<span font-size=\"xx-large\">\\1</span>", 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, "<span font_weight=\"bold\" font-size=\"xx-large\">\\1</span>",
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;
}