diff --git a/include/gemgui.h b/include/gemgui.h new file mode 100644 index 0000000..104a809 --- /dev/null +++ b/include/gemgui.h @@ -0,0 +1,13 @@ +#ifndef _GEMGUI_H +#define _GEMGUI_H + +void addH1 (GtkWidget *root, char *line); +void addH2 (GtkWidget *root, char *line); +void addH3 (GtkWidget *root, char *line); +void addLink (GtkWidget *root, char *url, char *text); +void addCode (GtkWidget *root, char *code, char *meta); +void addQuote (GtkWidget *root, char *quote); +void addUList (GtkWidget *root, char *text); +void addText (GtkWidget *root, char *text); + +#endif diff --git a/include/gemparse.h b/include/gemparse.h new file mode 100644 index 0000000..48f7ad2 --- /dev/null +++ b/include/gemparse.h @@ -0,0 +1,6 @@ +#ifndef _GEMPARSE_H +#define _GEMPARSE_H + +int parseFile (char *path); + +#endif diff --git a/src/gemgui.c b/src/gemgui.c new file mode 100644 index 0000000..ad06638 --- /dev/null +++ b/src/gemgui.c @@ -0,0 +1,133 @@ +#include +#include "../include/gemgui.h" + +void linkAction (GtkWidget *widget, gpointer data); + +void +addH1 (GtkWidget *root, + char *line) +{ + gchar *markup = g_markup_printf_escaped ("%s", line); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_margin_start (label, 10); + gtk_widget_set_margin_end (label, 10); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); +} + +void +addH2 (GtkWidget *root, + char *line) +{ + gchar *markup = g_markup_printf_escaped ("%s", line); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_margin_start (label, 10); + gtk_widget_set_margin_end (label, 10); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); +} + +void +addH3 (GtkWidget *root, + char *line) +{ + gchar *markup = g_markup_printf_escaped ("%s", line); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_margin_start (label, 10); + gtk_widget_set_margin_end (label, 10); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); +} + +void +addLink (GtkWidget *root, + char *url, + char *text) +{ + GtkWidget *linkBox = gtk_button_new (); + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_margin_start (linkBox, 10); + gtk_widget_set_margin_end (linkBox, 10); + gtk_button_set_relief (GTK_BUTTON (linkBox), GTK_RELIEF_NONE); + g_signal_connect (linkBox, "clicked", G_CALLBACK (linkAction), url); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (linkBox), label); + gtk_container_add (GTK_CONTAINER (root), linkBox); +} + +void +addCode (GtkWidget *root, + char *code, + char *meta) +{ + gchar *markup = g_markup_printf_escaped ("%s", code); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_margin_start (label, 10); + gtk_widget_set_margin_end (label, 10); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); +} + +void +addUList (GtkWidget *root, + char *text) +{ + GtkWidget *label = gtk_label_new (text); + + gtk_widget_set_margin_start (label, 20); + gtk_widget_set_margin_end (label, 10); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +void +addQuote (GtkWidget *root, + char *quote) +{ + gchar *markup = g_markup_printf_escaped ("%s", quote); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_margin_start (label, 20); + gtk_widget_set_margin_end (label, 10); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); +} + +void +addText (GtkWidget *root, + char *text) +{ + GtkWidget *label = gtk_label_new (text); + + gtk_widget_set_margin_start (label, 10); + gtk_widget_set_margin_end (label, 10); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); +} diff --git a/src/gemparse.c b/src/gemparse.c index bf9a6ac..8755407 100644 --- a/src/gemparse.c +++ b/src/gemparse.c @@ -1,5 +1,7 @@ #include #include +#include +#include "../include/gemgui.h" #ifdef TESTGEMPARSE @@ -17,6 +19,10 @@ void addUList (const char *text); int parseFile (char *path); +#else + +extern GtkWidget *render; + #endif int @@ -43,7 +49,11 @@ parseFile (char *path) //Remove tailing '\n' line[size - 1] = '\0'; +#ifdef TESTGEMPARSE addH3 (line + i); +#else + addH3 (render, line + i); +#endif } else if (size > 2 && line[0] == '#' && line [1] == '#') { @@ -56,7 +66,11 @@ parseFile (char *path) //Remove tailing '\n' line[size - 1] = '\0'; +#ifdef TESTGEMPARSE addH2 (line + i); +#else + addH2 (render, line + i); +#endif } else if (size > 1 && line[0] == '#') { @@ -69,7 +83,11 @@ parseFile (char *path) //Remove tailing '\n' line[size - 1] = '\0'; +#ifdef TESTGEMPARSE addH1 (line + i); +#else + addH1 (render, line + i); +#endif } else if (size > 2 && line[0] == '=' && line[1] == '>') { @@ -98,13 +116,21 @@ parseFile (char *path) //If not text, text = url if (beginText == size) +#ifdef TESTGEMPARSE addLink (line + beginUrl, line + beginUrl); +#else + addLink (render, line + beginUrl, line + beginUrl); +#endif else { //Remove tailing '\n' line[size - 1] = '\0'; +#ifdef TESTGEMPARSE addLink (line + beginUrl, line + beginText); +#else + addLink (render, line + beginUrl, line + beginText); +#endif } } else if (size > 3 && line[0] == '`' && line[1] == '`' && line[2] == '`') @@ -129,7 +155,11 @@ parseFile (char *path) size = strlen (code); code[size - 1] = '\0'; +#ifdef TESTGEMPARSE addCode (line + 3, code); +#else + addCode (render, code, line + 3); +#endif } else if (size > 1 && line[0] == '*') { @@ -176,7 +206,11 @@ parseFile (char *path) size = strlen(text); text[size - 1] = '\0'; +#ifdef TESTGEMPARSE addUList (text); +#else + addUList (render, text); +#endif } else if (size > 1 && line[0] == '>') { @@ -189,10 +223,18 @@ parseFile (char *path) //Remove tailing '\n' line[size - 1] = '\0'; +#ifdef TESTGEMPARSE addQuote (line + i); +#else + addQuote (render, line + i); +#endif } else +#ifdef TESTGEMPARSE printf ("%s", line); +#else + addText (render, line); +#endif } fclose (fileToParse); diff --git a/src/main.c b/src/main.c index 258a0a3..5d6bd88 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,6 @@ #include +#include "../include/gemgui.h" +#include "../include/gemparse.h" GtkEntryBuffer *pathBarContent = NULL; GtkWidget *render = NULL; @@ -10,7 +12,7 @@ loadPage (const char *link) printf("Loading page : %s\n", link); } -static void +void linkAction (GtkWidget *widget, gpointer data) { @@ -24,184 +26,22 @@ goAction (GtkWidget *widget, loadPage ((const char*)gtk_entry_buffer_get_text (pathBarContent)); } -static void -addText (GtkWidget *root, - gchar *text) -{ - GtkWidget *label = gtk_label_new (text); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addTitle1 (GtkWidget *root, - gchar *text) -{ - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addTitle2 (GtkWidget *root, - gchar *text) -{ - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addTitle3 (GtkWidget *root, - gchar *text) -{ - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addTitle4 (GtkWidget *root, - gchar *text) -{ - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addTitle5 (GtkWidget *root, - gchar *text) -{ - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addTitle6 (GtkWidget *root, - gchar *text) -{ - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addLink (GtkWidget *root, - gchar *text) -{ - GtkWidget *linkBox = gtk_button_new (); - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (linkBox, 10); - gtk_widget_set_margin_end (linkBox, 10); - gtk_button_set_relief (GTK_BUTTON (linkBox), GTK_RELIEF_NONE); - g_signal_connect (linkBox, "clicked", G_CALLBACK (linkAction), "un lien"); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (linkBox), label); - gtk_container_add (GTK_CONTAINER (root), linkBox); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - -static void -addCode (GtkWidget *root, - gchar *text) -{ - gchar *markup = g_markup_printf_escaped ("%s", text); - GtkWidget *label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - - gtk_widget_set_margin_start (label, 10); - gtk_widget_set_margin_end (label, 10); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_container_add (GTK_CONTAINER (root), label); - //gtk_label_set_selectable (GTK_LABEL (label), TRUE); -} - static void makeRender (void) { if (render != NULL) gtk_widget_destroy (render); - render = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); + render = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); - addTitle1 (render, "Titre de test"); - addTitle2 (render, "Titre de test"); - addTitle3 (render, "Titre de test"); - addTitle4 (render, "Titre de test"); - addTitle5 (render, "Titre de test"); - addTitle6 (render, "Titre de test"); - addText (render, "Bonjour, ceci est un test.\nFonctionne-t-il ?"); - addLink(render, "lien test"); - addCode(render, " .~.\n /V\\\n // \\\\\n/( )\\\n ^`~'^"); + parseFile ("test.gmi"); gtk_container_add (GTK_CONTAINER (window), render); } /* This function's goal is to build the main interface */ static void -build_interface () +build_interface (void) { GtkWidget *pathBar; GtkWidget *headerBar;