freeglut_display.c \
freeglut_font.c \
freeglut_font_data.c \
+ freeglut_stroke_roman.c \
+ freeglut_stroke_mono_roman.c \
freeglut_gamemode.c \
freeglut_geometry.c \
freeglut_init.c \
extern SFG_Font fgFontHelvetica18;
extern SFG_Font fgFontTimesRoman10;
extern SFG_Font fgFontTimesRoman24;
+extern SFG_StrokeFont fgStrokeRoman;
+extern SFG_StrokeFont fgStrokeMonoRoman;
/*
* This is for GLUT binary compatibility, as suggested by Steve Baker
return 0;
}
+/*
+ * Matches a font ID with a SFG_StrokeFont structure pointer.
+ * This was changed to match the GLUT header style.
+ */
+static SFG_StrokeFont* fghStrokeByID( void* font )
+{
+ /*
+ * Try matching the font ID and the font data structure
+ */
+ if( font == GLUT_STROKE_ROMAN ) return( &fgStrokeRoman );
+ if( font == GLUT_STROKE_MONO_ROMAN ) return( &fgStrokeMonoRoman );
+
+ /*
+ * This probably is the library user's fault
+ */
+ fgError( "stroke font 0x%08x not found", font );
+
+ return 0;
+}
+
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
/*
* Make sure the character we want to output is valid
*/
- freeglut_return_if_fail( character > 0 && character < 256 );
+ freeglut_return_if_fail( character >= 0 && character < font->Quantity );
/*
* Then find the character we want to draw
/*
* Make sure the character we want to output is valid
*/
- freeglut_return_val_if_fail( character > 0 && character < 256, 0 );
+ freeglut_return_val_if_fail( character > 0 && character < font->Quantity, 0 );
/*
* Scan the font looking for the specified character
*/
void FGAPIENTRY glutStrokeCharacter( void* fontID, int character )
{
+ const SFG_StrokeChar *schar;
+ const SFG_StrokeStrip *strip;
+ int i, j;
+
/*
- * Stroke fonts are not supported yet, use a bitmap font instead
+ * First of all we'll need a font to use
*/
- glutBitmapCharacter( GLUT_BITMAP_8_BY_13, character );
+ SFG_StrokeFont* font = fghStrokeByID( fontID );
+
+ /*
+ * Make sure the character we want to output is valid
+ */
+ freeglut_return_if_fail( character >= 0 && character < font->Quantity );
+
+ schar = font->Characters[character];
+
+ strip = schar->Strips;
+
+ for (i = 0; i < schar->Number; i++, strip++)
+ {
+ glBegin(GL_LINE_STRIP);
+ for(j = 0; j < strip->Number; j++)
+ {
+ glVertex2f(strip->Vertices[j].X, strip->Vertices[j].Y);
+ }
+ glEnd();
+ }
+ glTranslatef(schar->Right, 0.0, 0.0);
}
/*
int FGAPIENTRY glutStrokeWidth( void* fontID, int character )
{
/*
- * Stroke fonts are not supported yet, use a bitmap font instead
+ * First of all we'll need a font to use
+ */
+ SFG_StrokeFont* font = fghStrokeByID( fontID );
+
+ /*
+ * Make sure the character we want to output is valid
*/
- return( glutBitmapWidth( GLUT_BITMAP_8_BY_13, character ) );
+ freeglut_return_if_fail( character >= 0 && character < font->Quantity );
+
+ return (font->Characters[character]->Right);
}
/*
/*
* Returns the height of a stroke font
*/
-int FGAPIENTRY glutStrokeHeight( void* font )
+GLfloat FGAPIENTRY glutStrokeHeight( void* fontID )
{
/*
- * Stroke fonts are currently not implemented.
- * Using GLUT_BITMAP_8_BY_13 bitmap font instead
+ * See which font are we queried about
+ */
+ SFG_StrokeFont* font = fghStrokeByID( fontID );
+
+ /*
+ * Return the character set's height
*/
- return( glutBitmapHeight( GLUT_BITMAP_8_BY_13 ) );
+ return( font->Height );
}
/*** END OF FILE ***/
--- /dev/null
+
+/* This file has been automatically generated by the genstroke utility. */
+
+#include "../include/GL/freeglut_internal.h"
+
+/* char: 0x20 */
+
+static const SFG_StrokeStrip ch32st[] =
+{
+};
+
+static const SFG_StrokeChar ch32 = {104.762,0,ch32st};
+
+/* char: 0x21 */
+
+static const SFG_StrokeVertex ch33st0[] =
+{
+ {52.381,100},
+ {52.381,33.3333}
+};
+
+static const SFG_StrokeVertex ch33st1[] =
+{
+ {52.381,9.5238},
+ {47.6191,4.7619},
+ {52.381,0},
+ {57.1429,4.7619},
+ {52.381,9.5238}
+};
+
+static const SFG_StrokeStrip ch33st[] =
+{
+ {2,ch33st0},
+ {5,ch33st1}
+};
+
+static const SFG_StrokeChar ch33 = {104.762,2,ch33st};
+
+/* char: 0x22 */
+
+static const SFG_StrokeVertex ch34st0[] =
+{
+ {33.3334,100},
+ {33.3334,66.6667}
+};
+
+static const SFG_StrokeVertex ch34st1[] =
+{
+ {71.4286,100},
+ {71.4286,66.6667}
+};
+
+static const SFG_StrokeStrip ch34st[] =
+{
+ {2,ch34st0},
+ {2,ch34st1}
+};
+
+static const SFG_StrokeChar ch34 = {104.762,2,ch34st};
+
+/* char: 0x23 */
+
+static const SFG_StrokeVertex ch35st0[] =
+{
+ {54.7619,119.048},
+ {21.4286,-33.3333}
+};
+
+static const SFG_StrokeVertex ch35st1[] =
+{
+ {83.3334,119.048},
+ {50,-33.3333}
+};
+
+static const SFG_StrokeVertex ch35st2[] =
+{
+ {21.4286,57.1429},
+ {88.0952,57.1429}
+};
+
+static const SFG_StrokeVertex ch35st3[] =
+{
+ {16.6667,28.5714},
+ {83.3334,28.5714}
+};
+
+static const SFG_StrokeStrip ch35st[] =
+{
+ {2,ch35st0},
+ {2,ch35st1},
+ {2,ch35st2},
+ {2,ch35st3}
+};
+
+static const SFG_StrokeChar ch35 = {104.762,4,ch35st};
+
+/* char: 0x24 */
+
+static const SFG_StrokeVertex ch36st0[] =
+{
+ {42.8571,119.048},
+ {42.8571,-19.0476}
+};
+
+static const SFG_StrokeVertex ch36st1[] =
+{
+ {61.9047,119.048},
+ {61.9047,-19.0476}
+};
+
+static const SFG_StrokeVertex ch36st2[] =
+{
+ {85.7143,85.7143},
+ {76.1905,95.2381},
+ {61.9047,100},
+ {42.8571,100},
+ {28.5714,95.2381},
+ {19.0476,85.7143},
+ {19.0476,76.1905},
+ {23.8095,66.6667},
+ {28.5714,61.9048},
+ {38.0952,57.1429},
+ {66.6666,47.619},
+ {76.1905,42.8571},
+ {80.9524,38.0952},
+ {85.7143,28.5714},
+ {85.7143,14.2857},
+ {76.1905,4.7619},
+ {61.9047,0},
+ {42.8571,0},
+ {28.5714,4.7619},
+ {19.0476,14.2857}
+};
+
+static const SFG_StrokeStrip ch36st[] =
+{
+ {2,ch36st0},
+ {2,ch36st1},
+ {20,ch36st2}
+};
+
+static const SFG_StrokeChar ch36 = {104.762,3,ch36st};
+
+/* char: 0x25 */
+
+static const SFG_StrokeVertex ch37st0[] =
+{
+ {95.2381,100},
+ {9.5238,0}
+};
+
+static const SFG_StrokeVertex ch37st1[] =
+{
+ {33.3333,100},
+ {42.8571,90.4762},
+ {42.8571,80.9524},
+ {38.0952,71.4286},
+ {28.5714,66.6667},
+ {19.0476,66.6667},
+ {9.5238,76.1905},
+ {9.5238,85.7143},
+ {14.2857,95.2381},
+ {23.8095,100},
+ {33.3333,100},
+ {42.8571,95.2381},
+ {57.1428,90.4762},
+ {71.4286,90.4762},
+ {85.7143,95.2381},
+ {95.2381,100}
+};
+
+static const SFG_StrokeVertex ch37st2[] =
+{
+ {76.1905,33.3333},
+ {66.6667,28.5714},
+ {61.9048,19.0476},
+ {61.9048,9.5238},
+ {71.4286,0},
+ {80.9524,0},
+ {90.4762,4.7619},
+ {95.2381,14.2857},
+ {95.2381,23.8095},
+ {85.7143,33.3333},
+ {76.1905,33.3333}
+};
+
+static const SFG_StrokeStrip ch37st[] =
+{
+ {2,ch37st0},
+ {16,ch37st1},
+ {11,ch37st2}
+};
+
+static const SFG_StrokeChar ch37 = {104.762,3,ch37st};
+
+/* char: 0x26 */
+
+static const SFG_StrokeVertex ch38st0[] =
+{
+ {100,57.1429},
+ {100,61.9048},
+ {95.2381,66.6667},
+ {90.4762,66.6667},
+ {85.7143,61.9048},
+ {80.9524,52.381},
+ {71.4286,28.5714},
+ {61.9048,14.2857},
+ {52.3809,4.7619},
+ {42.8571,0},
+ {23.8095,0},
+ {14.2857,4.7619},
+ {9.5238,9.5238},
+ {4.7619,19.0476},
+ {4.7619,28.5714},
+ {9.5238,38.0952},
+ {14.2857,42.8571},
+ {47.619,61.9048},
+ {52.3809,66.6667},
+ {57.1429,76.1905},
+ {57.1429,85.7143},
+ {52.3809,95.2381},
+ {42.8571,100},
+ {33.3333,95.2381},
+ {28.5714,85.7143},
+ {28.5714,76.1905},
+ {33.3333,61.9048},
+ {42.8571,47.619},
+ {66.6667,14.2857},
+ {76.1905,4.7619},
+ {85.7143,0},
+ {95.2381,0},
+ {100,4.7619},
+ {100,9.5238}
+};
+
+static const SFG_StrokeStrip ch38st[] =
+{
+ {34,ch38st0}
+};
+
+static const SFG_StrokeChar ch38 = {104.762,1,ch38st};
+
+/* char: 0x27 */
+
+static const SFG_StrokeVertex ch39st0[] =
+{
+ {52.381,100},
+ {52.381,66.6667}
+};
+
+static const SFG_StrokeStrip ch39st[] =
+{
+ {2,ch39st0}
+};
+
+static const SFG_StrokeChar ch39 = {104.762,1,ch39st};
+
+/* char: 0x28 */
+
+static const SFG_StrokeVertex ch40st0[] =
+{
+ {69.0476,119.048},
+ {59.5238,109.524},
+ {50,95.2381},
+ {40.4762,76.1905},
+ {35.7143,52.381},
+ {35.7143,33.3333},
+ {40.4762,9.5238},
+ {50,-9.5238},
+ {59.5238,-23.8095},
+ {69.0476,-33.3333}
+};
+
+static const SFG_StrokeStrip ch40st[] =
+{
+ {10,ch40st0}
+};
+
+static const SFG_StrokeChar ch40 = {104.762,1,ch40st};
+
+/* char: 0x29 */
+
+static const SFG_StrokeVertex ch41st0[] =
+{
+ {35.7143,119.048},
+ {45.2381,109.524},
+ {54.7619,95.2381},
+ {64.2857,76.1905},
+ {69.0476,52.381},
+ {69.0476,33.3333},
+ {64.2857,9.5238},
+ {54.7619,-9.5238},
+ {45.2381,-23.8095},
+ {35.7143,-33.3333}
+};
+
+static const SFG_StrokeStrip ch41st[] =
+{
+ {10,ch41st0}
+};
+
+static const SFG_StrokeChar ch41 = {104.762,1,ch41st};
+
+/* char: 0x2a */
+
+static const SFG_StrokeVertex ch42st0[] =
+{
+ {52.381,71.4286},
+ {52.381,14.2857}
+};
+
+static const SFG_StrokeVertex ch42st1[] =
+{
+ {28.5715,57.1429},
+ {76.1905,28.5714}
+};
+
+static const SFG_StrokeVertex ch42st2[] =
+{
+ {76.1905,57.1429},
+ {28.5715,28.5714}
+};
+
+static const SFG_StrokeStrip ch42st[] =
+{
+ {2,ch42st0},
+ {2,ch42st1},
+ {2,ch42st2}
+};
+
+static const SFG_StrokeChar ch42 = {104.762,3,ch42st};
+
+/* char: 0x2b */
+
+static const SFG_StrokeVertex ch43st0[] =
+{
+ {52.3809,85.7143},
+ {52.3809,0}
+};
+
+static const SFG_StrokeVertex ch43st1[] =
+{
+ {9.5238,42.8571},
+ {95.2381,42.8571}
+};
+
+static const SFG_StrokeStrip ch43st[] =
+{
+ {2,ch43st0},
+ {2,ch43st1}
+};
+
+static const SFG_StrokeChar ch43 = {104.762,2,ch43st};
+
+/* char: 0x2c */
+
+static const SFG_StrokeVertex ch44st0[] =
+{
+ {57.1429,4.7619},
+ {52.381,0},
+ {47.6191,4.7619},
+ {52.381,9.5238},
+ {57.1429,4.7619},
+ {57.1429,-4.7619},
+ {52.381,-14.2857},
+ {47.6191,-19.0476}
+};
+
+static const SFG_StrokeStrip ch44st[] =
+{
+ {8,ch44st0}
+};
+
+static const SFG_StrokeChar ch44 = {104.762,1,ch44st};
+
+/* char: 0x2d */
+
+static const SFG_StrokeVertex ch45st0[] =
+{
+ {9.5238,42.8571},
+ {95.2381,42.8571}
+};
+
+static const SFG_StrokeStrip ch45st[] =
+{
+ {2,ch45st0}
+};
+
+static const SFG_StrokeChar ch45 = {104.762,1,ch45st};
+
+/* char: 0x2e */
+
+static const SFG_StrokeVertex ch46st0[] =
+{
+ {52.381,9.5238},
+ {47.6191,4.7619},
+ {52.381,0},
+ {57.1429,4.7619},
+ {52.381,9.5238}
+};
+
+static const SFG_StrokeStrip ch46st[] =
+{
+ {5,ch46st0}
+};
+
+static const SFG_StrokeChar ch46 = {104.762,1,ch46st};
+
+/* char: 0x2f */
+
+static const SFG_StrokeVertex ch47st0[] =
+{
+ {19.0476,-14.2857},
+ {85.7143,100}
+};
+
+static const SFG_StrokeStrip ch47st[] =
+{
+ {2,ch47st0}
+};
+
+static const SFG_StrokeChar ch47 = {104.762,1,ch47st};
+
+/* char: 0x30 */
+
+static const SFG_StrokeVertex ch48st0[] =
+{
+ {47.619,100},
+ {33.3333,95.2381},
+ {23.8095,80.9524},
+ {19.0476,57.1429},
+ {19.0476,42.8571},
+ {23.8095,19.0476},
+ {33.3333,4.7619},
+ {47.619,0},
+ {57.1428,0},
+ {71.4286,4.7619},
+ {80.9524,19.0476},
+ {85.7143,42.8571},
+ {85.7143,57.1429},
+ {80.9524,80.9524},
+ {71.4286,95.2381},
+ {57.1428,100},
+ {47.619,100}
+};
+
+static const SFG_StrokeStrip ch48st[] =
+{
+ {17,ch48st0}
+};
+
+static const SFG_StrokeChar ch48 = {104.762,1,ch48st};
+
+/* char: 0x31 */
+
+static const SFG_StrokeVertex ch49st0[] =
+{
+ {40.4762,80.9524},
+ {50,85.7143},
+ {64.2857,100},
+ {64.2857,0}
+};
+
+static const SFG_StrokeStrip ch49st[] =
+{
+ {4,ch49st0}
+};
+
+static const SFG_StrokeChar ch49 = {104.762,1,ch49st};
+
+/* char: 0x32 */
+
+static const SFG_StrokeVertex ch50st0[] =
+{
+ {23.8095,76.1905},
+ {23.8095,80.9524},
+ {28.5714,90.4762},
+ {33.3333,95.2381},
+ {42.8571,100},
+ {61.9047,100},
+ {71.4286,95.2381},
+ {76.1905,90.4762},
+ {80.9524,80.9524},
+ {80.9524,71.4286},
+ {76.1905,61.9048},
+ {66.6666,47.619},
+ {19.0476,0},
+ {85.7143,0}
+};
+
+static const SFG_StrokeStrip ch50st[] =
+{
+ {14,ch50st0}
+};
+
+static const SFG_StrokeChar ch50 = {104.762,1,ch50st};
+
+/* char: 0x33 */
+
+static const SFG_StrokeVertex ch51st0[] =
+{
+ {28.5714,100},
+ {80.9524,100},
+ {52.3809,61.9048},
+ {66.6666,61.9048},
+ {76.1905,57.1429},
+ {80.9524,52.381},
+ {85.7143,38.0952},
+ {85.7143,28.5714},
+ {80.9524,14.2857},
+ {71.4286,4.7619},
+ {57.1428,0},
+ {42.8571,0},
+ {28.5714,4.7619},
+ {23.8095,9.5238},
+ {19.0476,19.0476}
+};
+
+static const SFG_StrokeStrip ch51st[] =
+{
+ {15,ch51st0}
+};
+
+static const SFG_StrokeChar ch51 = {104.762,1,ch51st};
+
+/* char: 0x34 */
+
+static const SFG_StrokeVertex ch52st0[] =
+{
+ {64.2857,100},
+ {16.6667,33.3333},
+ {88.0952,33.3333}
+};
+
+static const SFG_StrokeVertex ch52st1[] =
+{
+ {64.2857,100},
+ {64.2857,0}
+};
+
+static const SFG_StrokeStrip ch52st[] =
+{
+ {3,ch52st0},
+ {2,ch52st1}
+};
+
+static const SFG_StrokeChar ch52 = {104.762,2,ch52st};
+
+/* char: 0x35 */
+
+static const SFG_StrokeVertex ch53st0[] =
+{
+ {76.1905,100},
+ {28.5714,100},
+ {23.8095,57.1429},
+ {28.5714,61.9048},
+ {42.8571,66.6667},
+ {57.1428,66.6667},
+ {71.4286,61.9048},
+ {80.9524,52.381},
+ {85.7143,38.0952},
+ {85.7143,28.5714},
+ {80.9524,14.2857},
+ {71.4286,4.7619},
+ {57.1428,0},
+ {42.8571,0},
+ {28.5714,4.7619},
+ {23.8095,9.5238},
+ {19.0476,19.0476}
+};
+
+static const SFG_StrokeStrip ch53st[] =
+{
+ {17,ch53st0}
+};
+
+static const SFG_StrokeChar ch53 = {104.762,1,ch53st};
+
+/* char: 0x36 */
+
+static const SFG_StrokeVertex ch54st0[] =
+{
+ {78.5714,85.7143},
+ {73.8096,95.2381},
+ {59.5238,100},
+ {50,100},
+ {35.7143,95.2381},
+ {26.1905,80.9524},
+ {21.4286,57.1429},
+ {21.4286,33.3333},
+ {26.1905,14.2857},
+ {35.7143,4.7619},
+ {50,0},
+ {54.7619,0},
+ {69.0476,4.7619},
+ {78.5714,14.2857},
+ {83.3334,28.5714},
+ {83.3334,33.3333},
+ {78.5714,47.619},
+ {69.0476,57.1429},
+ {54.7619,61.9048},
+ {50,61.9048},
+ {35.7143,57.1429},
+ {26.1905,47.619},
+ {21.4286,33.3333}
+};
+
+static const SFG_StrokeStrip ch54st[] =
+{
+ {23,ch54st0}
+};
+
+static const SFG_StrokeChar ch54 = {104.762,1,ch54st};
+
+/* char: 0x37 */
+
+static const SFG_StrokeVertex ch55st0[] =
+{
+ {85.7143,100},
+ {38.0952,0}
+};
+
+static const SFG_StrokeVertex ch55st1[] =
+{
+ {19.0476,100},
+ {85.7143,100}
+};
+
+static const SFG_StrokeStrip ch55st[] =
+{
+ {2,ch55st0},
+ {2,ch55st1}
+};
+
+static const SFG_StrokeChar ch55 = {104.762,2,ch55st};
+
+/* char: 0x38 */
+
+static const SFG_StrokeVertex ch56st0[] =
+{
+ {42.8571,100},
+ {28.5714,95.2381},
+ {23.8095,85.7143},
+ {23.8095,76.1905},
+ {28.5714,66.6667},
+ {38.0952,61.9048},
+ {57.1428,57.1429},
+ {71.4286,52.381},
+ {80.9524,42.8571},
+ {85.7143,33.3333},
+ {85.7143,19.0476},
+ {80.9524,9.5238},
+ {76.1905,4.7619},
+ {61.9047,0},
+ {42.8571,0},
+ {28.5714,4.7619},
+ {23.8095,9.5238},
+ {19.0476,19.0476},
+ {19.0476,33.3333},
+ {23.8095,42.8571},
+ {33.3333,52.381},
+ {47.619,57.1429},
+ {66.6666,61.9048},
+ {76.1905,66.6667},
+ {80.9524,76.1905},
+ {80.9524,85.7143},
+ {76.1905,95.2381},
+ {61.9047,100},
+ {42.8571,100}
+};
+
+static const SFG_StrokeStrip ch56st[] =
+{
+ {29,ch56st0}
+};
+
+static const SFG_StrokeChar ch56 = {104.762,1,ch56st};
+
+/* char: 0x39 */
+
+static const SFG_StrokeVertex ch57st0[] =
+{
+ {83.3334,66.6667},
+ {78.5714,52.381},
+ {69.0476,42.8571},
+ {54.7619,38.0952},
+ {50,38.0952},
+ {35.7143,42.8571},
+ {26.1905,52.381},
+ {21.4286,66.6667},
+ {21.4286,71.4286},
+ {26.1905,85.7143},
+ {35.7143,95.2381},
+ {50,100},
+ {54.7619,100},
+ {69.0476,95.2381},
+ {78.5714,85.7143},
+ {83.3334,66.6667},
+ {83.3334,42.8571},
+ {78.5714,19.0476},
+ {69.0476,4.7619},
+ {54.7619,0},
+ {45.2381,0},
+ {30.9524,4.7619},
+ {26.1905,14.2857}
+};
+
+static const SFG_StrokeStrip ch57st[] =
+{
+ {23,ch57st0}
+};
+
+static const SFG_StrokeChar ch57 = {104.762,1,ch57st};
+
+/* char: 0x3a */
+
+static const SFG_StrokeVertex ch58st0[] =
+{
+ {52.381,66.6667},
+ {47.6191,61.9048},
+ {52.381,57.1429},
+ {57.1429,61.9048},
+ {52.381,66.6667}
+};
+
+static const SFG_StrokeVertex ch58st1[] =
+{
+ {52.381,9.5238},
+ {47.6191,4.7619},
+ {52.381,0},
+ {57.1429,4.7619},
+ {52.381,9.5238}
+};
+
+static const SFG_StrokeStrip ch58st[] =
+{
+ {5,ch58st0},
+ {5,ch58st1}
+};
+
+static const SFG_StrokeChar ch58 = {104.762,2,ch58st};
+
+/* char: 0x3b */
+
+static const SFG_StrokeVertex ch59st0[] =
+{
+ {52.381,66.6667},
+ {47.6191,61.9048},
+ {52.381,57.1429},
+ {57.1429,61.9048},
+ {52.381,66.6667}
+};
+
+static const SFG_StrokeVertex ch59st1[] =
+{
+ {57.1429,4.7619},
+ {52.381,0},
+ {47.6191,4.7619},
+ {52.381,9.5238},
+ {57.1429,4.7619},
+ {57.1429,-4.7619},
+ {52.381,-14.2857},
+ {47.6191,-19.0476}
+};
+
+static const SFG_StrokeStrip ch59st[] =
+{
+ {5,ch59st0},
+ {8,ch59st1}
+};
+
+static const SFG_StrokeChar ch59 = {104.762,2,ch59st};
+
+/* char: 0x3c */
+
+static const SFG_StrokeVertex ch60st0[] =
+{
+ {90.4762,85.7143},
+ {14.2857,42.8571},
+ {90.4762,0}
+};
+
+static const SFG_StrokeStrip ch60st[] =
+{
+ {3,ch60st0}
+};
+
+static const SFG_StrokeChar ch60 = {104.762,1,ch60st};
+
+/* char: 0x3d */
+
+static const SFG_StrokeVertex ch61st0[] =
+{
+ {9.5238,57.1429},
+ {95.2381,57.1429}
+};
+
+static const SFG_StrokeVertex ch61st1[] =
+{
+ {9.5238,28.5714},
+ {95.2381,28.5714}
+};
+
+static const SFG_StrokeStrip ch61st[] =
+{
+ {2,ch61st0},
+ {2,ch61st1}
+};
+
+static const SFG_StrokeChar ch61 = {104.762,2,ch61st};
+
+/* char: 0x3e */
+
+static const SFG_StrokeVertex ch62st0[] =
+{
+ {14.2857,85.7143},
+ {90.4762,42.8571},
+ {14.2857,0}
+};
+
+static const SFG_StrokeStrip ch62st[] =
+{
+ {3,ch62st0}
+};
+
+static const SFG_StrokeChar ch62 = {104.762,1,ch62st};
+
+/* char: 0x3f */
+
+static const SFG_StrokeVertex ch63st0[] =
+{
+ {23.8095,76.1905},
+ {23.8095,80.9524},
+ {28.5714,90.4762},
+ {33.3333,95.2381},
+ {42.8571,100},
+ {61.9047,100},
+ {71.4285,95.2381},
+ {76.1905,90.4762},
+ {80.9524,80.9524},
+ {80.9524,71.4286},
+ {76.1905,61.9048},
+ {71.4285,57.1429},
+ {52.3809,47.619},
+ {52.3809,33.3333}
+};
+
+static const SFG_StrokeVertex ch63st1[] =
+{
+ {52.3809,9.5238},
+ {47.619,4.7619},
+ {52.3809,0},
+ {57.1428,4.7619},
+ {52.3809,9.5238}
+};
+
+static const SFG_StrokeStrip ch63st[] =
+{
+ {14,ch63st0},
+ {5,ch63st1}
+};
+
+static const SFG_StrokeChar ch63 = {104.762,2,ch63st};
+
+/* char: 0x40 */
+
+static const SFG_StrokeVertex ch64st0[] =
+{
+ {64.2857,52.381},
+ {54.7619,57.1429},
+ {45.2381,57.1429},
+ {40.4762,47.619},
+ {40.4762,42.8571},
+ {45.2381,33.3333},
+ {54.7619,33.3333},
+ {64.2857,38.0952}
+};
+
+static const SFG_StrokeVertex ch64st1[] =
+{
+ {64.2857,57.1429},
+ {64.2857,38.0952},
+ {69.0476,33.3333},
+ {78.5714,33.3333},
+ {83.3334,42.8571},
+ {83.3334,47.619},
+ {78.5714,61.9048},
+ {69.0476,71.4286},
+ {54.7619,76.1905},
+ {50,76.1905},
+ {35.7143,71.4286},
+ {26.1905,61.9048},
+ {21.4286,47.619},
+ {21.4286,42.8571},
+ {26.1905,28.5714},
+ {35.7143,19.0476},
+ {50,14.2857},
+ {54.7619,14.2857},
+ {69.0476,19.0476}
+};
+
+static const SFG_StrokeStrip ch64st[] =
+{
+ {8,ch64st0},
+ {19,ch64st1}
+};
+
+static const SFG_StrokeChar ch64 = {104.762,2,ch64st};
+
+/* char: 0x41 */
+
+static const SFG_StrokeVertex ch65st0[] =
+{
+ {52.3809,100},
+ {14.2857,0}
+};
+
+static const SFG_StrokeVertex ch65st1[] =
+{
+ {52.3809,100},
+ {90.4762,0}
+};
+
+static const SFG_StrokeVertex ch65st2[] =
+{
+ {28.5714,33.3333},
+ {76.1905,33.3333}
+};
+
+static const SFG_StrokeStrip ch65st[] =
+{
+ {2,ch65st0},
+ {2,ch65st1},
+ {2,ch65st2}
+};
+
+static const SFG_StrokeChar ch65 = {104.762,3,ch65st};
+
+/* char: 0x42 */
+
+static const SFG_StrokeVertex ch66st0[] =
+{
+ {19.0476,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch66st1[] =
+{
+ {19.0476,100},
+ {61.9047,100},
+ {76.1905,95.2381},
+ {80.9524,90.4762},
+ {85.7143,80.9524},
+ {85.7143,71.4286},
+ {80.9524,61.9048},
+ {76.1905,57.1429},
+ {61.9047,52.381}
+};
+
+static const SFG_StrokeVertex ch66st2[] =
+{
+ {19.0476,52.381},
+ {61.9047,52.381},
+ {76.1905,47.619},
+ {80.9524,42.8571},
+ {85.7143,33.3333},
+ {85.7143,19.0476},
+ {80.9524,9.5238},
+ {76.1905,4.7619},
+ {61.9047,0},
+ {19.0476,0}
+};
+
+static const SFG_StrokeStrip ch66st[] =
+{
+ {2,ch66st0},
+ {9,ch66st1},
+ {10,ch66st2}
+};
+
+static const SFG_StrokeChar ch66 = {104.762,3,ch66st};
+
+/* char: 0x43 */
+
+static const SFG_StrokeVertex ch67st0[] =
+{
+ {88.0952,76.1905},
+ {83.3334,85.7143},
+ {73.8096,95.2381},
+ {64.2857,100},
+ {45.2381,100},
+ {35.7143,95.2381},
+ {26.1905,85.7143},
+ {21.4286,76.1905},
+ {16.6667,61.9048},
+ {16.6667,38.0952},
+ {21.4286,23.8095},
+ {26.1905,14.2857},
+ {35.7143,4.7619},
+ {45.2381,0},
+ {64.2857,0},
+ {73.8096,4.7619},
+ {83.3334,14.2857},
+ {88.0952,23.8095}
+};
+
+static const SFG_StrokeStrip ch67st[] =
+{
+ {18,ch67st0}
+};
+
+static const SFG_StrokeChar ch67 = {104.762,1,ch67st};
+
+/* char: 0x44 */
+
+static const SFG_StrokeVertex ch68st0[] =
+{
+ {19.0476,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch68st1[] =
+{
+ {19.0476,100},
+ {52.3809,100},
+ {66.6666,95.2381},
+ {76.1905,85.7143},
+ {80.9524,76.1905},
+ {85.7143,61.9048},
+ {85.7143,38.0952},
+ {80.9524,23.8095},
+ {76.1905,14.2857},
+ {66.6666,4.7619},
+ {52.3809,0},
+ {19.0476,0}
+};
+
+static const SFG_StrokeStrip ch68st[] =
+{
+ {2,ch68st0},
+ {12,ch68st1}
+};
+
+static const SFG_StrokeChar ch68 = {104.762,2,ch68st};
+
+/* char: 0x45 */
+
+static const SFG_StrokeVertex ch69st0[] =
+{
+ {21.4286,100},
+ {21.4286,0}
+};
+
+static const SFG_StrokeVertex ch69st1[] =
+{
+ {21.4286,100},
+ {83.3334,100}
+};
+
+static const SFG_StrokeVertex ch69st2[] =
+{
+ {21.4286,52.381},
+ {59.5238,52.381}
+};
+
+static const SFG_StrokeVertex ch69st3[] =
+{
+ {21.4286,0},
+ {83.3334,0}
+};
+
+static const SFG_StrokeStrip ch69st[] =
+{
+ {2,ch69st0},
+ {2,ch69st1},
+ {2,ch69st2},
+ {2,ch69st3}
+};
+
+static const SFG_StrokeChar ch69 = {104.762,4,ch69st};
+
+/* char: 0x46 */
+
+static const SFG_StrokeVertex ch70st0[] =
+{
+ {21.4286,100},
+ {21.4286,0}
+};
+
+static const SFG_StrokeVertex ch70st1[] =
+{
+ {21.4286,100},
+ {83.3334,100}
+};
+
+static const SFG_StrokeVertex ch70st2[] =
+{
+ {21.4286,52.381},
+ {59.5238,52.381}
+};
+
+static const SFG_StrokeStrip ch70st[] =
+{
+ {2,ch70st0},
+ {2,ch70st1},
+ {2,ch70st2}
+};
+
+static const SFG_StrokeChar ch70 = {104.762,3,ch70st};
+
+/* char: 0x47 */
+
+static const SFG_StrokeVertex ch71st0[] =
+{
+ {88.0952,76.1905},
+ {83.3334,85.7143},
+ {73.8096,95.2381},
+ {64.2857,100},
+ {45.2381,100},
+ {35.7143,95.2381},
+ {26.1905,85.7143},
+ {21.4286,76.1905},
+ {16.6667,61.9048},
+ {16.6667,38.0952},
+ {21.4286,23.8095},
+ {26.1905,14.2857},
+ {35.7143,4.7619},
+ {45.2381,0},
+ {64.2857,0},
+ {73.8096,4.7619},
+ {83.3334,14.2857},
+ {88.0952,23.8095},
+ {88.0952,38.0952}
+};
+
+static const SFG_StrokeVertex ch71st1[] =
+{
+ {64.2857,38.0952},
+ {88.0952,38.0952}
+};
+
+static const SFG_StrokeStrip ch71st[] =
+{
+ {19,ch71st0},
+ {2,ch71st1}
+};
+
+static const SFG_StrokeChar ch71 = {104.762,2,ch71st};
+
+/* char: 0x48 */
+
+static const SFG_StrokeVertex ch72st0[] =
+{
+ {19.0476,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch72st1[] =
+{
+ {85.7143,100},
+ {85.7143,0}
+};
+
+static const SFG_StrokeVertex ch72st2[] =
+{
+ {19.0476,52.381},
+ {85.7143,52.381}
+};
+
+static const SFG_StrokeStrip ch72st[] =
+{
+ {2,ch72st0},
+ {2,ch72st1},
+ {2,ch72st2}
+};
+
+static const SFG_StrokeChar ch72 = {104.762,3,ch72st};
+
+/* char: 0x49 */
+
+static const SFG_StrokeVertex ch73st0[] =
+{
+ {52.381,100},
+ {52.381,0}
+};
+
+static const SFG_StrokeStrip ch73st[] =
+{
+ {2,ch73st0}
+};
+
+static const SFG_StrokeChar ch73 = {104.762,1,ch73st};
+
+/* char: 0x4a */
+
+static const SFG_StrokeVertex ch74st0[] =
+{
+ {76.1905,100},
+ {76.1905,23.8095},
+ {71.4286,9.5238},
+ {66.6667,4.7619},
+ {57.1429,0},
+ {47.6191,0},
+ {38.0953,4.7619},
+ {33.3334,9.5238},
+ {28.5715,23.8095},
+ {28.5715,33.3333}
+};
+
+static const SFG_StrokeStrip ch74st[] =
+{
+ {10,ch74st0}
+};
+
+static const SFG_StrokeChar ch74 = {104.762,1,ch74st};
+
+/* char: 0x4b */
+
+static const SFG_StrokeVertex ch75st0[] =
+{
+ {19.0476,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch75st1[] =
+{
+ {85.7143,100},
+ {19.0476,33.3333}
+};
+
+static const SFG_StrokeVertex ch75st2[] =
+{
+ {42.8571,57.1429},
+ {85.7143,0}
+};
+
+static const SFG_StrokeStrip ch75st[] =
+{
+ {2,ch75st0},
+ {2,ch75st1},
+ {2,ch75st2}
+};
+
+static const SFG_StrokeChar ch75 = {104.762,3,ch75st};
+
+/* char: 0x4c */
+
+static const SFG_StrokeVertex ch76st0[] =
+{
+ {23.8095,100},
+ {23.8095,0}
+};
+
+static const SFG_StrokeVertex ch76st1[] =
+{
+ {23.8095,0},
+ {80.9524,0}
+};
+
+static const SFG_StrokeStrip ch76st[] =
+{
+ {2,ch76st0},
+ {2,ch76st1}
+};
+
+static const SFG_StrokeChar ch76 = {104.762,2,ch76st};
+
+/* char: 0x4d */
+
+static const SFG_StrokeVertex ch77st0[] =
+{
+ {14.2857,100},
+ {14.2857,0}
+};
+
+static const SFG_StrokeVertex ch77st1[] =
+{
+ {14.2857,100},
+ {52.3809,0}
+};
+
+static const SFG_StrokeVertex ch77st2[] =
+{
+ {90.4762,100},
+ {52.3809,0}
+};
+
+static const SFG_StrokeVertex ch77st3[] =
+{
+ {90.4762,100},
+ {90.4762,0}
+};
+
+static const SFG_StrokeStrip ch77st[] =
+{
+ {2,ch77st0},
+ {2,ch77st1},
+ {2,ch77st2},
+ {2,ch77st3}
+};
+
+static const SFG_StrokeChar ch77 = {104.762,4,ch77st};
+
+/* char: 0x4e */
+
+static const SFG_StrokeVertex ch78st0[] =
+{
+ {19.0476,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch78st1[] =
+{
+ {19.0476,100},
+ {85.7143,0}
+};
+
+static const SFG_StrokeVertex ch78st2[] =
+{
+ {85.7143,100},
+ {85.7143,0}
+};
+
+static const SFG_StrokeStrip ch78st[] =
+{
+ {2,ch78st0},
+ {2,ch78st1},
+ {2,ch78st2}
+};
+
+static const SFG_StrokeChar ch78 = {104.762,3,ch78st};
+
+/* char: 0x4f */
+
+static const SFG_StrokeVertex ch79st0[] =
+{
+ {42.8571,100},
+ {33.3333,95.2381},
+ {23.8095,85.7143},
+ {19.0476,76.1905},
+ {14.2857,61.9048},
+ {14.2857,38.0952},
+ {19.0476,23.8095},
+ {23.8095,14.2857},
+ {33.3333,4.7619},
+ {42.8571,0},
+ {61.9047,0},
+ {71.4286,4.7619},
+ {80.9524,14.2857},
+ {85.7143,23.8095},
+ {90.4762,38.0952},
+ {90.4762,61.9048},
+ {85.7143,76.1905},
+ {80.9524,85.7143},
+ {71.4286,95.2381},
+ {61.9047,100},
+ {42.8571,100}
+};
+
+static const SFG_StrokeStrip ch79st[] =
+{
+ {21,ch79st0}
+};
+
+static const SFG_StrokeChar ch79 = {104.762,1,ch79st};
+
+/* char: 0x50 */
+
+static const SFG_StrokeVertex ch80st0[] =
+{
+ {19.0476,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch80st1[] =
+{
+ {19.0476,100},
+ {61.9047,100},
+ {76.1905,95.2381},
+ {80.9524,90.4762},
+ {85.7143,80.9524},
+ {85.7143,66.6667},
+ {80.9524,57.1429},
+ {76.1905,52.381},
+ {61.9047,47.619},
+ {19.0476,47.619}
+};
+
+static const SFG_StrokeStrip ch80st[] =
+{
+ {2,ch80st0},
+ {10,ch80st1}
+};
+
+static const SFG_StrokeChar ch80 = {104.762,2,ch80st};
+
+/* char: 0x51 */
+
+static const SFG_StrokeVertex ch81st0[] =
+{
+ {42.8571,100},
+ {33.3333,95.2381},
+ {23.8095,85.7143},
+ {19.0476,76.1905},
+ {14.2857,61.9048},
+ {14.2857,38.0952},
+ {19.0476,23.8095},
+ {23.8095,14.2857},
+ {33.3333,4.7619},
+ {42.8571,0},
+ {61.9047,0},
+ {71.4286,4.7619},
+ {80.9524,14.2857},
+ {85.7143,23.8095},
+ {90.4762,38.0952},
+ {90.4762,61.9048},
+ {85.7143,76.1905},
+ {80.9524,85.7143},
+ {71.4286,95.2381},
+ {61.9047,100},
+ {42.8571,100}
+};
+
+static const SFG_StrokeVertex ch81st1[] =
+{
+ {57.1428,19.0476},
+ {85.7143,-9.5238}
+};
+
+static const SFG_StrokeStrip ch81st[] =
+{
+ {21,ch81st0},
+ {2,ch81st1}
+};
+
+static const SFG_StrokeChar ch81 = {104.762,2,ch81st};
+
+/* char: 0x52 */
+
+static const SFG_StrokeVertex ch82st0[] =
+{
+ {19.0476,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch82st1[] =
+{
+ {19.0476,100},
+ {61.9047,100},
+ {76.1905,95.2381},
+ {80.9524,90.4762},
+ {85.7143,80.9524},
+ {85.7143,71.4286},
+ {80.9524,61.9048},
+ {76.1905,57.1429},
+ {61.9047,52.381},
+ {19.0476,52.381}
+};
+
+static const SFG_StrokeVertex ch82st2[] =
+{
+ {52.3809,52.381},
+ {85.7143,0}
+};
+
+static const SFG_StrokeStrip ch82st[] =
+{
+ {2,ch82st0},
+ {10,ch82st1},
+ {2,ch82st2}
+};
+
+static const SFG_StrokeChar ch82 = {104.762,3,ch82st};
+
+/* char: 0x53 */
+
+static const SFG_StrokeVertex ch83st0[] =
+{
+ {85.7143,85.7143},
+ {76.1905,95.2381},
+ {61.9047,100},
+ {42.8571,100},
+ {28.5714,95.2381},
+ {19.0476,85.7143},
+ {19.0476,76.1905},
+ {23.8095,66.6667},
+ {28.5714,61.9048},
+ {38.0952,57.1429},
+ {66.6666,47.619},
+ {76.1905,42.8571},
+ {80.9524,38.0952},
+ {85.7143,28.5714},
+ {85.7143,14.2857},
+ {76.1905,4.7619},
+ {61.9047,0},
+ {42.8571,0},
+ {28.5714,4.7619},
+ {19.0476,14.2857}
+};
+
+static const SFG_StrokeStrip ch83st[] =
+{
+ {20,ch83st0}
+};
+
+static const SFG_StrokeChar ch83 = {104.762,1,ch83st};
+
+/* char: 0x54 */
+
+static const SFG_StrokeVertex ch84st0[] =
+{
+ {52.3809,100},
+ {52.3809,0}
+};
+
+static const SFG_StrokeVertex ch84st1[] =
+{
+ {19.0476,100},
+ {85.7143,100}
+};
+
+static const SFG_StrokeStrip ch84st[] =
+{
+ {2,ch84st0},
+ {2,ch84st1}
+};
+
+static const SFG_StrokeChar ch84 = {104.762,2,ch84st};
+
+/* char: 0x55 */
+
+static const SFG_StrokeVertex ch85st0[] =
+{
+ {19.0476,100},
+ {19.0476,28.5714},
+ {23.8095,14.2857},
+ {33.3333,4.7619},
+ {47.619,0},
+ {57.1428,0},
+ {71.4286,4.7619},
+ {80.9524,14.2857},
+ {85.7143,28.5714},
+ {85.7143,100}
+};
+
+static const SFG_StrokeStrip ch85st[] =
+{
+ {10,ch85st0}
+};
+
+static const SFG_StrokeChar ch85 = {104.762,1,ch85st};
+
+/* char: 0x56 */
+
+static const SFG_StrokeVertex ch86st0[] =
+{
+ {14.2857,100},
+ {52.3809,0}
+};
+
+static const SFG_StrokeVertex ch86st1[] =
+{
+ {90.4762,100},
+ {52.3809,0}
+};
+
+static const SFG_StrokeStrip ch86st[] =
+{
+ {2,ch86st0},
+ {2,ch86st1}
+};
+
+static const SFG_StrokeChar ch86 = {104.762,2,ch86st};
+
+/* char: 0x57 */
+
+static const SFG_StrokeVertex ch87st0[] =
+{
+ {4.7619,100},
+ {28.5714,0}
+};
+
+static const SFG_StrokeVertex ch87st1[] =
+{
+ {52.3809,100},
+ {28.5714,0}
+};
+
+static const SFG_StrokeVertex ch87st2[] =
+{
+ {52.3809,100},
+ {76.1905,0}
+};
+
+static const SFG_StrokeVertex ch87st3[] =
+{
+ {100,100},
+ {76.1905,0}
+};
+
+static const SFG_StrokeStrip ch87st[] =
+{
+ {2,ch87st0},
+ {2,ch87st1},
+ {2,ch87st2},
+ {2,ch87st3}
+};
+
+static const SFG_StrokeChar ch87 = {104.762,4,ch87st};
+
+/* char: 0x58 */
+
+static const SFG_StrokeVertex ch88st0[] =
+{
+ {19.0476,100},
+ {85.7143,0}
+};
+
+static const SFG_StrokeVertex ch88st1[] =
+{
+ {85.7143,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeStrip ch88st[] =
+{
+ {2,ch88st0},
+ {2,ch88st1}
+};
+
+static const SFG_StrokeChar ch88 = {104.762,2,ch88st};
+
+/* char: 0x59 */
+
+static const SFG_StrokeVertex ch89st0[] =
+{
+ {14.2857,100},
+ {52.3809,52.381},
+ {52.3809,0}
+};
+
+static const SFG_StrokeVertex ch89st1[] =
+{
+ {90.4762,100},
+ {52.3809,52.381}
+};
+
+static const SFG_StrokeStrip ch89st[] =
+{
+ {3,ch89st0},
+ {2,ch89st1}
+};
+
+static const SFG_StrokeChar ch89 = {104.762,2,ch89st};
+
+/* char: 0x5a */
+
+static const SFG_StrokeVertex ch90st0[] =
+{
+ {85.7143,100},
+ {19.0476,0}
+};
+
+static const SFG_StrokeVertex ch90st1[] =
+{
+ {19.0476,100},
+ {85.7143,100}
+};
+
+static const SFG_StrokeVertex ch90st2[] =
+{
+ {19.0476,0},
+ {85.7143,0}
+};
+
+static const SFG_StrokeStrip ch90st[] =
+{
+ {2,ch90st0},
+ {2,ch90st1},
+ {2,ch90st2}
+};
+
+static const SFG_StrokeChar ch90 = {104.762,3,ch90st};
+
+/* char: 0x5b */
+
+static const SFG_StrokeVertex ch91st0[] =
+{
+ {35.7143,119.048},
+ {35.7143,-33.3333}
+};
+
+static const SFG_StrokeVertex ch91st1[] =
+{
+ {40.4762,119.048},
+ {40.4762,-33.3333}
+};
+
+static const SFG_StrokeVertex ch91st2[] =
+{
+ {35.7143,119.048},
+ {69.0476,119.048}
+};
+
+static const SFG_StrokeVertex ch91st3[] =
+{
+ {35.7143,-33.3333},
+ {69.0476,-33.3333}
+};
+
+static const SFG_StrokeStrip ch91st[] =
+{
+ {2,ch91st0},
+ {2,ch91st1},
+ {2,ch91st2},
+ {2,ch91st3}
+};
+
+static const SFG_StrokeChar ch91 = {104.762,4,ch91st};
+
+/* char: 0x5c */
+
+static const SFG_StrokeVertex ch92st0[] =
+{
+ {19.0476,100},
+ {85.7143,-14.2857}
+};
+
+static const SFG_StrokeStrip ch92st[] =
+{
+ {2,ch92st0}
+};
+
+static const SFG_StrokeChar ch92 = {104.762,1,ch92st};
+
+/* char: 0x5d */
+
+static const SFG_StrokeVertex ch93st0[] =
+{
+ {64.2857,119.048},
+ {64.2857,-33.3333}
+};
+
+static const SFG_StrokeVertex ch93st1[] =
+{
+ {69.0476,119.048},
+ {69.0476,-33.3333}
+};
+
+static const SFG_StrokeVertex ch93st2[] =
+{
+ {35.7143,119.048},
+ {69.0476,119.048}
+};
+
+static const SFG_StrokeVertex ch93st3[] =
+{
+ {35.7143,-33.3333},
+ {69.0476,-33.3333}
+};
+
+static const SFG_StrokeStrip ch93st[] =
+{
+ {2,ch93st0},
+ {2,ch93st1},
+ {2,ch93st2},
+ {2,ch93st3}
+};
+
+static const SFG_StrokeChar ch93 = {104.762,4,ch93st};
+
+/* char: 0x5e */
+
+static const SFG_StrokeVertex ch94st0[] =
+{
+ {52.3809,109.524},
+ {14.2857,42.8571}
+};
+
+static const SFG_StrokeVertex ch94st1[] =
+{
+ {52.3809,109.524},
+ {90.4762,42.8571}
+};
+
+static const SFG_StrokeStrip ch94st[] =
+{
+ {2,ch94st0},
+ {2,ch94st1}
+};
+
+static const SFG_StrokeChar ch94 = {104.762,2,ch94st};
+
+/* char: 0x5f */
+
+static const SFG_StrokeVertex ch95st0[] =
+{
+ {0,-33.3333},
+ {104.762,-33.3333},
+ {104.762,-28.5714},
+ {0,-28.5714},
+ {0,-33.3333}
+};
+
+static const SFG_StrokeStrip ch95st[] =
+{
+ {5,ch95st0}
+};
+
+static const SFG_StrokeChar ch95 = {104.762,1,ch95st};
+
+/* char: 0x60 */
+
+static const SFG_StrokeVertex ch96st0[] =
+{
+ {42.8572,100},
+ {66.6667,71.4286}
+};
+
+static const SFG_StrokeVertex ch96st1[] =
+{
+ {42.8572,100},
+ {38.0953,95.2381},
+ {66.6667,71.4286}
+};
+
+static const SFG_StrokeStrip ch96st[] =
+{
+ {2,ch96st0},
+ {3,ch96st1}
+};
+
+static const SFG_StrokeChar ch96 = {104.762,2,ch96st};
+
+/* char: 0x61 */
+
+static const SFG_StrokeVertex ch97st0[] =
+{
+ {80.9524,66.6667},
+ {80.9524,0}
+};
+
+static const SFG_StrokeVertex ch97st1[] =
+{
+ {80.9524,52.381},
+ {71.4285,61.9048},
+ {61.9047,66.6667},
+ {47.619,66.6667},
+ {38.0952,61.9048},
+ {28.5714,52.381},
+ {23.8095,38.0952},
+ {23.8095,28.5714},
+ {28.5714,14.2857},
+ {38.0952,4.7619},
+ {47.619,0},
+ {61.9047,0},
+ {71.4285,4.7619},
+ {80.9524,14.2857}
+};
+
+static const SFG_StrokeStrip ch97st[] =
+{
+ {2,ch97st0},
+ {14,ch97st1}
+};
+
+static const SFG_StrokeChar ch97 = {104.762,2,ch97st};
+
+/* char: 0x62 */
+
+static const SFG_StrokeVertex ch98st0[] =
+{
+ {23.8095,100},
+ {23.8095,0}
+};
+
+static const SFG_StrokeVertex ch98st1[] =
+{
+ {23.8095,52.381},
+ {33.3333,61.9048},
+ {42.8571,66.6667},
+ {57.1428,66.6667},
+ {66.6666,61.9048},
+ {76.1905,52.381},
+ {80.9524,38.0952},
+ {80.9524,28.5714},
+ {76.1905,14.2857},
+ {66.6666,4.7619},
+ {57.1428,0},
+ {42.8571,0},
+ {33.3333,4.7619},
+ {23.8095,14.2857}
+};
+
+static const SFG_StrokeStrip ch98st[] =
+{
+ {2,ch98st0},
+ {14,ch98st1}
+};
+
+static const SFG_StrokeChar ch98 = {104.762,2,ch98st};
+
+/* char: 0x63 */
+
+static const SFG_StrokeVertex ch99st0[] =
+{
+ {80.9524,52.381},
+ {71.4285,61.9048},
+ {61.9047,66.6667},
+ {47.619,66.6667},
+ {38.0952,61.9048},
+ {28.5714,52.381},
+ {23.8095,38.0952},
+ {23.8095,28.5714},
+ {28.5714,14.2857},
+ {38.0952,4.7619},
+ {47.619,0},
+ {61.9047,0},
+ {71.4285,4.7619},
+ {80.9524,14.2857}
+};
+
+static const SFG_StrokeStrip ch99st[] =
+{
+ {14,ch99st0}
+};
+
+static const SFG_StrokeChar ch99 = {104.762,1,ch99st};
+
+/* char: 0x64 */
+
+static const SFG_StrokeVertex ch100st0[] =
+{
+ {80.9524,100},
+ {80.9524,0}
+};
+
+static const SFG_StrokeVertex ch100st1[] =
+{
+ {80.9524,52.381},
+ {71.4285,61.9048},
+ {61.9047,66.6667},
+ {47.619,66.6667},
+ {38.0952,61.9048},
+ {28.5714,52.381},
+ {23.8095,38.0952},
+ {23.8095,28.5714},
+ {28.5714,14.2857},
+ {38.0952,4.7619},
+ {47.619,0},
+ {61.9047,0},
+ {71.4285,4.7619},
+ {80.9524,14.2857}
+};
+
+static const SFG_StrokeStrip ch100st[] =
+{
+ {2,ch100st0},
+ {14,ch100st1}
+};
+
+static const SFG_StrokeChar ch100 = {104.762,2,ch100st};
+
+/* char: 0x65 */
+
+static const SFG_StrokeVertex ch101st0[] =
+{
+ {23.8095,38.0952},
+ {80.9524,38.0952},
+ {80.9524,47.619},
+ {76.1905,57.1429},
+ {71.4285,61.9048},
+ {61.9047,66.6667},
+ {47.619,66.6667},
+ {38.0952,61.9048},
+ {28.5714,52.381},
+ {23.8095,38.0952},
+ {23.8095,28.5714},
+ {28.5714,14.2857},
+ {38.0952,4.7619},
+ {47.619,0},
+ {61.9047,0},
+ {71.4285,4.7619},
+ {80.9524,14.2857}
+};
+
+static const SFG_StrokeStrip ch101st[] =
+{
+ {17,ch101st0}
+};
+
+static const SFG_StrokeChar ch101 = {104.762,1,ch101st};
+
+/* char: 0x66 */
+
+static const SFG_StrokeVertex ch102st0[] =
+{
+ {71.4286,100},
+ {61.9048,100},
+ {52.381,95.2381},
+ {47.6191,80.9524},
+ {47.6191,0}
+};
+
+static const SFG_StrokeVertex ch102st1[] =
+{
+ {33.3334,66.6667},
+ {66.6667,66.6667}
+};
+
+static const SFG_StrokeStrip ch102st[] =
+{
+ {5,ch102st0},
+ {2,ch102st1}
+};
+
+static const SFG_StrokeChar ch102 = {104.762,2,ch102st};
+
+/* char: 0x67 */
+
+static const SFG_StrokeVertex ch103st0[] =
+{
+ {80.9524,66.6667},
+ {80.9524,-9.5238},
+ {76.1905,-23.8095},
+ {71.4285,-28.5714},
+ {61.9047,-33.3333},
+ {47.619,-33.3333},
+ {38.0952,-28.5714}
+};
+
+static const SFG_StrokeVertex ch103st1[] =
+{
+ {80.9524,52.381},
+ {71.4285,61.9048},
+ {61.9047,66.6667},
+ {47.619,66.6667},
+ {38.0952,61.9048},
+ {28.5714,52.381},
+ {23.8095,38.0952},
+ {23.8095,28.5714},
+ {28.5714,14.2857},
+ {38.0952,4.7619},
+ {47.619,0},
+ {61.9047,0},
+ {71.4285,4.7619},
+ {80.9524,14.2857}
+};
+
+static const SFG_StrokeStrip ch103st[] =
+{
+ {7,ch103st0},
+ {14,ch103st1}
+};
+
+static const SFG_StrokeChar ch103 = {104.762,2,ch103st};
+
+/* char: 0x68 */
+
+static const SFG_StrokeVertex ch104st0[] =
+{
+ {26.1905,100},
+ {26.1905,0}
+};
+
+static const SFG_StrokeVertex ch104st1[] =
+{
+ {26.1905,47.619},
+ {40.4762,61.9048},
+ {50,66.6667},
+ {64.2857,66.6667},
+ {73.8095,61.9048},
+ {78.5715,47.619},
+ {78.5715,0}
+};
+
+static const SFG_StrokeStrip ch104st[] =
+{
+ {2,ch104st0},
+ {7,ch104st1}
+};
+
+static const SFG_StrokeChar ch104 = {104.762,2,ch104st};
+
+/* char: 0x69 */
+
+static const SFG_StrokeVertex ch105st0[] =
+{
+ {47.6191,100},
+ {52.381,95.2381},
+ {57.1429,100},
+ {52.381,104.762},
+ {47.6191,100}
+};
+
+static const SFG_StrokeVertex ch105st1[] =
+{
+ {52.381,66.6667},
+ {52.381,0}
+};
+
+static const SFG_StrokeStrip ch105st[] =
+{
+ {5,ch105st0},
+ {2,ch105st1}
+};
+
+static const SFG_StrokeChar ch105 = {104.762,2,ch105st};
+
+/* char: 0x6a */
+
+static const SFG_StrokeVertex ch106st0[] =
+{
+ {57.1429,100},
+ {61.9048,95.2381},
+ {66.6667,100},
+ {61.9048,104.762},
+ {57.1429,100}
+};
+
+static const SFG_StrokeVertex ch106st1[] =
+{
+ {61.9048,66.6667},
+ {61.9048,-14.2857},
+ {57.1429,-28.5714},
+ {47.6191,-33.3333},
+ {38.0953,-33.3333}
+};
+
+static const SFG_StrokeStrip ch106st[] =
+{
+ {5,ch106st0},
+ {5,ch106st1}
+};
+
+static const SFG_StrokeChar ch106 = {104.762,2,ch106st};
+
+/* char: 0x6b */
+
+static const SFG_StrokeVertex ch107st0[] =
+{
+ {26.1905,100},
+ {26.1905,0}
+};
+
+static const SFG_StrokeVertex ch107st1[] =
+{
+ {73.8095,66.6667},
+ {26.1905,19.0476}
+};
+
+static const SFG_StrokeVertex ch107st2[] =
+{
+ {45.2381,38.0952},
+ {78.5715,0}
+};
+
+static const SFG_StrokeStrip ch107st[] =
+{
+ {2,ch107st0},
+ {2,ch107st1},
+ {2,ch107st2}
+};
+
+static const SFG_StrokeChar ch107 = {104.762,3,ch107st};
+
+/* char: 0x6c */
+
+static const SFG_StrokeVertex ch108st0[] =
+{
+ {52.381,100},
+ {52.381,0}
+};
+
+static const SFG_StrokeStrip ch108st[] =
+{
+ {2,ch108st0}
+};
+
+static const SFG_StrokeChar ch108 = {104.762,1,ch108st};
+
+/* char: 0x6d */
+
+static const SFG_StrokeVertex ch109st0[] =
+{
+ {0,66.6667},
+ {0,0}
+};
+
+static const SFG_StrokeVertex ch109st1[] =
+{
+ {0,47.619},
+ {14.2857,61.9048},
+ {23.8095,66.6667},
+ {38.0952,66.6667},
+ {47.619,61.9048},
+ {52.381,47.619},
+ {52.381,0}
+};
+
+static const SFG_StrokeVertex ch109st2[] =
+{
+ {52.381,47.619},
+ {66.6667,61.9048},
+ {76.1905,66.6667},
+ {90.4762,66.6667},
+ {100,61.9048},
+ {104.762,47.619},
+ {104.762,0}
+};
+
+static const SFG_StrokeStrip ch109st[] =
+{
+ {2,ch109st0},
+ {7,ch109st1},
+ {7,ch109st2}
+};
+
+static const SFG_StrokeChar ch109 = {104.762,3,ch109st};
+
+/* char: 0x6e */
+
+static const SFG_StrokeVertex ch110st0[] =
+{
+ {26.1905,66.6667},
+ {26.1905,0}
+};
+
+static const SFG_StrokeVertex ch110st1[] =
+{
+ {26.1905,47.619},
+ {40.4762,61.9048},
+ {50,66.6667},
+ {64.2857,66.6667},
+ {73.8095,61.9048},
+ {78.5715,47.619},
+ {78.5715,0}
+};
+
+static const SFG_StrokeStrip ch110st[] =
+{
+ {2,ch110st0},
+ {7,ch110st1}
+};
+
+static const SFG_StrokeChar ch110 = {104.762,2,ch110st};
+
+/* char: 0x6f */
+
+static const SFG_StrokeVertex ch111st0[] =
+{
+ {45.2381,66.6667},
+ {35.7143,61.9048},
+ {26.1905,52.381},
+ {21.4286,38.0952},
+ {21.4286,28.5714},
+ {26.1905,14.2857},
+ {35.7143,4.7619},
+ {45.2381,0},
+ {59.5238,0},
+ {69.0476,4.7619},
+ {78.5714,14.2857},
+ {83.3334,28.5714},
+ {83.3334,38.0952},
+ {78.5714,52.381},
+ {69.0476,61.9048},
+ {59.5238,66.6667},
+ {45.2381,66.6667}
+};
+
+static const SFG_StrokeStrip ch111st[] =
+{
+ {17,ch111st0}
+};
+
+static const SFG_StrokeChar ch111 = {104.762,1,ch111st};
+
+/* char: 0x70 */
+
+static const SFG_StrokeVertex ch112st0[] =
+{
+ {23.8095,66.6667},
+ {23.8095,-33.3333}
+};
+
+static const SFG_StrokeVertex ch112st1[] =
+{
+ {23.8095,52.381},
+ {33.3333,61.9048},
+ {42.8571,66.6667},
+ {57.1428,66.6667},
+ {66.6666,61.9048},
+ {76.1905,52.381},
+ {80.9524,38.0952},
+ {80.9524,28.5714},
+ {76.1905,14.2857},
+ {66.6666,4.7619},
+ {57.1428,0},
+ {42.8571,0},
+ {33.3333,4.7619},
+ {23.8095,14.2857}
+};
+
+static const SFG_StrokeStrip ch112st[] =
+{
+ {2,ch112st0},
+ {14,ch112st1}
+};
+
+static const SFG_StrokeChar ch112 = {104.762,2,ch112st};
+
+/* char: 0x71 */
+
+static const SFG_StrokeVertex ch113st0[] =
+{
+ {80.9524,66.6667},
+ {80.9524,-33.3333}
+};
+
+static const SFG_StrokeVertex ch113st1[] =
+{
+ {80.9524,52.381},
+ {71.4285,61.9048},
+ {61.9047,66.6667},
+ {47.619,66.6667},
+ {38.0952,61.9048},
+ {28.5714,52.381},
+ {23.8095,38.0952},
+ {23.8095,28.5714},
+ {28.5714,14.2857},
+ {38.0952,4.7619},
+ {47.619,0},
+ {61.9047,0},
+ {71.4285,4.7619},
+ {80.9524,14.2857}
+};
+
+static const SFG_StrokeStrip ch113st[] =
+{
+ {2,ch113st0},
+ {14,ch113st1}
+};
+
+static const SFG_StrokeChar ch113 = {104.762,2,ch113st};
+
+/* char: 0x72 */
+
+static const SFG_StrokeVertex ch114st0[] =
+{
+ {33.3334,66.6667},
+ {33.3334,0}
+};
+
+static const SFG_StrokeVertex ch114st1[] =
+{
+ {33.3334,38.0952},
+ {38.0953,52.381},
+ {47.6191,61.9048},
+ {57.1429,66.6667},
+ {71.4286,66.6667}
+};
+
+static const SFG_StrokeStrip ch114st[] =
+{
+ {2,ch114st0},
+ {5,ch114st1}
+};
+
+static const SFG_StrokeChar ch114 = {104.762,2,ch114st};
+
+/* char: 0x73 */
+
+static const SFG_StrokeVertex ch115st0[] =
+{
+ {78.5715,52.381},
+ {73.8095,61.9048},
+ {59.5238,66.6667},
+ {45.2381,66.6667},
+ {30.9524,61.9048},
+ {26.1905,52.381},
+ {30.9524,42.8571},
+ {40.4762,38.0952},
+ {64.2857,33.3333},
+ {73.8095,28.5714},
+ {78.5715,19.0476},
+ {78.5715,14.2857},
+ {73.8095,4.7619},
+ {59.5238,0},
+ {45.2381,0},
+ {30.9524,4.7619},
+ {26.1905,14.2857}
+};
+
+static const SFG_StrokeStrip ch115st[] =
+{
+ {17,ch115st0}
+};
+
+static const SFG_StrokeChar ch115 = {104.762,1,ch115st};
+
+/* char: 0x74 */
+
+static const SFG_StrokeVertex ch116st0[] =
+{
+ {47.6191,100},
+ {47.6191,19.0476},
+ {52.381,4.7619},
+ {61.9048,0},
+ {71.4286,0}
+};
+
+static const SFG_StrokeVertex ch116st1[] =
+{
+ {33.3334,66.6667},
+ {66.6667,66.6667}
+};
+
+static const SFG_StrokeStrip ch116st[] =
+{
+ {5,ch116st0},
+ {2,ch116st1}
+};
+
+static const SFG_StrokeChar ch116 = {104.762,2,ch116st};
+
+/* char: 0x75 */
+
+static const SFG_StrokeVertex ch117st0[] =
+{
+ {26.1905,66.6667},
+ {26.1905,19.0476},
+ {30.9524,4.7619},
+ {40.4762,0},
+ {54.7619,0},
+ {64.2857,4.7619},
+ {78.5715,19.0476}
+};
+
+static const SFG_StrokeVertex ch117st1[] =
+{
+ {78.5715,66.6667},
+ {78.5715,0}
+};
+
+static const SFG_StrokeStrip ch117st[] =
+{
+ {7,ch117st0},
+ {2,ch117st1}
+};
+
+static const SFG_StrokeChar ch117 = {104.762,2,ch117st};
+
+/* char: 0x76 */
+
+static const SFG_StrokeVertex ch118st0[] =
+{
+ {23.8095,66.6667},
+ {52.3809,0}
+};
+
+static const SFG_StrokeVertex ch118st1[] =
+{
+ {80.9524,66.6667},
+ {52.3809,0}
+};
+
+static const SFG_StrokeStrip ch118st[] =
+{
+ {2,ch118st0},
+ {2,ch118st1}
+};
+
+static const SFG_StrokeChar ch118 = {104.762,2,ch118st};
+
+/* char: 0x77 */
+
+static const SFG_StrokeVertex ch119st0[] =
+{
+ {14.2857,66.6667},
+ {33.3333,0}
+};
+
+static const SFG_StrokeVertex ch119st1[] =
+{
+ {52.3809,66.6667},
+ {33.3333,0}
+};
+
+static const SFG_StrokeVertex ch119st2[] =
+{
+ {52.3809,66.6667},
+ {71.4286,0}
+};
+
+static const SFG_StrokeVertex ch119st3[] =
+{
+ {90.4762,66.6667},
+ {71.4286,0}
+};
+
+static const SFG_StrokeStrip ch119st[] =
+{
+ {2,ch119st0},
+ {2,ch119st1},
+ {2,ch119st2},
+ {2,ch119st3}
+};
+
+static const SFG_StrokeChar ch119 = {104.762,4,ch119st};
+
+/* char: 0x78 */
+
+static const SFG_StrokeVertex ch120st0[] =
+{
+ {26.1905,66.6667},
+ {78.5715,0}
+};
+
+static const SFG_StrokeVertex ch120st1[] =
+{
+ {78.5715,66.6667},
+ {26.1905,0}
+};
+
+static const SFG_StrokeStrip ch120st[] =
+{
+ {2,ch120st0},
+ {2,ch120st1}
+};
+
+static const SFG_StrokeChar ch120 = {104.762,2,ch120st};
+
+/* char: 0x79 */
+
+static const SFG_StrokeVertex ch121st0[] =
+{
+ {26.1905,66.6667},
+ {54.7619,0}
+};
+
+static const SFG_StrokeVertex ch121st1[] =
+{
+ {83.3334,66.6667},
+ {54.7619,0},
+ {45.2381,-19.0476},
+ {35.7143,-28.5714},
+ {26.1905,-33.3333},
+ {21.4286,-33.3333}
+};
+
+static const SFG_StrokeStrip ch121st[] =
+{
+ {2,ch121st0},
+ {6,ch121st1}
+};
+
+static const SFG_StrokeChar ch121 = {104.762,2,ch121st};
+
+/* char: 0x7a */
+
+static const SFG_StrokeVertex ch122st0[] =
+{
+ {78.5715,66.6667},
+ {26.1905,0}
+};
+
+static const SFG_StrokeVertex ch122st1[] =
+{
+ {26.1905,66.6667},
+ {78.5715,66.6667}
+};
+
+static const SFG_StrokeVertex ch122st2[] =
+{
+ {26.1905,0},
+ {78.5715,0}
+};
+
+static const SFG_StrokeStrip ch122st[] =
+{
+ {2,ch122st0},
+ {2,ch122st1},
+ {2,ch122st2}
+};
+
+static const SFG_StrokeChar ch122 = {104.762,3,ch122st};
+
+/* char: 0x7b */
+
+static const SFG_StrokeVertex ch123st0[] =
+{
+ {64.2857,119.048},
+ {54.7619,114.286},
+ {50,109.524},
+ {45.2381,100},
+ {45.2381,90.4762},
+ {50,80.9524},
+ {54.7619,76.1905},
+ {59.5238,66.6667},
+ {59.5238,57.1429},
+ {50,47.619}
+};
+
+static const SFG_StrokeVertex ch123st1[] =
+{
+ {54.7619,114.286},
+ {50,104.762},
+ {50,95.2381},
+ {54.7619,85.7143},
+ {59.5238,80.9524},
+ {64.2857,71.4286},
+ {64.2857,61.9048},
+ {59.5238,52.381},
+ {40.4762,42.8571},
+ {59.5238,33.3333},
+ {64.2857,23.8095},
+ {64.2857,14.2857},
+ {59.5238,4.7619},
+ {54.7619,0},
+ {50,-9.5238},
+ {50,-19.0476},
+ {54.7619,-28.5714}
+};
+
+static const SFG_StrokeVertex ch123st2[] =
+{
+ {50,38.0952},
+ {59.5238,28.5714},
+ {59.5238,19.0476},
+ {54.7619,9.5238},
+ {50,4.7619},
+ {45.2381,-4.7619},
+ {45.2381,-14.2857},
+ {50,-23.8095},
+ {54.7619,-28.5714},
+ {64.2857,-33.3333}
+};
+
+static const SFG_StrokeStrip ch123st[] =
+{
+ {10,ch123st0},
+ {17,ch123st1},
+ {10,ch123st2}
+};
+
+static const SFG_StrokeChar ch123 = {104.762,3,ch123st};
+
+/* char: 0x7c */
+
+static const SFG_StrokeVertex ch124st0[] =
+{
+ {52.381,119.048},
+ {52.381,-33.3333}
+};
+
+static const SFG_StrokeStrip ch124st[] =
+{
+ {2,ch124st0}
+};
+
+static const SFG_StrokeChar ch124 = {104.762,1,ch124st};
+
+/* char: 0x7d */
+
+static const SFG_StrokeVertex ch125st0[] =
+{
+ {40.4762,119.048},
+ {50,114.286},
+ {54.7619,109.524},
+ {59.5238,100},
+ {59.5238,90.4762},
+ {54.7619,80.9524},
+ {50,76.1905},
+ {45.2381,66.6667},
+ {45.2381,57.1429},
+ {54.7619,47.619}
+};
+
+static const SFG_StrokeVertex ch125st1[] =
+{
+ {50,114.286},
+ {54.7619,104.762},
+ {54.7619,95.2381},
+ {50,85.7143},
+ {45.2381,80.9524},
+ {40.4762,71.4286},
+ {40.4762,61.9048},
+ {45.2381,52.381},
+ {64.2857,42.8571},
+ {45.2381,33.3333},
+ {40.4762,23.8095},
+ {40.4762,14.2857},
+ {45.2381,4.7619},
+ {50,0},
+ {54.7619,-9.5238},
+ {54.7619,-19.0476},
+ {50,-28.5714}
+};
+
+static const SFG_StrokeVertex ch125st2[] =
+{
+ {54.7619,38.0952},
+ {45.2381,28.5714},
+ {45.2381,19.0476},
+ {50,9.5238},
+ {54.7619,4.7619},
+ {59.5238,-4.7619},
+ {59.5238,-14.2857},
+ {54.7619,-23.8095},
+ {50,-28.5714},
+ {40.4762,-33.3333}
+};
+
+static const SFG_StrokeStrip ch125st[] =
+{
+ {10,ch125st0},
+ {17,ch125st1},
+ {10,ch125st2}
+};
+
+static const SFG_StrokeChar ch125 = {104.762,3,ch125st};
+
+/* char: 0x7e */
+
+static const SFG_StrokeVertex ch126st0[] =
+{
+ {9.5238,28.5714},
+ {9.5238,38.0952},
+ {14.2857,52.381},
+ {23.8095,57.1429},
+ {33.3333,57.1429},
+ {42.8571,52.381},
+ {61.9048,38.0952},
+ {71.4286,33.3333},
+ {80.9524,33.3333},
+ {90.4762,38.0952},
+ {95.2381,47.619}
+};
+
+static const SFG_StrokeVertex ch126st1[] =
+{
+ {9.5238,38.0952},
+ {14.2857,47.619},
+ {23.8095,52.381},
+ {33.3333,52.381},
+ {42.8571,47.619},
+ {61.9048,33.3333},
+ {71.4286,28.5714},
+ {80.9524,28.5714},
+ {90.4762,33.3333},
+ {95.2381,47.619},
+ {95.2381,57.1429}
+};
+
+static const SFG_StrokeStrip ch126st[] =
+{
+ {11,ch126st0},
+ {11,ch126st1}
+};
+
+static const SFG_StrokeChar ch126 = {104.762,2,ch126st};
+
+/* char: 0x7f */
+
+static const SFG_StrokeVertex ch127st0[] =
+{
+ {71.4286,100},
+ {33.3333,-33.3333}
+};
+
+static const SFG_StrokeVertex ch127st1[] =
+{
+ {47.619,66.6667},
+ {33.3333,61.9048},
+ {23.8095,52.381},
+ {19.0476,38.0952},
+ {19.0476,23.8095},
+ {23.8095,14.2857},
+ {33.3333,4.7619},
+ {47.619,0},
+ {57.1428,0},
+ {71.4286,4.7619},
+ {80.9524,14.2857},
+ {85.7143,28.5714},
+ {85.7143,42.8571},
+ {80.9524,52.381},
+ {71.4286,61.9048},
+ {57.1428,66.6667},
+ {47.619,66.6667}
+};
+
+static const SFG_StrokeStrip ch127st[] =
+{
+ {2,ch127st0},
+ {17,ch127st1}
+};
+
+static const SFG_StrokeChar ch127 = {104.762,2,ch127st};
+
+static const SFG_StrokeChar *chars[] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,
+ &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,
+ &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,
+ &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,
+ &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,
+ &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,
+ &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,
+ &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,
+ &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,
+ &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,
+ &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,
+ &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127
+};
+
+const SFG_StrokeFont fgStrokeMonoRoman = {"MonoRoman",128,152.381,chars};
--- /dev/null
+
+/* This file has been automatically generated by the genstroke utility. */
+
+#include "../include/GL/freeglut_internal.h"
+
+/* char: 0x20 */
+
+static const SFG_StrokeStrip ch32st[] =
+{
+};
+
+static const SFG_StrokeChar ch32 = {104.762,0,ch32st};
+
+/* char: 0x21 */
+
+static const SFG_StrokeVertex ch33st0[] =
+{
+ {13.3819,100},
+ {13.3819,33.3333}
+};
+
+static const SFG_StrokeVertex ch33st1[] =
+{
+ {13.3819,9.5238},
+ {8.62,4.7619},
+ {13.3819,0},
+ {18.1438,4.7619},
+ {13.3819,9.5238}
+};
+
+static const SFG_StrokeStrip ch33st[] =
+{
+ {2,ch33st0},
+ {5,ch33st1}
+};
+
+static const SFG_StrokeChar ch33 = {26.6238,2,ch33st};
+
+/* char: 0x22 */
+
+static const SFG_StrokeVertex ch34st0[] =
+{
+ {4.02,100},
+ {4.02,66.6667}
+};
+
+static const SFG_StrokeVertex ch34st1[] =
+{
+ {42.1152,100},
+ {42.1152,66.6667}
+};
+
+static const SFG_StrokeStrip ch34st[] =
+{
+ {2,ch34st0},
+ {2,ch34st1}
+};
+
+static const SFG_StrokeChar ch34 = {51.4352,2,ch34st};
+
+/* char: 0x23 */
+
+static const SFG_StrokeVertex ch35st0[] =
+{
+ {41.2952,119.048},
+ {7.9619,-33.3333}
+};
+
+static const SFG_StrokeVertex ch35st1[] =
+{
+ {69.8667,119.048},
+ {36.5333,-33.3333}
+};
+
+static const SFG_StrokeVertex ch35st2[] =
+{
+ {7.9619,57.1429},
+ {74.6286,57.1429}
+};
+
+static const SFG_StrokeVertex ch35st3[] =
+{
+ {3.2,28.5714},
+ {69.8667,28.5714}
+};
+
+static const SFG_StrokeStrip ch35st[] =
+{
+ {2,ch35st0},
+ {2,ch35st1},
+ {2,ch35st2},
+ {2,ch35st3}
+};
+
+static const SFG_StrokeChar ch35 = {79.4886,4,ch35st};
+
+/* char: 0x24 */
+
+static const SFG_StrokeVertex ch36st0[] =
+{
+ {28.6295,119.048},
+ {28.6295,-19.0476}
+};
+
+static const SFG_StrokeVertex ch36st1[] =
+{
+ {47.6771,119.048},
+ {47.6771,-19.0476}
+};
+
+static const SFG_StrokeVertex ch36st2[] =
+{
+ {71.4867,85.7143},
+ {61.9629,95.2381},
+ {47.6771,100},
+ {28.6295,100},
+ {14.3438,95.2381},
+ {4.82,85.7143},
+ {4.82,76.1905},
+ {9.5819,66.6667},
+ {14.3438,61.9048},
+ {23.8676,57.1429},
+ {52.439,47.619},
+ {61.9629,42.8571},
+ {66.7248,38.0952},
+ {71.4867,28.5714},
+ {71.4867,14.2857},
+ {61.9629,4.7619},
+ {47.6771,0},
+ {28.6295,0},
+ {14.3438,4.7619},
+ {4.82,14.2857}
+};
+
+static const SFG_StrokeStrip ch36st[] =
+{
+ {2,ch36st0},
+ {2,ch36st1},
+ {20,ch36st2}
+};
+
+static const SFG_StrokeChar ch36 = {76.2067,3,ch36st};
+
+/* char: 0x25 */
+
+static const SFG_StrokeVertex ch37st0[] =
+{
+ {92.0743,100},
+ {6.36,0}
+};
+
+static const SFG_StrokeVertex ch37st1[] =
+{
+ {30.1695,100},
+ {39.6933,90.4762},
+ {39.6933,80.9524},
+ {34.9314,71.4286},
+ {25.4076,66.6667},
+ {15.8838,66.6667},
+ {6.36,76.1905},
+ {6.36,85.7143},
+ {11.1219,95.2381},
+ {20.6457,100},
+ {30.1695,100},
+ {39.6933,95.2381},
+ {53.979,90.4762},
+ {68.2648,90.4762},
+ {82.5505,95.2381},
+ {92.0743,100}
+};
+
+static const SFG_StrokeVertex ch37st2[] =
+{
+ {73.0267,33.3333},
+ {63.5029,28.5714},
+ {58.741,19.0476},
+ {58.741,9.5238},
+ {68.2648,0},
+ {77.7886,0},
+ {87.3124,4.7619},
+ {92.0743,14.2857},
+ {92.0743,23.8095},
+ {82.5505,33.3333},
+ {73.0267,33.3333}
+};
+
+static const SFG_StrokeStrip ch37st[] =
+{
+ {2,ch37st0},
+ {16,ch37st1},
+ {11,ch37st2}
+};
+
+static const SFG_StrokeChar ch37 = {96.5743,3,ch37st};
+
+/* char: 0x26 */
+
+static const SFG_StrokeVertex ch38st0[] =
+{
+ {101.218,57.1429},
+ {101.218,61.9048},
+ {96.4562,66.6667},
+ {91.6943,66.6667},
+ {86.9324,61.9048},
+ {82.1705,52.381},
+ {72.6467,28.5714},
+ {63.1229,14.2857},
+ {53.599,4.7619},
+ {44.0752,0},
+ {25.0276,0},
+ {15.5038,4.7619},
+ {10.7419,9.5238},
+ {5.98,19.0476},
+ {5.98,28.5714},
+ {10.7419,38.0952},
+ {15.5038,42.8571},
+ {48.8371,61.9048},
+ {53.599,66.6667},
+ {58.361,76.1905},
+ {58.361,85.7143},
+ {53.599,95.2381},
+ {44.0752,100},
+ {34.5514,95.2381},
+ {29.7895,85.7143},
+ {29.7895,76.1905},
+ {34.5514,61.9048},
+ {44.0752,47.619},
+ {67.8848,14.2857},
+ {77.4086,4.7619},
+ {86.9324,0},
+ {96.4562,0},
+ {101.218,4.7619},
+ {101.218,9.5238}
+};
+
+static const SFG_StrokeStrip ch38st[] =
+{
+ {34,ch38st0}
+};
+
+static const SFG_StrokeChar ch38 = {101.758,1,ch38st};
+
+/* char: 0x27 */
+
+static const SFG_StrokeVertex ch39st0[] =
+{
+ {4.44,100},
+ {4.44,66.6667}
+};
+
+static const SFG_StrokeStrip ch39st[] =
+{
+ {2,ch39st0}
+};
+
+static const SFG_StrokeChar ch39 = {13.62,1,ch39st};
+
+/* char: 0x28 */
+
+static const SFG_StrokeVertex ch40st0[] =
+{
+ {40.9133,119.048},
+ {31.3895,109.524},
+ {21.8657,95.2381},
+ {12.3419,76.1905},
+ {7.58,52.381},
+ {7.58,33.3333},
+ {12.3419,9.5238},
+ {21.8657,-9.5238},
+ {31.3895,-23.8095},
+ {40.9133,-33.3333}
+};
+
+static const SFG_StrokeStrip ch40st[] =
+{
+ {10,ch40st0}
+};
+
+static const SFG_StrokeChar ch40 = {47.1733,1,ch40st};
+
+/* char: 0x29 */
+
+static const SFG_StrokeVertex ch41st0[] =
+{
+ {5.28,119.048},
+ {14.8038,109.524},
+ {24.3276,95.2381},
+ {33.8514,76.1905},
+ {38.6133,52.381},
+ {38.6133,33.3333},
+ {33.8514,9.5238},
+ {24.3276,-9.5238},
+ {14.8038,-23.8095},
+ {5.28,-33.3333}
+};
+
+static const SFG_StrokeStrip ch41st[] =
+{
+ {10,ch41st0}
+};
+
+static const SFG_StrokeChar ch41 = {47.5333,1,ch41st};
+
+/* char: 0x2a */
+
+static const SFG_StrokeVertex ch42st0[] =
+{
+ {30.7695,71.4286},
+ {30.7695,14.2857}
+};
+
+static const SFG_StrokeVertex ch42st1[] =
+{
+ {6.96,57.1429},
+ {54.579,28.5714}
+};
+
+static const SFG_StrokeVertex ch42st2[] =
+{
+ {54.579,57.1429},
+ {6.96,28.5714}
+};
+
+static const SFG_StrokeStrip ch42st[] =
+{
+ {2,ch42st0},
+ {2,ch42st1},
+ {2,ch42st2}
+};
+
+static const SFG_StrokeChar ch42 = {59.439,3,ch42st};
+
+/* char: 0x2b */
+
+static const SFG_StrokeVertex ch43st0[] =
+{
+ {48.8371,85.7143},
+ {48.8371,0}
+};
+
+static const SFG_StrokeVertex ch43st1[] =
+{
+ {5.98,42.8571},
+ {91.6943,42.8571}
+};
+
+static const SFG_StrokeStrip ch43st[] =
+{
+ {2,ch43st0},
+ {2,ch43st1}
+};
+
+static const SFG_StrokeChar ch43 = {97.2543,2,ch43st};
+
+/* char: 0x2c */
+
+static const SFG_StrokeVertex ch44st0[] =
+{
+ {18.2838,4.7619},
+ {13.5219,0},
+ {8.76,4.7619},
+ {13.5219,9.5238},
+ {18.2838,4.7619},
+ {18.2838,-4.7619},
+ {13.5219,-14.2857},
+ {8.76,-19.0476}
+};
+
+static const SFG_StrokeStrip ch44st[] =
+{
+ {8,ch44st0}
+};
+
+static const SFG_StrokeChar ch44 = {26.0638,1,ch44st};
+
+/* char: 0x2d */
+
+static const SFG_StrokeVertex ch45st0[] =
+{
+ {7.38,42.8571},
+ {93.0943,42.8571}
+};
+
+static const SFG_StrokeStrip ch45st[] =
+{
+ {2,ch45st0}
+};
+
+static const SFG_StrokeChar ch45 = {100.754,1,ch45st};
+
+/* char: 0x2e */
+
+static const SFG_StrokeVertex ch46st0[] =
+{
+ {13.1019,9.5238},
+ {8.34,4.7619},
+ {13.1019,0},
+ {17.8638,4.7619},
+ {13.1019,9.5238}
+};
+
+static const SFG_StrokeStrip ch46st[] =
+{
+ {5,ch46st0}
+};
+
+static const SFG_StrokeChar ch46 = {26.4838,1,ch46st};
+
+/* char: 0x2f */
+
+static const SFG_StrokeVertex ch47st0[] =
+{
+ {7.24,-14.2857},
+ {73.9067,100}
+};
+
+static const SFG_StrokeStrip ch47st[] =
+{
+ {2,ch47st0}
+};
+
+static const SFG_StrokeChar ch47 = {82.1067,1,ch47st};
+
+/* char: 0x30 */
+
+static const SFG_StrokeVertex ch48st0[] =
+{
+ {33.5514,100},
+ {19.2657,95.2381},
+ {9.7419,80.9524},
+ {4.98,57.1429},
+ {4.98,42.8571},
+ {9.7419,19.0476},
+ {19.2657,4.7619},
+ {33.5514,0},
+ {43.0752,0},
+ {57.361,4.7619},
+ {66.8848,19.0476},
+ {71.6467,42.8571},
+ {71.6467,57.1429},
+ {66.8848,80.9524},
+ {57.361,95.2381},
+ {43.0752,100},
+ {33.5514,100}
+};
+
+static const SFG_StrokeStrip ch48st[] =
+{
+ {17,ch48st0}
+};
+
+static const SFG_StrokeChar ch48 = {77.0667,1,ch48st};
+
+/* char: 0x31 */
+
+static const SFG_StrokeVertex ch49st0[] =
+{
+ {11.82,80.9524},
+ {21.3438,85.7143},
+ {35.6295,100},
+ {35.6295,0}
+};
+
+static const SFG_StrokeStrip ch49st[] =
+{
+ {4,ch49st0}
+};
+
+static const SFG_StrokeChar ch49 = {66.5295,1,ch49st};
+
+/* char: 0x32 */
+
+static const SFG_StrokeVertex ch50st0[] =
+{
+ {10.1819,76.1905},
+ {10.1819,80.9524},
+ {14.9438,90.4762},
+ {19.7057,95.2381},
+ {29.2295,100},
+ {48.2771,100},
+ {57.801,95.2381},
+ {62.5629,90.4762},
+ {67.3248,80.9524},
+ {67.3248,71.4286},
+ {62.5629,61.9048},
+ {53.039,47.619},
+ {5.42,0},
+ {72.0867,0}
+};
+
+static const SFG_StrokeStrip ch50st[] =
+{
+ {14,ch50st0}
+};
+
+static const SFG_StrokeChar ch50 = {77.6467,1,ch50st};
+
+/* char: 0x33 */
+
+static const SFG_StrokeVertex ch51st0[] =
+{
+ {14.5238,100},
+ {66.9048,100},
+ {38.3333,61.9048},
+ {52.619,61.9048},
+ {62.1429,57.1429},
+ {66.9048,52.381},
+ {71.6667,38.0952},
+ {71.6667,28.5714},
+ {66.9048,14.2857},
+ {57.381,4.7619},
+ {43.0952,0},
+ {28.8095,0},
+ {14.5238,4.7619},
+ {9.7619,9.5238},
+ {5,19.0476}
+};
+
+static const SFG_StrokeStrip ch51st[] =
+{
+ {15,ch51st0}
+};
+
+static const SFG_StrokeChar ch51 = {77.0467,1,ch51st};
+
+/* char: 0x34 */
+
+static const SFG_StrokeVertex ch52st0[] =
+{
+ {51.499,100},
+ {3.88,33.3333},
+ {75.3086,33.3333}
+};
+
+static const SFG_StrokeVertex ch52st1[] =
+{
+ {51.499,100},
+ {51.499,0}
+};
+
+static const SFG_StrokeStrip ch52st[] =
+{
+ {3,ch52st0},
+ {2,ch52st1}
+};
+
+static const SFG_StrokeChar ch52 = {80.1686,2,ch52st};
+
+/* char: 0x35 */
+
+static const SFG_StrokeVertex ch53st0[] =
+{
+ {62.0029,100},
+ {14.3838,100},
+ {9.6219,57.1429},
+ {14.3838,61.9048},
+ {28.6695,66.6667},
+ {42.9552,66.6667},
+ {57.241,61.9048},
+ {66.7648,52.381},
+ {71.5267,38.0952},
+ {71.5267,28.5714},
+ {66.7648,14.2857},
+ {57.241,4.7619},
+ {42.9552,0},
+ {28.6695,0},
+ {14.3838,4.7619},
+ {9.6219,9.5238},
+ {4.86,19.0476}
+};
+
+static const SFG_StrokeStrip ch53st[] =
+{
+ {17,ch53st0}
+};
+
+static const SFG_StrokeChar ch53 = {77.6867,1,ch53st};
+
+/* char: 0x36 */
+
+static const SFG_StrokeVertex ch54st0[] =
+{
+ {62.7229,85.7143},
+ {57.961,95.2381},
+ {43.6752,100},
+ {34.1514,100},
+ {19.8657,95.2381},
+ {10.3419,80.9524},
+ {5.58,57.1429},
+ {5.58,33.3333},
+ {10.3419,14.2857},
+ {19.8657,4.7619},
+ {34.1514,0},
+ {38.9133,0},
+ {53.199,4.7619},
+ {62.7229,14.2857},
+ {67.4848,28.5714},
+ {67.4848,33.3333},
+ {62.7229,47.619},
+ {53.199,57.1429},
+ {38.9133,61.9048},
+ {34.1514,61.9048},
+ {19.8657,57.1429},
+ {10.3419,47.619},
+ {5.58,33.3333}
+};
+
+static const SFG_StrokeStrip ch54st[] =
+{
+ {23,ch54st0}
+};
+
+static const SFG_StrokeChar ch54 = {73.8048,1,ch54st};
+
+/* char: 0x37 */
+
+static const SFG_StrokeVertex ch55st0[] =
+{
+ {72.2267,100},
+ {24.6076,0}
+};
+
+static const SFG_StrokeVertex ch55st1[] =
+{
+ {5.56,100},
+ {72.2267,100}
+};
+
+static const SFG_StrokeStrip ch55st[] =
+{
+ {2,ch55st0},
+ {2,ch55st1}
+};
+
+static const SFG_StrokeChar ch55 = {77.2267,2,ch55st};
+
+/* char: 0x38 */
+
+static const SFG_StrokeVertex ch56st0[] =
+{
+ {29.4095,100},
+ {15.1238,95.2381},
+ {10.3619,85.7143},
+ {10.3619,76.1905},
+ {15.1238,66.6667},
+ {24.6476,61.9048},
+ {43.6952,57.1429},
+ {57.981,52.381},
+ {67.5048,42.8571},
+ {72.2667,33.3333},
+ {72.2667,19.0476},
+ {67.5048,9.5238},
+ {62.7429,4.7619},
+ {48.4571,0},
+ {29.4095,0},
+ {15.1238,4.7619},
+ {10.3619,9.5238},
+ {5.6,19.0476},
+ {5.6,33.3333},
+ {10.3619,42.8571},
+ {19.8857,52.381},
+ {34.1714,57.1429},
+ {53.219,61.9048},
+ {62.7429,66.6667},
+ {67.5048,76.1905},
+ {67.5048,85.7143},
+ {62.7429,95.2381},
+ {48.4571,100},
+ {29.4095,100}
+};
+
+static const SFG_StrokeStrip ch56st[] =
+{
+ {29,ch56st0}
+};
+
+static const SFG_StrokeChar ch56 = {77.6667,1,ch56st};
+
+/* char: 0x39 */
+
+static const SFG_StrokeVertex ch57st0[] =
+{
+ {68.5048,66.6667},
+ {63.7429,52.381},
+ {54.219,42.8571},
+ {39.9333,38.0952},
+ {35.1714,38.0952},
+ {20.8857,42.8571},
+ {11.3619,52.381},
+ {6.6,66.6667},
+ {6.6,71.4286},
+ {11.3619,85.7143},
+ {20.8857,95.2381},
+ {35.1714,100},
+ {39.9333,100},
+ {54.219,95.2381},
+ {63.7429,85.7143},
+ {68.5048,66.6667},
+ {68.5048,42.8571},
+ {63.7429,19.0476},
+ {54.219,4.7619},
+ {39.9333,0},
+ {30.4095,0},
+ {16.1238,4.7619},
+ {11.3619,14.2857}
+};
+
+static const SFG_StrokeStrip ch57st[] =
+{
+ {23,ch57st0}
+};
+
+static const SFG_StrokeChar ch57 = {74.0648,1,ch57st};
+
+/* char: 0x3a */
+
+static const SFG_StrokeVertex ch58st0[] =
+{
+ {14.0819,66.6667},
+ {9.32,61.9048},
+ {14.0819,57.1429},
+ {18.8438,61.9048},
+ {14.0819,66.6667}
+};
+
+static const SFG_StrokeVertex ch58st1[] =
+{
+ {14.0819,9.5238},
+ {9.32,4.7619},
+ {14.0819,0},
+ {18.8438,4.7619},
+ {14.0819,9.5238}
+};
+
+static const SFG_StrokeStrip ch58st[] =
+{
+ {5,ch58st0},
+ {5,ch58st1}
+};
+
+static const SFG_StrokeChar ch58 = {26.2238,2,ch58st};
+
+/* char: 0x3b */
+
+static const SFG_StrokeVertex ch59st0[] =
+{
+ {12.9619,66.6667},
+ {8.2,61.9048},
+ {12.9619,57.1429},
+ {17.7238,61.9048},
+ {12.9619,66.6667}
+};
+
+static const SFG_StrokeVertex ch59st1[] =
+{
+ {17.7238,4.7619},
+ {12.9619,0},
+ {8.2,4.7619},
+ {12.9619,9.5238},
+ {17.7238,4.7619},
+ {17.7238,-4.7619},
+ {12.9619,-14.2857},
+ {8.2,-19.0476}
+};
+
+static const SFG_StrokeStrip ch59st[] =
+{
+ {5,ch59st0},
+ {8,ch59st1}
+};
+
+static const SFG_StrokeChar ch59 = {26.3038,2,ch59st};
+
+/* char: 0x3c */
+
+static const SFG_StrokeVertex ch60st0[] =
+{
+ {79.2505,85.7143},
+ {3.06,42.8571},
+ {79.2505,0}
+};
+
+static const SFG_StrokeStrip ch60st[] =
+{
+ {3,ch60st0}
+};
+
+static const SFG_StrokeChar ch60 = {81.6105,1,ch60st};
+
+/* char: 0x3d */
+
+static const SFG_StrokeVertex ch61st0[] =
+{
+ {5.7,57.1429},
+ {91.4143,57.1429}
+};
+
+static const SFG_StrokeVertex ch61st1[] =
+{
+ {5.7,28.5714},
+ {91.4143,28.5714}
+};
+
+static const SFG_StrokeStrip ch61st[] =
+{
+ {2,ch61st0},
+ {2,ch61st1}
+};
+
+static const SFG_StrokeChar ch61 = {97.2543,2,ch61st};
+
+/* char: 0x3e */
+
+static const SFG_StrokeVertex ch62st0[] =
+{
+ {2.78,85.7143},
+ {78.9705,42.8571},
+ {2.78,0}
+};
+
+static const SFG_StrokeStrip ch62st[] =
+{
+ {3,ch62st0}
+};
+
+static const SFG_StrokeChar ch62 = {81.6105,1,ch62st};
+
+/* char: 0x3f */
+
+static const SFG_StrokeVertex ch63st0[] =
+{
+ {8.42,76.1905},
+ {8.42,80.9524},
+ {13.1819,90.4762},
+ {17.9438,95.2381},
+ {27.4676,100},
+ {46.5152,100},
+ {56.039,95.2381},
+ {60.801,90.4762},
+ {65.5629,80.9524},
+ {65.5629,71.4286},
+ {60.801,61.9048},
+ {56.039,57.1429},
+ {36.9914,47.619},
+ {36.9914,33.3333}
+};
+
+static const SFG_StrokeVertex ch63st1[] =
+{
+ {36.9914,9.5238},
+ {32.2295,4.7619},
+ {36.9914,0},
+ {41.7533,4.7619},
+ {36.9914,9.5238}
+};
+
+static const SFG_StrokeStrip ch63st[] =
+{
+ {14,ch63st0},
+ {5,ch63st1}
+};
+
+static const SFG_StrokeChar ch63 = {73.9029,2,ch63st};
+
+/* char: 0x40 */
+
+static const SFG_StrokeVertex ch64st0[] =
+{
+ {49.2171,52.381},
+ {39.6933,57.1429},
+ {30.1695,57.1429},
+ {25.4076,47.619},
+ {25.4076,42.8571},
+ {30.1695,33.3333},
+ {39.6933,33.3333},
+ {49.2171,38.0952}
+};
+
+static const SFG_StrokeVertex ch64st1[] =
+{
+ {49.2171,57.1429},
+ {49.2171,38.0952},
+ {53.979,33.3333},
+ {63.5029,33.3333},
+ {68.2648,42.8571},
+ {68.2648,47.619},
+ {63.5029,61.9048},
+ {53.979,71.4286},
+ {39.6933,76.1905},
+ {34.9314,76.1905},
+ {20.6457,71.4286},
+ {11.1219,61.9048},
+ {6.36,47.619},
+ {6.36,42.8571},
+ {11.1219,28.5714},
+ {20.6457,19.0476},
+ {34.9314,14.2857},
+ {39.6933,14.2857},
+ {53.979,19.0476}
+};
+
+static const SFG_StrokeStrip ch64st[] =
+{
+ {8,ch64st0},
+ {19,ch64st1}
+};
+
+static const SFG_StrokeChar ch64 = {74.3648,2,ch64st};
+
+/* char: 0x41 */
+
+static const SFG_StrokeVertex ch65st0[] =
+{
+ {40.5952,100},
+ {2.5,0}
+};
+
+static const SFG_StrokeVertex ch65st1[] =
+{
+ {40.5952,100},
+ {78.6905,0}
+};
+
+static const SFG_StrokeVertex ch65st2[] =
+{
+ {16.7857,33.3333},
+ {64.4048,33.3333}
+};
+
+static const SFG_StrokeStrip ch65st[] =
+{
+ {2,ch65st0},
+ {2,ch65st1},
+ {2,ch65st2}
+};
+
+static const SFG_StrokeChar ch65 = {80.4905,3,ch65st};
+
+/* char: 0x42 */
+
+static const SFG_StrokeVertex ch66st0[] =
+{
+ {11.42,100},
+ {11.42,0}
+};
+
+static const SFG_StrokeVertex ch66st1[] =
+{
+ {11.42,100},
+ {54.2771,100},
+ {68.5629,95.2381},
+ {73.3248,90.4762},
+ {78.0867,80.9524},
+ {78.0867,71.4286},
+ {73.3248,61.9048},
+ {68.5629,57.1429},
+ {54.2771,52.381}
+};
+
+static const SFG_StrokeVertex ch66st2[] =
+{
+ {11.42,52.381},
+ {54.2771,52.381},
+ {68.5629,47.619},
+ {73.3248,42.8571},
+ {78.0867,33.3333},
+ {78.0867,19.0476},
+ {73.3248,9.5238},
+ {68.5629,4.7619},
+ {54.2771,0},
+ {11.42,0}
+};
+
+static const SFG_StrokeStrip ch66st[] =
+{
+ {2,ch66st0},
+ {9,ch66st1},
+ {10,ch66st2}
+};
+
+static const SFG_StrokeChar ch66 = {83.6267,3,ch66st};
+
+/* char: 0x43 */
+
+static const SFG_StrokeVertex ch67st0[] =
+{
+ {78.0886,76.1905},
+ {73.3267,85.7143},
+ {63.8029,95.2381},
+ {54.279,100},
+ {35.2314,100},
+ {25.7076,95.2381},
+ {16.1838,85.7143},
+ {11.4219,76.1905},
+ {6.66,61.9048},
+ {6.66,38.0952},
+ {11.4219,23.8095},
+ {16.1838,14.2857},
+ {25.7076,4.7619},
+ {35.2314,0},
+ {54.279,0},
+ {63.8029,4.7619},
+ {73.3267,14.2857},
+ {78.0886,23.8095}
+};
+
+static const SFG_StrokeStrip ch67st[] =
+{
+ {18,ch67st0}
+};
+
+static const SFG_StrokeChar ch67 = {84.4886,1,ch67st};
+
+/* char: 0x44 */
+
+static const SFG_StrokeVertex ch68st0[] =
+{
+ {11.96,100},
+ {11.96,0}
+};
+
+static const SFG_StrokeVertex ch68st1[] =
+{
+ {11.96,100},
+ {45.2933,100},
+ {59.579,95.2381},
+ {69.1029,85.7143},
+ {73.8648,76.1905},
+ {78.6267,61.9048},
+ {78.6267,38.0952},
+ {73.8648,23.8095},
+ {69.1029,14.2857},
+ {59.579,4.7619},
+ {45.2933,0},
+ {11.96,0}
+};
+
+static const SFG_StrokeStrip ch68st[] =
+{
+ {2,ch68st0},
+ {12,ch68st1}
+};
+
+static const SFG_StrokeChar ch68 = {85.2867,2,ch68st};
+
+/* char: 0x45 */
+
+static const SFG_StrokeVertex ch69st0[] =
+{
+ {11.42,100},
+ {11.42,0}
+};
+
+static const SFG_StrokeVertex ch69st1[] =
+{
+ {11.42,100},
+ {73.3248,100}
+};
+
+static const SFG_StrokeVertex ch69st2[] =
+{
+ {11.42,52.381},
+ {49.5152,52.381}
+};
+
+static const SFG_StrokeVertex ch69st3[] =
+{
+ {11.42,0},
+ {73.3248,0}
+};
+
+static const SFG_StrokeStrip ch69st[] =
+{
+ {2,ch69st0},
+ {2,ch69st1},
+ {2,ch69st2},
+ {2,ch69st3}
+};
+
+static const SFG_StrokeChar ch69 = {78.1848,4,ch69st};
+
+/* char: 0x46 */
+
+static const SFG_StrokeVertex ch70st0[] =
+{
+ {11.42,100},
+ {11.42,0}
+};
+
+static const SFG_StrokeVertex ch70st1[] =
+{
+ {11.42,100},
+ {73.3248,100}
+};
+
+static const SFG_StrokeVertex ch70st2[] =
+{
+ {11.42,52.381},
+ {49.5152,52.381}
+};
+
+static const SFG_StrokeStrip ch70st[] =
+{
+ {2,ch70st0},
+ {2,ch70st1},
+ {2,ch70st2}
+};
+
+static const SFG_StrokeChar ch70 = {78.7448,3,ch70st};
+
+/* char: 0x47 */
+
+static const SFG_StrokeVertex ch71st0[] =
+{
+ {78.4886,76.1905},
+ {73.7267,85.7143},
+ {64.2029,95.2381},
+ {54.679,100},
+ {35.6314,100},
+ {26.1076,95.2381},
+ {16.5838,85.7143},
+ {11.8219,76.1905},
+ {7.06,61.9048},
+ {7.06,38.0952},
+ {11.8219,23.8095},
+ {16.5838,14.2857},
+ {26.1076,4.7619},
+ {35.6314,0},
+ {54.679,0},
+ {64.2029,4.7619},
+ {73.7267,14.2857},
+ {78.4886,23.8095},
+ {78.4886,38.0952}
+};
+
+static const SFG_StrokeVertex ch71st1[] =
+{
+ {54.679,38.0952},
+ {78.4886,38.0952}
+};
+
+static const SFG_StrokeStrip ch71st[] =
+{
+ {19,ch71st0},
+ {2,ch71st1}
+};
+
+static const SFG_StrokeChar ch71 = {89.7686,2,ch71st};
+
+/* char: 0x48 */
+
+static const SFG_StrokeVertex ch72st0[] =
+{
+ {11.42,100},
+ {11.42,0}
+};
+
+static const SFG_StrokeVertex ch72st1[] =
+{
+ {78.0867,100},
+ {78.0867,0}
+};
+
+static const SFG_StrokeVertex ch72st2[] =
+{
+ {11.42,52.381},
+ {78.0867,52.381}
+};
+
+static const SFG_StrokeStrip ch72st[] =
+{
+ {2,ch72st0},
+ {2,ch72st1},
+ {2,ch72st2}
+};
+
+static const SFG_StrokeChar ch72 = {89.0867,3,ch72st};
+
+/* char: 0x49 */
+
+static const SFG_StrokeVertex ch73st0[] =
+{
+ {10.86,100},
+ {10.86,0}
+};
+
+static const SFG_StrokeStrip ch73st[] =
+{
+ {2,ch73st0}
+};
+
+static const SFG_StrokeChar ch73 = {21.3,1,ch73st};
+
+/* char: 0x4a */
+
+static const SFG_StrokeVertex ch74st0[] =
+{
+ {50.119,100},
+ {50.119,23.8095},
+ {45.3571,9.5238},
+ {40.5952,4.7619},
+ {31.0714,0},
+ {21.5476,0},
+ {12.0238,4.7619},
+ {7.2619,9.5238},
+ {2.5,23.8095},
+ {2.5,33.3333}
+};
+
+static const SFG_StrokeStrip ch74st[] =
+{
+ {10,ch74st0}
+};
+
+static const SFG_StrokeChar ch74 = {59.999,1,ch74st};
+
+/* char: 0x4b */
+
+static const SFG_StrokeVertex ch75st0[] =
+{
+ {11.28,100},
+ {11.28,0}
+};
+
+static const SFG_StrokeVertex ch75st1[] =
+{
+ {77.9467,100},
+ {11.28,33.3333}
+};
+
+static const SFG_StrokeVertex ch75st2[] =
+{
+ {35.0895,57.1429},
+ {77.9467,0}
+};
+
+static const SFG_StrokeStrip ch75st[] =
+{
+ {2,ch75st0},
+ {2,ch75st1},
+ {2,ch75st2}
+};
+
+static const SFG_StrokeChar ch75 = {79.3267,3,ch75st};
+
+/* char: 0x4c */
+
+static const SFG_StrokeVertex ch76st0[] =
+{
+ {11.68,100},
+ {11.68,0}
+};
+
+static const SFG_StrokeVertex ch76st1[] =
+{
+ {11.68,0},
+ {68.8229,0}
+};
+
+static const SFG_StrokeStrip ch76st[] =
+{
+ {2,ch76st0},
+ {2,ch76st1}
+};
+
+static const SFG_StrokeChar ch76 = {71.3229,2,ch76st};
+
+/* char: 0x4d */
+
+static const SFG_StrokeVertex ch77st0[] =
+{
+ {10.86,100},
+ {10.86,0}
+};
+
+static const SFG_StrokeVertex ch77st1[] =
+{
+ {10.86,100},
+ {48.9552,0}
+};
+
+static const SFG_StrokeVertex ch77st2[] =
+{
+ {87.0505,100},
+ {48.9552,0}
+};
+
+static const SFG_StrokeVertex ch77st3[] =
+{
+ {87.0505,100},
+ {87.0505,0}
+};
+
+static const SFG_StrokeStrip ch77st[] =
+{
+ {2,ch77st0},
+ {2,ch77st1},
+ {2,ch77st2},
+ {2,ch77st3}
+};
+
+static const SFG_StrokeChar ch77 = {97.2105,4,ch77st};
+
+/* char: 0x4e */
+
+static const SFG_StrokeVertex ch78st0[] =
+{
+ {11.14,100},
+ {11.14,0}
+};
+
+static const SFG_StrokeVertex ch78st1[] =
+{
+ {11.14,100},
+ {77.8067,0}
+};
+
+static const SFG_StrokeVertex ch78st2[] =
+{
+ {77.8067,100},
+ {77.8067,0}
+};
+
+static const SFG_StrokeStrip ch78st[] =
+{
+ {2,ch78st0},
+ {2,ch78st1},
+ {2,ch78st2}
+};
+
+static const SFG_StrokeChar ch78 = {88.8067,3,ch78st};
+
+/* char: 0x4f */
+
+static const SFG_StrokeVertex ch79st0[] =
+{
+ {34.8114,100},
+ {25.2876,95.2381},
+ {15.7638,85.7143},
+ {11.0019,76.1905},
+ {6.24,61.9048},
+ {6.24,38.0952},
+ {11.0019,23.8095},
+ {15.7638,14.2857},
+ {25.2876,4.7619},
+ {34.8114,0},
+ {53.859,0},
+ {63.3829,4.7619},
+ {72.9067,14.2857},
+ {77.6686,23.8095},
+ {82.4305,38.0952},
+ {82.4305,61.9048},
+ {77.6686,76.1905},
+ {72.9067,85.7143},
+ {63.3829,95.2381},
+ {53.859,100},
+ {34.8114,100}
+};
+
+static const SFG_StrokeStrip ch79st[] =
+{
+ {21,ch79st0}
+};
+
+static const SFG_StrokeChar ch79 = {88.8305,1,ch79st};
+
+/* char: 0x50 */
+
+static const SFG_StrokeVertex ch80st0[] =
+{
+ {12.1,100},
+ {12.1,0}
+};
+
+static const SFG_StrokeVertex ch80st1[] =
+{
+ {12.1,100},
+ {54.9571,100},
+ {69.2429,95.2381},
+ {74.0048,90.4762},
+ {78.7667,80.9524},
+ {78.7667,66.6667},
+ {74.0048,57.1429},
+ {69.2429,52.381},
+ {54.9571,47.619},
+ {12.1,47.619}
+};
+
+static const SFG_StrokeStrip ch80st[] =
+{
+ {2,ch80st0},
+ {10,ch80st1}
+};
+
+static const SFG_StrokeChar ch80 = {85.6667,2,ch80st};
+
+/* char: 0x51 */
+
+static const SFG_StrokeVertex ch81st0[] =
+{
+ {33.8714,100},
+ {24.3476,95.2381},
+ {14.8238,85.7143},
+ {10.0619,76.1905},
+ {5.3,61.9048},
+ {5.3,38.0952},
+ {10.0619,23.8095},
+ {14.8238,14.2857},
+ {24.3476,4.7619},
+ {33.8714,0},
+ {52.919,0},
+ {62.4429,4.7619},
+ {71.9667,14.2857},
+ {76.7286,23.8095},
+ {81.4905,38.0952},
+ {81.4905,61.9048},
+ {76.7286,76.1905},
+ {71.9667,85.7143},
+ {62.4429,95.2381},
+ {52.919,100},
+ {33.8714,100}
+};
+
+static const SFG_StrokeVertex ch81st1[] =
+{
+ {48.1571,19.0476},
+ {76.7286,-9.5238}
+};
+
+static const SFG_StrokeStrip ch81st[] =
+{
+ {21,ch81st0},
+ {2,ch81st1}
+};
+
+static const SFG_StrokeChar ch81 = {88.0905,2,ch81st};
+
+/* char: 0x52 */
+
+static const SFG_StrokeVertex ch82st0[] =
+{
+ {11.68,100},
+ {11.68,0}
+};
+
+static const SFG_StrokeVertex ch82st1[] =
+{
+ {11.68,100},
+ {54.5371,100},
+ {68.8229,95.2381},
+ {73.5848,90.4762},
+ {78.3467,80.9524},
+ {78.3467,71.4286},
+ {73.5848,61.9048},
+ {68.8229,57.1429},
+ {54.5371,52.381},
+ {11.68,52.381}
+};
+
+static const SFG_StrokeVertex ch82st2[] =
+{
+ {45.0133,52.381},
+ {78.3467,0}
+};
+
+static const SFG_StrokeStrip ch82st[] =
+{
+ {2,ch82st0},
+ {10,ch82st1},
+ {2,ch82st2}
+};
+
+static const SFG_StrokeChar ch82 = {82.3667,3,ch82st};
+
+/* char: 0x53 */
+
+static const SFG_StrokeVertex ch83st0[] =
+{
+ {74.6667,85.7143},
+ {65.1429,95.2381},
+ {50.8571,100},
+ {31.8095,100},
+ {17.5238,95.2381},
+ {8,85.7143},
+ {8,76.1905},
+ {12.7619,66.6667},
+ {17.5238,61.9048},
+ {27.0476,57.1429},
+ {55.619,47.619},
+ {65.1429,42.8571},
+ {69.9048,38.0952},
+ {74.6667,28.5714},
+ {74.6667,14.2857},
+ {65.1429,4.7619},
+ {50.8571,0},
+ {31.8095,0},
+ {17.5238,4.7619},
+ {8,14.2857}
+};
+
+static const SFG_StrokeStrip ch83st[] =
+{
+ {20,ch83st0}
+};
+
+static const SFG_StrokeChar ch83 = {80.8267,1,ch83st};
+
+/* char: 0x54 */
+
+static const SFG_StrokeVertex ch84st0[] =
+{
+ {35.6933,100},
+ {35.6933,0}
+};
+
+static const SFG_StrokeVertex ch84st1[] =
+{
+ {2.36,100},
+ {69.0267,100}
+};
+
+static const SFG_StrokeStrip ch84st[] =
+{
+ {2,ch84st0},
+ {2,ch84st1}
+};
+
+static const SFG_StrokeChar ch84 = {71.9467,2,ch84st};
+
+/* char: 0x55 */
+
+static const SFG_StrokeVertex ch85st0[] =
+{
+ {11.54,100},
+ {11.54,28.5714},
+ {16.3019,14.2857},
+ {25.8257,4.7619},
+ {40.1114,0},
+ {49.6352,0},
+ {63.921,4.7619},
+ {73.4448,14.2857},
+ {78.2067,28.5714},
+ {78.2067,100}
+};
+
+static const SFG_StrokeStrip ch85st[] =
+{
+ {10,ch85st0}
+};
+
+static const SFG_StrokeChar ch85 = {89.4867,1,ch85st};
+
+/* char: 0x56 */
+
+static const SFG_StrokeVertex ch86st0[] =
+{
+ {2.36,100},
+ {40.4552,0}
+};
+
+static const SFG_StrokeVertex ch86st1[] =
+{
+ {78.5505,100},
+ {40.4552,0}
+};
+
+static const SFG_StrokeStrip ch86st[] =
+{
+ {2,ch86st0},
+ {2,ch86st1}
+};
+
+static const SFG_StrokeChar ch86 = {81.6105,2,ch86st};
+
+/* char: 0x57 */
+
+static const SFG_StrokeVertex ch87st0[] =
+{
+ {2.22,100},
+ {26.0295,0}
+};
+
+static const SFG_StrokeVertex ch87st1[] =
+{
+ {49.839,100},
+ {26.0295,0}
+};
+
+static const SFG_StrokeVertex ch87st2[] =
+{
+ {49.839,100},
+ {73.6486,0}
+};
+
+static const SFG_StrokeVertex ch87st3[] =
+{
+ {97.4581,100},
+ {73.6486,0}
+};
+
+static const SFG_StrokeStrip ch87st[] =
+{
+ {2,ch87st0},
+ {2,ch87st1},
+ {2,ch87st2},
+ {2,ch87st3}
+};
+
+static const SFG_StrokeChar ch87 = {100.518,4,ch87st};
+
+/* char: 0x58 */
+
+static const SFG_StrokeVertex ch88st0[] =
+{
+ {2.5,100},
+ {69.1667,0}
+};
+
+static const SFG_StrokeVertex ch88st1[] =
+{
+ {69.1667,100},
+ {2.5,0}
+};
+
+static const SFG_StrokeStrip ch88st[] =
+{
+ {2,ch88st0},
+ {2,ch88st1}
+};
+
+static const SFG_StrokeChar ch88 = {72.3667,2,ch88st};
+
+/* char: 0x59 */
+
+static const SFG_StrokeVertex ch89st0[] =
+{
+ {1.52,100},
+ {39.6152,52.381},
+ {39.6152,0}
+};
+
+static const SFG_StrokeVertex ch89st1[] =
+{
+ {77.7105,100},
+ {39.6152,52.381}
+};
+
+static const SFG_StrokeStrip ch89st[] =
+{
+ {3,ch89st0},
+ {2,ch89st1}
+};
+
+static const SFG_StrokeChar ch89 = {79.6505,2,ch89st};
+
+/* char: 0x5a */
+
+static const SFG_StrokeVertex ch90st0[] =
+{
+ {69.1667,100},
+ {2.5,0}
+};
+
+static const SFG_StrokeVertex ch90st1[] =
+{
+ {2.5,100},
+ {69.1667,100}
+};
+
+static const SFG_StrokeVertex ch90st2[] =
+{
+ {2.5,0},
+ {69.1667,0}
+};
+
+static const SFG_StrokeStrip ch90st[] =
+{
+ {2,ch90st0},
+ {2,ch90st1},
+ {2,ch90st2}
+};
+
+static const SFG_StrokeChar ch90 = {73.7467,3,ch90st};
+
+/* char: 0x5b */
+
+static const SFG_StrokeVertex ch91st0[] =
+{
+ {7.78,119.048},
+ {7.78,-33.3333}
+};
+
+static const SFG_StrokeVertex ch91st1[] =
+{
+ {12.5419,119.048},
+ {12.5419,-33.3333}
+};
+
+static const SFG_StrokeVertex ch91st2[] =
+{
+ {7.78,119.048},
+ {41.1133,119.048}
+};
+
+static const SFG_StrokeVertex ch91st3[] =
+{
+ {7.78,-33.3333},
+ {41.1133,-33.3333}
+};
+
+static const SFG_StrokeStrip ch91st[] =
+{
+ {2,ch91st0},
+ {2,ch91st1},
+ {2,ch91st2},
+ {2,ch91st3}
+};
+
+static const SFG_StrokeChar ch91 = {46.1133,4,ch91st};
+
+/* char: 0x5c */
+
+static const SFG_StrokeVertex ch92st0[] =
+{
+ {5.84,100},
+ {72.5067,-14.2857}
+};
+
+static const SFG_StrokeStrip ch92st[] =
+{
+ {2,ch92st0}
+};
+
+static const SFG_StrokeChar ch92 = {78.2067,1,ch92st};
+
+/* char: 0x5d */
+
+static const SFG_StrokeVertex ch93st0[] =
+{
+ {33.0114,119.048},
+ {33.0114,-33.3333}
+};
+
+static const SFG_StrokeVertex ch93st1[] =
+{
+ {37.7733,119.048},
+ {37.7733,-33.3333}
+};
+
+static const SFG_StrokeVertex ch93st2[] =
+{
+ {4.44,119.048},
+ {37.7733,119.048}
+};
+
+static const SFG_StrokeVertex ch93st3[] =
+{
+ {4.44,-33.3333},
+ {37.7733,-33.3333}
+};
+
+static const SFG_StrokeStrip ch93st[] =
+{
+ {2,ch93st0},
+ {2,ch93st1},
+ {2,ch93st2},
+ {2,ch93st3}
+};
+
+static const SFG_StrokeChar ch93 = {46.3933,4,ch93st};
+
+/* char: 0x5e */
+
+static const SFG_StrokeVertex ch94st0[] =
+{
+ {44.0752,109.524},
+ {5.98,42.8571}
+};
+
+static const SFG_StrokeVertex ch94st1[] =
+{
+ {44.0752,109.524},
+ {82.1705,42.8571}
+};
+
+static const SFG_StrokeStrip ch94st[] =
+{
+ {2,ch94st0},
+ {2,ch94st1}
+};
+
+static const SFG_StrokeChar ch94 = {90.2305,2,ch94st};
+
+/* char: 0x5f */
+
+static const SFG_StrokeVertex ch95st0[] =
+{
+ {-1.1,-33.3333},
+ {103.662,-33.3333},
+ {103.662,-28.5714},
+ {-1.1,-28.5714},
+ {-1.1,-33.3333}
+};
+
+static const SFG_StrokeStrip ch95st[] =
+{
+ {5,ch95st0}
+};
+
+static const SFG_StrokeChar ch95 = {104.062,1,ch95st};
+
+/* char: 0x60 */
+
+static const SFG_StrokeVertex ch96st0[] =
+{
+ {33.0219,100},
+ {56.8314,71.4286}
+};
+
+static const SFG_StrokeVertex ch96st1[] =
+{
+ {33.0219,100},
+ {28.26,95.2381},
+ {56.8314,71.4286}
+};
+
+static const SFG_StrokeStrip ch96st[] =
+{
+ {2,ch96st0},
+ {3,ch96st1}
+};
+
+static const SFG_StrokeChar ch96 = {83.5714,2,ch96st};
+
+/* char: 0x61 */
+
+static const SFG_StrokeVertex ch97st0[] =
+{
+ {63.8229,66.6667},
+ {63.8229,0}
+};
+
+static const SFG_StrokeVertex ch97st1[] =
+{
+ {63.8229,52.381},
+ {54.299,61.9048},
+ {44.7752,66.6667},
+ {30.4895,66.6667},
+ {20.9657,61.9048},
+ {11.4419,52.381},
+ {6.68,38.0952},
+ {6.68,28.5714},
+ {11.4419,14.2857},
+ {20.9657,4.7619},
+ {30.4895,0},
+ {44.7752,0},
+ {54.299,4.7619},
+ {63.8229,14.2857}
+};
+
+static const SFG_StrokeStrip ch97st[] =
+{
+ {2,ch97st0},
+ {14,ch97st1}
+};
+
+static const SFG_StrokeChar ch97 = {66.6029,2,ch97st};
+
+/* char: 0x62 */
+
+static const SFG_StrokeVertex ch98st0[] =
+{
+ {8.76,100},
+ {8.76,0}
+};
+
+static const SFG_StrokeVertex ch98st1[] =
+{
+ {8.76,52.381},
+ {18.2838,61.9048},
+ {27.8076,66.6667},
+ {42.0933,66.6667},
+ {51.6171,61.9048},
+ {61.141,52.381},
+ {65.9029,38.0952},
+ {65.9029,28.5714},
+ {61.141,14.2857},
+ {51.6171,4.7619},
+ {42.0933,0},
+ {27.8076,0},
+ {18.2838,4.7619},
+ {8.76,14.2857}
+};
+
+static const SFG_StrokeStrip ch98st[] =
+{
+ {2,ch98st0},
+ {14,ch98st1}
+};
+
+static const SFG_StrokeChar ch98 = {70.4629,2,ch98st};
+
+/* char: 0x63 */
+
+static const SFG_StrokeVertex ch99st0[] =
+{
+ {62.6629,52.381},
+ {53.139,61.9048},
+ {43.6152,66.6667},
+ {29.3295,66.6667},
+ {19.8057,61.9048},
+ {10.2819,52.381},
+ {5.52,38.0952},
+ {5.52,28.5714},
+ {10.2819,14.2857},
+ {19.8057,4.7619},
+ {29.3295,0},
+ {43.6152,0},
+ {53.139,4.7619},
+ {62.6629,14.2857}
+};
+
+static const SFG_StrokeStrip ch99st[] =
+{
+ {14,ch99st0}
+};
+
+static const SFG_StrokeChar ch99 = {68.9229,1,ch99st};
+
+/* char: 0x64 */
+
+static const SFG_StrokeVertex ch100st0[] =
+{
+ {61.7829,100},
+ {61.7829,0}
+};
+
+static const SFG_StrokeVertex ch100st1[] =
+{
+ {61.7829,52.381},
+ {52.259,61.9048},
+ {42.7352,66.6667},
+ {28.4495,66.6667},
+ {18.9257,61.9048},
+ {9.4019,52.381},
+ {4.64,38.0952},
+ {4.64,28.5714},
+ {9.4019,14.2857},
+ {18.9257,4.7619},
+ {28.4495,0},
+ {42.7352,0},
+ {52.259,4.7619},
+ {61.7829,14.2857}
+};
+
+static const SFG_StrokeStrip ch100st[] =
+{
+ {2,ch100st0},
+ {14,ch100st1}
+};
+
+static const SFG_StrokeChar ch100 = {70.2629,2,ch100st};
+
+/* char: 0x65 */
+
+static const SFG_StrokeVertex ch101st0[] =
+{
+ {5.72,38.0952},
+ {62.8629,38.0952},
+ {62.8629,47.619},
+ {58.101,57.1429},
+ {53.339,61.9048},
+ {43.8152,66.6667},
+ {29.5295,66.6667},
+ {20.0057,61.9048},
+ {10.4819,52.381},
+ {5.72,38.0952},
+ {5.72,28.5714},
+ {10.4819,14.2857},
+ {20.0057,4.7619},
+ {29.5295,0},
+ {43.8152,0},
+ {53.339,4.7619},
+ {62.8629,14.2857}
+};
+
+static const SFG_StrokeStrip ch101st[] =
+{
+ {17,ch101st0}
+};
+
+static const SFG_StrokeChar ch101 = {68.5229,1,ch101st};
+
+/* char: 0x66 */
+
+static const SFG_StrokeVertex ch102st0[] =
+{
+ {38.7752,100},
+ {29.2514,100},
+ {19.7276,95.2381},
+ {14.9657,80.9524},
+ {14.9657,0}
+};
+
+static const SFG_StrokeVertex ch102st1[] =
+{
+ {0.68,66.6667},
+ {34.0133,66.6667}
+};
+
+static const SFG_StrokeStrip ch102st[] =
+{
+ {5,ch102st0},
+ {2,ch102st1}
+};
+
+static const SFG_StrokeChar ch102 = {38.6552,2,ch102st};
+
+/* char: 0x67 */
+
+static const SFG_StrokeVertex ch103st0[] =
+{
+ {62.5029,66.6667},
+ {62.5029,-9.5238},
+ {57.741,-23.8095},
+ {52.979,-28.5714},
+ {43.4552,-33.3333},
+ {29.1695,-33.3333},
+ {19.6457,-28.5714}
+};
+
+static const SFG_StrokeVertex ch103st1[] =
+{
+ {62.5029,52.381},
+ {52.979,61.9048},
+ {43.4552,66.6667},
+ {29.1695,66.6667},
+ {19.6457,61.9048},
+ {10.1219,52.381},
+ {5.36,38.0952},
+ {5.36,28.5714},
+ {10.1219,14.2857},
+ {19.6457,4.7619},
+ {29.1695,0},
+ {43.4552,0},
+ {52.979,4.7619},
+ {62.5029,14.2857}
+};
+
+static const SFG_StrokeStrip ch103st[] =
+{
+ {7,ch103st0},
+ {14,ch103st1}
+};
+
+static const SFG_StrokeChar ch103 = {70.9829,2,ch103st};
+
+/* char: 0x68 */
+
+static const SFG_StrokeVertex ch104st0[] =
+{
+ {9.6,100},
+ {9.6,0}
+};
+
+static const SFG_StrokeVertex ch104st1[] =
+{
+ {9.6,47.619},
+ {23.8857,61.9048},
+ {33.4095,66.6667},
+ {47.6952,66.6667},
+ {57.219,61.9048},
+ {61.981,47.619},
+ {61.981,0}
+};
+
+static const SFG_StrokeStrip ch104st[] =
+{
+ {2,ch104st0},
+ {7,ch104st1}
+};
+
+static const SFG_StrokeChar ch104 = {71.021,2,ch104st};
+
+/* char: 0x69 */
+
+static const SFG_StrokeVertex ch105st0[] =
+{
+ {10.02,100},
+ {14.7819,95.2381},
+ {19.5438,100},
+ {14.7819,104.762},
+ {10.02,100}
+};
+
+static const SFG_StrokeVertex ch105st1[] =
+{
+ {14.7819,66.6667},
+ {14.7819,0}
+};
+
+static const SFG_StrokeStrip ch105st[] =
+{
+ {5,ch105st0},
+ {2,ch105st1}
+};
+
+static const SFG_StrokeChar ch105 = {28.8638,2,ch105st};
+
+/* char: 0x6a */
+
+static const SFG_StrokeVertex ch106st0[] =
+{
+ {17.3876,100},
+ {22.1495,95.2381},
+ {26.9114,100},
+ {22.1495,104.762},
+ {17.3876,100}
+};
+
+static const SFG_StrokeVertex ch106st1[] =
+{
+ {22.1495,66.6667},
+ {22.1495,-14.2857},
+ {17.3876,-28.5714},
+ {7.8638,-33.3333},
+ {-1.66,-33.3333}
+};
+
+static const SFG_StrokeStrip ch106st[] =
+{
+ {5,ch106st0},
+ {5,ch106st1}
+};
+
+static const SFG_StrokeChar ch106 = {36.2314,2,ch106st};
+
+/* char: 0x6b */
+
+static const SFG_StrokeVertex ch107st0[] =
+{
+ {9.6,100},
+ {9.6,0}
+};
+
+static const SFG_StrokeVertex ch107st1[] =
+{
+ {57.219,66.6667},
+ {9.6,19.0476}
+};
+
+static const SFG_StrokeVertex ch107st2[] =
+{
+ {28.6476,38.0952},
+ {61.981,0}
+};
+
+static const SFG_StrokeStrip ch107st[] =
+{
+ {2,ch107st0},
+ {2,ch107st1},
+ {2,ch107st2}
+};
+
+static const SFG_StrokeChar ch107 = {62.521,3,ch107st};
+
+/* char: 0x6c */
+
+static const SFG_StrokeVertex ch108st0[] =
+{
+ {10.02,100},
+ {10.02,0}
+};
+
+static const SFG_StrokeStrip ch108st[] =
+{
+ {2,ch108st0}
+};
+
+static const SFG_StrokeChar ch108 = {19.34,1,ch108st};
+
+/* char: 0x6d */
+
+static const SFG_StrokeVertex ch109st0[] =
+{
+ {9.6,66.6667},
+ {9.6,0}
+};
+
+static const SFG_StrokeVertex ch109st1[] =
+{
+ {9.6,47.619},
+ {23.8857,61.9048},
+ {33.4095,66.6667},
+ {47.6952,66.6667},
+ {57.219,61.9048},
+ {61.981,47.619},
+ {61.981,0}
+};
+
+static const SFG_StrokeVertex ch109st2[] =
+{
+ {61.981,47.619},
+ {76.2667,61.9048},
+ {85.7905,66.6667},
+ {100.076,66.6667},
+ {109.6,61.9048},
+ {114.362,47.619},
+ {114.362,0}
+};
+
+static const SFG_StrokeStrip ch109st[] =
+{
+ {2,ch109st0},
+ {7,ch109st1},
+ {7,ch109st2}
+};
+
+static const SFG_StrokeChar ch109 = {123.962,3,ch109st};
+
+/* char: 0x6e */
+
+static const SFG_StrokeVertex ch110st0[] =
+{
+ {9.18,66.6667},
+ {9.18,0}
+};
+
+static const SFG_StrokeVertex ch110st1[] =
+{
+ {9.18,47.619},
+ {23.4657,61.9048},
+ {32.9895,66.6667},
+ {47.2752,66.6667},
+ {56.799,61.9048},
+ {61.561,47.619},
+ {61.561,0}
+};
+
+static const SFG_StrokeStrip ch110st[] =
+{
+ {2,ch110st0},
+ {7,ch110st1}
+};
+
+static const SFG_StrokeChar ch110 = {70.881,2,ch110st};
+
+/* char: 0x6f */
+
+static const SFG_StrokeVertex ch111st0[] =
+{
+ {28.7895,66.6667},
+ {19.2657,61.9048},
+ {9.7419,52.381},
+ {4.98,38.0952},
+ {4.98,28.5714},
+ {9.7419,14.2857},
+ {19.2657,4.7619},
+ {28.7895,0},
+ {43.0752,0},
+ {52.599,4.7619},
+ {62.1229,14.2857},
+ {66.8848,28.5714},
+ {66.8848,38.0952},
+ {62.1229,52.381},
+ {52.599,61.9048},
+ {43.0752,66.6667},
+ {28.7895,66.6667}
+};
+
+static const SFG_StrokeStrip ch111st[] =
+{
+ {17,ch111st0}
+};
+
+static const SFG_StrokeChar ch111 = {71.7448,1,ch111st};
+
+/* char: 0x70 */
+
+static const SFG_StrokeVertex ch112st0[] =
+{
+ {9.46,66.6667},
+ {9.46,-33.3333}
+};
+
+static const SFG_StrokeVertex ch112st1[] =
+{
+ {9.46,52.381},
+ {18.9838,61.9048},
+ {28.5076,66.6667},
+ {42.7933,66.6667},
+ {52.3171,61.9048},
+ {61.841,52.381},
+ {66.6029,38.0952},
+ {66.6029,28.5714},
+ {61.841,14.2857},
+ {52.3171,4.7619},
+ {42.7933,0},
+ {28.5076,0},
+ {18.9838,4.7619},
+ {9.46,14.2857}
+};
+
+static const SFG_StrokeStrip ch112st[] =
+{
+ {2,ch112st0},
+ {14,ch112st1}
+};
+
+static const SFG_StrokeChar ch112 = {70.8029,2,ch112st};
+
+/* char: 0x71 */
+
+static const SFG_StrokeVertex ch113st0[] =
+{
+ {61.9829,66.6667},
+ {61.9829,-33.3333}
+};
+
+static const SFG_StrokeVertex ch113st1[] =
+{
+ {61.9829,52.381},
+ {52.459,61.9048},
+ {42.9352,66.6667},
+ {28.6495,66.6667},
+ {19.1257,61.9048},
+ {9.6019,52.381},
+ {4.84,38.0952},
+ {4.84,28.5714},
+ {9.6019,14.2857},
+ {19.1257,4.7619},
+ {28.6495,0},
+ {42.9352,0},
+ {52.459,4.7619},
+ {61.9829,14.2857}
+};
+
+static const SFG_StrokeStrip ch113st[] =
+{
+ {2,ch113st0},
+ {14,ch113st1}
+};
+
+static const SFG_StrokeChar ch113 = {70.7429,2,ch113st};
+
+/* char: 0x72 */
+
+static const SFG_StrokeVertex ch114st0[] =
+{
+ {9.46,66.6667},
+ {9.46,0}
+};
+
+static const SFG_StrokeVertex ch114st1[] =
+{
+ {9.46,38.0952},
+ {14.2219,52.381},
+ {23.7457,61.9048},
+ {33.2695,66.6667},
+ {47.5552,66.6667}
+};
+
+static const SFG_StrokeStrip ch114st[] =
+{
+ {2,ch114st0},
+ {5,ch114st1}
+};
+
+static const SFG_StrokeChar ch114 = {49.4952,2,ch114st};
+
+/* char: 0x73 */
+
+static const SFG_StrokeVertex ch115st0[] =
+{
+ {57.081,52.381},
+ {52.319,61.9048},
+ {38.0333,66.6667},
+ {23.7476,66.6667},
+ {9.4619,61.9048},
+ {4.7,52.381},
+ {9.4619,42.8571},
+ {18.9857,38.0952},
+ {42.7952,33.3333},
+ {52.319,28.5714},
+ {57.081,19.0476},
+ {57.081,14.2857},
+ {52.319,4.7619},
+ {38.0333,0},
+ {23.7476,0},
+ {9.4619,4.7619},
+ {4.7,14.2857}
+};
+
+static const SFG_StrokeStrip ch115st[] =
+{
+ {17,ch115st0}
+};
+
+static const SFG_StrokeChar ch115 = {62.321,1,ch115st};
+
+/* char: 0x74 */
+
+static const SFG_StrokeVertex ch116st0[] =
+{
+ {14.8257,100},
+ {14.8257,19.0476},
+ {19.5876,4.7619},
+ {29.1114,0},
+ {38.6352,0}
+};
+
+static const SFG_StrokeVertex ch116st1[] =
+{
+ {0.54,66.6667},
+ {33.8733,66.6667}
+};
+
+static const SFG_StrokeStrip ch116st[] =
+{
+ {5,ch116st0},
+ {2,ch116st1}
+};
+
+static const SFG_StrokeChar ch116 = {39.3152,2,ch116st};
+
+/* char: 0x75 */
+
+static const SFG_StrokeVertex ch117st0[] =
+{
+ {9.46,66.6667},
+ {9.46,19.0476},
+ {14.2219,4.7619},
+ {23.7457,0},
+ {38.0314,0},
+ {47.5552,4.7619},
+ {61.841,19.0476}
+};
+
+static const SFG_StrokeVertex ch117st1[] =
+{
+ {61.841,66.6667},
+ {61.841,0}
+};
+
+static const SFG_StrokeStrip ch117st[] =
+{
+ {7,ch117st0},
+ {2,ch117st1}
+};
+
+static const SFG_StrokeChar ch117 = {71.161,2,ch117st};
+
+/* char: 0x76 */
+
+static const SFG_StrokeVertex ch118st0[] =
+{
+ {1.8,66.6667},
+ {30.3714,0}
+};
+
+static const SFG_StrokeVertex ch118st1[] =
+{
+ {58.9429,66.6667},
+ {30.3714,0}
+};
+
+static const SFG_StrokeStrip ch118st[] =
+{
+ {2,ch118st0},
+ {2,ch118st1}
+};
+
+static const SFG_StrokeChar ch118 = {60.6029,2,ch118st};
+
+/* char: 0x77 */
+
+static const SFG_StrokeVertex ch119st0[] =
+{
+ {2.5,66.6667},
+ {21.5476,0}
+};
+
+static const SFG_StrokeVertex ch119st1[] =
+{
+ {40.5952,66.6667},
+ {21.5476,0}
+};
+
+static const SFG_StrokeVertex ch119st2[] =
+{
+ {40.5952,66.6667},
+ {59.6429,0}
+};
+
+static const SFG_StrokeVertex ch119st3[] =
+{
+ {78.6905,66.6667},
+ {59.6429,0}
+};
+
+static const SFG_StrokeStrip ch119st[] =
+{
+ {2,ch119st0},
+ {2,ch119st1},
+ {2,ch119st2},
+ {2,ch119st3}
+};
+
+static const SFG_StrokeChar ch119 = {80.4905,4,ch119st};
+
+/* char: 0x78 */
+
+static const SFG_StrokeVertex ch120st0[] =
+{
+ {1.66,66.6667},
+ {54.041,0}
+};
+
+static const SFG_StrokeVertex ch120st1[] =
+{
+ {54.041,66.6667},
+ {1.66,0}
+};
+
+static const SFG_StrokeStrip ch120st[] =
+{
+ {2,ch120st0},
+ {2,ch120st1}
+};
+
+static const SFG_StrokeChar ch120 = {56.401,2,ch120st};
+
+/* char: 0x79 */
+
+static const SFG_StrokeVertex ch121st0[] =
+{
+ {6.5619,66.6667},
+ {35.1333,0}
+};
+
+static const SFG_StrokeVertex ch121st1[] =
+{
+ {63.7048,66.6667},
+ {35.1333,0},
+ {25.6095,-19.0476},
+ {16.0857,-28.5714},
+ {6.5619,-33.3333},
+ {1.8,-33.3333}
+};
+
+static const SFG_StrokeStrip ch121st[] =
+{
+ {2,ch121st0},
+ {6,ch121st1}
+};
+
+static const SFG_StrokeChar ch121 = {66.0648,2,ch121st};
+
+/* char: 0x7a */
+
+static const SFG_StrokeVertex ch122st0[] =
+{
+ {56.821,66.6667},
+ {4.44,0}
+};
+
+static const SFG_StrokeVertex ch122st1[] =
+{
+ {4.44,66.6667},
+ {56.821,66.6667}
+};
+
+static const SFG_StrokeVertex ch122st2[] =
+{
+ {4.44,0},
+ {56.821,0}
+};
+
+static const SFG_StrokeStrip ch122st[] =
+{
+ {2,ch122st0},
+ {2,ch122st1},
+ {2,ch122st2}
+};
+
+static const SFG_StrokeChar ch122 = {61.821,3,ch122st};
+
+/* char: 0x7b */
+
+static const SFG_StrokeVertex ch123st0[] =
+{
+ {31.1895,119.048},
+ {21.6657,114.286},
+ {16.9038,109.524},
+ {12.1419,100},
+ {12.1419,90.4762},
+ {16.9038,80.9524},
+ {21.6657,76.1905},
+ {26.4276,66.6667},
+ {26.4276,57.1429},
+ {16.9038,47.619}
+};
+
+static const SFG_StrokeVertex ch123st1[] =
+{
+ {21.6657,114.286},
+ {16.9038,104.762},
+ {16.9038,95.2381},
+ {21.6657,85.7143},
+ {26.4276,80.9524},
+ {31.1895,71.4286},
+ {31.1895,61.9048},
+ {26.4276,52.381},
+ {7.38,42.8571},
+ {26.4276,33.3333},
+ {31.1895,23.8095},
+ {31.1895,14.2857},
+ {26.4276,4.7619},
+ {21.6657,0},
+ {16.9038,-9.5238},
+ {16.9038,-19.0476},
+ {21.6657,-28.5714}
+};
+
+static const SFG_StrokeVertex ch123st2[] =
+{
+ {16.9038,38.0952},
+ {26.4276,28.5714},
+ {26.4276,19.0476},
+ {21.6657,9.5238},
+ {16.9038,4.7619},
+ {12.1419,-4.7619},
+ {12.1419,-14.2857},
+ {16.9038,-23.8095},
+ {21.6657,-28.5714},
+ {31.1895,-33.3333}
+};
+
+static const SFG_StrokeStrip ch123st[] =
+{
+ {10,ch123st0},
+ {17,ch123st1},
+ {10,ch123st2}
+};
+
+static const SFG_StrokeChar ch123 = {41.6295,3,ch123st};
+
+/* char: 0x7c */
+
+static const SFG_StrokeVertex ch124st0[] =
+{
+ {11.54,119.048},
+ {11.54,-33.3333}
+};
+
+static const SFG_StrokeStrip ch124st[] =
+{
+ {2,ch124st0}
+};
+
+static const SFG_StrokeChar ch124 = {23.78,1,ch124st};
+
+/* char: 0x7d */
+
+static const SFG_StrokeVertex ch125st0[] =
+{
+ {9.18,119.048},
+ {18.7038,114.286},
+ {23.4657,109.524},
+ {28.2276,100},
+ {28.2276,90.4762},
+ {23.4657,80.9524},
+ {18.7038,76.1905},
+ {13.9419,66.6667},
+ {13.9419,57.1429},
+ {23.4657,47.619}
+};
+
+static const SFG_StrokeVertex ch125st1[] =
+{
+ {18.7038,114.286},
+ {23.4657,104.762},
+ {23.4657,95.2381},
+ {18.7038,85.7143},
+ {13.9419,80.9524},
+ {9.18,71.4286},
+ {9.18,61.9048},
+ {13.9419,52.381},
+ {32.9895,42.8571},
+ {13.9419,33.3333},
+ {9.18,23.8095},
+ {9.18,14.2857},
+ {13.9419,4.7619},
+ {18.7038,0},
+ {23.4657,-9.5238},
+ {23.4657,-19.0476},
+ {18.7038,-28.5714}
+};
+
+static const SFG_StrokeVertex ch125st2[] =
+{
+ {23.4657,38.0952},
+ {13.9419,28.5714},
+ {13.9419,19.0476},
+ {18.7038,9.5238},
+ {23.4657,4.7619},
+ {28.2276,-4.7619},
+ {28.2276,-14.2857},
+ {23.4657,-23.8095},
+ {18.7038,-28.5714},
+ {9.18,-33.3333}
+};
+
+static const SFG_StrokeStrip ch125st[] =
+{
+ {10,ch125st0},
+ {17,ch125st1},
+ {10,ch125st2}
+};
+
+static const SFG_StrokeChar ch125 = {41.4695,3,ch125st};
+
+/* char: 0x7e */
+
+static const SFG_StrokeVertex ch126st0[] =
+{
+ {2.92,28.5714},
+ {2.92,38.0952},
+ {7.6819,52.381},
+ {17.2057,57.1429},
+ {26.7295,57.1429},
+ {36.2533,52.381},
+ {55.301,38.0952},
+ {64.8248,33.3333},
+ {74.3486,33.3333},
+ {83.8724,38.0952},
+ {88.6343,47.619}
+};
+
+static const SFG_StrokeVertex ch126st1[] =
+{
+ {2.92,38.0952},
+ {7.6819,47.619},
+ {17.2057,52.381},
+ {26.7295,52.381},
+ {36.2533,47.619},
+ {55.301,33.3333},
+ {64.8248,28.5714},
+ {74.3486,28.5714},
+ {83.8724,33.3333},
+ {88.6343,47.619},
+ {88.6343,57.1429}
+};
+
+static const SFG_StrokeStrip ch126st[] =
+{
+ {11,ch126st0},
+ {11,ch126st1}
+};
+
+static const SFG_StrokeChar ch126 = {91.2743,2,ch126st};
+
+/* char: 0x7f */
+
+static const SFG_StrokeVertex ch127st0[] =
+{
+ {52.381,100},
+ {14.2857,-33.3333}
+};
+
+static const SFG_StrokeVertex ch127st1[] =
+{
+ {28.5714,66.6667},
+ {14.2857,61.9048},
+ {4.7619,52.381},
+ {0,38.0952},
+ {0,23.8095},
+ {4.7619,14.2857},
+ {14.2857,4.7619},
+ {28.5714,0},
+ {38.0952,0},
+ {52.381,4.7619},
+ {61.9048,14.2857},
+ {66.6667,28.5714},
+ {66.6667,42.8571},
+ {61.9048,52.381},
+ {52.381,61.9048},
+ {38.0952,66.6667},
+ {28.5714,66.6667}
+};
+
+static const SFG_StrokeStrip ch127st[] =
+{
+ {2,ch127st0},
+ {17,ch127st1}
+};
+
+static const SFG_StrokeChar ch127 = {66.6667,2,ch127st};
+
+static const SFG_StrokeChar *chars[] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,
+ &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,
+ &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,
+ &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,
+ &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,
+ &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,
+ &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,
+ &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,
+ &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,
+ &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,
+ &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,
+ &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127
+};
+
+const SFG_StrokeFont fgStrokeRoman = {"Roman",128,152.381,chars};
# Mono-spaced version of Roman Simplex font.
- FONTNAME Roman
+ FONTNAME MonoRoman
TOP 119.0476
BOTTOM -33.3333
NUM_CH 128
--- /dev/null
+%{
+/* $XConsortium: lex.l,v 5.9 95/01/05 19:18:40 kaleb Exp $ */
+/* $XFree86: xc/fonts/PEX/lex.l,v 3.9 1996/10/17 15:10:45 dawes Exp $ */
+
+/*****************************************************************
+
+Copyright (c) 1989,1990, 1991 X Consortium
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+
+Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Sun Microsystems,
+and the X Consortium, not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
+SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+#include <ctype.h>
+#include <math.h>
+#include <stdlib.h>
+
+int string(char *, int), res_words(char *);
+
+%}
+%%
+\'[^']*\' |
+\"[^"]*\" return string(yytext, yyleng);
+#.* ;
+[ ,;\t\n\r]* /* natural dilimters */ ;
+
+[a-zA-Z][a-zA-Z0-9_.]* {
+ int token;
+ if ( (token = res_words(yytext)) )
+ return token;
+ return string(yytext, yyleng);
+ }
+
+[+-]?[0-9]+\.?[0-9]*[eE][+-]?[0-9]+ |
+[+-]?[0-9]+\.[0-9]* |
+\.[0-9]+ {
+ yylval.dval = atof((char *)yytext);
+ return REAL;
+ }
+[+-]?[0-9]+#[0-9]+ {
+ return INTEGER;
+ }
+[+-]?[0-9]+ {
+ yylval.ival = atoi((char *)yytext);
+ return INTEGER;
+ }
+[()] ;
+%%
+
+int res_words(char *str)
+{
+ static struct res_strct {
+ char *word;
+ int token;
+ } res_table[] = {
+ {"BOTTOM", BOTTOM},
+ {"CENTER", CENTER},
+ {"PROPERTIES", PROPERTIES},
+ {"CLOSE", CLOSE},
+ {"FONTNAME", FONTNAME},
+ {"INDEX", INDEX},
+ {"MAGIC", MAGIC},
+ {"OPEN", OPEN},
+ {"RIGHT", RIGHT},
+ {"STROKE", STROKE},
+ {"TOP", TOP},
+ {"VERTICES", VERTICES},
+ {"BEARING", BEARING},
+ {"L_SPACE", L_SPACE},
+ {"WIDTH", WIDTH},
+ {"R_SPACE", R_SPACE},
+ {"NUM_CH", NUM_CH},
+ {0, 0}
+ };
+
+ {
+ register struct res_strct *reserved;
+
+ reserved = res_table;
+
+ do
+ if (!strcmp(str, reserved->word))
+ break;
+ while ((++reserved)->word != 0);
+ return reserved->token;
+ }
+}
+
+int string(char *str, int n)
+{
+ if (*str == '\"' || *str == '\'')
+ {
+ str++;
+ n -= 2; /* one for EOL, one for end quote */
+ }
+ if ((yylval.cval = (char *)malloc(n + 1)) != NULL)
+ {
+ strncpy(yylval.cval, str, n);
+ yylval.cval[n] = '\0';
+ return STRING;
+ }
+ else
+ return 0;
+}
--- /dev/null
+%{
+/* $XConsortium: to_wfont.y /main/9 1996/06/11 07:38:48 kaleb $ */
+/* $XFree86: xc/fonts/PEX/to_wfont.y,v 3.6.2.1 1998/12/22 11:23:04 hohndel Exp $ */
+
+/*****************************************************************
+
+Copyright (c) 1989,1990, 1991 X Consortium
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+
+Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Sun Microsystems,
+and the X Consortium, not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
+SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+
+#define YYMAXDEPTH 10000
+#define YY_NO_UNPUT
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <malloc.h>
+#include <string.h>
+#ifndef L_SET
+#define L_SET SEEK_SET
+#endif
+#include "wfont.h"
+
+typedef struct {
+ float std_left, /* NCGA standard left spacing */
+ std_wide, /* character width */
+ std_rght; /* Right spacing */
+} Standard;
+
+
+char fname[80];
+Dispatch *Table; /* dispatch table */
+Standard *sp_table; /* NCGA font spacings */
+Path *strokes; /* strokes of each character */
+Property *property; /* property list */
+
+struct {
+ int path, point, props;
+} count, expect;
+
+Path_subpath *current_path;
+
+Font_header head; /* font header */
+int tableindex; /* which character */
+int yyerrno; /* error number */
+
+int yylex(void);
+
+void yyerror(char *);
+void set_num_ch(int);
+void init_properties(int);
+void check_num_props(void);
+void add_property(char *, char *);
+void check_num_ch(void);
+void wf_header(char *, float, float);
+void glyph_header(int, float, float, int);
+void std_space(float, float, float);
+void init_path(int, int);
+void add_point(float, float);
+void fini(void);
+void freeall(void);
+void check_nstroke(void);
+void check_npts(void);
+
+%}
+
+%union {
+ int nil; /* void is reserved */
+ int ival;
+ float dval;
+ char *cval;
+}
+
+%start font
+
+%token <dval> REAL
+%token <ival> INTEGER
+%token <cval> STRING
+
+%token <nil> BOTTOM
+%token <nil> CENTER
+%token <nil> CLOSE
+%token <nil> FONTNAME
+%token <nil> PROPERTIES
+%token <nil> NUM_CH
+%token <nil> INDEX
+%token <nil> L_SPACE
+%token <nil> MAGIC
+%token <nil> OPEN
+%token <nil> RIGHT
+%token <nil> R_SPACE
+%token <nil> STROKE
+%token <nil> TOP
+%token <nil> VERTICES
+%token <nil> BEARING
+%token <nil> WIDTH
+
+%type <cval> fontname
+%type <dval> top bottom center right
+%type <ival> nstroke nvertice n_pts index num_ch
+%type <ival> closeflag
+%type <ival> counter
+%type <dval> sp_left wide sp_right
+
+%%
+
+font : fontheader num_ch fontprops fontbody spacing { fini(); }|
+ fontheader fontbody { fini(); };
+
+fontheader : fontname top bottom
+ { wf_header($1, $2, $3); };
+
+fontname : FONTNAME STRING
+ { $$ = $2; };
+
+top : TOP REAL { $$ = $2;};
+
+bottom : BOTTOM REAL { $$ = $2;};
+
+num_ch: NUM_CH INTEGER { set_num_ch($2);};
+
+fontprops : /* empty */ | properties;
+
+properties : PROPERTIES INTEGER { init_properties ($2); } property_list
+ { check_num_props (); }
+
+property_list : /* empty */ | single_property property_list
+
+single_property : STRING STRING { add_property($1, $2); };
+
+fontbody : /* empty */
+ | glyph fontbody;
+
+glyph : glyph_header strokes
+ { check_nstroke(); };
+
+glyph_header : index { tableindex = $1; } sym_headinfo;
+
+sym_headinfo : nstroke center right nvertice
+ { glyph_header($1, $2, $3, $4); };
+
+index : INDEX INTEGER { check_num_ch(); $$ = $2; };
+
+nstroke : STROKE INTEGER { $$ = $2; expect.path = $2; };
+
+nvertice: {$$ = 0;} | VERTICES INTEGER { $$ = $2; } ;
+
+center : CENTER REAL{ $$ = $2; };
+
+right : RIGHT REAL{ $$ = $2; };
+
+strokes : /* empty */ | path strokes;
+
+path : closeflag n_pts { init_path($1, $2); } points
+ { check_npts(); }
+
+points : /* empty */ | coord points;
+
+closeflag : CLOSE { $$ = $1 == CLOSE; } | OPEN { $$ = $1 == CLOSE; } ;
+
+n_pts : INTEGER { $$ = $1; };
+
+coord : REAL REAL { add_point($1, $2); };
+
+spacing : /* empty */
+ | item spacing;
+
+item : counter {tableindex = $1;} sp_left wide sp_right
+ { std_space($3, $4, $5); };
+
+counter : BEARING INTEGER {$$ = $2;};
+
+sp_left: L_SPACE REAL {$$ = $2;};
+
+wide : WIDTH REAL {$$ = $2;};
+
+sp_right: R_SPACE REAL {$$ = $2;};
+
+%%
+
+#define BYE(err) yyerrno = (err), yyerror(NULL)
+
+#define ERR_BASE 1000
+#define OPEN_ERROR 1001
+#define WRITE_ERROR 1002
+#define WRONG_NAME 1003
+#define NO_MEMORY 1004
+#define EXCEED_PATH 1005
+#define EXCEED_POINT 1006
+#define PATH_MISMATCH 1007
+#define POINT_MISMATCH 1008
+#define PROP_MISMATCH 1009
+#define EXCEED_PROPS 1010
+
+#include "lex.c"
+
+char *prog;
+
+int main(int argc, char **argv)
+{
+ /* Usage : genstroke [-o outfile] [infile] */
+ char *s;
+
+ fname[0] = 0;
+ tableindex = 0;
+ head.num_ch = -1;
+
+ prog = *argv;
+ while (--argc > 0 && *++argv != NULL)
+ {
+ s = *argv;
+ if (*s++ == '-')
+ {
+ switch (*s)
+ {
+ case 'o':
+ if (*++argv != NULL)
+ {
+ --argc;
+ (void) strcpy(fname, *argv);
+ }
+ break;
+ default: /* ignore other options */
+ ;
+ }
+ }
+ else
+ {
+ int fd;
+
+ /* standard input redirection */
+ fd = open(*argv, O_RDONLY);
+ if (fd > 0)
+ {
+ if (close(fileno(stdin)) < 0)
+ {
+ perror(prog);
+ return (1);
+ }
+ if (dup(fd) < 0)
+ {
+ perror(prog);
+ return (1);
+ }
+ close(fd);
+ }
+ }
+ }
+ return (yyparse());
+}
+
+/* set number of characters */
+void set_num_ch(int num_ch)
+{
+ yyerrno = 0;
+ head.num_ch = num_ch;
+ if (num_ch > 0)
+ {
+ Table = (Dispatch *) malloc(num_ch * sizeof(Dispatch));
+ sp_table = (Standard *) malloc(num_ch * sizeof(Standard));
+ strokes = (Path *) malloc(num_ch * sizeof(Path));
+ }
+
+ for (tableindex = 0; tableindex < num_ch; tableindex++)
+ {
+ Table[tableindex].center = 0.0;
+ Table[tableindex].right = 0.0;
+ Table[tableindex].offset = 0;
+
+ sp_table[tableindex].std_left = 0.0;
+ sp_table[tableindex].std_wide = 0.0;
+ sp_table[tableindex].std_rght = 0.0;
+
+ strokes[tableindex].n_subpaths = 0;
+ strokes[tableindex].n_vertices = 0;
+ strokes[tableindex].subpaths = NULL;
+ }
+}
+
+/* initialize the property info in the header */
+void init_properties(int num_props)
+{
+ if (num_props > 0)
+ {
+ head.properties = malloc(num_props * sizeof(Property));
+ head.num_props = expect.props = num_props;
+ }
+ else
+ {
+ head.properties = NULL;
+ head.num_props = expect.props = 0;
+ }
+ count.props = -1;
+ property = head.properties; /* initialize the list pointer */
+}
+
+void check_num_props(void)
+{
+ count.props++;
+ if (count.props != expect.props)
+ BYE (PROP_MISMATCH);
+}
+
+/* add individual property info into the buffer */
+void add_property(char *name, char *value)
+{
+ /* check if the property exceeds allocated space */
+
+ if (++count.props >= head.num_props)
+ BYE(EXCEED_PROPS);
+
+ /* copy the strings into the buffer */
+
+ (void) strcpy(property->propname, name);
+ (void) strcpy(property->propvalue, value);
+
+ /* increment the property pointer */
+
+ property++;
+}
+
+void check_num_ch(void)
+{
+ if (head.num_ch == -1)
+ set_num_ch(128);
+}
+
+void yyerror(char *str)
+{
+# define ERR_SIZE (sizeof(err_string) / sizeof(char *))
+ static char *err_string[] = {
+ "Cannot open file",
+ "Write fails",
+ "Illegal font name",
+ "Memory allocation failure",
+ "Specified number of strokes exceeded",
+ "Specified number of points exceeded",
+ "Number of strokes do not match",
+ "Number of points do not match",
+ "Number of properties do not match",
+ "Specified number of properties exceeded",
+ 0};
+
+ if (str == NULL)
+ {
+ yyerrno -= ERR_BASE;
+ if (yyerrno > 0 && yyerrno < ERR_SIZE)
+ str = err_string[yyerrno-1];
+ else
+ str = "Syntax error";
+ }
+ fprintf(stderr, "%s.\n", str);
+ freeall();
+ (void) unlink(fname);
+ exit(1);
+}
+
+/* create wfont header */
+void wf_header(char *name, float top, float bottom)
+{
+ if (name == NULL)
+ BYE(WRONG_NAME);
+ head.top = top;
+ head.bottom = bottom;
+ head.magic = WFONT_MAGIC_PEX;
+ (void) strcpy(head.name, name);
+ free(name);
+}
+
+/* create header for each glyph */
+void glyph_header(int npath, float center, float right, int npts)
+{
+ {
+ register Path *strk = strokes + tableindex;
+
+ if (npath > 0) /* Don't allocate space unless the character
+ has strokes associated with it. */
+ {
+ strk->subpaths = malloc(npath * sizeof(Path_subpath));
+
+ if (strk->subpaths == NULL)
+ BYE(NO_MEMORY);
+
+ strk->type = PATH_2DF;
+ strk->n_subpaths = npath;
+ strk->n_vertices = npts;
+ }
+ else /* Just initialize the entry */
+ {
+ strk->subpaths = NULL;
+ strk->type = PATH_2DF;
+ strk->n_subpaths = 0;
+ strk->n_vertices = 0;
+ }
+ }
+ {
+ register Dispatch *tbl = Table + tableindex;
+
+ tbl->offset = 0;
+ tbl->center = center;
+ tbl->right = right;
+ }
+ count.path = -1; /* initialize path counter, not to
+ * exceed n_subpath */
+}
+
+/* create standard spacing info for each glyph */
+void std_space(float l_bear, float wide, float r_bear)
+{
+ register Standard *tbl = sp_table + tableindex;
+ tbl->std_left = l_bear;
+ tbl->std_wide = wide;
+ tbl->std_rght = r_bear;
+}
+
+/* initialize each sub_path */
+void init_path(int close, int n)
+{
+ register Path_subpath *path;
+
+ if (++count.path >= strokes[tableindex].n_subpaths)
+ BYE(EXCEED_PATH);
+ path = current_path = strokes[tableindex].subpaths + count.path;
+ path->n_pts = n;
+ path->closed = close;
+ if (n > 0)
+ path->pts.pt2df = malloc(n * sizeof(Path_point2df));
+ if (path->pts.pt2df == NULL)
+ BYE(NO_MEMORY);
+ expect.point = path->n_pts;
+ count.point = -1; /* initialize point counter, not to
+ * exceed n_pts */
+}
+
+/* accumulating points for each sub_path */
+void add_point(float x, float y)
+{
+ register Path_subpath *path;
+ register Path_point2df *pt_ptr;
+
+ path = current_path;
+ if (++count.point >= path->n_pts)
+ BYE(EXCEED_POINT);
+ pt_ptr = path->pts.pt2df + count.point;
+ pt_ptr->x = x;
+ pt_ptr->y = y;
+}
+
+/* Path_type + n_subpaths + n_vertices */
+#define STROKE_HEAD (sizeof(Path_type) + sizeof(int) + sizeof(int))
+
+/* write out file, close everything, free everything */
+void fini(void)
+{
+ /* pointers used to walk the arrays */
+ register Path_subpath *spath;
+ register Dispatch *tbl_ptr;
+ register Path *strptr;
+
+ FILE *fp;
+ int npath;
+ register int i, j, k;
+ Standard *sp_ptr;
+ Path_point2df *pt;
+
+ if (fname[0] == 0) /* default output file name */
+ {
+ (void) strcpy(fname, head.name);
+ (void) strcat(fname, ".c");
+ }
+
+ if ((fp = fopen(fname, "w")) == NULL)
+ BYE(OPEN_ERROR);
+
+ fprintf(fp, "\n/* This file has been automatically generated by the genstroke utility. */\n");
+ fprintf(fp, "\n#include \"../include/GL/freeglut_internal.h\"\n");
+
+# define BY_BYE(err) fclose(fp), BYE(err)
+
+ /* adjust the characters for spacing, note max char width */
+ head.max_width = 0.0;
+ for (i = 0, tbl_ptr = Table, strptr = strokes, sp_ptr = sp_table;
+ i < head.num_ch; i++, tbl_ptr++, strptr++, sp_ptr++)
+ {
+ tbl_ptr->center += sp_ptr->std_left;
+ tbl_ptr->right += sp_ptr->std_left + sp_ptr->std_rght;
+ if (tbl_ptr->right > head.max_width)
+ head.max_width = tbl_ptr->right;
+ npath = strptr->n_subpaths;
+ if (npath > 0 || tbl_ptr->center != 0.0 ||
+ tbl_ptr->right != 0.0)
+ {
+ for (j = 0, spath = strptr->subpaths;
+ j < npath; j++, spath++)
+ {
+ for(k=0, pt = spath->pts.pt2df;
+ k<spath->n_pts; k++, pt++)
+ {
+ pt->x += sp_ptr->std_left;
+ }
+ }
+ }
+ }
+
+ /* write the stroke table */
+ for (i = 0, tbl_ptr = Table, strptr = strokes;
+ i < head.num_ch; i++, tbl_ptr++, strptr++)
+ {
+ npath = strptr->n_subpaths;
+
+ if (npath > 0 || tbl_ptr->center != 0.0 ||
+ tbl_ptr->right != 0.0)
+ {
+ fprintf(fp, "\n/* char: 0x%x */\n", i);
+
+ for (j = 0, spath = strptr->subpaths;
+ j < npath; j++, spath++)
+ {
+ fprintf(fp, "\nstatic const SFG_StrokeVertex ch%ust%u[] =\n{\n", i, j);
+ for(k = 0; k < spath->n_pts; k++)
+ {
+ fprintf(fp, " {%g,%g}%s\n",
+ spath->pts.pt2df[k].x,
+ spath->pts.pt2df[k].y,
+ k+1 < spath->n_pts ? "," : "");
+ }
+ fprintf(fp, "};\n");
+ }
+
+ fprintf(fp, "\nstatic const SFG_StrokeStrip ch%ust[] =\n{\n", i);
+ for (j = 0, spath = strptr->subpaths;
+ j < npath; j++, spath++)
+ {
+ fprintf(fp, " {%u,ch%ust%u}%s\n",
+ spath->n_pts, i, j,
+ j+1 < npath ? "," : "");
+ }
+ fprintf(fp, "};\n");
+
+ fprintf(fp, "\nstatic const SFG_StrokeChar ch%u = {%g,%u,ch%ust};\n",
+ i, tbl_ptr->right, npath, i);
+ }
+ }
+
+ fprintf(fp, "\nstatic const SFG_StrokeChar *chars[] =\n{\n");
+
+ for (i = 0, tbl_ptr = Table, strptr = strokes;
+ i < head.num_ch; )
+ {
+ for (j = 0; j < 8 && i < head.num_ch;
+ j++, i++, tbl_ptr++, strptr++)
+ {
+ fprintf(fp, " ");
+ npath = strptr->n_subpaths;
+ if (npath > 0 || tbl_ptr->center != 0.0 ||
+ tbl_ptr->right != 0.0)
+ fprintf(fp, "&ch%u", i);
+ else
+ fprintf(fp, "0");
+ if (i+1 < head.num_ch)
+ fprintf(fp, ",");
+ }
+ fprintf(fp, "\n");
+ }
+ fprintf(fp, "};\n");
+
+ fprintf(fp, "\nconst SFG_StrokeFont fgStroke%s = {\"%s\",%d,%g,chars};\n",
+ head.name, head.name, head.num_ch, head.top - head.bottom);
+
+ (void) fclose(fp);
+ freeall();
+# undef BY_BYE
+}
+
+void freeall(void)
+{
+ register Path *path;
+ register Path_subpath *spath;
+ register int i, j, n;
+
+ path = strokes;
+ for (i = 0; i < head.num_ch; i++, path++)
+ {
+ n = path->n_subpaths;
+ if (n <= 0)
+ continue;
+ spath = path->subpaths;
+ for (j = 0; j < n; j++, spath++)
+ if (spath->pts.pt2df != NULL)
+ free((char *) spath->pts.pt2df);
+ if (path->subpaths != NULL)
+ free((char *) path->subpaths);
+ }
+ if (Table)
+ free(Table);
+ if (sp_table)
+ free(sp_table);
+ if (strokes)
+ free(strokes);
+ if (head.properties != NULL)
+ free((char *) head.properties);
+}
+
+void check_nstroke(void)
+{
+ count.path++;
+ if (expect.path != count.path)
+ BYE(PATH_MISMATCH);
+}
+
+void check_npts(void)
+{
+ count.point++;
+ if (expect.point != count.point)
+ BYE(POINT_MISMATCH);
+}
--- /dev/null
+/* $XConsortium: wfont.h,v 5.2 94/04/17 20:10:09 rws Exp $ */
+
+/*****************************************************************
+
+Copyright (c) 1989,1990, 1991 X Consortium
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+
+Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Sun Microsystems,
+and the X Consortium, not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
+SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+
+#ifndef WFONT_INCLUDED
+#define WFONT_INCLUDED
+
+#define WFONT_MAGIC 0x813
+#define WFONT_MAGIC_PLUS 0x715
+#define WFONT_MAGIC_PEX 0x70686e74
+#define START_PROPS 0x100
+#define START_DISPATCH(_num_props) (START_PROPS + 160 * _num_props)
+#define START_PATH(_num_ch_, _num_props) (START_DISPATCH(_num_props) + sizeof(Dispatch) * _num_ch_)
+#define NUM_DISPATCH 128
+
+typedef struct {
+ unsigned short x;
+ unsigned short y;
+} Path_point2dpx;
+
+typedef struct {
+ float x;
+ float y;
+} Path_point2df;
+
+typedef struct {
+ int x;
+ int y;
+ int z;
+} Path_point3di;
+
+typedef struct {
+ float x;
+ float y;
+ float z;
+} Path_point3df;
+
+typedef struct {
+ float x;
+ float y;
+ float z;
+ float w;
+} Path_point4df;
+
+typedef union {
+ Path_point2dpx *pt2dpx;
+ Path_point2df *pt2df;
+ Path_point3di *pt3di;
+ Path_point3df *pt3df;
+ Path_point4df *pt4df;
+} Path_pt_ptr;
+
+typedef enum {
+ PATH_2DF,
+ PATH_2DPX,
+ PATH_3DF,
+ PATH_3DI,
+ PATH_4DF
+} Path_type;
+
+typedef struct {
+ int n_pts; /* number of points in the subpath */
+ Path_pt_ptr pts; /* pointer to them */
+ int closed; /* true if the subpath is closed */
+ int dcmp_flag; /* flag for pgon dcmp, pgon type
+ and dcmped triangle type */
+} Path_subpath;
+
+typedef struct {
+ Path_type type; /* type of vertices in this path */
+ int n_subpaths; /* number of subpaths */
+ int n_vertices; /* total number of vertices */
+ Path_subpath *subpaths; /* array of subpaths */
+} Path;
+
+typedef Path *Path_handle;
+
+typedef struct {
+ char propname[80]; /* font property name */
+ char propvalue[80]; /* font property value */
+}Property;
+
+typedef struct {
+ int magic; /* magic number */
+ char name[80]; /* name of this font */
+ float top, /* extreme values */
+ bottom,
+ max_width;
+ int num_ch; /* no. of fonts in the set */
+ int num_props; /* no. of font properties */
+ Property *properties; /* array of properties */
+} Font_header;
+
+typedef struct {
+ float center, /* center of the character */
+ right; /* right edge */
+ long offset; /* offset in the file of the character
+ * description*/
+} Dispatch;
+
+
+typedef struct {
+ float center,
+ right;
+ Path strokes;
+} Ch_font;
+
+typedef struct {
+ char name[80];
+ float top,
+ bottom,
+ max_width;
+ int num_ch; /* # characters in the font*/
+ Ch_font **ch_data;
+} Phg_font;
+
+#endif /*WFONT_INCLUDED*/
FGAPI int FGAPIENTRY glutBitmapLength( void* font, const char* string );
FGAPI int FGAPIENTRY glutStrokeLength( void* font, const char* string );
FGAPI int FGAPIENTRY glutBitmapHeight( void* font );
-FGAPI int FGAPIENTRY glutStrokeHeight( void* font );
+FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font );
FGAPI void FGAPIENTRY glutBitmapString( void* font, const char *string );
FGAPI void FGAPIENTRY glutStrokeString( void* font, const char *string );
const GLubyte** Characters; /* The characters mapping */
};
+/*
+ * The stroke font structures
+ */
+
+typedef struct tagSFG_StrokeVertex SFG_StrokeVertex;
+struct tagSFG_StrokeVertex
+{
+ GLfloat X, Y;
+};
+
+typedef struct tagSFG_StrokeStrip SFG_StrokeStrip;
+struct tagSFG_StrokeStrip
+{
+ int Number;
+ const SFG_StrokeVertex* Vertices;
+};
+
+typedef struct tagSFG_StrokeChar SFG_StrokeChar;
+struct tagSFG_StrokeChar
+{
+ GLfloat Right;
+ int Number;
+ const SFG_StrokeStrip* Strips;
+};
+
+typedef struct tagSFG_StrokeFont SFG_StrokeFont;
+struct tagSFG_StrokeFont
+{
+ char* Name; /* The source font name */
+ int Quantity; /* Number of chars in font */
+ GLfloat Height; /* Height of the characters */
+ const SFG_StrokeChar** Characters; /* The characters mapping */
+};
/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */