111
|
1 typedef unsigned char byte;
|
|
2 typedef unsigned int uint;
|
|
3 typedef unsigned long ulong;
|
|
4 typedef ulong gs_char;
|
|
5 typedef struct gs_show_enum_s gs_show_enum;
|
|
6 typedef struct gs_font_s gs_font;
|
|
7 typedef struct gx_font_stack_item_s {
|
|
8 gs_font *font;
|
|
9 } gx_font_stack_item;
|
|
10 typedef struct gx_font_stack_s {
|
|
11 gx_font_stack_item items[1 + 5 ];
|
|
12 } gx_font_stack;
|
|
13 struct gs_show_enum_s {
|
|
14 gx_font_stack fstack;
|
|
15 };
|
|
16 typedef enum {
|
|
17 ft_composite = 0,
|
|
18 } font_type;
|
|
19 struct gs_font_s {
|
|
20 font_type FontType;
|
|
21 };
|
|
22 typedef enum {
|
|
23 fmap_escape = 3,
|
|
24 fmap_shift = 8
|
|
25 } fmap_type;
|
|
26 typedef struct gs_type0_data_s {
|
|
27 fmap_type FMapType;
|
|
28 } gs_type0_data;
|
|
29 gs_type0_next_char(register gs_show_enum *penum)
|
|
30 {
|
|
31 const byte *p;
|
|
32 int fdepth;
|
|
33 gs_font *pfont;
|
|
34 gs_type0_data *pdata;
|
|
35 uint fidx;
|
|
36 gs_char chr;
|
|
37 for (; pfont->FontType == ft_composite; )
|
|
38 {
|
|
39 fmap_type fmt;
|
|
40 switch ( fmt )
|
|
41 {
|
|
42 do {} while (0);
|
|
43 rdown:
|
|
44 continue;
|
|
45 case fmap_shift:
|
|
46 p++;
|
|
47 do {} while (0);
|
|
48 goto rdown;
|
|
49 }
|
|
50 break;
|
|
51 }
|
|
52 up:
|
|
53 while ( fdepth > 0 )
|
|
54 {
|
|
55 switch ( pdata->FMapType )
|
|
56 {
|
|
57 default:
|
|
58 continue;
|
|
59 case fmap_escape:
|
|
60 fidx = *++p;
|
|
61 do {} while (0);
|
|
62 if ( fidx == chr && fdepth > 1 )
|
|
63 goto up;
|
|
64 down:
|
|
65 fdepth--;
|
|
66 do {} while (0);
|
|
67 }
|
|
68 break;
|
|
69 }
|
|
70 while ( (pfont = penum->fstack.items[fdepth].font)->FontType == ft_composite )
|
|
71 ;
|
|
72 }
|