@@ -351,6 +351,8 @@ void GDLGStream::GetGeometry( long& xSize, long& ySize)
351
351
{
352
352
bool debug = false ;
353
353
static char errmsg[] = " No such font: " ;
354
+ static std::string begin_unicode=" #[" ;
355
+ static std::string end_unicode=" ]" ;
354
356
static const size_t errmsglen = strlen (errmsg);
355
357
static double fact[]={1 .,0.9 ,0.666 ,0.5 ,0.45 ,0.33 ,0.2 };
356
358
double base=1.0 ;
@@ -670,8 +672,8 @@ void GDLGStream::GetGeometry( long& xSize, long& ySize)
670
672
case ' C' : // tick sign
671
673
out += " " ; break ;
672
674
break ;
673
- default :
674
- out.append (in, i, 1 );
675
+ default :
676
+ if (( unsigned char )in[i] > 127 ) { out+=begin_unicode; out+= to_string (( unsigned char )in[i]); out+=end_unicode; } else out .append (in, i, 1 ); // use unicode
675
677
break ;
676
678
}
677
679
break ;
@@ -775,7 +777,7 @@ void GDLGStream::GetGeometry( long& xSize, long& ySize)
775
777
case ' z' : out += " #(2305)" ; break ; // ?
776
778
case ' m' : out += " #(899)" ; break ; // smallest circle - dot
777
779
default :
778
- out.append (in, i, 1 );
780
+ if (( unsigned char )in[i] > 127 ) { out+=begin_unicode; out+= to_string (( unsigned char )in[i]); out+=end_unicode; } else out .append (in, i, 1 ); // use unicode
779
781
break ;
780
782
}
781
783
break ;
@@ -815,7 +817,7 @@ void GDLGStream::GetGeometry( long& xSize, long& ySize)
815
817
case ' "' : out += " #(2831)" ; break ; case ' ^' : case ' ~' : out += " #(2931)" ; break ; // [yu]
816
818
case 127u : case ' _' : out += " #(2832)" ; break ; case ' ;' : out += " #(2932)" ; break ; // [ya]
817
819
default :
818
- out.append (in, i, 1 );
820
+ if (( unsigned char )in[i] > 127 ) { out+=begin_unicode; out+= to_string (( unsigned char )in[i]); out+=end_unicode; } else out .append (in, i, 1 ); // use unicode
819
821
break ;
820
822
}
821
823
break ;
@@ -851,9 +853,9 @@ void GDLGStream::GetGeometry( long& xSize, long& ySize)
851
853
case ' I' : case ' i' :
852
854
case ' O' : case ' o' :
853
855
case ' P' : case ' p' :
854
- out += " #g" ;
856
+ out += " #g" ; out. append (in, i, 1 ); break ;
855
857
default :
856
- out.append (in, i, 1 );
858
+ if (( unsigned char )in[i] > 127 ) { out+=begin_unicode; out+= to_string (( unsigned char )in[i]); out+=end_unicode; } else out .append (in, i, 1 ); // use unicode
857
859
break ;
858
860
}
859
861
break ;
@@ -877,13 +879,13 @@ void GDLGStream::GetGeometry( long& xSize, long& ySize)
877
879
case 190u : out += " #(271)" ; break ; // 3/4
878
880
case 215u : out += " #(846)" ; break ; // cross sign
879
881
case 223u : out += " #fs#gb" ; out += internalFontCodes[curr_fnt]; break ; // beta script
880
- default :
881
- out.append (in, i, 1 );
882
+ default :
883
+ if (( unsigned char )in[i] > 127 ) { out+=begin_unicode; out+= to_string (( unsigned char )in[i]); out+=end_unicode; } else out .append (in, i, 1 ); // use unicode
882
884
break ;
883
885
}
884
886
break ;
885
887
default : // simply pass the char
886
- out.append (in, i, 1 );
888
+ if (( unsigned char )in[i] > 127 ) { out+=begin_unicode; out+= to_string (( unsigned char )in[i]); out+=end_unicode; } else out .append (in, i, 1 ); // use unicode
887
889
break ;
888
890
}
889
891
curr_fnt = next_fnt;
@@ -898,7 +900,7 @@ void GDLGStream::GetGeometry( long& xSize, long& ySize)
898
900
retrn:
899
901
activeFontCodeNum = curr_fnt;
900
902
if (stringLength) *stringLength=0 ;
901
- if (debug) cout << " GDLGStream::TranslateFormatCodes(\" " << in << " \" ) = \" " << out << " \" " << endl;
903
+ cout << " ERROR: GDLGStream::TranslateFormatCodes(\" " << in << " \" ) = \" " << out << " \" " << endl;
902
904
return " " ;
903
905
}
904
906
0 commit comments