From 39fe7891dec057436b084feff1b50dfe5cff15a6 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Thu, 16 Feb 2017 20:06:29 +0100 Subject: [PATCH] Added markdown support --- CMakeLists.txt | 2 +- src/main.c | 2 +- src/mainwindow.c | 48 +++++++++++++++++++++++++++++++++++++++++++----- src/mainwindow.h | 2 +- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 20a9e6d..34c3939 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GLIB2 REQUIRED glib-2.0) pkg_check_modules(GOBJECT2 REQUIRED gobject-2.0) pkg_check_modules(GTK3 REQUIRED gtk+-3.0) -pkg_check_modules(WEBKIT REQUIRED webkitgtk-3.0) +pkg_check_modules(WEBKIT REQUIRED webkit2gtk-4.0) INCLUDE_DIRECTORIES (${GLIB2_INCLUDE_DIRS} ${GOBJECT2_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS} ${WEBKIT_INCLUDE_DIRS}) LINK_DIRECTORIES (${GLIB2_LIBRARY_DIRS} ${GOBJECT2_LIBRARY_DIRS} ${GTK3_LIBRARY_DIRS} ${WEBKIT_LIBRARY_DIRS}) diff --git a/src/main.c b/src/main.c index 050f6b0..932ab5c 100644 --- a/src/main.c +++ b/src/main.c @@ -13,7 +13,7 @@ int main(int argc, char *argv[]) gtk_init(&argc, &argv); - mainWindow = mainWindow_new(); + mainWindow = mainWindow_new(TRUE); settings_path = g_strdup_printf("%s/.mdiary.conf", g_get_home_dir()); settings = mdiary_settings_new(mainWindow); diff --git a/src/mainwindow.c b/src/mainwindow.c index e366a87..d19384e 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -429,8 +429,7 @@ static void mainWindow_webkit_init(struct mainWindow *mainWindow) GtkWidget *scrollArea; mainWindow->webkitView = webkit_web_view_new(); - /* webkit_web_view_load_uri(WEBKIT_WEB_VIEW(mainWindow->webkitView), "https://notsyncing.net/"); */ - webkit_web_view_load_html(WEBKIT_WEB_VIEW(mainWindow->webkitView), "test", ""); + webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(mainWindow->webkitView), "", ""); gtk_widget_show(mainWindow->webkitView); scrollArea = gtk_scrolled_window_new(NULL, NULL); @@ -445,7 +444,7 @@ static void mainWindow_webkit_init(struct mainWindow *mainWindow) * @brief mainWindow_new creates a new mainWindow. * @return Returns struct mainWindow * */ -struct mainWindow *mainWindow_new() +struct mainWindow *mainWindow_new(gboolean webkit_mode) { GtkBuilder *builder; struct mainWindow *mainWindow; @@ -494,7 +493,10 @@ struct mainWindow *mainWindow_new() g_object_unref(G_OBJECT(builder)); mainWindow_configure_treeView(mainWindow); - mainWindow_webkit_init(mainWindow); + if (webkit_mode) + mainWindow_webkit_init(mainWindow); + else + mainWindow->webkitView = NULL; mainWindow_connect_signals(mainWindow); mainWindow_configure_workspaceTreeView(mainWindow); mainWindow_init_to_default(mainWindow); @@ -597,7 +599,43 @@ void mainWindow_entrySelected(GtkWidget *widget, gpointer user_data) selection = gtk_tree_view_get_selection(mainWindow->entryListView); if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, COL_TEXT, &text, -1); - gtk_text_buffer_set_text(mainWindow->textBuffer, text, strlen(text)); + if (mainWindow->webkitView) { + gchar *tempfile_path = "/tmp/mdiary.tmp.md"; + gchar *cmd = NULL; + gchar *cmd_stdout = NULL; + gchar *cmd_stderr = NULL; + gint exit_status = 0; + GFileOutputStream *stream; + GFile *file; + + file = g_file_new_for_path(tempfile_path); + stream = g_file_replace( + file, NULL, FALSE, + G_FILE_CREATE_NONE, + NULL, NULL); + g_output_stream_write(G_OUTPUT_STREAM(stream), text, strlen(text), NULL, NULL); + g_output_stream_flush(G_OUTPUT_STREAM(stream), NULL, NULL); + + cmd = g_strdup_printf("markdown %s", tempfile_path); + if (g_spawn_command_line_sync(cmd, &cmd_stdout, &cmd_stderr, &exit_status, NULL) && + exit_status == 0) { + webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(mainWindow->webkitView), + cmd_stdout, ""); + } else { + webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(mainWindow->webkitView), + text, ""); + } + + g_output_stream_close(G_OUTPUT_STREAM(stream), NULL, NULL); + g_file_delete(file, NULL, NULL); + g_object_unref(stream); + g_object_unref(file); + g_free(cmd); + g_free(cmd_stdout); + g_free(cmd_stderr); + } else { + gtk_text_buffer_set_text(mainWindow->textBuffer, text, strlen(text)); + } g_free(text); gtk_tree_model_get(model, &iter, COL_SUMMARY, &summary, -1); diff --git a/src/mainwindow.h b/src/mainwindow.h index 5fda917..5f3e1b9 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -67,7 +67,7 @@ struct mainWindow { GtkTreeModelFilter *workspaceListFiltered; }; -struct mainWindow *mainWindow_new(); +struct mainWindow *mainWindow_new(gboolean webkit_mode); void mainWindow_set_meta_information(struct mainWindow *mainWindow, guint time_earliest, guint time_latest,