diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-13 18:37:10 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-13 18:37:10 +0000 |
commit | 1aef871541c7018a332a5544ee9698398fc994a6 (patch) | |
tree | 8bf4d39f242f52391398ecb8705fc1c958b2ea21 /TOOLS/subfont-c | |
parent | 8632ea05269cd3d71b21bc62832967267accaafa (diff) | |
download | mpv-1aef871541c7018a332a5544ee9698398fc994a6.tar.bz2 mpv-1aef871541c7018a332a5544ee9698398fc994a6.tar.xz |
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1506 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'TOOLS/subfont-c')
-rw-r--r-- | TOOLS/subfont-c/Makefile | 22 | ||||
-rw-r--r-- | TOOLS/subfont-c/README | 81 | ||||
-rwxr-xr-x | TOOLS/subfont-c/encodings/charmap2enc | 11 | ||||
-rw-r--r-- | TOOLS/subfont-c/encodings/osd-mplayer | 15 | ||||
-rwxr-xr-x | TOOLS/subfont-c/encodings/runme-kr | 1 | ||||
-rw-r--r-- | TOOLS/subfont-c/osd/README | 3 | ||||
-rwxr-xr-x | TOOLS/subfont-c/osd/gen.py | 441 | ||||
-rw-r--r-- | TOOLS/subfont-c/osd/osd.t1a | 589 | ||||
-rwxr-xr-x | TOOLS/subfont-c/osd/runme | 5 | ||||
-rwxr-xr-x | TOOLS/subfont-c/runme | 24 | ||||
-rw-r--r-- | TOOLS/subfont-c/subfont.c | 659 |
11 files changed, 1579 insertions, 272 deletions
diff --git a/TOOLS/subfont-c/Makefile b/TOOLS/subfont-c/Makefile index 10e9e26879..23d35a07d4 100644 --- a/TOOLS/subfont-c/Makefile +++ b/TOOLS/subfont-c/Makefile @@ -1,24 +1,18 @@ -#font="/mnt/win/windows/fonts/arial.ttf" -#font="/mnt/win/windows/fonts/comic.ttf" -#font="/mnt/win/windows/fonts/verdanai.ttf" -font="/mnt/win/windows/fonts/verdana.ttf" - -#encoding=windows-1250 -encoding=iso-8859-2 - -fontsize=20 include ../../config.mak LDLIBS=-lm $(shell freetype-config --libs) CFLAGS=$(OPTFLAGS) $(shell freetype-config --cflags) +#CFLAGS+=-DOLD_FREETYPE2 +#CFLAGS+=-g +#CFLAGS+=-DDEBUG + + subfont: subfont.o -run: subfont - ./subfont $(encoding) $(fontsize) $(font) - cat font.desc.tail >> font.desc - cp font.desc *.raw ~/.mplayer/font/ +subfont.S: subfont.c + $(CC) $(CFLAGS) -S $^ -o $@ clean: - rm -f subfont subfont.o + rm -f subfont subfont.o core diff --git a/TOOLS/subfont-c/README b/TOOLS/subfont-c/README index b80eb900f4..5989787d1a 100644 --- a/TOOLS/subfont-c/README +++ b/TOOLS/subfont-c/README @@ -1,41 +1,62 @@ +Usage: +~~~~~~ +1. Make sure you have FreeType 2 installed. +2. Get a TrueType or Type 1 font. +3. Modify `runme' script for your encoding and font path. +4. Type: ./runme +5. Copy *.raw and font.desc files to ~/.mplayer/font/ +6. Run subfont alone to see more options. + + About: ~~~~~~ -`subfont' program renders antialiased fonts for mplayer using freetype library. -Should work with TrueType, Type1 and any other font supported by libfreetype. +`subfont' program renders antialiased OSD and subtitle fonts for mplayer. -Goals: - - internationalization: supports any 8 bit encoding (uses iconv). - - nice look: creates glyph `shadows' using algorithm derived from gaussian blur (slow!). +What you get are bitmap and alpha *.raw files and a font.desc. +What you need is TrueType, Type 1 or any other font supported by FreeType. +Alpha channel is created using outline and Gaussian blur filters. -Note: -~~~~~ -Starting x position of each char and the bitmap width is aligned to multiple of 8 -(required for under-development MMX renderer). +ANY encoding is now supported! That is, all 8-bit encodings known by libc +and user-supplied encodings (also multibyte) through custom encoding files. +I prepared also Type 1 font `osd.pfb' for OSD characters based on bitmaps +created by chass. -Usage: +Subfont was tested with Korean fonts from truetype-fonts-ko-2.0-1k.noarch.rpm +I found on http://rpmfind.net/ and euc-kr encoding. Custom encoding file +for euc-kr was generated from charmap I found in /usr/share/i18n/charmaps/EUC-KR.gz +(glibc package). This should work with -unicode switch for mplayer +(though it is not Unicode encoding). +It took about 14 seconds to render over 8000 characters on P3 @ 600MHz. + + +Custom encodings: +~~~~~~~~~~~~~~~~~ +For each character you want to render write the line consisting of: + hexadecimal Unicode character code, + followed by whitespace, + followed by hexadecimal number representing your encoding, + followed by new line character. + +Example: to render a single letter `aogonek' (Unicode 0x0105) and encode +it using iso-8859-2 encoding (0xB1), your custom encoding file will consist +of a sigle line: +0105 B1 + + +Notes: ~~~~~~ -Usage: subfont encoding ppem font [alphaFactor [minAlpha [radius]]] - Program creates 3 files: font.desc, <encoding>-a.raw, <encoding>-b.raw. - You should append font.desc.tail (desc for OSD characters by a'rpi & chass) to font.desc, - and copy font.desc and all *.raw files to ~/.mplayer/font/ directory. - - encoding must be 8 bit encoding, like iso-8859-2. - To list encodings available on your system use iconv -l. - ppem Font size in pixels (e.g. 24). - font Font file path. Any format supported by freetype library (*.ttf, *.pf?, *). - alphaFactor Alpha map scaling factor (default is 1.0), float. - minAlpha Alpha map minimum value (default is 1.0, max is 255), float. - radius Alpha map blur radius (default is 6 pixels), integer. - - -Example: -~~~~~~~~ -make -./subfont iso-8859-2 20 verdana.ttf -cat font.desc.tail >> font.desc -cp font.desc *.raw ~/.mplayer/font/ + + Starting x position of each character and the bitmap width is aligned +to multiple of 8 (required by mplayer). + + + Currently subfont won't work on big-endian systems. + + + My development platform is RedHat 7.1. FreeType versions tested are +2.0.1 through 2.0.4. + + + FreeType library has a bug that makes subfont display some warning message +about Unicode charmap for osd.pfb. Author: diff --git a/TOOLS/subfont-c/encodings/charmap2enc b/TOOLS/subfont-c/encodings/charmap2enc new file mode 100755 index 0000000000..e32d7a463b --- /dev/null +++ b/TOOLS/subfont-c/encodings/charmap2enc @@ -0,0 +1,11 @@ +#!/usr/bin/awk -f +# only for mostly 2-byte encodings like euc-kr + +$2~"^/x..$" { + c = substr($2, 3, 2) + if (c<"80") + print substr($1, 3, 4) "\t" c +} +$2~"^/x../x..$" { + print substr($1, 3, 4) "\t" substr($2, 3, 2) substr($2, 7, 2) +} diff --git a/TOOLS/subfont-c/encodings/osd-mplayer b/TOOLS/subfont-c/encodings/osd-mplayer new file mode 100644 index 0000000000..26ab043016 --- /dev/null +++ b/TOOLS/subfont-c/encodings/osd-mplayer @@ -0,0 +1,15 @@ +E001 01 +E002 02 +E003 03 +E004 04 +E005 05 +E006 06 +E007 07 +E008 08 +E009 09 +E00A 0A +E00B 0B +E010 10 +E011 11 +E012 12 +E013 13 diff --git a/TOOLS/subfont-c/encodings/runme-kr b/TOOLS/subfont-c/encodings/runme-kr new file mode 100755 index 0000000000..df4e81e15c --- /dev/null +++ b/TOOLS/subfont-c/encodings/runme-kr @@ -0,0 +1 @@ +gunzip -c /usr/share/i18n/charmaps/EUC-KR.gz | ./charmap2enc > euc-kr diff --git a/TOOLS/subfont-c/osd/README b/TOOLS/subfont-c/osd/README new file mode 100644 index 0000000000..9dec5e5971 --- /dev/null +++ b/TOOLS/subfont-c/osd/README @@ -0,0 +1,3 @@ +Requires t1utils and python. + +Based on font created by chass. diff --git a/TOOLS/subfont-c/osd/gen.py b/TOOLS/subfont-c/osd/gen.py new file mode 100755 index 0000000000..bf08fb8838 --- /dev/null +++ b/TOOLS/subfont-c/osd/gen.py @@ -0,0 +1,441 @@ +#!/usr/bin/python + +from math import * +import sys +import string + +k = (sqrt(2.)-1.)*4./3. + +chars = [] +encoding = [] +count = 1 +first = 1 + +def append(s): + chars.append(s) + +def rint(x): + return int(round(x)) +""" + if x>=0: + return int(x+0.5) + else: + return int(x-0.5) +""" + +class vec: + def __init__(self, x, y=0): + if type(x) is type(()): + self.x, self.y = x + else: + self.x = x + self.y = y + def set(self, x, y): + self.__init__(x, y) + def move(self, x, y): + self.x = self.x + x + self.y = self.y + y + def __add__(self, v): + return vec(self.x+v.x, self.y+v.y) + def __sub__(self, v): + return vec(self.x-v.x, self.y-v.y) + def int(self): + return vec(rint(self.x), rint(self.y)) + def t(self): + return (self.x, self.y) + +class pvec(vec): + def __init__(self, l, a): + self.x = l * cos(a) + self.y = l * sin(a) + + +pen = vec(0,0) + +def moveto(x, y=0): + global first + dx = rint(x-pen.x) + dy = rint(y-pen.y) + if dx!=0: + if dy!=0: + append("\t%i %i rmoveto" % (dx, dy)) + else: + append("\t%i hmoveto" % (dx)) + elif dy!=0: + append("\t%i vmoveto" % (dy)) + elif first: + append("\t0 hmoveto") + first = 0 + pen.x = pen.x+dx + pen.y = pen.y+dx + +def rlineto(v): + if v.x!=0: + if v.y!=0: + append("\t%i %i rlineto" % (v.x, v.y)) + else: + append("\t%i hlineto" % (v.x)) + elif v.y!=0: + append("\t%i vlineto" % (v.y)) + +def closepath(): + append("\tclosepath") + +history = [] +def movebase(x, y=0): + history.append((x,y)) + pen.move(-x, -y) + +def moveback(): + x, y = history.pop() + pen.move(x, y) + +def ellipse(rx, ry = None, half=0): + # rx>0 => counter-clockwise (filled) + # rx<0 => clockwise + + if ry==None: ry = abs(rx) + + dx1 = rint(k*rx) + dx2 = rx-dx1 + + dy1 = rint(k*ry) + dy2 = ry-dy1 + + rx = abs(rx) + moveto(0, -ry) + append("\t%i 0 %i %i 0 %i rrcurveto" % (+dx1, +dx2, +dy2, +dy1)) + append("\t0 %i %i %i %i 0 rrcurveto" % (+dy1, -dx2, +dy2, -dx1)) + if not half: + append("\t%i 0 %i %i 0 %i rrcurveto" % (-dx1, -dx2, -dy2, -dy1)) + append("\t0 %i %i %i %i 0 rrcurveto" % (-dy1, +dx2, -dy2, +dx1)) + closepath() + if half: + pen.set(0, ry) + else: + pen.set(0, -ry) + +circle = ellipse + +def rect(w, h): + moveto(0, 0) + if w>0: + append("\t%i hlineto" % (w)) + append("\t%i vlineto" % (h)) + append("\t%i hlineto" % (-w)) + pen.set(0, h) + else: + append("\t%i vlineto" % (h)) + append("\t%i hlineto" % (-w)) + append("\t%i vlineto" % (-h)) + pen.set(-w, 0) + closepath() + +def poly(p): + moveto(0, 0) + prev = vec(0, 0) + for q in p: + rlineto(vec(q)-prev) + prev = vec(q) + closepath() + pen.set(prev.x, prev.y) + +def line(w, l, a): + vw = pvec(w*.5, a-pi*.5) + vl = pvec(l, a) + p = vw + moveto(p.x, p.y) + p0 = p + #print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p0.x, p0.y) + p = p+vl + rlineto((p-p0).int()) + p0 = p + #print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p0.x, p0.y) + p = p-vw-vw + rlineto((p-p0).int()) + p0 = p + #print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p0.x, p0.y) + p = p-vl + #print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p.x, p.y) + rlineto((p-p0).int()) + closepath() + pen.set(p.x, p.y) + + +def begin(name, code, hsb, w): + global first, count, history + history = [] + pen.set(0, 0) + append("""\ +/uni%04X { %% %s + %i %i hsbw""" % (code+0xE000, name, hsb, w)) + i = len(encoding) + while i<code: + encoding.append('dup %i /.notdef put' % (i,)) + i = i+1 + encoding.append('dup %i /uni%04X put' % (code, code+0xE000)) + count = count + 1 + first = 1 + + +def end(): + append("""\ + endchar +} ND""") + + + +######################################## + +r = 400 +s = 375 +hsb = 200 # horizontal side bearing +hsb2 = 30 +over = 10 # overshoot +width = 2*r+2*over+2*hsb2 + +######################################## +begin('play', 0x01, hsb, width) +poly(( (s,r), + (0, 2*r),)) +end() + + +######################################## +w=150 +begin('pause', 0x02, hsb, width) +rect(w, 2*r) +movebase(2*w) +rect(w, 2*r) +end() + + +######################################## +begin('stop', 0x03, hsb, width) +rect(665, 720) +end() + + +######################################## +begin('rewind', 0x04, hsb/2, width) +movebase(2*s+15) +poly(( (0, 2*r), + (-s, r),)) +movebase(-s-15) +poly(( (0, 2*r), + (-s, r),)) +end() + + +######################################## +begin('fast forward', 0x05, hsb/2, width) +poly(( (s,r), + (0, 2*r),)) +movebase(s+15) +poly(( (s,r), + (0, 2*r),)) +end() + + +######################################## +begin('clock', 0x06, hsb2, width) +movebase(r, r) +circle(r+over) +wc = 65 +r0 = r-3*wc +n = 4 +movebase(-wc/2, -wc/2) +rect(-wc, wc) +moveback() +for i in range(n): + a = i*2*pi/n + v = pvec(r0, a) + movebase(v.x, v.y) + line(-wc, r-r0, a) + moveback() +hh = 11 +mm = 8 +line(-50, r*.5, pi/2-2*pi*(hh+mm/60.)/12) +line(-40, r*.9, pi/2-2*pi*mm/60.) +end() + + +######################################## +begin('contrast', 0x07, hsb2, width) +movebase(r, r) +circle(r+over) +circle(-(r+over-80), half=1) +end() + + +######################################## +begin('saturation', 0x08, hsb2, width) +movebase(r, r) +circle(r+over) +circle(-(r+over-80)) + +v = pvec(160, pi/2) +movebase(v.x, v.y) +circle(80) +moveback() + +v = pvec(160, pi/2+pi*2/3) +movebase(v.x, v.y) +circle(80) +moveback() + +v = pvec(160, pi/2-pi*2/3) +movebase(v.x, v.y) +circle(80) +end() + + +######################################## +begin('volume', 0x09, 0, 1000) +poly(( (1000, 0), + (0, 500),)) +end() + + +######################################## +begin('brightness', 0x0A, hsb2, width) +movebase(r, r) +circle(150) +circle(-100) + +rb = 375 +wb = 50 +l = 140 +n = 8 +for i in range(n): + a = i*2*pi/n + v = pvec(l, a) + movebase(v.x, v.y) + line(wb, rb-l, a) + moveback() +end() + + +######################################## +begin('hue', 0x0B, hsb2, width) +movebase(r, r) +circle(r+over) +ellipse(-(322), 166) +movebase(0, 280) +circle(-(60)) +end() + + +######################################## +begin('progress [', 0x10, (334-182)/2, 334) +poly(( (182, 0), + (182, 90), + (145, 90), + (145, 550), + (182, 550), + (182, 640), + (0, 640), +)) +end() + + +######################################## +begin('progress |', 0x11, (334-166)/2, 334) +rect(166, 640) +end() + + +######################################## +begin('progress ]', 0x12, (334-182)/2, 334) +poly(( (182, 0), + (182, 640), + (0, 640), + (0, 550), + (37, 550), + (37, 90), + (0, 90), +)) +end() + + +######################################## +begin('progress .', 0x13, (334-130)/2, 334) +movebase(0, (640-130)/2) +rect(130, 130) +end() + + + +######################################## +print """\ +%!PS-AdobeFont-1.0: OSD 1.00 +%%CreationDate: Sun Jul 22 12:38:28 2001 +% +%%EndComments +12 dict begin +/FontInfo 9 dict dup begin +/version (Version 1.00) readonly def +/Notice () readonly def +/FullName (OSD) readonly def +/FamilyName (OSD) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0.000000 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 49 def +end readonly def +/FontName /OSD def +/PaintType 0 def +/StrokeWidth 0 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox {0 -10 1000 800} readonly def +/Encoding 256 array""" + +print string.join(encoding, '\n') +i = len(encoding) +while i<256: + print 'dup %i /.notdef put' % i + i = i+1 + + +print """\ +readonly def +currentdict end +currentfile eexec +dup /Private 15 dict dup begin +/RD{string currentfile exch readstring pop}executeonly def +/ND{noaccess def}executeonly def +/NP{noaccess put}executeonly def +/ForceBold false def +/BlueValues [ -15 0 717 734 693 708 630 649 593 611 658 679 780 800 ] def +/OtherBlues [ -112 -93 -200 -178 -45 -26 -134 -116 -71 -51 ] def +/StdHW [ 7 ] def +/StdVW [ 8 ] def +/StemSnapH [ 4 7 10 13 18 22 27 30 33 38 61 65 ] def +/StemSnapV [ 5 8 11 15 18 21 25 30 33 36 52 64 ] def +/MinFeature {16 16} def +/password 5839 def +/Subrs 1 array +dup 0 { + return + } NP + ND +2 index +/CharStrings %i dict dup begin""" % count + +print """\ +/.notdef { + 0 400 hsbw + endchar +} ND""" + +print string.join(chars, '\n') + + +print """\ +end +end +readonly put +noaccess put +dup/FontName get exch definefont pop +mark currentfile closefile""" diff --git a/TOOLS/subfont-c/osd/osd.t1a b/TOOLS/subfont-c/osd/osd.t1a new file mode 100644 index 0000000000..11e3150a6c --- /dev/null +++ b/TOOLS/subfont-c/osd/osd.t1a @@ -0,0 +1,589 @@ +%!PS-AdobeFont-1.0: OSD 1.00 +%%CreationDate: Sun Jul 22 12:38:28 2001 +% +%%EndComments +12 dict begin +/FontInfo 9 dict dup begin +/version (Version 1.00) readonly def +/Notice () readonly def +/FullName (OSD) readonly def +/FamilyName (OSD) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0.000000 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 49 def +end readonly def +/FontName /OSD def +/PaintType 0 def +/StrokeWidth 0 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox {0 -10 1000 800} readonly def +/Encoding 256 array +dup 0 /.notdef put +dup 1 /uniE001 put +dup 2 /uniE002 put +dup 3 /uniE003 put +dup 4 /uniE004 put +dup 5 /uniE005 put +dup 6 /uniE006 put +dup 7 /uniE007 put +dup 8 /uniE008 put +dup 9 /uniE009 put +dup 10 /uniE00A put +dup 11 /uniE00B put +dup 12 /.notdef put +dup 13 /.notdef put +dup 14 /.notdef put +dup 15 /.notdef put +dup 16 /uniE010 put +dup 17 /uniE011 put +dup 18 /uniE012 put +dup 19 /uniE013 put +dup 20 /.notdef put +dup 21 /.notdef put +dup 22 /.notdef put +dup 23 /.notdef put +dup 24 /.notdef put +dup 25 /.notdef put +dup 26 /.notdef put +dup 27 /.notdef put +dup 28 /.notdef put +dup 29 /.notdef put +dup 30 /.notdef put +dup 31 /.notdef put +dup 32 /.notdef put +dup 33 /.notdef put +dup 34 /.notdef put +dup 35 /.notdef put +dup 36 /.notdef put +dup 37 /.notdef put +dup 38 /.notdef put +dup 39 /.notdef put +dup 40 /.notdef put +dup 41 /.notdef put +dup 42 /.notdef put +dup 43 /.notdef put +dup 44 /.notdef put +dup 45 /.notdef put +dup 46 /.notdef put +dup 47 /.notdef put +dup 48 /.notdef put +dup 49 /.notdef put +dup 50 /.notdef put +dup 51 /.notdef put +dup 52 /.notdef put +dup 53 /.notdef put +dup 54 /.notdef put +dup 55 /.notdef put +dup 56 /.notdef put +dup 57 /.notdef put +dup 58 /.notdef put +dup 59 /.notdef put +dup 60 /.notdef put +dup 61 /.notdef put +dup 62 /.notdef put +dup 63 /.notdef put +dup 64 /.notdef put +dup 65 /.notdef put +dup 66 /.notdef put +dup 67 /.notdef put +dup 68 /.notdef put +dup 69 /.notdef put +dup 70 /.notdef put +dup 71 /.notdef put +dup 72 /.notdef put +dup 73 /.notdef put +dup 74 /.notdef put +dup 75 /.notdef put +dup 76 /.notdef put +dup 77 /.notdef put +dup 78 /.notdef put +dup 79 /.notdef put +dup 80 /.notdef put +dup 81 /.notdef put +dup 82 /.notdef put +dup 83 /.notdef put +dup 84 /.notdef put +dup 85 /.notdef put +dup 86 /.notdef put +dup 87 /.notdef put +dup 88 /.notdef put +dup 89 /.notdef put +dup 90 /.notdef put +dup 91 /.notdef put +dup 92 /.notdef put +dup 93 /.notdef put +dup 94 /.notdef put +dup 95 /.notdef put +dup 96 /.notdef put +dup 97 /.notdef put +dup 98 /.notdef put +dup 99 /.notdef put +dup 100 /.notdef put +dup 101 /.notdef put +dup 102 /.notdef put +dup 103 /.notdef put +dup 104 /.notdef put +dup 105 /.notdef put +dup 106 /.notdef put +dup 107 /.notdef put +dup 108 /.notdef put +dup 109 /.notdef put +dup 110 /.notdef put +dup 111 /.notdef put +dup 112 /.notdef put +dup 113 /.notdef put +dup 114 /.notdef put +dup 115 /.notdef put +dup 116 /.notdef put +dup 117 /.notdef put +dup 118 /.notdef put +dup 119 /.notdef put +dup 120 /.notdef put +dup 121 /.notdef put +dup 122 /.notdef put +dup 123 /.notdef put +dup 124 /.notdef put +dup 125 /.notdef put +dup 126 /.notdef put +dup 127 /.notdef put +dup 128 /.notdef put +dup 129 /.notdef put +dup 130 /.notdef put +dup 131 /.notdef put +dup 132 /.notdef put +dup 133 /.notdef put +dup 134 /.notdef put +dup 135 /.notdef put +dup 136 /.notdef put +dup 137 /.notdef put +dup 138 /.notdef put +dup 139 /.notdef put +dup 140 /.notdef put +dup 141 /.notdef put +dup 142 /.notdef put +dup 143 /.notdef put +dup 144 /.notdef put +dup 145 /.notdef put +dup 146 /.notdef put +dup 147 /.notdef put +dup 148 /.notdef put +dup 149 /.notdef put +dup 150 /.notdef put +dup 151 /.notdef put +dup 152 /.notdef put +dup 153 /.notdef put +dup 154 /.notdef put +dup 155 /.notdef put +dup 156 /.notdef put +dup 157 /.notdef put +dup 158 /.notdef put +dup 159 /.notdef put +dup 160 /.notdef put +dup 161 /.notdef put +dup 162 /.notdef put +dup 163 /.notdef put +dup 164 /.notdef put +dup 165 /.notdef put +dup 166 /.notdef put +dup 167 /.notdef put +dup 168 /.notdef put +dup 169 /.notdef put +dup 170 /.notdef put +dup 171 /.notdef put +dup 172 /.notdef put +dup 173 /.notdef put +dup 174 /.notdef put +dup 175 /.notdef put +dup 176 /.notdef put +dup 177 /.notdef put +dup 178 /.notdef put +dup 179 /.notdef put +dup 180 /.notdef put +dup 181 /.notdef put +dup 182 /.notdef put +dup 183 /.notdef put +dup 184 /.notdef put +dup 185 /.notdef put +dup 186 /.notdef put +dup 187 /.notdef put +dup 188 /.notdef put +dup 189 /.notdef put +dup 190 /.notdef put +dup 191 /.notdef put +dup 192 /.notdef put +dup 193 /.notdef put +dup 194 /.notdef put +dup 195 /.notdef put +dup 196 /.notdef put +dup 197 /.notdef put +dup 198 /.notdef put +dup 199 /.notdef put +dup 200 /.notdef put +dup 201 /.notdef put +dup 202 /.notdef put +dup 203 /.notdef put +dup 204 /.notdef put +dup 205 /.notdef put +dup 206 /.notdef put +dup 207 /.notdef put +dup 208 /.notdef put +dup 209 /.notdef put +dup 210 /.notdef put +dup 211 /.notdef put +dup 212 /.notdef put +dup 213 /.notdef put +dup 214 /.notdef put +dup 215 /.notdef put +dup 216 /.notdef put +dup 217 /.notdef put +dup 218 /.notdef put +dup 219 /.notdef put +dup 220 /.notdef put +dup 221 /.notdef put +dup 222 /.notdef put +dup 223 /.notdef put +dup 224 /.notdef put +dup 225 /.notdef put +dup 226 /.notdef put +dup 227 /.notdef put +dup 228 /.notdef put +dup 229 /.notdef put +dup 230 /.notdef put +dup 231 /.notdef put +dup 232 /.notdef put +dup 233 /.notdef put +dup 234 /.notdef put +dup 235 /.notdef put +dup 236 /.notdef put +dup 237 /.notdef put +dup 238 /.notdef put +dup 239 /.notdef put +dup 240 /.notdef put +dup 241 /.notdef put +dup 242 /.notdef put +dup 243 /.notdef put +dup 244 /.notdef put +dup 245 /.notdef put +dup 246 /.notdef put +dup 247 /.notdef put +dup 248 /.notdef put +dup 249 /.notdef put +dup 250 /.notdef put +dup 251 /.notdef put +dup 252 /.notdef put +dup 253 /.notdef put +dup 254 /.notdef put +dup 255 /.notdef put +readonly def +currentdict end +currentfile eexec +dup /Private 15 dict dup begin +/RD{string currentfile exch readstring pop}executeonly def +/ND{noaccess def}executeonly def +/NP{noaccess put}executeonly def +/ForceBold false def +/BlueValues [ -15 0 717 734 693 708 630 649 593 611 658 679 780 800 ] def +/OtherBlues [ -112 -93 -200 -178 -45 -26 -134 -116 -71 -51 ] def +/StdHW [ 7 ] def +/StdVW [ 8 ] def +/StemSnapH [ 4 7 10 13 18 22 27 30 33 38 61 65 ] def +/StemSnapV [ 5 8 11 15 18 21 25 30 33 36 52 64 ] def +/MinFeature {16 16} def +/password 5839 def +/Subrs 1 array +dup 0 { + return + } NP + ND +2 index +/CharStrings 16 dict dup begin +/.notdef { + 0 400 hsbw + endchar +} ND +/uniE001 { % play + 200 880 hsbw + 0 hmoveto + 375 400 rlineto + -375 400 rlineto + closepath + endchar +} ND +/uniE002 { % pause + 200 880 hsbw + 0 hmoveto + 150 hlineto + 800 vlineto + -150 hlineto + closepath + 300 -800 rmoveto + 150 hlineto + 800 vlineto + -150 hlineto + closepath + endchar +} ND +/uniE003 { % stop + 200 880 hsbw + 0 hmoveto + 665 hlineto + 720 vlineto + -665 hlineto + closepath + endchar +} ND +/uniE004 { % rewind + 100 880 hsbw + 765 hmoveto + 800 vlineto + -375 -400 rlineto + closepath + -15 -400 rmoveto + 800 vlineto + -375 -400 rlineto + closepath + endchar +} ND +/uniE005 { % fast forward + 100 880 hsbw + 0 hmoveto + 375 400 rlineto + -375 400 rlineto + closepath + 390 -800 rmoveto + 375 400 rlineto + -375 400 rlineto + closepath + endchar +} ND +/uniE006 { % clock + 30 880 hsbw + 400 -10 rmoveto + 226 0 184 184 0 226 rrcurveto + 0 226 -184 184 -226 0 rrcurveto + -226 0 -184 -184 0 -226 rrcurveto + 0 -226 184 -184 226 0 rrcurveto + closepath + -33 377 rmoveto + 65 vlineto + 65 hlineto + -65 vlineto + closepath + 173 66 rmoveto + 195 hlineto + -65 vlineto + -195 hlineto + closepath + -238 238 rmoveto + 195 vlineto + 65 hlineto + -195 vlineto + closepath + -238 -237 rmoveto + -195 hlineto + 65 vlineto + 195 hlineto + closepath + 237 -238 rmoveto + -195 vlineto + -65 hlineto + 195 vlineto + closepath + 10 194 rmoveto + -88 180 rlineto + 45 22 rlineto + 88 -180 rlineto + closepath + -36 4 rmoveto + 268 241 rlineto + 27 -30 rlineto + -268 -241 rlineto + closepath + endchar +} ND +/uniE007 { % contrast + 30 880 hsbw + 400 -10 rmoveto + 226 0 184 184 0 226 rrcurveto + 0 226 -184 184 -226 0 rrcurveto + -226 0 -184 -184 0 -226 rrcurveto + 0 -226 184 -184 226 0 rrcurveto + closepath + 80 vmoveto + -182 0 -148 148 0 182 rrcurveto + 0 182 148 148 182 0 rrcurveto + closepath + endchar +} ND +/uniE008 { % saturation + 30 880 hsbw + 400 -10 rmoveto + 226 0 184 184 0 226 rrcurveto + 0 226 -184 184 -226 0 rrcurveto + -226 0 -184 -184 0 -226 rrcurveto + 0 -226 184 -184 226 0 rrcurveto + closepath + 80 vmoveto + -182 0 -148 148 0 182 rrcurveto + 0 182 148 148 182 0 rrcurveto + 182 0 148 -148 0 -182 rrcurveto + 0 -182 -148 -148 -182 0 rrcurveto + closepath + 410 vmoveto + 44 0 36 36 0 44 rrcurveto + 0 44 -36 36 -44 0 rrcurveto + -44 0 -36 -36 0 -44 rrcurveto + 0 -44 36 -36 44 0 rrcurveto + closepath + -139 -240 rmoveto + 44 0 36 36 0 44 rrcurveto + 0 44 -36 36 -44 0 rrcurveto + -44 0 -36 -36 0 -44 rrcurveto + 0 -44 36 -36 44 0 rrcurveto + closepath + 277 hmoveto + 44 0 36 36 0 44 rrcurveto + 0 44 -36 36 -44 0 rrcurveto + -44 0 -36 -36 0 -44 rrcurveto + 0 -44 36 -36 44 0 rrcurveto + closepath + endchar +} ND +/uniE009 { % volume + 0 1000 hsbw + 0 hmoveto + 1000 hlineto + -1000 500 rlineto + closepath + endchar +} ND +/uniE00A { % brightness + 30 880 hsbw + 400 250 rmoveto + 83 0 67 67 0 83 rrcurveto + 0 83 -67 67 -83 0 rrcurveto + -83 0 -67 -67 0 -83 rrcurveto + 0 -83 67 -67 83 0 rrcurveto + closepath + 50 vmoveto + -55 0 -45 45 0 55 rrcurveto + 0 55 45 45 55 0 rrcurveto + 55 0 45 -45 0 -55 rrcurveto + 0 -55 -45 -45 -55 0 rrcurveto + closepath + 140 75 rmoveto + 235 hlineto + 50 vlineto + -235 hlineto + closepath + -23 56 rmoveto + 166 166 rlineto + -35 35 rlineto + -166 -166 rlineto + closepath + -56 23 rmoveto + 235 vlineto + -50 hlineto + -235 vlineto + closepath + -56 -23 rmoveto + -166 166 rlineto + -35 -35 rlineto + 166 -166 rlineto + closepath + -23 -56 rmoveto + -235 hlineto + -50 vlineto + 235 hlineto + closepath + 23 -56 rmoveto + -166 -166 rlineto + 35 -35 rlineto + 166 166 rlineto + closepath + 56 -23 rmoveto + -235 vlineto + 50 hlineto + 235 vlineto + closepath + 56 23 rmoveto + 166 -166 rlineto + 35 35 rlineto + -166 166 rlineto + closepath + endchar +} ND +/uniE00B { % hue + 30 880 hsbw + 400 -10 rmoveto |