summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/pmpostdir/ppsout.ch
blob: 87e5c25372cbe58c4e106d134a43c31c45d37d7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
%
%
% change file of psout.w for jMetaPost (CWEB version)
% Akira Kakuto (translated the WEB version)
%
%

@x
#include <math.h>
@y
#include <math.h>
#include <ptexenc/ptexenc.h>
#ifdef UPMP
#include <ptexenc/unicode.h>
#endif
@z

% Treat all Kanji fonts as used
@x
    if ( mp->font_info[p].qqqq.b3==mp_used ) 
@y
    if ( mp->font_info[p].qqqq.b3==mp_used || mp->font_id[f]!=0)
@z

%
% Kanji string output
@x
static void mp_print_initial_comment(MP mp,mp_edge_object *hh, int prologues);
@y
static void mp_print_initial_comment(MP mp,mp_edge_object *hh, int prologues);

#define Hi(x) (((x) >> 8) & 0xff)
#define Lo(x) ((x) & 0xff)

@ @c
static void mp_ps_kanji_string_out (MP mp, char *s)
{
  int i, c;
  size_t len;

  len = strlen(s);
  i=0;
  mp_ps_print(mp, "<");
  while (i<len) {
    if ( mp->ps->ps_offset+5>mp->max_print_line )
      mp_ps_print_ln(mp);
#ifdef UPMP
    c=toDVI(fromBUFF((unsigned char*)s, len, i));
    i=i+multistrlen((unsigned char*)s, len, i);
    if (isinternalUPTEX() && c>65535) {
      int cx=UTF32toUTF16HS(c); /* High surrogate */
      mp_hex_digit_out(mp, Hi(cx) / 16);
      mp_hex_digit_out(mp, Hi(cx) % 16);
      mp_hex_digit_out(mp, Lo(cx) / 16);
      mp_hex_digit_out(mp, Lo(cx) % 16);
      c=UTF32toUTF16LS(c); /* Low surrogate */
    }
#else
    c=toDVI(fromBUFF((unsigned char*)s, i+2, i));
    i=i+2;
#endif
    mp_hex_digit_out(mp, Hi(c) / 16);
    mp_hex_digit_out(mp, Hi(c) % 16);
    mp_hex_digit_out(mp, Lo(c) / 16);
    mp_hex_digit_out(mp, Lo(c) % 16);
    };
  mp_ps_print(mp, ">");
};
@z

@x
  mp_ps_print_nl(mp, "%%Creator: MetaPost ");
@y
  mp_ps_print_nl(mp, "%%Creator: MetaPost (" P_UP "MetaPost) ");
@z

%
% Call Kanji string output routine if the font is JFM.
@x
        mp_ps_string_out(mp, gr_text_p(p),gr_text_l(p));
@y
        if (mp->font_id[gr_font_n(p)]!=0)
           mp_ps_kanji_string_out(mp, gr_text_p(p));
        else
           mp_ps_string_out(mp, gr_text_p(p),gr_text_l(p));
@z