#include <libgen.h>
#include <cairo.h>
#include <cairo-ft.h>
-#include <cgic.h>
#ifndef CAIRO_HAS_PNG_FUNCTIONS
#error This program requires cairo with PNG support
#define TRUE (1==1)
#define FALSE (!TRUE)
+#if USE_CGIC
static cairo_status_t
stdio_write (void *closure, const unsigned char *data, unsigned int length);
+#endif
double
get_max_width (cairo_t *cr, char *characters);
double
get_max_height (cairo_t *cr, char *characters);
-void
-out_stroke (cairo_t *cr)
-{
-
-}
-
int
-cgiMain ()
+main (void)
{
+ const char font_filename[] = "./Vera.ttf";
char outputJson = FALSE;
char characters[] = {
int i;
/* QueryString */
- char fontname[20];
int fontsize;
char format[5];
char fillcolor[20];
+
+#if USE_CGIG
+ char fontname[20];
cgiFormStringNoNewlines("fontname", fontname, 20);
cgiFormInteger("fontsize", &fontsize, 50);
cgiFormStringNoNewlines("format", format, 5);
cgiFormStringNoNewlines("fillcolor", fillcolor, 20);
+#endif
int fillcolor_red;
int fillcolor_green;
if ( format[0] == 'j' && format[1] == 's' && format[2] == 'o' && format[3] == 'n' )
outputJson = TRUE;
+#if USE_CGIC
if (outputJson)
{
cgiHeaderContentType("application/json");
} else {
cgiHeaderContentType("image/png");
}
+#endif
int error;
FT_Library library;
FT_Vector kerning;
error = FT_Init_FreeType( &library );
- if ( error )
- printf("error");
+ if ( error ) {
+ fprintf (stderr, "Fatal error initializing freetype.\n");
+ exit (1);
+ }
- error = FT_New_Face( library,"/srv/rdworth.org/cgi-bin/Verdana.ttf",
+ error = FT_New_Face( library, font_filename,
0,
&ft_face );
- if ( error == FT_Err_Unknown_File_Format )
- printf("File opened. Font format unsupported.");
- else if ( error )
- printf("Could not be open or read or broken.");
+ if ( error == FT_Err_Unknown_File_Format ) {
+ fprintf (stderr, "Unsupported font format: %s\n", font_filename);
+ exit (1);
+ } else if ( error ) {
+ fprintf (stderr, "Failed to open file: %s\n", font_filename);
+ exit (1);
+ }
use_kerning = FT_HAS_KERNING( ft_face );
FT_KERNING_UNSCALED, &kerning );
if ( kerning.x )
- printf(",k%d:%d", characters[j], kerning.x);
+ printf(",k%d:%ld", characters[j], kerning.x);
}
printf ("}");
cairo_pattern_destroy (gradient);
*/
+
+#if USE_CGIC
if (outputJson)
{
printf("}");
} else {
cairo_surface_write_to_png_stream (surface, stdio_write, cgiOut);
}
+#endif
+
+ cairo_surface_write_to_png (surface, "spritext-output.png");
+ printf ("Result written to spritext-output.png\n");
cairo_destroy (cr);
return 0;
}
+#if USE_CGIC
static cairo_status_t
stdio_write (void *closure, const unsigned char *data, unsigned int length)
{
else
return CAIRO_STATUS_WRITE_ERROR;
}
+#endif
double
get_max_width(cairo_t *cr, char *characters)