~activity/openobject-server/trunk

« back to all changes in this revision

Viewing changes to bin/pychart/pscanvas.py

  • Committer: Dainius Malachovskis
  • Date: 2009-06-11 21:01:55 UTC
  • mfrom: (1235.2.5 server)
  • Revision ID: dainius.malachovskis@sandas.eu-20090611210155-ql9k1pd0dnr9avr0
merged

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 
21
21
comment_p = 0
22
22
 
 
23
# Converts BMP Unicode character to Postscript character name.  In
 
24
# theory, we should be able to just use ISOLatin1Encoding, but this
 
25
# doesn't seem to work.
 
26
_unicode_latin1_conversion_table = {
 
27
    0x0027: 'quotesingle',
 
28
    0x0060: 'grave',
 
29
    0x00A0: 'space',
 
30
    0x00A1: 'exclamdown',
 
31
    0x00A2: 'cent',
 
32
    0x00A3: 'sterling',
 
33
    0x00A4: 'currency',
 
34
    0x00A5: 'yen',
 
35
    0x00A6: 'brokenbar',
 
36
    0x00A7: 'section',
 
37
    0x00A8: 'dieresis',
 
38
    0x00A9: 'copyright',
 
39
    0x00AA: 'ordfeminine',
 
40
    0x00AB: 'guillemotleft',
 
41
    0x00AC: 'logicalnot',
 
42
    0x00AD: 'hyphen',
 
43
    0x00AE: 'registered',
 
44
    0x00AF: 'macron',
 
45
    0x00B0: 'degree',
 
46
    0x00B1: 'plusminus',
 
47
    0x00B2: 'twosuperior',
 
48
    0x00B3: 'threesuperior',
 
49
    0x00B4: 'acute',
 
50
    0x00B5: 'mu',
 
51
    0x00B6: 'paragraph',
 
52
    0x00B7: 'periodcentered',
 
53
    0x00B8: 'cedilla',
 
54
    0x00B9: 'onesuperior',
 
55
    0x00BA: 'ordmasculine',
 
56
    0x00BB: 'guillemotright',
 
57
    0x00BC: 'onequarter',
 
58
    0x00BD: 'onehalf',
 
59
    0x00BE: 'threequarters',
 
60
    0x00BF: 'questiondown',
 
61
    0x00C0: 'Agrave',
 
62
    0x00C1: 'Aacute',
 
63
    0x00C2: 'Acircumflex',
 
64
    0x00C3: 'Atilde',
 
65
    0x00C4: 'Adieresis',
 
66
    0x00C5: 'Aring',
 
67
    0x00C6: 'AE',
 
68
    0x00C7: 'Ccedilla',
 
69
    0x00C8: 'Egrave',
 
70
    0x00C9: 'Eacute',
 
71
    0x00CA: 'Ecircumflex',
 
72
    0x00CB: 'Edieresis',
 
73
    0x00CC: 'Igrave',
 
74
    0x00CD: 'Iacute',
 
75
    0x00CE: 'Icircumflex',
 
76
    0x00CF: 'Idieresis',
 
77
    0x00D0: 'Eth',
 
78
    0x00D1: 'Ntilde',
 
79
    0x00D2: 'Ograve',
 
80
    0x00D3: 'Oacute',
 
81
    0x00D4: 'Ocircumflex',
 
82
    0x00D5: 'Otilde',
 
83
    0x00D6: 'Odieresis',
 
84
    0x00D7: 'multiply',
 
85
    0x00D8: 'Oslash',
 
86
    0x00D9: 'Ugrave',
 
87
    0x00DA: 'Uacute',
 
88
    0x00DB: 'Ucircumflex',
 
89
    0x00DC: 'Udieresis',
 
90
    0x00DD: 'Yacute',
 
91
    0x00DE: 'Thorn',
 
92
    0x00DF: 'germandbls',
 
93
    0x00E0: 'agrave',
 
94
    0x00E1: 'aacute',
 
95
    0x00E2: 'acircumflex',
 
96
    0x00E3: 'atilde',
 
97
    0x00E4: 'adieresis',
 
98
    0x00E5: 'aring',
 
99
    0x00E6: 'ae',
 
100
    0x00E7: 'ccedilla',
 
101
    0x00E8: 'egrave',
 
102
    0x00E9: 'eacute',
 
103
    0x00EA: 'ecircumflex',
 
104
    0x00EB: 'edieresis',
 
105
    0x00EC: 'igrave',
 
106
    0x00ED: 'iacute',
 
107
    0x00EE: 'icircumflex',
 
108
    0x00EF: 'idieresis',
 
109
    0x00F0: 'eth',
 
110
    0x00F1: 'ntilde',
 
111
    0x00F2: 'ograve',
 
112
    0x00F3: 'oacute',
 
113
    0x00F4: 'ocircumflex',
 
114
    0x00F5: 'otilde',
 
115
    0x00F6: 'odieresis',
 
116
    0x00F7: 'divide',
 
117
    0x00F8: 'oslash',
 
118
    0x00F9: 'ugrave',
 
119
    0x00FA: 'uacute',
 
120
    0x00FB: 'ucircumflex',
 
121
    0x00FC: 'udieresis',
 
122
    0x00FD: 'yacute',
 
123
    0x00FE: 'thorn',
 
124
    0x00FF: 'ydieresis',
 
125
}
 
126
 
23
127
class T(basecanvas.T):
24
128
    def __init__(self, fname):
25
129
        basecanvas.T.__init__(self)
131
235
        if (self.__font_name == font_name and self.__font_size == size):
132
236
            pass
133
237
        else:
134
 
            id = self.__intern_font(font_name)
135
 
            self.__write("%g %s\n" % (size, id))
 
238
            font_id = self.__intern_font(font_name)
 
239
            self.__write("%g %s\n" % (size, font_id))
136
240
            self.__font_name = font_name
137
241
            self.__font_size = size
138
 
        self.__write("(%s) show\n" % (str))
 
242
 
 
243
        self.__write("(")
 
244
        # Convert unicode to Postscript Latin code.    
 
245
        for ch in str:
 
246
            # Note: Escaping of ()\  is done by the basecanvas.show, so
 
247
            # we need not worry about them here. Perhaps we should move
 
248
            # that code here??
 
249
            n = ord(ch)
 
250
            if n > 128 or ch in ("'", "`"):
 
251
                ent = _unicode_latin1_conversion_table.get(n, None)
 
252
                if not ent:
 
253
                    self.__write(ch)
 
254
                else:
 
255
                    self.__write(") show /%s glyphshow (" % ent)
 
256
            else:
 
257
                self.__write(ch)
 
258
        self.__write(") show\n")
139
259
 
140
260
    def _path_polygon(self, points):
141
261
        if (len(points) == 4 
213
333
                fp.write("% " + line + "\n")
214
334
 
215
335
        fp.write(preamble_text)
216
 
        for name, id in self.__font_ids.items():
217
 
            fp.write("/%s {/%s findfont SF} def\n" % (id, name))
 
336
        for name, font_id in self.__font_ids.items():
 
337
            fp.write("/%s {/%s findfont SF} def\n" % (font_id, name))
218
338
        fp.write("%%EndProlog\n%%Page: 1 1\n")
219
339
 
220
340