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