nyctergatis.com

Contact

Projects
Sysquake Remote Live
NME
PDF
Hike
Sudoku
GifBuilder
jpeglib for Palm OS
MySQL Client
Cross-GCC for Mac OS
NMEGtkTest.c
Go to the documentation of this file.
00001 
00008 /* License: new BSD license (see NME.h) */
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     // read file
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     // create text window
00130     makeWindow("Nyctergatis Markup Engine", input, inputLen);
00131     
00132     // run GTK+ main event loop
00133     gtk_main();
00134     
00135     return 0;
00136 }
Generated by Doxygen.
Copyright 2007-2013, Yves Piguet.
All rights reserved.