Now parse a file
missing: fix url, use a pointer to static data
This commit is contained in:
parent
221ec20578
commit
11b54d9cb5
|
@ -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
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef _GEMPARSE_H
|
||||
#define _GEMPARSE_H
|
||||
|
||||
int parseFile (char *path);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,133 @@
|
|||
#include <gtk/gtk.h>
|
||||
#include "../include/gemgui.h"
|
||||
|
||||
void linkAction (GtkWidget *widget, gpointer data);
|
||||
|
||||
void
|
||||
addH1 (GtkWidget *root,
|
||||
char *line)
|
||||
{
|
||||
gchar *markup = g_markup_printf_escaped ("<span weight=\"bold\" size=\"xx-large\">%s</span>", 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 ("<span weight=\"bold\" size=\"x-large\">%s</span>", 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 ("<span weight=\"bold\" size=\"large\">%s</span>", 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 ("<span foreground=\"#0000FF\" underline=\"single\">%s</span>", 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 ("<span font_family=\"monospace\">%s</span>", 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 ("<span foreground=\"#707070\">%s</span>", 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);
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
#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);
|
||||
|
|
172
src/main.c
172
src/main.c
|
@ -1,4 +1,6 @@
|
|||
#include <gtk/gtk.h>
|
||||
#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 ("<span weight=\"bold\" size=\"xx-large\">%s</span>", 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 ("<span weight=\"bold\" size=\"x-large\">%s</span>", 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 ("<span weight=\"bold\" size=\"large\">%s</span>", 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 ("<span weight=\"bold\" size=\"medium\">%s</span>", 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 ("<span weight=\"bold\" size=\"small\">%s</span>", 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 ("<span weight=\"bold\" size=\"x-small\">%s</span>", 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 ("<span foreground=\"#0000FF\" underline=\"single\">%s</span>", 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 ("<span font_family=\"monospace\">%s</span>", 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;
|
||||
|
|
Loading…
Reference in New Issue