mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-08 12:20:15 +00:00
1488 lines
29 KiB
Tcl
1488 lines
29 KiB
Tcl
# mkpsenc.tcl --
|
|
#
|
|
# This file generates the postscript prolog used by Tk.
|
|
|
|
namespace eval ::tk {
|
|
# Creates Postscript encoding vector for ISO-8859-1 (could theoretically
|
|
# handle any 8-bit encoding, but Tk never generates characters outside
|
|
# ASCII).
|
|
#
|
|
proc CreatePostscriptEncoding {} {
|
|
variable psglyphs
|
|
# Now check for known. Even if it is known, it can be other than we
|
|
# need. GhostScript seems to be happy with such approach
|
|
set result "\[\n"
|
|
for {set i 0} {$i<256} {incr i 8} {
|
|
for {set j 0} {$j<8} {incr j} {
|
|
set enc [encoding convertfrom "iso8859-1" \
|
|
[format %c [expr {$i+$j}]]]
|
|
catch {
|
|
set hexcode {}
|
|
set hexcode [format %04X [scan $enc %c]]
|
|
}
|
|
if {[info exists psglyphs($hexcode)]} {
|
|
append result "/$psglyphs($hexcode)"
|
|
} else {
|
|
append result "/space"
|
|
}
|
|
}
|
|
append result "\n"
|
|
}
|
|
append result "\]"
|
|
return $result
|
|
}
|
|
|
|
# List of adobe glyph names. Converted from glyphlist.txt, downloaded from
|
|
# Adobe.
|
|
|
|
variable psglyphs
|
|
array set psglyphs {
|
|
0020 space
|
|
0021 exclam
|
|
0022 quotedbl
|
|
0023 numbersign
|
|
0024 dollar
|
|
0025 percent
|
|
0026 ampersand
|
|
0027 quotesingle
|
|
0028 parenleft
|
|
0029 parenright
|
|
002A asterisk
|
|
002B plus
|
|
002C comma
|
|
002D hyphen
|
|
002E period
|
|
002F slash
|
|
0030 zero
|
|
0031 one
|
|
0032 two
|
|
0033 three
|
|
0034 four
|
|
0035 five
|
|
0036 six
|
|
0037 seven
|
|
0038 eight
|
|
0039 nine
|
|
003A colon
|
|
003B semicolon
|
|
003C less
|
|
003D equal
|
|
003E greater
|
|
003F question
|
|
0040 at
|
|
0041 A
|
|
0042 B
|
|
0043 C
|
|
0044 D
|
|
0045 E
|
|
0046 F
|
|
0047 G
|
|
0048 H
|
|
0049 I
|
|
004A J
|
|
004B K
|
|
004C L
|
|
004D M
|
|
004E N
|
|
004F O
|
|
0050 P
|
|
0051 Q
|
|
0052 R
|
|
0053 S
|
|
0054 T
|
|
0055 U
|
|
0056 V
|
|
0057 W
|
|
0058 X
|
|
0059 Y
|
|
005A Z
|
|
005B bracketleft
|
|
005C backslash
|
|
005D bracketright
|
|
005E asciicircum
|
|
005F underscore
|
|
0060 grave
|
|
0061 a
|
|
0062 b
|
|
0063 c
|
|
0064 d
|
|
0065 e
|
|
0066 f
|
|
0067 g
|
|
0068 h
|
|
0069 i
|
|
006A j
|
|
006B k
|
|
006C l
|
|
006D m
|
|
006E n
|
|
006F o
|
|
0070 p
|
|
0071 q
|
|
0072 r
|
|
0073 s
|
|
0074 t
|
|
0075 u
|
|
0076 v
|
|
0077 w
|
|
0078 x
|
|
0079 y
|
|
007A z
|
|
007B braceleft
|
|
007C bar
|
|
007D braceright
|
|
007E asciitilde
|
|
00A0 space
|
|
00A1 exclamdown
|
|
00A2 cent
|
|
00A3 sterling
|
|
00A4 currency
|
|
00A5 yen
|
|
00A6 brokenbar
|
|
00A7 section
|
|
00A8 dieresis
|
|
00A9 copyright
|
|
00AA ordfeminine
|
|
00AB guillemotleft
|
|
00AC logicalnot
|
|
00AD hyphen
|
|
00AE registered
|
|
00AF macron
|
|
00B0 degree
|
|
00B1 plusminus
|
|
00B2 twosuperior
|
|
00B3 threesuperior
|
|
00B4 acute
|
|
00B5 mu
|
|
00B6 paragraph
|
|
00B7 periodcentered
|
|
00B8 cedilla
|
|
00B9 onesuperior
|
|
00BA ordmasculine
|
|
00BB guillemotright
|
|
00BC onequarter
|
|
00BD onehalf
|
|
00BE threequarters
|
|
00BF questiondown
|
|
00C0 Agrave
|
|
00C1 Aacute
|
|
00C2 Acircumflex
|
|
00C3 Atilde
|
|
00C4 Adieresis
|
|
00C5 Aring
|
|
00C6 AE
|
|
00C7 Ccedilla
|
|
00C8 Egrave
|
|
00C9 Eacute
|
|
00CA Ecircumflex
|
|
00CB Edieresis
|
|
00CC Igrave
|
|
00CD Iacute
|
|
00CE Icircumflex
|
|
00CF Idieresis
|
|
00D0 Eth
|
|
00D1 Ntilde
|
|
00D2 Ograve
|
|
00D3 Oacute
|
|
00D4 Ocircumflex
|
|
00D5 Otilde
|
|
00D6 Odieresis
|
|
00D7 multiply
|
|
00D8 Oslash
|
|
00D9 Ugrave
|
|
00DA Uacute
|
|
00DB Ucircumflex
|
|
00DC Udieresis
|
|
00DD Yacute
|
|
00DE Thorn
|
|
00DF germandbls
|
|
00E0 agrave
|
|
00E1 aacute
|
|
00E2 acircumflex
|
|
00E3 atilde
|
|
00E4 adieresis
|
|
00E5 aring
|
|
00E6 ae
|
|
00E7 ccedilla
|
|
00E8 egrave
|
|
00E9 eacute
|
|
00EA ecircumflex
|
|
00EB edieresis
|
|
00EC igrave
|
|
00ED iacute
|
|
00EE icircumflex
|
|
00EF idieresis
|
|
00F0 eth
|
|
00F1 ntilde
|
|
00F2 ograve
|
|
00F3 oacute
|
|
00F4 ocircumflex
|
|
00F5 otilde
|
|
00F6 odieresis
|
|
00F7 divide
|
|
00F8 oslash
|
|
00F9 ugrave
|
|
00FA uacute
|
|
00FB ucircumflex
|
|
00FC udieresis
|
|
00FD yacute
|
|
00FE thorn
|
|
00FF ydieresis
|
|
0100 Amacron
|
|
0101 amacron
|
|
0102 Abreve
|
|
0103 abreve
|
|
0104 Aogonek
|
|
0105 aogonek
|
|
0106 Cacute
|
|
0107 cacute
|
|
0108 Ccircumflex
|
|
0109 ccircumflex
|
|
010A Cdotaccent
|
|
010B cdotaccent
|
|
010C Ccaron
|
|
010D ccaron
|
|
010E Dcaron
|
|
010F dcaron
|
|
0110 Dcroat
|
|
0111 dcroat
|
|
0112 Emacron
|
|
0113 emacron
|
|
0114 Ebreve
|
|
0115 ebreve
|
|
0116 Edotaccent
|
|
0117 edotaccent
|
|
0118 Eogonek
|
|
0119 eogonek
|
|
011A Ecaron
|
|
011B ecaron
|
|
011C Gcircumflex
|
|
011D gcircumflex
|
|
011E Gbreve
|
|
011F gbreve
|
|
0120 Gdotaccent
|
|
0121 gdotaccent
|
|
0122 Gcommaaccent
|
|
0123 gcommaaccent
|
|
0124 Hcircumflex
|
|
0125 hcircumflex
|
|
0126 Hbar
|
|
0127 hbar
|
|
0128 Itilde
|
|
0129 itilde
|
|
012A Imacron
|
|
012B imacron
|
|
012C Ibreve
|
|
012D ibreve
|
|
012E Iogonek
|
|
012F iogonek
|
|
0130 Idotaccent
|
|
0131 dotlessi
|
|
0132 IJ
|
|
0133 ij
|
|
0134 Jcircumflex
|
|
0135 jcircumflex
|
|
0136 Kcommaaccent
|
|
0137 kcommaaccent
|
|
0138 kgreenlandic
|
|
0139 Lacute
|
|
013A lacute
|
|
013B Lcommaaccent
|
|
013C lcommaaccent
|
|
013D Lcaron
|
|
013E lcaron
|
|
013F Ldot
|
|
0140 ldot
|
|
0141 Lslash
|
|
0142 lslash
|
|
0143 Nacute
|
|
0144 nacute
|
|
0145 Ncommaaccent
|
|
0146 ncommaaccent
|
|
0147 Ncaron
|
|
0148 ncaron
|
|
0149 napostrophe
|
|
014A Eng
|
|
014B eng
|
|
014C Omacron
|
|
014D omacron
|
|
014E Obreve
|
|
014F obreve
|
|
0150 Ohungarumlaut
|
|
0151 ohungarumlaut
|
|
0152 OE
|
|
0153 oe
|
|
0154 Racute
|
|
0155 racute
|
|
0156 Rcommaaccent
|
|
0157 rcommaaccent
|
|
0158 Rcaron
|
|
0159 rcaron
|
|
015A Sacute
|
|
015B sacute
|
|
015C Scircumflex
|
|
015D scircumflex
|
|
015E Scedilla
|
|
015F scedilla
|
|
0160 Scaron
|
|
0161 scaron
|
|
0162 Tcommaaccent
|
|
0163 tcommaaccent
|
|
0164 Tcaron
|
|
0165 tcaron
|
|
0166 Tbar
|
|
0167 tbar
|
|
0168 Utilde
|
|
0169 utilde
|
|
016A Umacron
|
|
016B umacron
|
|
016C Ubreve
|
|
016D ubreve
|
|
016E Uring
|
|
016F uring
|
|
0170 Uhungarumlaut
|
|
0171 uhungarumlaut
|
|
0172 Uogonek
|
|
0173 uogonek
|
|
0174 Wcircumflex
|
|
0175 wcircumflex
|
|
0176 Ycircumflex
|
|
0177 ycircumflex
|
|
0178 Ydieresis
|
|
0179 Zacute
|
|
017A zacute
|
|
017B Zdotaccent
|
|
017C zdotaccent
|
|
017D Zcaron
|
|
017E zcaron
|
|
017F longs
|
|
0192 florin
|
|
01A0 Ohorn
|
|
01A1 ohorn
|
|
01AF Uhorn
|
|
01B0 uhorn
|
|
01E6 Gcaron
|
|
01E7 gcaron
|
|
01FA Aringacute
|
|
01FB aringacute
|
|
01FC AEacute
|
|
01FD aeacute
|
|
01FE Oslashacute
|
|
01FF oslashacute
|
|
0218 Scommaaccent
|
|
0219 scommaaccent
|
|
021A Tcommaaccent
|
|
021B tcommaaccent
|
|
02BC afii57929
|
|
02BD afii64937
|
|
02C6 circumflex
|
|
02C7 caron
|
|
02C9 macron
|
|
02D8 breve
|
|
02D9 dotaccent
|
|
02DA ring
|
|
02DB ogonek
|
|
02DC tilde
|
|
02DD hungarumlaut
|
|
0300 gravecomb
|
|
0301 acutecomb
|
|
0303 tildecomb
|
|
0309 hookabovecomb
|
|
0323 dotbelowcomb
|
|
0384 tonos
|
|
0385 dieresistonos
|
|
0386 Alphatonos
|
|
0387 anoteleia
|
|
0388 Epsilontonos
|
|
0389 Etatonos
|
|
038A Iotatonos
|
|
038C Omicrontonos
|
|
038E Upsilontonos
|
|
038F Omegatonos
|
|
0390 iotadieresistonos
|
|
0391 Alpha
|
|
0392 Beta
|
|
0393 Gamma
|
|
0394 Delta
|
|
0395 Epsilon
|
|
0396 Zeta
|
|
0397 Eta
|
|
0398 Theta
|
|
0399 Iota
|
|
039A Kappa
|
|
039B Lambda
|
|
039C Mu
|
|
039D Nu
|
|
039E Xi
|
|
039F Omicron
|
|
03A0 Pi
|
|
03A1 Rho
|
|
03A3 Sigma
|
|
03A4 Tau
|
|
03A5 Upsilon
|
|
03A6 Phi
|
|
03A7 Chi
|
|
03A8 Psi
|
|
03A9 Omega
|
|
03AA Iotadieresis
|
|
03AB Upsilondieresis
|
|
03AC alphatonos
|
|
03AD epsilontonos
|
|
03AE etatonos
|
|
03AF iotatonos
|
|
03B0 upsilondieresistonos
|
|
03B1 alpha
|
|
03B2 beta
|
|
03B3 gamma
|
|
03B4 delta
|
|
03B5 epsilon
|
|
03B6 zeta
|
|
03B7 eta
|
|
03B8 theta
|
|
03B9 iota
|
|
03BA kappa
|
|
03BB lambda
|
|
03BC mu
|
|
03BD nu
|
|
03BE xi
|
|
03BF omicron
|
|
03C0 pi
|
|
03C1 rho
|
|
03C2 sigma1
|
|
03C3 sigma
|
|
03C4 tau
|
|
03C5 upsilon
|
|
03C6 phi
|
|
03C7 chi
|
|
03C8 psi
|
|
03C9 omega
|
|
03CA iotadieresis
|
|
03CB upsilondieresis
|
|
03CC omicrontonos
|
|
03CD upsilontonos
|
|
03CE omegatonos
|
|
03D1 theta1
|
|
03D2 Upsilon1
|
|
03D5 phi1
|
|
03D6 omega1
|
|
0401 afii10023
|
|
0402 afii10051
|
|
0403 afii10052
|
|
0404 afii10053
|
|
0405 afii10054
|
|
0406 afii10055
|
|
0407 afii10056
|
|
0408 afii10057
|
|
0409 afii10058
|
|
040A afii10059
|
|
040B afii10060
|
|
040C afii10061
|
|
040E afii10062
|
|
040F afii10145
|
|
0410 afii10017
|
|
0411 afii10018
|
|
0412 afii10019
|
|
0413 afii10020
|
|
0414 afii10021
|
|
0415 afii10022
|
|
0416 afii10024
|
|
0417 afii10025
|
|
0418 afii10026
|
|
0419 afii10027
|
|
041A afii10028
|
|
041B afii10029
|
|
041C afii10030
|
|
041D afii10031
|
|
041E afii10032
|
|
041F afii10033
|
|
0420 afii10034
|
|
0421 afii10035
|
|
0422 afii10036
|
|
0423 afii10037
|
|
0424 afii10038
|
|
0425 afii10039
|
|
0426 afii10040
|
|
0427 afii10041
|
|
0428 afii10042
|
|
0429 afii10043
|
|
042A afii10044
|
|
042B afii10045
|
|
042C afii10046
|
|
042D afii10047
|
|
042E afii10048
|
|
042F afii10049
|
|
0430 afii10065
|
|
0431 afii10066
|
|
0432 afii10067
|
|
0433 afii10068
|
|
0434 afii10069
|
|
0435 afii10070
|
|
0436 afii10072
|
|
0437 afii10073
|
|
0438 afii10074
|
|
0439 afii10075
|
|
043A afii10076
|
|
043B afii10077
|
|
043C afii10078
|
|
043D afii10079
|
|
043E afii10080
|
|
043F afii10081
|
|
0440 afii10082
|
|
0441 afii10083
|
|
0442 afii10084
|
|
0443 afii10085
|
|
0444 afii10086
|
|
0445 afii10087
|
|
0446 afii10088
|
|
0447 afii10089
|
|
0448 afii10090
|
|
0449 afii10091
|
|
044A afii10092
|
|
044B afii10093
|
|
044C afii10094
|
|
044D afii10095
|
|
044E afii10096
|
|
044F afii10097
|
|
0451 afii10071
|
|
0452 afii10099
|
|
0453 afii10100
|
|
0454 afii10101
|
|
0455 afii10102
|
|
0456 afii10103
|
|
0457 afii10104
|
|
0458 afii10105
|
|
0459 afii10106
|
|
045A afii10107
|
|
045B afii10108
|
|
045C afii10109
|
|
045E afii10110
|
|
045F afii10193
|
|
0462 afii10146
|
|
0463 afii10194
|
|
0472 afii10147
|
|
0473 afii10195
|
|
0474 afii10148
|
|
0475 afii10196
|
|
0490 afii10050
|
|
0491 afii10098
|
|
04D9 afii10846
|
|
05B0 afii57799
|
|
05B1 afii57801
|
|
05B2 afii57800
|
|
05B3 afii57802
|
|
05B4 afii57793
|
|
05B5 afii57794
|
|
05B6 afii57795
|
|
05B7 afii57798
|
|
05B8 afii57797
|
|
05B9 afii57806
|
|
05BB afii57796
|
|
05BC afii57807
|
|
05BD afii57839
|
|
05BE afii57645
|
|
05BF afii57841
|
|
05C0 afii57842
|
|
05C1 afii57804
|
|
05C2 afii57803
|
|
05C3 afii57658
|
|
05D0 afii57664
|
|
05D1 afii57665
|
|
05D2 afii57666
|
|
05D3 afii57667
|
|
05D4 afii57668
|
|
05D5 afii57669
|
|
05D6 afii57670
|
|
05D7 afii57671
|
|
05D8 afii57672
|
|
05D9 afii57673
|
|
05DA afii57674
|
|
05DB afii57675
|
|
05DC afii57676
|
|
05DD afii57677
|
|
05DE afii57678
|
|
05DF afii57679
|
|
05E0 afii57680
|
|
05E1 afii57681
|
|
05E2 afii57682
|
|
05E3 afii57683
|
|
05E4 afii57684
|
|
05E5 afii57685
|
|
05E6 afii57686
|
|
05E7 afii57687
|
|
05E8 afii57688
|
|
05E9 afii57689
|
|
05EA afii57690
|
|
05F0 afii57716
|
|
05F1 afii57717
|
|
05F2 afii57718
|
|
060C afii57388
|
|
061B afii57403
|
|
061F afii57407
|
|
0621 afii57409
|
|
0622 afii57410
|
|
0623 afii57411
|
|
0624 afii57412
|
|
0625 afii57413
|
|
0626 afii57414
|
|
0627 afii57415
|
|
0628 afii57416
|
|
0629 afii57417
|
|
062A afii57418
|
|
062B afii57419
|
|
062C afii57420
|
|
062D afii57421
|
|
062E afii57422
|
|
062F afii57423
|
|
0630 afii57424
|
|
0631 afii57425
|
|
0632 afii57426
|
|
0633 afii57427
|
|
0634 afii57428
|
|
0635 afii57429
|
|
0636 afii57430
|
|
0637 afii57431
|
|
0638 afii57432
|
|
0639 afii57433
|
|
063A afii57434
|
|
0640 afii57440
|
|
0641 afii57441
|
|
0642 afii57442
|
|
0643 afii57443
|
|
0644 afii57444
|
|
0645 afii57445
|
|
0646 afii57446
|
|
0647 afii57470
|
|
0648 afii57448
|
|
0649 afii57449
|
|
064A afii57450
|
|
064B afii57451
|
|
064C afii57452
|
|
064D afii57453
|
|
064E afii57454
|
|
064F afii57455
|
|
0650 afii57456
|
|
0651 afii57457
|
|
0652 afii57458
|
|
0660 afii57392
|
|
0661 afii57393
|
|
0662 afii57394
|
|
0663 afii57395
|
|
0664 afii57396
|
|
0665 afii57397
|
|
0666 afii57398
|
|
0667 afii57399
|
|
0668 afii57400
|
|
0669 afii57401
|
|
066A afii57381
|
|
066D afii63167
|
|
0679 afii57511
|
|
067E afii57506
|
|
0686 afii57507
|
|
0688 afii57512
|
|
0691 afii57513
|
|
0698 afii57508
|
|
06A4 afii57505
|
|
06AF afii57509
|
|
06BA afii57514
|
|
06D2 afii57519
|
|
06D5 afii57534
|
|
1E80 Wgrave
|
|
1E81 wgrave
|
|
1E82 Wacute
|
|
1E83 wacute
|
|
1E84 Wdieresis
|
|
1E85 wdieresis
|
|
1EF2 Ygrave
|
|
1EF3 ygrave
|
|
200C afii61664
|
|
200D afii301
|
|
200E afii299
|
|
200F afii300
|
|
2012 figuredash
|
|
2013 endash
|
|
2014 emdash
|
|
2015 afii00208
|
|
2017 underscoredbl
|
|
2018 quoteleft
|
|
2019 quoteright
|
|
201A quotesinglbase
|
|
201B quotereversed
|
|
201C quotedblleft
|
|
201D quotedblright
|
|
201E quotedblbase
|
|
2020 dagger
|
|
2021 daggerdbl
|
|
2022 bullet
|
|
2024 onedotenleader
|
|
2025 twodotenleader
|
|
2026 ellipsis
|
|
202C afii61573
|
|
202D afii61574
|
|
202E afii61575
|
|
2030 perthousand
|
|
2032 minute
|
|
2033 second
|
|
2039 guilsinglleft
|
|
203A guilsinglright
|
|
203C exclamdbl
|
|
2044 fraction
|
|
2070 zerosuperior
|
|
2074 foursuperior
|
|
2075 fivesuperior
|
|
2076 sixsuperior
|
|
2077 sevensuperior
|
|
2078 eightsuperior
|
|
2079 ninesuperior
|
|
207D parenleftsuperior
|
|
207E parenrightsuperior
|
|
207F nsuperior
|
|
2080 zeroinferior
|
|
2081 oneinferior
|
|
2082 twoinferior
|
|
2083 threeinferior
|
|
2084 fourinferior
|
|
2085 fiveinferior
|
|
2086 sixinferior
|
|
2087 seveninferior
|
|
2088 eightinferior
|
|
2089 nineinferior
|
|
208D parenleftinferior
|
|
208E parenrightinferior
|
|
20A1 colonmonetary
|
|
20A3 franc
|
|
20A4 lira
|
|
20A7 peseta
|
|
20AA afii57636
|
|
20AB dong
|
|
20AC Euro
|
|
2105 afii61248
|
|
2111 Ifraktur
|
|
2113 afii61289
|
|
2116 afii61352
|
|
2118 weierstrass
|
|
211C Rfraktur
|
|
211E prescription
|
|
2122 trademark
|
|
2126 Omega
|
|
212E estimated
|
|
2135 aleph
|
|
2153 onethird
|
|
2154 twothirds
|
|
215B oneeighth
|
|
215C threeeighths
|
|
215D fiveeighths
|
|
215E seveneighths
|
|
2190 arrowleft
|
|
2191 arrowup
|
|
2192 arrowright
|
|
2193 arrowdown
|
|
2194 arrowboth
|
|
2195 arrowupdn
|
|
21A8 arrowupdnbse
|
|
21B5 carriagereturn
|
|
21D0 arrowdblleft
|
|
21D1 arrowdblup
|
|
21D2 arrowdblright
|
|
21D3 arrowdbldown
|
|
21D4 arrowdblboth
|
|
2200 universal
|
|
2202 partialdiff
|
|
2203 existential
|
|
2205 emptyset
|
|
2206 Delta
|
|
2207 gradient
|
|
2208 element
|
|
2209 notelement
|
|
220B suchthat
|
|
220F product
|
|
2211 summation
|
|
2212 minus
|
|
2215 fraction
|
|
2217 asteriskmath
|
|
2219 periodcentered
|
|
221A radical
|
|
221D proportional
|
|
221E infinity
|
|
221F orthogonal
|
|
2220 angle
|
|
2227 logicaland
|
|
2228 logicalor
|
|
2229 intersection
|
|
222A union
|
|
222B integral
|
|
2234 therefore
|
|
223C similar
|
|
2245 congruent
|
|
2248 approxequal
|
|
2260 notequal
|
|
2261 equivalence
|
|
2264 lessequal
|
|
2265 greaterequal
|
|
2282 propersubset
|
|
2283 propersuperset
|
|
2284 notsubset
|
|
2286 reflexsubset
|
|
2287 reflexsuperset
|
|
2295 circleplus
|
|
2297 circlemultiply
|
|
22A5 perpendicular
|
|
22C5 dotmath
|
|
2302 house
|
|
2310 revlogicalnot
|
|
2320 integraltp
|
|
2321 integralbt
|
|
2329 angleleft
|
|
232A angleright
|
|
2500 SF100000
|
|
2502 SF110000
|
|
250C SF010000
|
|
2510 SF030000
|
|
2514 SF020000
|
|
2518 SF040000
|
|
251C SF080000
|
|
2524 SF090000
|
|
252C SF060000
|
|
2534 SF070000
|
|
253C SF050000
|
|
2550 SF430000
|
|
2551 SF240000
|
|
2552 SF510000
|
|
2553 SF520000
|
|
2554 SF390000
|
|
2555 SF220000
|
|
2556 SF210000
|
|
2557 SF250000
|
|
2558 SF500000
|
|
2559 SF490000
|
|
255A SF380000
|
|
255B SF280000
|
|
255C SF270000
|
|
255D SF260000
|
|
255E SF360000
|
|
255F SF370000
|
|
2560 SF420000
|
|
2561 SF190000
|
|
2562 SF200000
|
|
2563 SF230000
|
|
2564 SF470000
|
|
2565 SF480000
|
|
2566 SF410000
|
|
2567 SF450000
|
|
2568 SF460000
|
|
2569 SF400000
|
|
256A SF540000
|
|
256B SF530000
|
|
256C SF440000
|
|
2580 upblock
|
|
2584 dnblock
|
|
2588 block
|
|
258C lfblock
|
|
2590 rtblock
|
|
2591 ltshade
|
|
2592 shade
|
|
2593 dkshade
|
|
25A0 filledbox
|
|
25A1 H22073
|
|
25AA H18543
|
|
25AB H18551
|
|
25AC filledrect
|
|
25B2 triagup
|
|
25BA triagrt
|
|
25BC triagdn
|
|
25C4 triaglf
|
|
25CA lozenge
|
|
25CB circle
|
|
25CF H18533
|
|
25D8 invbullet
|
|
25D9 invcircle
|
|
25E6 openbullet
|
|
263A smileface
|
|
263B invsmileface
|
|
263C sun
|
|
2640 female
|
|
2642 male
|
|
2660 spade
|
|
2663 club
|
|
2665 heart
|
|
2666 diamond
|
|
266A musicalnote
|
|
266B musicalnotedbl
|
|
F6BE dotlessj
|
|
F6BF LL
|
|
F6C0 ll
|
|
F6C1 Scedilla
|
|
F6C2 scedilla
|
|
F6C3 commaaccent
|
|
F6C4 afii10063
|
|
F6C5 afii10064
|
|
F6C6 afii10192
|
|
F6C7 afii10831
|
|
F6C8 afii10832
|
|
F6C9 Acute
|
|
F6CA Caron
|
|
F6CB Dieresis
|
|
F6CC DieresisAcute
|
|
F6CD DieresisGrave
|
|
F6CE Grave
|
|
F6CF Hungarumlaut
|
|
F6D0 Macron
|
|
F6D1 cyrBreve
|
|
F6D2 cyrFlex
|
|
F6D3 dblGrave
|
|
F6D4 cyrbreve
|
|
F6D5 cyrflex
|
|
F6D6 dblgrave
|
|
F6D7 dieresisacute
|
|
F6D8 dieresisgrave
|
|
F6D9 copyrightserif
|
|
F6DA registerserif
|
|
F6DB trademarkserif
|
|
F6DC onefitted
|
|
F6DD rupiah
|
|
F6DE threequartersemdash
|
|
F6DF centinferior
|
|
F6E0 centsuperior
|
|
F6E1 commainferior
|
|
F6E2 commasuperior
|
|
F6E3 dollarinferior
|
|
F6E4 dollarsuperior
|
|
F6E5 hypheninferior
|
|
F6E6 hyphensuperior
|
|
F6E7 periodinferior
|
|
F6E8 periodsuperior
|
|
F6E9 asuperior
|
|
F6EA bsuperior
|
|
F6EB dsuperior
|
|
F6EC esuperior
|
|
F6ED isuperior
|
|
F6EE lsuperior
|
|
F6EF msuperior
|
|
F6F0 osuperior
|
|
F6F1 rsuperior
|
|
F6F2 ssuperior
|
|
F6F3 tsuperior
|
|
F6F4 Brevesmall
|
|
F6F5 Caronsmall
|
|
F6F6 Circumflexsmall
|
|
F6F7 Dotaccentsmall
|
|
F6F8 Hungarumlautsmall
|
|
F6F9 Lslashsmall
|
|
F6FA OEsmall
|
|
F6FB Ogoneksmall
|
|
F6FC Ringsmall
|
|
F6FD Scaronsmall
|
|
F6FE Tildesmall
|
|
F6FF Zcaronsmall
|
|
F721 exclamsmall
|
|
F724 dollaroldstyle
|
|
F726 ampersandsmall
|
|
F730 zerooldstyle
|
|
F731 oneoldstyle
|
|
F732 twooldstyle
|
|
F733 threeoldstyle
|
|
F734 fouroldstyle
|
|
F735 fiveoldstyle
|
|
F736 sixoldstyle
|
|
F737 sevenoldstyle
|
|
F738 eightoldstyle
|
|
F739 nineoldstyle
|
|
F73F questionsmall
|
|
F760 Gravesmall
|
|
F761 Asmall
|
|
F762 Bsmall
|
|
F763 Csmall
|
|
F764 Dsmall
|
|
F765 Esmall
|
|
F766 Fsmall
|
|
F767 Gsmall
|
|
F768 Hsmall
|
|
F769 Ismall
|
|
F76A Jsmall
|
|
F76B Ksmall
|
|
F76C Lsmall
|
|
F76D Msmall
|
|
F76E Nsmall
|
|
F76F Osmall
|
|
F770 Psmall
|
|
F771 Qsmall
|
|
F772 Rsmall
|
|
F773 Ssmall
|
|
F774 Tsmall
|
|
F775 Usmall
|
|
F776 Vsmall
|
|
F777 Wsmall
|
|
F778 Xsmall
|
|
F779 Ysmall
|
|
F77A Zsmall
|
|
F7A1 exclamdownsmall
|
|
F7A2 centoldstyle
|
|
F7A8 Dieresissmall
|
|
F7AF Macronsmall
|
|
F7B4 Acutesmall
|
|
F7B8 Cedillasmall
|
|
F7BF questiondownsmall
|
|
F7E0 Agravesmall
|
|
F7E1 Aacutesmall
|
|
F7E2 Acircumflexsmall
|
|
F7E3 Atildesmall
|
|
F7E4 Adieresissmall
|
|
F7E5 Aringsmall
|
|
F7E6 AEsmall
|
|
F7E7 Ccedillasmall
|
|
F7E8 Egravesmall
|
|
F7E9 Eacutesmall
|
|
F7EA Ecircumflexsmall
|
|
F7EB Edieresissmall
|
|
F7EC Igravesmall
|
|
F7ED Iacutesmall
|
|
F7EE Icircumflexsmall
|
|
F7EF Idieresissmall
|
|
F7F0 Ethsmall
|
|
F7F1 Ntildesmall
|
|
F7F2 Ogravesmall
|
|
F7F3 Oacutesmall
|
|
F7F4 Ocircumflexsmall
|
|
F7F5 Otildesmall
|
|
F7F6 Odieresissmall
|
|
F7F8 Oslashsmall
|
|
F7F9 Ugravesmall
|
|
F7FA Uacutesmall
|
|
F7FB Ucircumflexsmall
|
|
F7FC Udieresissmall
|
|
F7FD Yacutesmall
|
|
F7FE Thornsmall
|
|
F7FF Ydieresissmall
|
|
F8E5 radicalex
|
|
F8E6 arrowvertex
|
|
F8E7 arrowhorizex
|
|
F8E8 registersans
|
|
F8E9 copyrightsans
|
|
F8EA trademarksans
|
|
F8EB parenlefttp
|
|
F8EC parenleftex
|
|
F8ED parenleftbt
|
|
F8EE bracketlefttp
|
|
F8EF bracketleftex
|
|
F8F0 bracketleftbt
|
|
F8F1 bracelefttp
|
|
F8F2 braceleftmid
|
|
F8F3 braceleftbt
|
|
F8F4 braceex
|
|
F8F5 integralex
|
|
F8F6 parenrighttp
|
|
F8F7 parenrightex
|
|
F8F8 parenrightbt
|
|
F8F9 bracketrighttp
|
|
F8FA bracketrightex
|
|
F8FB bracketrightbt
|
|
F8FC bracerighttp
|
|
F8FD bracerightmid
|
|
F8FE bracerightbt
|
|
FB00 ff
|
|
FB01 fi
|
|
FB02 fl
|
|
FB03 ffi
|
|
FB04 ffl
|
|
FB1F afii57705
|
|
FB2A afii57694
|
|
FB2B afii57695
|
|
FB35 afii57723
|
|
FB4B afii57700
|
|
}
|
|
|
|
variable ps_preamble {}
|
|
|
|
namespace eval ps {
|
|
namespace ensemble create
|
|
namespace export {[a-z]*}
|
|
proc literal {string} {
|
|
upvar 0 ::tk::ps_preamble preamble
|
|
foreach line [split $string \n] {
|
|
set line [string trim $line]
|
|
if {$line eq ""} continue
|
|
append preamble $line \n
|
|
}
|
|
return
|
|
}
|
|
proc variable {name value} {
|
|
upvar 0 ::tk::ps_preamble preamble
|
|
append preamble "/$name $value def\n"
|
|
return
|
|
}
|
|
proc function {name body} {
|
|
upvar 0 ::tk::ps_preamble preamble
|
|
append preamble "/$name \{"
|
|
foreach line [split $body \n] {
|
|
set line [string trim $line]
|
|
# Strip blank lines and comments from the bodies of functions
|
|
if {$line eq "" } continue
|
|
if {[string match {[%#]*} $line]} continue
|
|
append preamble $line " "
|
|
}
|
|
append preamble "\} bind def\n"
|
|
return
|
|
}
|
|
}
|
|
|
|
ps literal {
|
|
%%BeginProlog
|
|
% This is a standard prolog for Postscript generated by Tk's canvas
|
|
% widget.
|
|
}
|
|
ps variable CurrentEncoding [CreatePostscriptEncoding]
|
|
ps literal {50 dict begin}
|
|
|
|
# The definitions below just define all of the variables used in any of
|
|
# the procedures here. This is needed for obscure reasons explained on
|
|
# p. 716 of the Postscript manual (Section H.2.7, "Initializing
|
|
# Variables," in the section on Encapsulated Postscript).
|
|
ps variable baseline 0
|
|
ps variable stipimage 0
|
|
ps variable height 0
|
|
ps variable justify 0
|
|
ps variable lineLength 0
|
|
ps variable spacing 0
|
|
ps variable stipple 0
|
|
ps variable strings 0
|
|
ps variable xoffset 0
|
|
ps variable yoffset 0
|
|
ps variable tmpstip null
|
|
ps variable baselineSampler "( TXygqPZ)"
|
|
# Put an extra-tall character in; done this way to avoid encoding trouble
|
|
ps literal {baselineSampler 0 196 put}
|
|
|
|
ps function cstringshow {
|
|
{
|
|
dup type /stringtype eq
|
|
{ show } { glyphshow }
|
|
ifelse
|
|
} forall
|
|
}
|
|
|
|
ps function cstringwidth {
|
|
0 exch 0 exch
|
|
{
|
|
dup type /stringtype eq
|
|
{ stringwidth } {
|
|
currentfont /Encoding get exch 1 exch put (\001)
|
|
stringwidth
|
|
}
|
|
ifelse
|
|
exch 3 1 roll add 3 1 roll add exch
|
|
} forall
|
|
}
|
|
|
|
# font ISOEncode font
|
|
#
|
|
# This procedure changes the encoding of a font from the default
|
|
# Postscript encoding to current system encoding. It's typically invoked
|
|
# just before invoking "setfont". The body of this procedure comes from
|
|
# Section 5.6.1 of the Postscript book.
|
|
ps function ISOEncode {
|
|
dup length dict begin
|
|
{1 index /FID ne {def} {pop pop} ifelse} forall
|
|
/Encoding CurrentEncoding def
|
|
currentdict
|
|
end
|
|
% I'm not sure why it's necessary to use "definefont" on this new
|
|
% font, but it seems to be important; just use the name "Temporary"
|
|
% for the font.
|
|
/Temporary exch definefont
|
|
}
|
|
|
|
# StrokeClip
|
|
#
|
|
# This procedure converts the current path into a clip area under the
|
|
# assumption of stroking. It's a bit tricky because some Postscript
|
|
# interpreters get errors during strokepath for dashed lines. If this
|
|
# happens then turn off dashes and try again.
|
|
ps function StrokeClip {
|
|
{strokepath} stopped {
|
|
(This Postscript printer gets limitcheck overflows when) =
|
|
(stippling dashed lines; lines will be printed solid instead.) =
|
|
[] 0 setdash strokepath} if
|
|
clip
|
|
}
|
|
|
|
# desiredSize EvenPixels closestSize
|
|
#
|
|
# The procedure below is used for stippling. Given the optimal size of a
|
|
# dot in a stipple pattern in the current user coordinate system, compute
|
|
# the closest size that is an exact multiple of the device's pixel
|
|
# size. This allows stipple patterns to be displayed without aliasing
|
|
# effects.
|
|
ps function EvenPixels {
|
|
% Compute exact number of device pixels per stipple dot.
|
|
dup 0 matrix currentmatrix dtransform
|
|
dup mul exch dup mul add sqrt
|
|
% Round to an integer, make sure the number is at least 1, and
|
|
% compute user coord distance corresponding to this.
|
|
dup round dup 1 lt {pop 1} if
|
|
exch div mul
|
|
}
|
|
|
|
# width height string StippleFill --
|
|
#
|
|
# Given a path already set up and a clipping region generated from it,
|
|
# this procedure will fill the clipping region with a stipple pattern.
|
|
# "String" contains a proper image description of the stipple pattern and
|
|
# "width" and "height" give its dimensions. Each stipple dot is assumed to
|
|
# be about one unit across in the current user coordinate system. This
|
|
# procedure trashes the graphics state.
|
|
ps function StippleFill {
|
|
% The following code is needed to work around a NeWSprint bug.
|
|
/tmpstip 1 index def
|
|
% Change the scaling so that one user unit in user coordinates
|
|
% corresponds to the size of one stipple dot.
|
|
1 EvenPixels dup scale
|
|
% Compute the bounding box occupied by the path (which is now the
|
|
% clipping region), and round the lower coordinates down to the
|
|
% nearest starting point for the stipple pattern. Be careful about
|
|
% negative numbers, since the rounding works differently on them.
|
|
pathbbox
|
|
4 2 roll
|
|
5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
|
|
6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
|
|
% Stack now: width height string y1 y2 x1 x2
|
|
% Below is a doubly-nested for loop to iterate across this area
|
|
% in units of the stipple pattern size, going up columns then
|
|
% across rows, blasting out a stipple-pattern-sized rectangle at
|
|
% each position
|
|
6 index exch {
|
|
2 index 5 index 3 index {
|
|
% Stack now: width height string y1 y2 x y
|
|
gsave
|
|
1 index exch translate
|
|
5 index 5 index true matrix tmpstip imagemask
|
|
grestore
|
|
} for
|
|
pop
|
|
} for
|
|
pop pop pop pop pop
|
|
}
|
|
|
|
# -- AdjustColor --
|
|
#
|
|
# Given a color value already set for output by the caller, adjusts that
|
|
# value to a grayscale or mono value if requested by the CL variable.
|
|
ps function AdjustColor {
|
|
CL 2 lt {
|
|
currentgray
|
|
CL 0 eq {
|
|
.5 lt {0} {1} ifelse
|
|
} if
|
|
setgray
|
|
} if
|
|
}
|
|
|
|
# x y strings spacing xoffset yoffset justify stipple DrawText --
|
|
#
|
|
# This procedure does all of the real work of drawing text. The color and
|
|
# font must already have been set by the caller, and the following
|
|
# arguments must be on the stack:
|
|
#
|
|
# x, y - Coordinates at which to draw text.
|
|
# strings - An array of strings, one for each line of the text item, in
|
|
# order from top to bottom.
|
|
# spacing - Spacing between lines.
|
|
# xoffset - Horizontal offset for text bbox relative to x and y: 0 for
|
|
# nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se.
|
|
# yoffset - Vertical offset for text bbox relative to x and y: 0 for
|
|
# nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se.
|
|
# justify - 0 for left justification, 0.5 for center, 1 for right justify.
|
|
# stipple - Boolean value indicating whether or not text is to be drawn in
|
|
# stippled fashion. If text is stippled, function StippleText
|
|
# must have been defined to call StippleFill in the right way.
|
|
#
|
|
# Also, when this procedure is invoked, the color and font must already
|
|
# have been set for the text.
|
|
ps function DrawText {
|
|
/stipple exch def
|
|
/justify exch def
|
|
/yoffset exch def
|
|
/xoffset exch def
|
|
/spacing exch def
|
|
/strings exch def
|
|
% First scan through all of the text to find the widest line.
|
|
/lineLength 0 def
|
|
strings {
|
|
cstringwidth pop
|
|
dup lineLength gt {/lineLength exch def} {pop} ifelse
|
|
newpath
|
|
} forall
|
|
% Compute the baseline offset and the actual font height.
|
|
0 0 moveto baselineSampler false charpath
|
|
pathbbox dup /baseline exch def
|
|
exch pop exch sub /height exch def pop
|
|
newpath
|
|
% Translate and rotate coordinates first so that the origin is at
|
|
% the upper-left corner of the text's bounding box. Remember that
|
|
% angle for rotating, and x and y for positioning are still on the
|
|
% stack.
|
|
translate
|
|
rotate
|
|
lineLength xoffset mul
|
|
strings length 1 sub spacing mul height add yoffset mul translate
|
|
% Now use the baseline and justification information to translate
|
|
% so that the origin is at the baseline and positioning point for
|
|
% the first line of text.
|
|
justify lineLength mul baseline neg translate
|
|
% Iterate over each of the lines to output it. For each line,
|
|
% compute its width again so it can be properly justified, then
|
|
% display it.
|
|
strings {
|
|
dup cstringwidth pop
|
|
justify neg mul 0 moveto
|
|
stipple {
|
|
% The text is stippled, so turn it into a path and print
|
|
% by calling StippledText, which in turn calls
|
|
% StippleFill. Unfortunately, many Postscript interpreters
|
|
% will get overflow errors if we try to do the whole
|
|
% string at once, so do it a character at a time.
|
|
gsave
|
|
/char (X) def
|
|
{
|
|
dup type /stringtype eq {
|
|
% This segment is a string.
|
|
{
|
|
char 0 3 -1 roll put
|
|
currentpoint
|
|
gsave
|
|
char true charpath clip StippleText
|
|
grestore
|
|
char stringwidth translate
|
|
moveto
|
|
} forall
|
|
} {
|
|
% This segment is glyph name
|
|
% Temporary override
|
|
currentfont /Encoding get exch 1 exch put
|
|
currentpoint
|
|
gsave (\001) true charpath clip StippleText
|
|
grestore
|
|
(\001) stringwidth translate
|
|
moveto
|
|
} ifelse
|
|
} forall
|
|
grestore
|
|
} {cstringshow} ifelse
|
|
0 spacing neg translate
|
|
} forall
|
|
}
|
|
|
|
# Define the "TkPhoto" function variants, which are modified versions
|
|
# of the original "transparentimage" function posted by ian@five-d.com
|
|
# (Ian Kemmish) to comp.lang.postscript. For a monochrome colorLevel
|
|
# this is a slightly different version that uses the imagemask command
|
|
# instead of image.
|
|
|
|
ps function TkPhotoColor {
|
|
gsave
|
|
32 dict begin
|
|
/tinteger exch def
|
|
/transparent 1 string def
|
|
transparent 0 tinteger put
|
|
/olddict exch def
|
|
olddict /DataSource get dup type /filetype ne {
|
|
olddict /DataSource 3 -1 roll
|
|
0 () /SubFileDecode filter put
|
|
} {
|
|
pop
|
|
} ifelse
|
|
/newdict olddict maxlength dict def
|
|
olddict newdict copy pop
|
|
/w newdict /Width get def
|
|
/crpp newdict /Decode get length 2 idiv def
|
|
/str w string def
|
|
/pix w crpp mul string def
|
|
/substrlen 2 w log 2 log div floor exp cvi def
|
|
/substrs [ {
|
|
substrlen string
|
|
0 1 substrlen 1 sub {
|
|
1 index exch tinteger put
|
|
} for
|
|
/substrlen substrlen 2 idiv def
|
|
substrlen 0 eq {exit} if
|
|
} loop ] def
|
|
/h newdict /Height get def
|
|
1 w div 1 h div matrix scale
|
|
olddict /ImageMatrix get exch matrix concatmatrix
|
|
matrix invertmatrix concat
|
|
newdict /Height 1 put
|
|
newdict /DataSource pix put
|
|
/mat [w 0 0 h 0 0] def
|
|
newdict /ImageMatrix mat put
|
|
0 1 h 1 sub {
|
|
mat 5 3 -1 roll neg put
|
|
olddict /DataSource get str readstring pop pop
|
|
/tail str def
|
|
/x 0 def
|
|
olddict /DataSource get pix readstring pop pop
|
|
{
|
|
tail transparent search dup /done exch not def
|
|
{exch pop exch pop} if
|
|
/w1 exch length def
|
|
w1 0 ne {
|
|
newdict /DataSource
|
|
pix x crpp mul w1 crpp mul getinterval put
|
|
newdict /Width w1 put
|
|
mat 4 x neg put
|
|
/x x w1 add def
|
|
newdict image
|
|
/tail tail w1 tail length w1 sub getinterval def
|
|
} if
|
|
done {exit} if
|
|
tail substrs {
|
|
anchorsearch {pop} if
|
|
} forall
|
|
/tail exch def
|
|
tail length 0 eq {exit} if
|
|
/x w tail length sub def
|
|
} loop
|
|
} for
|
|
end
|
|
grestore
|
|
}
|
|
ps function TkPhotoMono {
|
|
gsave
|
|
32 dict begin
|
|
/dummyInteger exch def
|
|
/olddict exch def
|
|
olddict /DataSource get dup type /filetype ne {
|
|
olddict /DataSource 3 -1 roll
|
|
0 () /SubFileDecode filter put
|
|
} {
|
|
pop
|
|
} ifelse
|
|
/newdict olddict maxlength dict def
|
|
olddict newdict copy pop
|
|
/w newdict /Width get def
|
|
/pix w 7 add 8 idiv string def
|
|
/h newdict /Height get def
|
|
1 w div 1 h div matrix scale
|
|
olddict /ImageMatrix get exch matrix concatmatrix
|
|
matrix invertmatrix concat
|
|
newdict /Height 1 put
|
|
newdict /DataSource pix put
|
|
/mat [w 0 0 h 0 0] def
|
|
newdict /ImageMatrix mat put
|
|
0 1 h 1 sub {
|
|
mat 5 3 -1 roll neg put
|
|
0.000 0.000 0.000 setrgbcolor
|
|
olddict /DataSource get pix readstring pop pop
|
|
newdict /DataSource pix put
|
|
newdict imagemask
|
|
1.000 1.000 1.000 setrgbcolor
|
|
olddict /DataSource get pix readstring pop pop
|
|
newdict /DataSource pix put
|
|
newdict imagemask
|
|
} for
|
|
end
|
|
grestore
|
|
}
|
|
|
|
ps literal %%EndProlog
|
|
}
|
|
|
|
proc tk::ensure_psenc_is_loaded {} {
|
|
}
|