GLDriverQt.cpp

00001 //
00002 //###########################################################################
00003 //                            GLDriverQt.cpp
00004 //###########################################################################
00005 // 
00006 //                  SOURCE FILE FOR CLASS GLDriverQt        
00007 //
00008 //###########################################################################
00009 //
00010 // Chris Anderson (C) UCLA 2007-09
00011 //
00012 // 02/16/09
00013 //
00014 #include <iostream>
00015 using namespace std;
00016 
00017 #include "GLDriverQt.h"
00018 #include "GLDisplayListWidget.h"
00019 #include <math.h>
00020 
00021 GLDriverQt::GLDriverQt()
00022 {
00023     m_glWnd          = NULL;
00024     displayListIndex = 0;
00025 }
00026 
00027 GLDriverQt::GLDriverQt(int DisplayList)
00028 {
00029         // Currently ignored parameters //
00030         //////////////////////////////////
00031         DisplayList = 0;
00032     //////////////////////////////////
00033 
00034         m_dAlpha = 1.0;  
00035     displayListIndex = glGenLists(1);
00036     glNewList(displayListIndex, GL_COMPILE);
00037 }
00038 
00039 void GLDriverQt::SetGLDisplayListWidget(GLDisplayListWidget* a) 
00040 { 
00041         m_glWnd = a; 
00042 }
00043         
00044 void GLDriverQt::OpenList()
00045 {
00046     textBase = 0;
00047         m_dAlpha = 1.0;  
00048         m_glWnd->makeCurrent();
00049     if(displayListIndex != 0) DeleteList();
00050     displayListIndex = glGenLists(1);
00051     glNewList(displayListIndex, GL_COMPILE);
00052 }
00053 
00054 void GLDriverQt::CloseList()
00055 {
00056         m_glWnd->makeCurrent();
00057         glEndList();
00058 }
00059 
00060 void GLDriverQt::DeleteList()
00061 {
00062     m_glWnd->makeCurrent();
00063         glDeleteLists(getDisplayList(), 1);
00064         displayListIndex = 0;
00065 }
00066 
00067 
00068 void GLDriverQt::clearFrame()
00069 {
00070         DeleteList();
00071     if(m_glWnd)
00072     {
00073         m_glWnd->updateGL();
00074     }
00075 }
00076 
00077 void GLDriverQt::start()
00078 {
00079         m_glWnd->makeCurrent();
00080     OpenList();
00081 }
00082 
00083 void GLDriverQt::frame() 
00084  { 
00085         m_glWnd->makeCurrent();
00086     if(m_glWnd)
00087     {
00088     CloseList();
00089     m_glWnd->updateGL();
00090     }
00091 }
00092 
00093 GLDriverQt::~GLDriverQt()
00094 {
00095         DeleteList();
00096 }
00097 
00098 //
00099 // UCdriver Implementations
00100 //
00101 
00102 void GLDriverQt::line(double x1,double y1,double x2,double y2, int dash_pattern,
00103 unsigned int user_pattern, double width,int color,double *RGB)
00104 {
00105     double X[2]; double Y[2];
00106     X[0] = x1;
00107     X[1] = x2;
00108     Y[0] = y1;
00109     Y[1] = y2;
00110     lines(X,Y,2,dash_pattern,user_pattern, width,color, RGB);
00111 }
00112 
00113 void GLDriverQt::lines(double* X,double* Y,long npoints, int dash_pattern,
00114 unsigned int user_pattern, double width, int color,double* RGB)
00115 {
00116         m_glWnd->makeCurrent();
00117 // 
00118 //  Set scaling so [0,1]x[0,1] comes out in the 
00119 //  middle of the display region. 
00120 // 
00121     m_dXScale =   1.0;
00122     m_dXMin   =  -0.5;
00123 
00124     m_dYScale =   1.0;
00125     m_dYMin   =  -0.5;
00126 
00127     m_dZScale =   1.0;
00128     m_dZMin   =  -0.5;
00129 
00130         SetStipple(dash_pattern,user_pattern);
00131         SetColor(color,RGB);
00132 
00133         if((width*500.0) > 1.0)
00134     {glLineWidth((float)(width*500.0));} 
00135     else 
00136     {glLineWidth(float(1.0));}
00137 
00138         glBegin(GL_LINE_STRIP);
00139                 for(long i=0;i<npoints;i++)
00140                         glVertex3d(NORMX(X[i]),NORMY(Y[i]),NORMZ(0.0));
00141         glEnd();
00142         glDisable(GL_LINE_STIPPLE);
00143 }
00144 
00145 void GLDriverQt::point(double x,double y, char chr,const char *font,double size, int color,
00146 double *rgb)
00147 {
00148     char s[2];
00149     s[0] = chr;
00150     s[1] = '\0';
00151     double horiz_just = 0.0;
00152     double vert_just  = 0.0;
00153     double rotation   = 0.0;
00154 
00155     plotHText(x,y, s, font, size,rotation,horiz_just, 
00156     vert_just, color,rgb);
00157 };
00158 void GLDriverQt::points(double *X,double *Y,long npoints, char chr,const char* font,
00159 double size, int color,double *rgb)
00160 {
00161     char s[2];
00162     s[0] = chr;
00163     s[1] = '\0';
00164     double horiz_just = 0.0;
00165     double vert_just  = 0.0;
00166     double rotation   = 0.0;
00167 
00168     long k;
00169     for(k = 0; k < npoints; k++)
00170     {
00171     plotHText(X[k],Y[k], s, font, size,rotation,horiz_just, 
00172     vert_just, color,rgb);
00173     }
00174 
00175 }
00176 
00177 void GLDriverQt::text(
00178                 double x,double y,const char* s,const char* font,double size,double rotation,
00179                 double horiz_just,double vert_just,
00180                 int color,double *rgb)
00181 {
00182     plotHText(x,y, s, font, size,rotation,horiz_just,vert_just, color,rgb);
00183 }
00184 
00185 
00186 void GLDriverQt::lineEx(double x1,double y1,double x2,double y2,
00187 int dash_pattern,unsigned int user_pattern, double width,int color,double *RGB)
00188 {
00189     line(x1,y1,x2,y2,dash_pattern,user_pattern,width,color,RGB);
00190 }
00191 
00192 void GLDriverQt::lineEx(double x1,double y1,double z1,double x2,double y2,double z2,
00193 int dash_pattern,unsigned int user_pattern, double width,int color,double *RGB)
00194 {
00195     m_dXScale =   1.0;
00196     m_dXMin   =  -0.5;
00197 
00198     m_dYScale =   1.0;
00199     m_dYMin   =  -0.5;
00200 
00201     m_dZScale =   1.0;
00202     m_dZMin   =  -0.5;
00203 
00204         SetStipple(dash_pattern,user_pattern);
00205         SetColor(color,RGB);
00206         
00207     if((width*500.0) > 1.0)
00208     {glLineWidth((float)(width*500.0));} 
00209     else 
00210     {glLineWidth(float(1.0));}
00211     
00212     /*
00213     glLineWidth(float(1.0));
00214         if(width>1) {glLineWidth((float)width);}else{glLineWidth(float(1.0));}
00215         */
00216         
00217         glBegin(GL_LINES);
00218                 glVertex3d(NORMX(x1),NORMY(y1),NORMZ(z1));
00219                 glVertex3d(NORMX(x2),NORMY(y2),NORMZ(z2));
00220         glEnd();
00221         glDisable(GL_LINE_STIPPLE);
00222 
00223 }
00224 
00225 
00226 void GLDriverQt::linesEx(double* X,double* Y,long npoints, int dash_pattern,
00227 unsigned int user_pattern, double width,int color,double *RGB)
00228 {
00229     lines(X,Y,npoints,dash_pattern,user_pattern,width,color,RGB);
00230 }
00231 
00232 void GLDriverQt::linesEx(double* X,double* Y,double* Z,long npoints,
00233 int dash_pattern,unsigned int user_pattern, double width,int color,
00234 double *RGB)
00235 {
00236     m_dXScale =   1.0;
00237     m_dXMin   =  -0.5;
00238 
00239     m_dYScale =   1.0;
00240     m_dYMin   =  -0.5;
00241 
00242     m_dZScale =   1.0;
00243     m_dZMin   =  -0.5;
00244 
00245         SetStipple(dash_pattern,user_pattern);
00246         SetColor(color,RGB);
00247         /*
00248         if(width>1) {glLineWidth((float)width);}else{glLineWidth(float(1.0));}
00249         */
00250         
00251         if((width*500.0) > 1.0)
00252     {glLineWidth((float)(width*500.0));} 
00253     else 
00254     {glLineWidth(float(1.0));}
00255     
00256     
00257         glBegin(GL_LINE_STRIP);
00258                 for(long i=0;i<npoints;i++)
00259                         glVertex3d(NORMX(X[i]),NORMY(Y[i]),NORMZ(Z[i]));
00260         glEnd();
00261         glDisable(GL_LINE_STIPPLE);
00262 }
00263 
00264 void GLDriverQt::textEx(double x,double y,double z, double nx, double ny, 
00265 double nz, const char* s,const char* font, double size, double rotation,
00266 double horiz_just, double vert_just, int color,double* RGB)
00267 {
00268     plotHText(x, y,z, nx, ny, nz, s, font, size, rotation, horiz_just,
00269     vert_just,  color, RGB);
00270 }
00271 
00272 // font ignored
00273 void GLDriverQt::pointEx(double x,double y, char chr,const char* font,double size,
00274 int color,double *RGB)
00275 {
00276         // Currently ignored parameters //
00277         //////////////////////////////////
00278         font = 0;
00279         //////////////////////////////////
00280 
00281         double radius = size/2;
00282         double step       = (8*atan(1.0))/10;
00283         int i;
00284 
00285         SetColor(color,RGB);
00286         switch(chr)
00287         {
00288         case 'X':
00289                 glBegin(GL_LINES);
00290                         glVertex3d(NORMX(x-radius),NORMY(y-radius),NORMZ(0.0));
00291                         glVertex3d(NORMX(x+radius),NORMY(y+radius),NORMZ(0.0));
00292                         glVertex3d(NORMX(x+radius),NORMY(y-radius),NORMZ(0.0));
00293                         glVertex3d(NORMX(x-radius),NORMY(y+radius),NORMZ(0.0));
00294                 glEnd();
00295                 break;
00296         case 'O':
00297                 glBegin(GL_TRIANGLE_FAN);
00298                         //Place the center point and then generate a fan of size
00299                         glVertex3d(NORMX(x),NORMY(y),NORMZ(0.0));
00300                         for(i=0;i<=10;i++)
00301                                 glVertex3d(NORMX(x+(radius*cos((double)i*step)))
00302                 ,NORMY(y+(radius*sin((double)i*step))),NORMZ(0.0));
00303                 glEnd();
00304                 break;
00305         }
00306 }
00307 void GLDriverQt::pointEx(double x,double y,double z, char chr,const char* font,
00308 double size, int color,double *RGB)
00309 {
00310         // Currently ignored parameters //
00311         //////////////////////////////////
00312         font = 0;
00313         //////////////////////////////////
00314 
00315         double radius = size/2;
00316         //double step     = (8*atan(1.0))/10;
00317 
00318         SetColor(color,RGB);
00319         switch(chr)
00320         {
00321         case 'X':
00322                 glBegin(GL_LINES);
00323                         glVertex3d(NORMX(x-radius),NORMY(y-radius),NORMZ(z));
00324                         glVertex3d(NORMX(x+radius),NORMY(y+radius),NORMZ(z));
00325                         glVertex3d(NORMX(x+radius),NORMY(y-radius),NORMZ(z));
00326                         glVertex3d(NORMX(x-radius),NORMY(y+radius),NORMZ(z));
00327                         glVertex3d(NORMX(x-radius),NORMY(y),NORMZ(z-radius));
00328                         glVertex3d(NORMX(x+radius),NORMY(y),NORMZ(z+radius));
00329                         glVertex3d(NORMX(x+radius),NORMY(y),NORMZ(z-radius));
00330                         glVertex3d(NORMX(x-radius),NORMY(y),NORMZ(z+radius));
00331                         glVertex3d(NORMX(x),NORMY(y-radius),NORMZ(z-radius));
00332                         glVertex3d(NORMX(x),NORMY(y+radius),NORMZ(z+radius));
00333                         glVertex3d(NORMX(x),NORMY(y-radius),NORMZ(z-radius));
00334                         glVertex3d(NORMX(x),NORMY(y+radius),NORMZ(z+radius));
00335                 glEnd();
00336                 break;
00337         }
00338 }
00339 void GLDriverQt::SetColor(unsigned int color,double* RGB)
00340 {
00341         switch(color)
00342         {
00343         case BLACK:
00344                 glColor4d(0.0,0.0,0.0,m_dAlpha);
00345                 break;
00346         case DARK_GREY:
00347                 glColor4d(0.5f,0.5f,0.5f,m_dAlpha);
00348                 break;
00349         case LIGHT_GREY:
00350                 glColor4d(0.7f,0.7f,0.7f,m_dAlpha);
00351                 break;
00352         case BLUE:
00353                 glColor4d(0.0f,0.0f,1.0f,m_dAlpha);
00354                 break;
00355         case LIGHT_BLUE:
00356                 glColor4d(0.7f,0.7f,1.0f,m_dAlpha);
00357                 break;
00358         case GREEN:
00359                 glColor4d(0.0f,1.0f,0.0f,m_dAlpha);
00360                 break;
00361         case LIGHT_GREEN:
00362                 glColor4d(0.7f,1.0f,0.7f,m_dAlpha);
00363                 break;
00364         case RED:
00365                 glColor4d(1.0f,0.0f,0.0f,m_dAlpha);
00366                 break;
00367         case LIGHT_RED:
00368                 glColor4d(1.0f,0.7f,0.7f,m_dAlpha);
00369                 break;
00370         case MAGENTA:
00371                 glColor4d(1.0f,0.0f,1.0f,m_dAlpha);
00372                 break;
00373         case CYAN:
00374                 glColor4d(0.0f,0.5f,0.5f,m_dAlpha);
00375                 break;
00376         case LIGHT_CYAN:
00377                 glColor4d(0.0f,1.0f,1.0f,m_dAlpha);
00378                 break;
00379         case YELLOW:
00380                 glColor4d(1.0f,1.0f,0.0f,m_dAlpha);
00381                 break;
00382         case USER_RGB:
00383                 glColor4d(RGB[0],RGB[1],RGB[2],m_dAlpha);
00384                 break;
00385         default:
00386                 glColor4d(1.0f,1.0f,1.0f,m_dAlpha);
00387         }
00388 }
00389 
00390 void GLDriverQt::SetStipple(unsigned int stipple,unsigned int user_pattern)
00391 {
00392         // Currently ignored parameters //
00393         //////////////////////////////////
00394         user_pattern = 0;
00395         //////////////////////////////////
00396 
00397         if(stipple == SOLID)
00398         {
00399                 glDisable(GL_LINE_STIPPLE);
00400         } else {
00401                 glEnable(GL_LINE_STIPPLE);
00402                 switch(stipple)
00403                 {
00404                 case DASH:
00405                         glLineStipple(1,0x00FF);
00406                         break;
00407                 case DOUBLE_DASH:
00408                         break;
00409                 case DASH_DOT:
00410                         glLineStipple(1,0xFF01);
00411                         break;
00412                 case DASH_DOUBLE_DOT:
00413                         glLineStipple(1,0xAAFF);
00414                         break;
00415                 case DOTS:
00416                         glLineStipple(1,0xAAAA);
00417                         break;
00418                 case USER_DASH:
00419                         break;
00420                 }
00421         }
00422 }
00423 //
00424 //##################################################################################
00425 //          Hershey Vector Character Code (Required by GLDriverQt::plotHText)
00426 //##################################################################################
00427 //
00428 /*    
00429                        Selected Hershey Fonts
00430  
00431   Font List:                                                 
00432  
00433  Font # 0 : HersheySans 
00434  Font # 1 : HersheySansSymbol 
00435  Font # 2 : HersheySerif 
00436  Font # 3 : HersheySerif-Italic 
00437  Font # 4 : HersheySerifSymbol 
00438  
00439  
00440  The struct HersheyFontGlyphs contains the name of the font followed 
00441  by an array of strings. An element of this array with index k provides 
00442  the glyph for the character with ASCII code k. For example, the glyph code for 
00443  the letter L is given by glyphs[76], or, alternately, glyphs[int('L')]. 
00444  The first 33 elements (corresponding to non-printing characters and 
00445  the space character) are null strings. 
00446   
00447  The documentation below describes how a glyph string is translated into 
00448  commands that can be used to render a character.
00449      
00450  These Hershey glyph codes were created using the _occidental_hershey_glyphs[] 
00451  array contained in the GNU plotting file g_her_glyph.c. 
00452     
00453  ------------------------------------------ 
00454  From the documentation in g_her_glyph.c    
00455  ------------------------------------------ 
00456     
00457  Dr. Hershey digitized the glyphs c. 1967, at what is now the U.S. Naval
00458  Surface Weapons Center in Dahlgren, Virginia.  For many years he
00459  distributed copies of the glyphs, and his typographic software, on
00460  magnetic tape.  Over 120 copies of the tape were distributed.  There
00461  have been many other distributions of the glyphs.  In the 1970's they
00462  were incorporated, not always with attribution, in several commercial
00463  plotting packages.  They were first freely distributed in 1985(?), by
00464  being posted to Usenet (to vol. 4 of mod.sources) by Pete Holzmann
00465  <pete@xc.org>, then at Octopus Enterprises.  In the 1980's the glyphs
00466  were incorporated in at least two freeware plotting programs, Nelson
00467  Beebe's PLOT79 and Tim Pearson's PGPLOT.  The latter is still available
00468  (see http://astro.caltech.edu/~tjp/pgplot/ ).
00469    
00470  The standard hardcopy reference for the occidental Hershey glyphs, which 
00471  tabulates and displays them, is: 
00472    
00473  @TechReport{Wolcott76, 
00474  author =       {Norman M. Wolcott and Joseph Hilsenrath}, 
00475  title =        {A Contribution to Computer Typesetting Techniques: 
00476                 Tables of Coordinates for {Hershey's} Repertory of  
00477                 Occidental Type Fonts and Graphic Symbols}, 
00478  institution =  {U.S. National Bureau of Standards}, 
00479  year =         {1976}, 
00480  month =        {April}, 
00481  type =         {Special Publication}, 
00482  number =       {424}, 
00483  OPTnote =      {US NTIS stock number PB251845}} 
00484     
00485  Available from the NTIS (US National Technical Information Service, +1 703 487 4650). 
00486     
00487  @TechReport{Hershey67, 
00488  author =        {Allen V. Hershey}, 
00489  title =         {Calligraphy for Computers}, 
00490  institution =  {U.S. Naval Weapons Laboratory}, 
00491  address =       {Dahlgren, VA}, 
00492  year =          {1967}, 
00493  type =  {Report}, 
00494  number =        {TR--2101}, 
00495  month =         {Aug}, 
00496  OPTnote =       {US NTIS stock number AD662398}} 
00497     
00498  The format of the glyphs in is the format in which the Hershey
00499  glyphs were distributed to mod.sources in 1985(?) by Pete Holzmann, and
00500  is due to Jim Hurt, then at Cognition Inc.  Glyphs are encoded as
00501  strings consisting of pairs of printable ascii characters in the range
00502  0x20 to 0x7e, i.e. SP (ascii space) through ~ (ascii tilde).  Each
00503  character in the range [0x20,0x7e] encodes an integer.  The integer may
00504  be obtained from the character by subtracting 'R', i.e, 0x52.  Integers
00505  in the range [-0x32,0x2c], i.e., [-50,44], may be represented in this
00506  way.  Actually, all integers appearing in the occidental Hershey glyphs
00507  are restricted to the range [-41,41].
00508     
00509  The first two characters in each string encode the x range
00510  (xinit,xfinal) of a glyph.  (The `width' of the glyph, as distinct from
00511  the x extent of its bounding box, is xfinal - xinit.)  Subsequent pairs
00512  encode (x1,y1),(x2,y2),(x3,y3),..., i.e., the coordinates of points.
00513  The glyph is drawn by moving to (x1,y1), stroking a vector to (x2,y2),
00514  stroking a vector to (x3,y3), etc.  The pair (-50,0), which is encoded
00515  as the pair of characters " R", if encountered in the string is
00516  interpreted as a `pen up' command: the vector immediately following
00517  should be drawn with pen up, i.e., should be interpreted as a motion
00518  command rather than a drawing command.
00519 */    
00520 
00521 struct HersheyFontGlyphs
00522 {
00523    const char *name;    
00524    char* glyphs[127];             
00525 };
00526 
00527 //  
00528 // Hershey font metric information in units associated 
00529 // with the glyph encoding. 
00530 // 
00531 // 
00532 #define HERSHEY_BASELINE      -9.5      // relative to centerline 
00533 #define HERSHEY_CAPLINE       12.5      // relative to centerline 
00534 #define HERSHEY_TOPLINE       16.5      // relative to centerline 
00535 #define HERSHEY_BOTTOMLINE   -16.5  // relative to centerline 
00536    
00537 #define HERSHEY_CAPHEIGHT       22  // capline - baseline     
00538 #define HERSHEY_ASCENT          26  // topline - baseline     
00539 #define HERSHEY_DESCENT          7 // baseline - bottomline   
00540 #define HERSHEY_HEIGHT (HERSHEY_ASCENT + HERSHEY_DESCENT)     
00541     
00542 //  
00543 //                Array of HersheyFontGlyphs  
00544 // 
00545 const struct HersheyFontGlyphs Hfont[] = 
00546 {
00547 //
00548 //   Font # 0 : HersheySans 
00549 //
00550 {"HersheySans",
00551   {
00552    "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",
00553    "JZ",
00554    "MWRFRT RRYQZR[SZRY",
00555    "JZNFNM RVFVM",
00556    "G]OFOb RUFUb RJQZQ RJWZW",
00557    "H\\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX",
00558    "F^[FYGVHSHPGNFLFJGIIIKKMMMOLPJPHNF R[FI[ RYTWTUUTWTYV[X[ZZ[X[VYT",
00559    "E_\\O\\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\\Z\\Y",
00560    "MWRHQGRFSGSIRKQL",
00561    "KYVBTDRGPKOPOTPYR]T`Vb",
00562    "KYNBPDRGTKUPUTTYR]P`Nb",
00563    "JZRLRX RMOWU RWOMU",
00564    "E_RIR[ RIR[R",
00565    "MWSZR[QZRYSZS\\R^Q_",
00566    "E_IR[R",
00567    "MWRYQZR[SZRY",
00568    "G][BIb",
00569    "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF",
00570    "H\\NJPISFS[",
00571    "H\\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[",
00572    "H\\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW",
00573    "H\\UFKTZT RUFU[",
00574    "H\\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW",
00575    "H\\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT",
00576    "H\\YFO[ RKFYF",
00577    "H\\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF",
00578    "H\\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX",
00579    "MWRMQNROSNRM RRYQZR[SZRY",
00580    "MWRMQNROSNRM RSZR[QZRYSZS\\R^Q_",
00581    "F^ZIJRZ[",
00582    "E_IO[O RIU[U",
00583    "F^JIZRJ[",
00584    "I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY",
00585    "DaWNVLTKQKOLNMMOMRNTOUQVTVVUWS RWKWSXUYV[V\\U]S]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYY",
00586    "I[RFJ[ RRFZ[ RMTWT",
00587    "G\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[",
00588    "H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV",
00589    "G\\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[",
00590    "H[LFL[ RLFYF RLPTP RL[Y[",
00591    "HZLFL[ RLFYF RLPTP",
00592    "H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS",
00593    "G]KFK[ RYFY[ RKPYP",
00594    "NVRFR[",
00595    "JZVFVVUYTZR[P[NZMYLVLT",
00596    "G\\KFK[ RYFKT RPOY[",
00597    "HYLFL[ RL[X[",
00598    "F^JFJ[ RJFR[ RZFR[ RZFZ[",
00599    "G]KFK[ RKFY[ RYFY[",
00600    "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF",
00601    "G\\KFK[ RKFTFWGXHYJYMXOWPTQKQ",
00602    "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY]",
00603    "G\\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[",
00604    "H\\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX",
00605    "JZRFR[ RKFYF",
00606    "G]KFKULXNZQ[S[VZXXYUYF",
00607    "I[JFR[ RZFR[",
00608    "F^HFM[ RRFM[ RRFW[ R\\FW[",
00609    "H\\KFY[ RYFK[",
00610    "I[JFRPR[ RZFRP",
00611    "H\\YFK[ RKFYF RK[Y[",
00612    "KYOBOb ROBVB RObVb",
00613    "G]IB[b",
00614    "KYUBUb RNBUB RNbUb",
00615    "JZPLRITL RMORJWO",
00616    "G]I][]",
00617    "MWSFRGQIQKRLSKRJ",
00618    "I\\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
00619    "H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX",
00620    "I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX",
00621    "I\\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
00622    "I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX",
00623    "MYWFUFSGRJR[ ROMVM",
00624    "I\\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
00625    "I\\MFM[ RMQPNRMUMWNXQX[",
00626    "NVQFRGSFREQF RRMR[",
00627    "MWRFSGTFSERF RSMS^RaPbNb",
00628    "IZMFM[ RWMMW RQSX[",
00629    "NVRFR[",
00630    "CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\\N]Q][",
00631    "I\\MMM[ RMQPNRMUMWNXQX[",
00632    "I\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM",
00633    "H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX",
00634    "I\\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
00635    "KXOMO[ ROSPPRNTMWM",
00636    "J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX",
00637    "MYRFRWSZU[W[ ROMVM",
00638    "I\\MMMWNZP[S[UZXW RXMX[",
00639    "JZLMR[ RXMR[",
00640    "G]JMN[ RRMN[ RRMV[ RZMV[",
00641    "J[MMX[ RXMM[",
00642    "JZLMR[ RXMR[P_NaLbKb",
00643    "J[XMM[ RMMXM RM[X[",
00644    "KYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb",
00645    "NVRBRb",
00646    "KYPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb",
00647    "F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O"
00648   }
00649 },
00650 //
00651 //   Font # 1 : HersheySansSymbol 
00652 //
00653 {"HersheySansSymbol",
00654   {
00655    "",   "F_JMILIJJHLGNGPHQIRKSP RIJKHMHOIPJQLRPR[ R[M\\L\\J[HYGWGUHTISKRP R\\JZHXHVIUJTLSPS[",   "F^IGJKKMMOPPTPWOYMZK[G RIGJJKLMNPOTOWNYLZJ[G RPONPMQLSLVMXOZQ[S[UZWXXVXSWQVPTO RPPNQMSMVNY RVYWVWSVQTP",   "F^MJMV RNKNU RVKVU RWJWV RIGKIMJPKTKWJYI[G RIYKWMVPUTUWVYW[Y",   "F^[ILIJJILINJPLQNQPPQNQLPJ[J RIMJOKPMQ RQMPKOJMI RIXXXZW[U[SZQXPVPTQSSSUTWIW R[TZRYQWP RSTTVUWWX",   "F]OUMTLTJUIWIXJZL[M[OZPXPWOUJPINIKJILHOGSGWHYJZLZOYRVUUWUYV[X[YZZX RMSKPJNJKKILH RSGVHXJYLYOXRVU",   "G_HKKHMKMV RJILLLV RMKPHRKRU ROIQLQU RRKUHWKW[ RTIVLV[ RWKZH[J\\M\\P[SZUXWUYP[ RYIZJ[M[PZSYUWWTYP[",   "F^ISMSLRKOKMLJNHQGSGVHXJYMYOXRWS[S RITOTMRLOLMMJOHQG RSGUHWJXMXOWRUT[T RKXYX RKYYY",   "F_GLJIMLMX RIJLMLX RMLPISLSX ROJRMRX RSLVIYLYW[Y RUJXMXXZZ]W",   "G]ZIJY RZIWJQJ RXKUKQJ RZIYLYR RXKXNYR RQRJR RPSMSJR RQRQY RPSPVQY",   "F^HOJKOU RJMOWRPWPZO[M[KZIXHWHUITKTMUPVRWUWXUZ RWHVIUKUMWQXTXWWYUZ",   "F^IOLLPN RKMOORLUN RQMTOWLYN RVMXO[L RIULRPT RKSOURRUT RQSTUWRYT RVSXU[R",   "F^JHNJPLQOQRPUNWJY RJHMIOJQLRO RRRQUOWMXJY RZHWIUJSLRO RRRSUUWWXZY RZHVJTLSOSRTUVWZY RIP[P RIQ[Q",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",
00656    "JZ",
00657    "MWRFRT RRYQZR[SZRY",
00658    "I[KFR[YF RMLWL",
00659    "G]OFOb RUFUb RJQZQ RJWZW",
00660    "I\\XFX[ RKFXF RPPXP RK[X[",
00661    "F^[FYGVHSHPGNFLFJGIIIKKMMMOLPJPHNF R[FI[ RYTWTUUTWTYV[X[ZZ[X[VYT",
00662    "E_\\O\\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\\Z\\Y",
00663    "F^JJQJUKWLYNZQZSYVWXUYQZJZ RORZR",
00664    "KYVBTDRGPKOPOTPYR]T`Vb",
00665    "KYNBPDRGTKUPUTTYR]P`Nb",
00666    "JZRLRX RMOWU RWOMU",
00667    "E_RIR[ RIR[R",
00668    "MWSZR[QZRYSZS\\R^Q_",
00669    "E_IR[R",
00670    "MWRYQZR[SZRY",
00671    "G][BIb",
00672    "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF",
00673    "H\\NJPISFS[",
00674    "H\\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[",
00675    "H\\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW",
00676    "H\\UFKTZT RUFU[",
00677    "H\\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW",
00678    "H\\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT",
00679    "H\\YFO[ RKFYF",
00680    "H\\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF",
00681    "H\\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX",
00682    "MWRMQNROSNRM RRYQZR[SZRY",
00683    "MWRMQNROSNRM RSZR[QZRYSZS\\R^Q_",
00684    "F^ZIJRZ[",
00685    "E_IO[O RIU[U",
00686    "F^JIZRJ[",
00687    "I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY",
00688    "F^ISJQLPNPPQTTVUXUZT[Q RISJPLONOPPTSVTXTZS[Q RIW[W RI[[[",
00689    "I[RFJ[ RRFZ[ RMTWT",
00690    "G\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[",
00691    "H\\KFY[ RK[YF",
00692    "I[RFJ[ RRFZ[ RJ[Z[",
00693    "H[LFL[ RLFYF RLPTP RL[Y[",
00694    "H\\RFR[ RPKMLLMKOKRLTMUPVTVWUXTYRYOXMWLTKPK",
00695    "HYLFL[ RLFXF",
00696    "G]KFK[ RYFY[ RKPYP",
00697    "NVRFR[",
00698    "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF ROPUP",
00699    "G\\KFK[ RYFKT RPOY[",
00700    "I[RFJ[ RRFZ[",
00701    "F^JFJ[ RJFR[ RZFR[ RZFZ[",
00702    "G]KFK[ RKFY[ RYFY[",
00703    "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF",
00704    "G]KFK[ RYFY[ RKFYF",
00705    "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF ROPUP",
00706    "G\\KFK[ RKFTFWGXHYJYMXOWPTQKQ",
00707    "I[KFRPK[ RKFYF RK[Y[",
00708    "JZRFR[ RKFYF",
00709    "I[JFRPR[ RZFRP",
00710    "I[XOWNTMQMNNMOLQLSMUOWSZT\\T^S_Q_",
00711    "H\\K[O[LTKPKLLINGQFSFVGXIYLYPXTU[Y[",
00712    "I[KFYF ROPUP RK[Y[",
00713    "G]RFR[ RILJLKMLQMSNTQUSUVTWSXQYMZL[L",
00714    "H\\YFK[ RKFYF RK[Y[",
00715    "KYOBOb ROBVB RObVb",
00716    "E_RIQJRKSJRI RIYHZI[JZIY R[YZZ[[\\Z[Y",
00717    "KYUBUb RNBUB RNbUb",
00718    "F^RBR[ RI[[[",
00719    "G]I][]",
00720    "E[f:~:",
00721    "H]QMONMPLRKUKXLZN[P[RZUWWTYPZM RQMSMTNUPWXXZY[Z[",
00722    "I\\UFSGQIOMNPMTLZKb RUFWFYHYKXMWNUORO RROTPVRWTWWVYUZS[Q[OZNYMV",
00723    "I[KMMMOOU`WbYb RZMYOWRM]K`Jb",
00724    "I[TMQMONMPLSLVMYNZP[R[TZVXWUWRVOTMRKQIQGRFTFVGXI",
00725    "JZWOVNTMQMONOPPRSS RSSOTMVMXNZP[S[UZWX",
00726    "H\\VFNb RQMNNLPKSKVLXNZQ[S[VZXXYUYRXPVNSMQM",
00727    "I\\JPLNNMOMQNROSRSVR[ RZMYPXRR[P_Ob",
00728    "H\\IQJOLMNMONOPNTL[ RNTPPRNTMVMXOXRWWTb",
00729    "LWRMPTOXOZP[R[TYUW",
00730    "G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb",
00731    "I[OMK[ RYNXMWMUNQROSNS RNSPTQUSZT[U[VZ",
00732    "JZKFMFOGPHX[ RRML[",
00733    "H]OMIb RNQMVMYO[Q[SZUXWT RYMWTVXVZW[Y[[Y\\W",
00734    "I[LMOMNSMXL[ RYMXPWRUURXOZL[",
00735    "J[RMPNNPMSMVNYOZQ[S[UZWXXUXRWOVNTMRM",
00736    "G]PML[ RUMVSWXX[ RIPKNNM[M",
00737    "J[TFRGPJOLNOMTMXNZO[Q[SZUWVUWRXMXIWGVFTF RNPWP",
00738    "I[MSMVNYOZQ[S[UZWXXUXRWOVNTMRMPNNPMSIb",
00739    "I][MQMONMPLSLVMYNZP[R[TZVXWUWRVOUNSM",
00740    "H\\SMP[ RJPLNOMZM",
00741    "H\\IQJOLMNMONOPMVMYO[Q[TZVXXTYPYM",
00742    "F]NMLNJQITIWJZK[M[OZQW RRSQWRZS[U[WZYWZTZQYNXM",
00743    "F]NMLNJQITIWJZK[M[OZQW RRSQWRZS[U[WZYWZTZQYNXM",
00744    "JZTFRGQHQIRJUKXK RUKRLPMOOOQQSTTVT RTTPUNVMXMZO\\S^T_TaRbPb",
00745    "F]VFNb RGQHOJMLMMNMPLULXMZO[Q[TZVXXUZP[M",
00746    "JYTFRGQHQIRJUKXK RXKTMQONRMUMWNYP[S]T_TaSbQbP`",
00747    "KYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb",
00748    "NVRBRb",
00749    "KYPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb",
00750    "F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O"
00751   }
00752 },
00753 //
00754 //   Font # 2 : HersheySerif 
00755 //
00756 {"HersheySerif",
00757   {
00758    "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",
00759    "JZ",
00760    "MWRFQHRTSHRF RRHRN RRYQZR[SZRY",
00761    "JZNFMM ROFMM RVFUM RWFUM",
00762    "G]OFOb RUFUb RJQZQ RJWZW",
00763    "H\\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX",
00764    "F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT",
00765    "F_[NZO[P\\O\\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\\Z\\Y RM[KZJXJUKSMQ RMKNMVXXZZ[",
00766    "MWRHQGRFSGSIRKQL",
00767    "KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\T`",
00768    "KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\P`",
00769    "JZRFRR RMIWO RWIMO",
00770    "E_RIR[ RIR[R",
00771    "MWR[QZRYSZS\\R^Q_",
00772    "E_IR[R",
00773    "MWRYQZR[SZRY",
00774    "G][BIb",
00775    "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF",
00776    "H\\NJPISFS[ RRGR[ RN[W[",
00777    "H\\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV",
00778    "H\\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[",
00779    "H\\THT[ RUFU[ RUFJUZU RQ[X[",
00780    "H\\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF",
00781    "H\\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN",
00782    "H\\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[",
00783    "H\\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO",
00784    "H\\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[",
00785    "MWRMQNROSNRM RRYQZR[SZRY",
00786    "MWRMQNROSNRM RR[QZRYSZS\\R^Q_",
00787    "F^ZIJRZ[",
00788    "E_IO[O RIU[U",
00789    "F^JIZRJ[",
00790    "I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY",
00791    "E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\\T]Q]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV",
00792    "H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
00793    "G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
00794    "G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[",
00795    "G]LFL[ RMFM[ RIFSFVGXIYKZNZSYVXXVZS[I[ RSFUGWIXKYNYSXVWXUZS[",
00796    "G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
00797    "G[LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[P[",
00798    "G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX RQFOGMILKKNKSLVMXOZQ[ RXSX[ RYSY[ RUS\\S",
00799    "F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
00800    "MXRFR[ RSFS[ ROFVF RO[V[",
00801    "KZUFUWTZR[P[NZMXMVNUOVNW RTFTWSZR[ RQFXF",
00802    "F\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[",
00803    "I[NFN[ ROFO[ RKFRF RK[Z[ZUY[",
00804    "F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
00805    "G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\F RI[O[",
00806    "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
00807    "G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
00808    "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF RNYNXOVQURUTVUXV_W`Y`Z^Z] RUXV\\W^X_Y_Z^",
00809    "G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUPMP RUFWGXHYJYLXNWOUP RI[P[ RRPTQURXYYZZZ[Y RTQUSWZX[Z[[Y[X",
00810    "H\\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX",
00811    "I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
00812    "F^KFKULXNZQ[S[VZXXYUYF RLFLUMXOZQ[ RHFOF RVF\\F",
00813    "H\\KFR[ RLFRX RYFR[ RIFOF RUF[F",
00814    "F^JFN[ RKFNV RRFN[ RRFV[ RSFVV RZFV[ RGFNF RWF]F",
00815    "H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
00816    "H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\\F RO[V[",
00817    "H\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[",
00818    "KYOBOb RPBPb ROBVB RObVb",
00819    "G]IB[b",
00820    "KYTBTb RUBUb RNBUB RNbUb",
00821    "JZPLRITL RMORJWO",
00822    "G]I][]",
00823    "MWSFRGQIQKRLSKRJ",
00824    "I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[",
00825    "G\\LFL[ RMFM[ RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIFMF",
00826    "H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[",
00827    "H]WFW[ RXFX[ RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTFXF RW[[[",
00828    "H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[",
00829    "KXUGTHUIVHVGUFSFQGPIP[ RSFRGQIQ[ RMMUM RM[T[",
00830    "I\\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM RONNPNTOV RUVVTVPUN RVOWNYMYNWN RNUMVLXLYM[P\\U\\X]Y^ RLYMZP[U[X\\Y^Y_XaUbObLaK_K^L\\O[",
00831    "G]LFL[ RMFM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIFMF RI[P[ RT[[[",
00832    "MXRFQGRHSGRF RRMR[ RSMS[ ROMSM RO[V[",
00833    "MXSFRGSHTGSF RTMT_SaQbObNaN`O_P`Oa RSMS_RaQb RPMTM",
00834    "G\\LFL[ RMFM[ RWMMW RRSX[ RQSW[ RIFMF RTMZM RI[P[ RT[Z[",
00835    "MXRFR[ RSFS[ ROFSF RO[V[",
00836    "BcGMG[ RHMH[ RHPJNMMOMRNSPS[ ROMQNRPR[ RSPUNXMZM]N^P^[ RZM\\N]P][ RDMHM RD[K[ RO[V[ RZ[a[",
00837    "G]LML[ RMMM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIMMM RI[P[ RT[[[",
00838    "H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
00839    "G\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb",
00840    "H\\WMWb RXMXb RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTb[b",
00841    "IZNMN[ ROMO[ ROSPPRNTMWMXNXOWPVOWN RKMOM RK[R[",
00842    "J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW RMPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY",
00843    "KZPFPWQZS[U[WZXX RQFQWRZS[ RMMUM",
00844    "G]LMLXMZP[R[UZWX RMMMXNZP[ RWMW[ RXMX[ RIMMM RTMXM RW[[[",
00845    "I[LMR[ RMMRY RXMR[ RJMPM RTMZM",
00846    "F^JMN[ RKMNX RRMN[ RRMV[ RSMVX RZMV[ RGMNM RWM]M",
00847    "H\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[",
00848    "H[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM",
00849    "I[WML[ RXMM[ RMMLQLMXM RL[X[XWW[",
00850    "JYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb RRDQGQKRN RRVQYQ]R`",
00851    "NVRBRb",
00852    "KZPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb RRDSGSKRN RRVSYS]R`",
00853    "F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O"
00854   }
00855 },
00856 //
00857 //   Font # 3 : HersheySerif-Italic 
00858 //
00859 {"HersheySerif-Italic",
00860   {
00861    "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",
00862    "JZ",
00863    "MWRFQHRTSHRF RRHRN RRYQZR[SZRY",
00864    "JZNFMM ROFMM RVFUM RWFUM",
00865    "G]OFOb RUFUb RJQZQ RJWZW",
00866    "H\\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX",
00867    "F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT",
00868    "F_[NZO[P\\O\\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\\Z\\Y RM[KZJXJUKSMQ RMKNMVXXZZ[",
00869    "MWRHQGRFSGSIRKQL",
00870    "KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\T`",
00871    "KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\P`",
00872    "JZRFRR RMIWO RWIMO",
00873    "E_RIR[ RIR[R",
00874    "MWR[QZRYSZS\\R^Q_",
00875    "E_IR[R",
00876    "MWRYQZR[SZRY",
00877    "G]_BEb",
00878    "H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RTFRGPINLMOLSLVMYO[ RQ[SZUXWUXRYNYKXHVF",
00879    "H]TJO[ RVFP[ RVFSIPKNL RUIQKNL",
00880    "H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ RVFXGYIYKXMVOPS RJYKXMXRZUZWYXW RMXR[U[WZXW",
00881    "H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP RVFXGYIYKXMVO RQPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW RSPUQVRWTWWVYUZS[",
00882    "H]XGR[ RYFS[ RYFJUZU",
00883    "H]QFLP RQF[F RQGVG[F RLPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW RSNUOVPWRWUVXTZR[",
00884    "H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT RTFRGPINLMOLSLXMZ RR[TZVXWVWRVP",
00885    "H]NFLL R[FZIXLSRQUPWO[ RXLRRPUOWN[ RMIPFRFWI RNHPGRGWIYIZH[F",
00886    "H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF RSFQGPHOJOMPOQP RTPWOXNYLYIXGVF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RQPNQLSKUKXLZN[ RR[UZVYWWWSVQ",
00887    "H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX ROQNONKOIQGSF RXGYIYNXRWUUXSZQ[",
00888    "MWRMQNROSNRM RRYQZR[SZRY",
00889    "MWRMQNROSNRM RR[QZRYSZS\\R^Q_",
00890    "F^ZIJRZ[",
00891    "E_IO[O RIU[U",
00892    "F^JIZRJ[",
00893    "I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY",
00894    "E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\\T]Q]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV",
00895    "H\\UFH[ RUFV[ RTHU[ RLUUU RF[L[ RR[X[",
00896    "F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVP RWFYGZIZKYNXOVP RMPVPXQYSYUXXVZR[F[ RVPWQXSXUWXUZR[",
00897    "H]ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RTFRGPINLMOLSLVMYNZP[",
00898    "F]OFI[ RPFJ[ RLFUFXGYHZKZOYSWWUYSZO[F[ RUFWGXHYKYOXSVWTYRZO[",
00899    "F]OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[U[WVT[",
00900    "F\\OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[M[",
00901    "H^ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RTFRGPINLMOLSLVMYNZP[ RR[TZVXXT RUT\\T",
00902    "E_NFH[ ROFI[ R[FU[ R\\FV[ RKFRF RXF_F RLPXP RE[L[ RR[Y[",
00903    "LYUFO[ RVFP[ RRFYF RL[S[",
00904    "I[XFSWRYQZO[M[KZJXJVKULVKW RWFRWQYO[ RTF[F",
00905    "F]OFI[ RPFJ[ R]FLS RSOW[ RROV[ RLFSF RYF_F RF[M[ RS[Y[",
00906    "H\\QFK[ RRFL[ RNFUF RH[W[YUV[",
00907    "E`NFH[ RNFO[ ROFPY R\\FO[ R\\FV[ R]FW[ RKFOF R\\F`F RE[K[ RS[Z[",
00908    "F_OFI[ ROFVX ROIV[ R\\FV[ RLFOF RYF_F RF[L[",
00909    "G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF",
00910    "F]OFI[ RPFJ[ RLFXF[G\\I\\K[NYPUQMQ RXFZG[I[KZNXPUQ RF[M[",
00911    "G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF RLYLXMVOUPURVSXS_T`V`W^W] RSXT^U_V_W^",
00912    "F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVPMP RWFYGZIZKYNXOVP RRPTQURVZW[Y[ZYZX RURWYXZYZZY RF[M[",
00913    "G^ZH[H\\F[L[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJUI[JYKY",
00914    "H]UFO[ RVFP[ ROFLLNF]F\\L\\F RL[S[",
00915    "F_NFKQJUJXKZN[R[UZWXXU\\F ROFLQKUKXLZN[ RKFRF RYF_F",
00916    "H\\NFO[ ROFPY R\\FO[ RLFRF RXF^F",
00917    "E_MFK[ RNFLY RUFK[ RUFS[ RVFTY R]FS[ RJFQF RZF`F",
00918    "G]NFU[ ROFV[ R\\FH[ RLFRF RXF^F RF[L[ RR[X[",
00919    "H]NFRPO[ ROFSPP[ R]FSP RLFRF RYF_F RL[S[",
00920    "G][FH[ R\\FI[ ROFLLNF\\F RH[V[XUU[",
00921    "KYOBOb RPBPb ROBVB RObVb",
00922    "G]IB[b",
00923    "KYTBTb RUBUb RNBUB RNbUb",
00924    "JZPLRITL RMORJWO",
00925    "G]I][]",
00926    "MWSFRGQIQKRLSKRJ",
00927    "H]XMVTUXUZV[Y[[Y\\W RYMWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ",
00928    "H[PFLSLVMYNZ RQFMS RMSNPPNRMTMVNWOXQXTWWUZR[P[NZMWMS RVNWPWTVWTZR[ RMFQF",
00929    "I[WPWQXQXPWNUMRMONMQLTLWMYNZP[R[UZWW RRMPNNQMTMXNZ",
00930    "H]ZFVTUXUZV[Y[[Y\\W R[FWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RWF[F",
00931    "I[MVQUTTWRXPWNUMRMONMQLTLWMYNZP[R[UZWX RRMPNNQMTMXNZ",
00932    "KZZGYHZI[H[GZFXFVGUHTJSMP[O_Na RXFVHUJTNRWQ[P^O`NaLbJbIaI`J_K`Ja ROMYM",
00933    "H\\YMU[T^RaObLbJaI`I_J^K_J` RXMT[S^QaOb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ",
00934    "H]PFJ[ RQFK[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\W RMFQF",
00935    "LYUFTGUHVGUF RMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW",
00936    "LYVFUGVHWGVF RNQOOQMTMUNUQR[Q^P`OaMbKbJaJ`K_L`Ka RSMTNTQQ[P^O`Mb",
00937    "H\\PFJ[ RQFK[ RXNWOXPYOYNXMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW RMFQF",
00938    "MYUFQTPXPZQ[T[VYWW RVFRTQXQZR[ RRFVF",
00939    "AbBQCOEMHMINIPHTF[ RGMHNHPGTE[ RHTJPLNNMPMRNSOSQP[ RPMRORQO[ RRTTPVNXMZM\\N]O]Q[W[Z\\[ RZM\\O\\QZWZZ[[^[`YaW",
00940    "F]GQHOJMMMNNNPMTK[ RLMMNMPLTJ[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\W",
00941    "I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN",
00942    "G\\HQIOKMNMONOPNTJb RMMNNNPMTIb RNTOQQNSMUMWNXOYQYTXWVZS[Q[OZNWNT RWNXPXTWWUZS[ RFbMb",
00943    "H\\XMRb RYMSb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RObVb",
00944    "IZJQKOMMPMQNQPPTN[ ROMPNPPOTM[ RPTRPTNVMXMYNYOXPWOXN",
00945    "J[XOXPYPYOXNUMRMONNONQORVVWW RNPOQVUWVWYVZS[P[MZLYLXMXMY",
00946    "KYTFPTOXOZP[S[UYVW RUFQTPXPZQ[ RNMWM",
00947    "F]GQHOJMMMNNNQLWLYN[ RLMMNMQKWKYLZN[P[RZTXVT RXMVTUXUZV[Y[[Y\\W RYMWTVXVZW[",
00948    "H\\IQJOLMOMPNPQNWNYP[ RNMONOQMWMYNZP[Q[TZVXXUYQYMXMYO",
00949    "C`DQEOGMJMKNKQIWIYK[ RIMJNJQHWHYIZK[M[OZQXRV RTMRVRYSZU[W[YZ[X\\V]R]M\\M]O RUMSVSYU[",
00950    "H\\KQMNOMRMSOSR RQMRORRQVPXNZL[K[JZJYKXLYKZ RQVQYR[U[WZYW RYNXOYPZOZNYMXMVNTPSRRVRYS[",
00951    "G\\HQIOKMNMONOQMWMYO[ RMMNNNQLWLYMZO[Q[SZUXWT RZMV[U^SaPbMbKaJ`J_K^L_K` RYMU[T^RaPb",
00952    "H\\YMXOVQNWLYK[ RLQMOOMRMVO RMOONRNVOXO RLYNYRZUZWY RNYR[U[WYXW",
00953    "JYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb RRDQGQKRN RRVQYQ]R`",
00954    "NVRBRb",
00955    "KZPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb RRDSGSKRN RRVSYS]R`",
00956    "F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O"
00957   }
00958 },
00959 //
00960 //   Font # 4 : HersheySerifSymbol 
00961 //
00962 {"HersheySerifSymbol",
00963   {
00964    "",   "F_JMILIJJHLGNGPHQIRKSP RIJKHMHOIPJQLRPR[ R[M\\L\\J[HYGWGUHTISKRP R\\JZHXHVIUJTLSPS[",   "F^IGJKKMMOPPTPWOYMZK[G RIGJJKLMNPOTOWNYLZJ[G RPONPMQLSLVMXOZQ[S[UZWXXVXSWQVPTO RPPNQMSMVNY RVYWVWSVQTP",   "F^MJMV RNKNU RVKVU RWJWV RIGKIMJPKTKWJYI[G RIYKWMVPUTUWVYW[Y",   "F^[ILIJJILINJPLQNQPPQNQLPJ[J RIMJOKPMQ RQMPKOJMI RIXXXZW[U[SZQXPVPTQSSSUTWIW R[TZRYQWP RSTTVUWWX",   "F]OUMTLTJUIWIXJZL[M[OZPXPWOUJPINIKJILHOGSGWHYJZLZOYRVUUWUYV[X[YZZX RMSKPJNJKKILH RSGVHXJYLYOXRVU",   "G_HKKHMKMV RJILLLV RMKPHRKRU ROIQLQU RRKUHWKW[ RTIVLV[ RWKZH[J\\M\\P[SZUXWUYP[ RYIZJ[M[PZSYUWWTYP[",   "F^ISMSLRKOKMLJNHQGSGVHXJYMYOXRWS[S RITOTMRLOLMMJOHQG RSGUHWJXMXOWRUT[T RKXYX RKYYY",   "F_GLJIMLMX RIJLMLX RMLPISLSX ROJRMRX RSLVIYLYW[Y RUJXMXXZZ]W",   "G]ZIJY RZIWJQJ RXKUKQJ RZIYLYR RXKXNYR RQRJR RPSMSJR RQRQY RPSPVQY",   "F^HOJKOU RJMOWRPWPZO[M[KZIXHWHUITKTMUPVRWUWXUZ RWHVIUKUMWQXTXWWYUZ",   "F^IOLLPN RKMOORLUN RQMTOWLYN RVMXO[L RIULRPT RKSOURRUT RQSTUWRYT RVSXU[R",   "F^JHNJPLQOQRPUNWJY RJHMIOJQLRO RRRQUOWMXJY RZHWIUJSLRO RRRSUUWWXZY RZHVJTLSOSRTUVWZY RIP[P RIQ[Q",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",   "",
00965    "JZ",
00966    "MWRFQHRTSHRF RRHRN RRYQZR[SZRY",
00967    "I[KFR[YF RMLWL",
00968    "G]OFOb RUFUb RJQZQ RJWZW",
00969    "I\\XFX[ RKFXF RPPXP RK[X[",
00970    "F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT",
00971    "F_[NZO[P\\O\\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\\Z\\Y RM[KZJXJUKSMQ RMKNMVXXZZ[",
00972    "F^JJQJUKWLYNZQZSYVWXUYQZJZ RORZR",
00973    "KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\T`",
00974    "KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\P`",
00975    "JZRFRR RMIWO RWIMO",
00976    "E_RIR[ RIR[R",
00977    "MWR[QZRYSZS\\R^Q_",
00978    "E_IR[R",
00979    "MWRYQZR[SZRY",
00980    "G][BIb",
00981    "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF",
00982    "H\\NJPISFS[ RRGR[ RN[W[",
00983    "H\\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV",
00984    "H\\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[",
00985    "H\\THT[ RUFU[ RUFJUZU RQ[X[",
00986    "H\\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF",
00987    "H\\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN",
00988    "H\\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[",
00989    "H\\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO",
00990    "H\\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[",
00991    "MWRMQNROSNRM RRYQZR[SZRY",
00992    "MWRMQNROSNRM RR[QZRYSZS\\R^Q_",
00993    "F^ZIJRZ[",
00994    "E_IO[O RIU[U",
00995    "F^JIZRJ[",
00996    "I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY",
00997    "F^ISJQLPNPPQTTVUXUZT[Q RISJPLONOPPTSVTXTZS[Q RIW[W RI[[[",
00998    "H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
00999    "G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
01000    "H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
01001    "H\\RFJ[ RRFZ[ RRIY[ RKZYZ RJ[Z[",
01002    "G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
01003    "H]RFR[ RSFS[ RPKMLLMKOKRLTMUPVUVXUYTZRZOYMXLUKPK RPKNLMMLOLRMTNUPV RUVWUXTYRYOXMWLUK ROFVF RO[V[",
01004    "I[NFN[ ROFO[ RKFZFZLYF RK[R[",
01005    "F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
01006    "MXRFR[ RSFS[ ROFVF RO[V[",
01007    "F]GQHOJMMMNNNPMUMXNZO[ RLMMNMPLULXMZO[Q[SZUXWUXRYMYIXGVFTFRHRJSMUPWRZT RSZUWVUWRXMXIWGVF",
01008    "F\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[",
01009    "H\\RFK[ RRFY[ RRIX[ RI[O[ RU[[[",
01010    "F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
01011    "G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\F RI[O[",
01012    "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
01013    "F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\F RH[O[ RU[\\[",
01014    "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF ROMOT RUMUT ROPUP ROQUQ",
01015    "G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
01016    "H]KFRPJ[ RJFQP RJFYFZLXF RKZXZ RJ[Y[ZUX[",
01017    "I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
01018    "H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\\F RO[V[",
01019    "I[TMVNXPXOWNTMQMNNMOLQLSMUOWSZ RQMONNOMQMSNUSZT\\T^S_Q_",
01020    "G]JXK[O[MWKSJPJLKIMGPFTFWGYIZLZPYSWWU[Y[ZX RMWLTKPKLLINGPF RTFVGXIYLYPXTWW RKZNZ RVZYZ",
01021    "G]KEJJ RZEYJ RONNS RVNUS RKWJ\\ RZWY\\ RKGYG RKHYH ROPUP ROQUQ RKYYY RKZYZ",
01022    "G^RFR[ RSFS[ RIMJLLMMQNSOTQU RJLKMLQMSNTQUTUWTXSYQZM[L RTUVTWSXQYM[L\\M ROFVF RO[V[",
01023    "H\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[",
01024    "KYOBOb RPBPb ROBVB RObVb",
01025    "E_RIQJRKSJRI RIYHZI[JZIY R[YZZ[[\\Z[Y",
01026    "KYTBTb RUBUb RNBUB RNbUb",
01027    "F^RBR[ RI[[[",
01028    "G]I][]",
01029    "E[f:~:",
01030    "G^QMNNLPKRJUJXKZN[P[RZUWWTYPZM RQMONMPLRKUKXLZN[ RQMSMUNVPXXYZZ[ RSMTNUPWXXZZ[[[",
01031    "G\\TFQGOIMMLPKTJZIb RTFRGPINMMPLTKZJb RTFVFXGYHYKXMWNTOPO RVFXHXKWMVNTO RPOTPVRWTWWVYUZR[P[NZMYLV RPOSPURVTVWUYTZR[",
01032    "I[KMMMONPPU_VaWb RMMNNOPT_UaWbYb RZMYOWRM]K`Jb",
01033    "I\\VNTMRMONMQLTLWMYNZP[R[UZWWXTXQWOSJRHRFSEUEWFYH RRMPNNQMTMXNZ RR[TZVWWTWPVNTKSISGTFVFYH",
01034    "I[XPVNTMPMNNNPPRSS RPMONOPQRSS RSSNTLVLXMZP[S[UZWX RSSOTMVMXNZP[",
01035    "G]UFOb RVFNb RQMMNKPJSJVKXMZP[S[WZYXZUZRYPWNTMQM RQMNNLPKSKVLXNZP[ RS[VZXXYUYRXPVNTM",
01036    "H\\IPKNMMOMQNROSRSVRZOb RJOLNPNRO RZMYPXRSYP^Nb RYMXPWRSY",
01037    "G]HQIOKMNMONOPNTL[ RMMNNNPMTK[ RNTPPRNTMVMXNYOYRXWUb RVMXOXRWWTb",
01038    "LXRMPTOXOZP[S[UYVW RSMQTPXPZQ[",
01039    "G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb RJWLYNZQZTYWWYU RZOXNVNTPRSPYNb",
01040    "H\\NMJ[ ROMK[ RXMYNZNYMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW",
01041    "H\\KFMFOGPHQJWXXZY[ RMFOHPJVXWZY[Z[ RRMJ[ RRMK[",
01042    "F]MMGb RNMHb RMPLVLYN[P[RZTXVU RXMUXUZV[Y[[Y\\W RYMVXVZW[",
01043    "H\\NML[ ROMNSMXL[ RYMXQVU RZMYPXRVUTWQYOZL[ RKMOM",
01044    "I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN",
01045    "G]PNL[ RPNM[ RVNV[ RVNW[ RIPKNNM[M RIPKONN[N",
01046    "I\\TFQGOJNLMOLTLXMZO[Q[TZVWWUXRYMYIXGVFTF RTFRGPJOLNOMTMXNZO[ RQ[SZUWVUWRXMXIWGVF RNPWP",
01047    "H[LVMYNZP[R[UZWWXTXQWOVNTMRMONMQLTHb RR[TZVWWTWPVN RRMPNNQMTIb",
01048    "H][MQMNNLQKTKWLYMZO[Q[TZVWWTWQVOUNSM RQMONMQLTLXMZ RQ[SZUWVTVPUN RUN[N",
01049    "H\\SNP[ RSNQ[ RJPLNOMZM RJPLOONZN",
01050    "H\\IQJOLMOMPNPPNVNYP[ RNMONOPMVMYNZP[Q[TZVXXUYRYOXMWNXOYR RXUYO",
01051    "F]JQLOONNMLNJQITIWJZK[M[OZQWRT RIWJYKZMZOYQW RQTQWRZS[U[WZYWZTZQYNXMWNYOZQ RQWRYSZUZWYYW RIPKNNM[M RIPKONN[N",
01052    "F]JQLOONNMLNJQITIWJZK[M[OZQWRT RIWJYKZMZOYQW RQTQWRZS[U[WZYWZTZQYNXMWNYOZQ RQWRYSZUZWYYW",
01053    "IZTFRGQHQIRJUKXK RUKQLOMNONQPSSTVT RUKRLPMOOOQQSST RSTOUMVLXLZN\\S^T_TaRbPb RSTPUNVMXMZO\\S^",
01054    "F]UFOb RVFNb RGQHOJMMMNNNPMUMXOZRZTYWVYS RLMMNMPLULXMZO[R[TZVXXUYS[M",
01055    "I[TFRGQHQIRJUKZKZJWKSMPOMRLULWMYP[S]T_TaSbQbPa RULQONRMUMWNYP[",
01056    "JYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb RRDQGQKRN RRVQYQ]R`",
01057    "NVRBRb",
01058    "KZPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb RRDSGSKRN RRVSYS]R`",
01059    "F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O"
01060   }
01061 }
01062 };
01063 //
01064 //##################################################################################
01065 //                       GLDriverQt::plotHText
01066 //##################################################################################
01067 //
01068 void GLDriverQt::plotHText(double x, double y, const char *s, const char *font, double size, 
01069 double rotation, double horiz_just, double vert_just, int color, double *rgb)
01070 {
01071     double z  = 0.0;
01072     double nx = 0.0;
01073     double ny = 0.0;
01074     double nz = 1.0;
01075     plotHText(x,y, z, nx, ny, nz,s,font, size, rotation,
01076     horiz_just, vert_just,  color, rgb);
01077 }
01078 
01079 void GLDriverQt::plotHText(double x, double y, double z, 
01080 double nx, double ny, double nz, const char *s, const char *font, double size, 
01081 double rotation, double horiz_just, double vert_just, int color, double *rgb)
01082 {
01083     long i; long j; int k;
01084     long fontIndex;
01085     long fontCount = 5;
01086 //
01087 //   Select Font 
01088 //      
01089     fontIndex = 0;
01090     if(font != 0)
01091     {
01092     if(strlen(font) != 0)
01093     {
01094       for(k = 0; k < fontCount; k++) 
01095       {
01096        if(strcmp(font,Hfont[k].name) == 0) 
01097        fontIndex = k;
01098       }
01099     }
01100     }
01101 //
01102 //  Set up rotation variables
01103 //
01104     double nNorm = sqrt(nx*nx + ny*ny + nz*nz);
01105     nx = nx/nNorm;
01106     ny = ny/nNorm;
01107     nz = nz/nNorm;
01108     double nNormXY          = sqrt(nx*nx + ny*ny);
01109     double nxOverNormXY     = nx/nNormXY;
01110     double nyOverNormXY     = ny/nNormXY;
01111     double nx2ny2OverNormXY = (nx*nx + ny*ny)/nNormXY;
01112     double xRot;
01113     double yRot;
01114     double zRot;
01115     
01116 //
01117     double textScale;        // fractional size of text
01118     double hersheyHeight;    // height of font in Hershey plotting units
01119     double hersheyWidth;     // widith of string in Hershey plotting units
01120     double alpha;            // scale factor between Hershey and [0,1]x[0,1] units
01121 
01122     int      strLength; 
01123     char*    glyphCode;
01124 
01125     double xCorner;
01126     double yCorner;
01127    
01128     if(fabs(size) <= 1.0e-05) size = .05;  
01129     textScale     = size;  
01130 //
01131 //  Compute string metrics in hershey units 
01132 
01133     hersheyHeight = HERSHEY_HEIGHT;
01134 
01135     //  Width 
01136 
01137     hersheyWidth  = 0;
01138     strLength = (int)strlen(s);
01139     for(i = 0; i < strLength; i++)
01140     {
01141     glyphCode      =  Hfont[fontIndex].glyphs[int(s[i])];
01142     hersheyWidth   +=  double(glyphCode[1] - glyphCode[0]);
01143     }
01144 
01145     alpha     = textScale/hersheyHeight;
01146 
01147     xCorner    = (-0.5 - .5*(horiz_just))*hersheyWidth;
01148     yCorner    = (-0.5 - .5*(vert_just))*hersheyHeight;
01149 //
01150 //  Draw the text 
01151 //    
01152     double           xS, yS;
01153     double            theta;
01154     double          xt,xtmp;
01155     double          yt,ytmp;
01156     double          zt;
01157 
01158     long          charCount;
01159 
01160     double xCharPlot[300];
01161     double yCharPlot[300];
01162     double zCharPlot[300];
01163 
01164     double  xInit, xFinal;
01165     double xStart, xEnd; 
01166     double xWidth;
01167     int    stringSize;
01168 
01169     int dash_pattern      = 0; 
01170     unsigned user_pattern = 0;
01171     double width          = 0.0; 
01172 
01173     strLength = (int)strlen(s);
01174 
01175     xEnd      = xCorner;
01176     theta     = (rotation/180.0)*3.14159265359;
01177 
01178     for(i = 0; i < strLength; i++)
01179     {
01180     glyphCode  = Hfont[fontIndex].glyphs[int(s[i])];
01181     stringSize = (int)strlen(glyphCode);
01182 
01183     if(stringSize != 0)
01184     {
01185     charCount   = 0;
01186     xInit  = int(glyphCode[0])    - 82;
01187     xFinal = int(glyphCode[1])    - 82;
01188     xStart = xEnd   - xInit;
01189     xWidth = xFinal - xInit;
01190      
01191     for(j = 1; j <  stringSize/2; j++)
01192     {
01193     xS = int(glyphCode[2*j])    - 82;
01194     yS = 82 - int(glyphCode[2*j +1]);  
01195              
01196         // Invert y since I'm plotting in a Cartesian coordinate 
01197         // system. 
01198 
01199         if((xS == -50)&&(yS == 0))
01200         {
01201          linesEx(xCharPlot, yCharPlot, zCharPlot,charCount, dash_pattern, user_pattern, width, 
01202          color, rgb);
01203          charCount = 0;
01204         }
01205         else if (j == (stringSize/2)-1)
01206         {
01207          xtmp = alpha*double(xS) +   alpha*(xStart);
01208          ytmp = alpha*double(yS) +   alpha*(yCorner) 
01209               - alpha*(HERSHEY_BOTTOMLINE);
01210 
01211          xt   = cos(theta)*xtmp - sin(theta)*ytmp;
01212          yt   = sin(theta)*xtmp + cos(theta)*ytmp;
01213         
01214          if(fabs(nz - 1.0) < 1.0e-5)
01215          {
01216          xCharPlot[charCount] =  x + xt;
01217          yCharPlot[charCount] =  y + yt;
01218          zCharPlot[charCount] =  0.0;
01219          }
01220          else
01221          {
01222          // first transform
01223 
01224          xRot  = xt;
01225          yRot  = yt*nz;
01226          zRot  = yt*nx2ny2OverNormXY;
01227          //
01228          // second transform 
01229          //
01230          xt = -nyOverNormXY*xRot - nxOverNormXY*yRot;
01231          yt =  nxOverNormXY*xRot - nyOverNormXY*yRot;
01232          zt = zRot;
01233     
01234          xCharPlot[charCount] =  x + xt;
01235          yCharPlot[charCount] =  y + yt;
01236          zCharPlot[charCount] =  z + zt;
01237          }
01238 
01239          charCount++;
01240 
01241          linesEx(xCharPlot, yCharPlot, zCharPlot, charCount, dash_pattern, user_pattern, width, 
01242          color, rgb);
01243          charCount = 0;
01244         }
01245         else
01246         {
01247          xtmp = alpha*double(xS) +   alpha*(xStart);
01248          ytmp = alpha*double(yS) +   alpha*(yCorner) 
01249               - alpha*(HERSHEY_BOTTOMLINE);
01250 
01251          xt   = cos(theta)*xtmp - sin(theta)*ytmp;
01252          yt   = sin(theta)*xtmp + cos(theta)*ytmp;
01253 
01254          if(fabs(nz - 1.0) < 1.0e-5)
01255          {
01256          xCharPlot[charCount] =  x + xt;
01257          yCharPlot[charCount] =  y + yt;
01258          zCharPlot[charCount] =  0.0;
01259          }
01260          else
01261          {
01262          // first transform
01263 
01264          xRot  = xt;
01265          yRot  = yt*nz;
01266          zRot  = yt*nx2ny2OverNormXY;
01267          //
01268          // second transform 
01269          //
01270          xt = -nyOverNormXY*xRot - nxOverNormXY*yRot;
01271          yt =  nxOverNormXY*xRot - nyOverNormXY*yRot;
01272          zt = zRot;
01273     
01274          xCharPlot[charCount] =  x + xt;
01275          yCharPlot[charCount] =  y + yt;
01276          zCharPlot[charCount] =  z + zt;
01277          }
01278 
01279          charCount++;
01280         }
01281     }
01282     xEnd      += xWidth;
01283     }
01284 
01285     }
01286 }
01287  

Generated on Tue Feb 17 11:57:13 2009 for QtGLgraphics by  doxygen 1.5.1-p1