Added stroke fonts.
authorChristopher John Purnell <cjp@lost.org.uk>
Sat, 18 May 2002 21:42:00 +0000 (21:42 +0000)
committerChristopher John Purnell <cjp@lost.org.uk>
Sat, 18 May 2002 21:42:00 +0000 (21:42 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@25 7f0cb862-5218-0410-a997-914c9d46530a

freeglut-1.3/Makefile.am
freeglut-1.3/freeglut_font.c
freeglut-1.3/freeglut_stroke_mono_roman.c [new file with mode: 0644]
freeglut-1.3/freeglut_stroke_roman.c [new file with mode: 0644]
genfonts/Roman_M.src
genfonts/lex.l [new file with mode: 0644]
genfonts/to_stroke.y [new file with mode: 0644]
genfonts/wfont.h [new file with mode: 0644]
include/GL/freeglut.h
include/GL/freeglut_internal.h

index 5ea457c..54d8dee 100644 (file)
@@ -13,6 +13,8 @@ libfreeglut_1_3_la_SOURCES = freeglut_callbacks.c \
                             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 \
index 64a9278..90d38e3 100644 (file)
@@ -53,6 +53,8 @@ extern SFG_Font fgFontHelvetica12;
 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
@@ -97,6 +99,26 @@ static SFG_Font* fghFontByID( void* font )
     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 -------------------------------------------------- */
 
@@ -115,7 +137,7 @@ void FGAPIENTRY glutBitmapCharacter( void* fontID, int character )
     /*
      * 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
@@ -174,7 +196,7 @@ int FGAPIENTRY glutBitmapWidth( void* fontID, int character )
     /*
      * 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
@@ -187,10 +209,34 @@ int FGAPIENTRY glutBitmapWidth( void* fontID, int 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);
 }
 
 /*
@@ -199,9 +245,16 @@ void FGAPIENTRY glutStrokeCharacter( void* fontID, int character )
 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);
 }
 
 /*
@@ -261,13 +314,17 @@ int FGAPIENTRY glutBitmapHeight( void* fontID )
 /*
  * 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 ***/
diff --git a/freeglut-1.3/freeglut_stroke_mono_roman.c b/freeglut-1.3/freeglut_stroke_mono_roman.c
new file mode 100644 (file)
index 0000000..35e5cff
--- /dev/null
@@ -0,0 +1,2820 @@
+
+/* 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};
diff --git a/freeglut-1.3/freeglut_stroke_roman.c b/freeglut-1.3/freeglut_stroke_roman.c
new file mode 100644 (file)
index 0000000..432f63c
--- /dev/null
@@ -0,0 +1,2820 @@
+
+/* 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};
index 45717a5..7fe3511 100644 (file)
@@ -24,7 +24,7 @@
 
 # Mono-spaced version of Roman Simplex font.
 
-       FONTNAME Roman
+       FONTNAME MonoRoman
        TOP 119.0476
        BOTTOM -33.3333
        NUM_CH 128
diff --git a/genfonts/lex.l b/genfonts/lex.l
new file mode 100644 (file)
index 0000000..121ac37
--- /dev/null
@@ -0,0 +1,143 @@
+%{
+/* $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;
+}
diff --git a/genfonts/to_stroke.y b/genfonts/to_stroke.y
new file mode 100644 (file)
index 0000000..bd1205b
--- /dev/null
@@ -0,0 +1,659 @@
+%{
+/* $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);
+}
diff --git a/genfonts/wfont.h b/genfonts/wfont.h
new file mode 100644 (file)
index 0000000..0bcf8f6
--- /dev/null
@@ -0,0 +1,164 @@
+/* $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*/
index 7dd8659..3a7faa3 100644 (file)
@@ -447,7 +447,7 @@ FGAPI int     FGAPIENTRY glutStrokeWidth( void* font, int character );
 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 );
 
index f5bb1af..8c46ee0 100644 (file)
@@ -443,6 +443,39 @@ struct tagSFG_Font
     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 --------------------------------------------- */