00001
00007 #include <stdlib.h>
00008 #include <stdio.h>
00009 #include <gtk/gtk.h>
00010
00011 #include "NME.h"
00012 #include "NMEStyle.h"
00013 #include "NMEGtk.h"
00014
00017 static void destroy(GtkWidget *widget, gpointer data)
00018 {
00019 gtk_main_quit();
00020 }
00021
00024 static void linkFun(NMEConstText link, void *data)
00025 {
00026 printf("%s\n", link);
00027 }
00028
00035 static void makeWindow(char const *title, NMEConstText input, NMEInt inputLen)
00036 {
00037 GtkWidget *window, *sw, *view;
00038 GtkTextBuffer *textBuffer;
00039 int charSize;
00040 static NMEGtk nmegtk;
00041 NMEErr err;
00042
00043 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00044 g_signal_connect(G_OBJECT(window), "destroy",
00045 G_CALLBACK(destroy), NULL);
00046 gtk_window_set_title(GTK_WINDOW(window), title);
00047 gtk_widget_set_usize(GTK_WIDGET(window), 500, 400);
00048
00049 view = gtk_text_view_new();
00050 gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE);
00051 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);
00052 sw = gtk_scrolled_window_new(NULL, NULL);
00053 gtk_container_add(GTK_CONTAINER(sw), view);
00054 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
00055 GTK_POLICY_NEVER,
00056 GTK_POLICY_ALWAYS);
00057 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);
00058 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 4);
00059 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(view), 4);
00060 textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
00061 gtk_container_add(GTK_CONTAINER(window), sw);
00062
00063 charSize = pango_font_description_get_size(view->style->font_desc);
00064 NMEGtkInit(&nmegtk, textBuffer, charSize);
00065 NMEGtkSetLinkFun(&nmegtk, linkFun, NULL);
00066
00067 gtk_widget_show_all(window);
00068
00069 err = NMEGtkInsert(textBuffer, &nmegtk, input, inputLen, FALSE, TRUE);
00070
00071 if (err != kNMEErrOk)
00072 {
00073 fprintf(stderr, "Error %d\n", err);
00074 exit(1);
00075 }
00076 }
00077
00084 int main(int argc, char **argv)
00085 {
00086 NMEText input, output, buf;
00087 NMEInt inputLen, inputSize, outputLen, bufSize, n;
00088 FILE *fp;
00089
00090 gtk_init(&argc, &argv);
00091
00092 if (argc > 2)
00093 {
00094 fprintf(stderr, "Usage: %s [file]\n", argv[0]);
00095 exit(1);
00096 }
00097
00098
00099 if (argc == 2)
00100 {
00101 fp = fopen(argv[1], "r");
00102 if (!fp)
00103 {
00104 fprintf(stderr, "Cannot open file \"%s\"\n", argv[1]);
00105 exit(1);
00106 }
00107 }
00108 else
00109 fp = stdin;
00110
00111 inputSize = 1024;
00112 input = (NMEText)malloc(inputSize);
00113 for (inputLen = 0; !feof(fp); )
00114 {
00115 n = fread(input + inputLen, 1, inputSize - inputLen, fp);
00116 if (n < 0)
00117 break;
00118 inputLen += n;
00119 inputSize += 2 * n;
00120 input = (NMEText)realloc(input, inputSize);
00121 }
00122
00123 if (argc == 2)
00124 fclose(fp);
00125
00126
00127 makeWindow("Nyctergatis Markup Engine", input, inputLen);
00128
00129
00130 gtk_main();
00131
00132 return 0;
00133 }