📄 gen.py
字号:
#!/usr/bin/pythonfrom math import *import sysimport stringk = (sqrt(2.)-1.)*4./3.chars = []encoding = []count = 1first = 1def 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+dxdef 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 = ellipsedef 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 = 1def end(): append("""\ endchar} ND""")########################################r = 400s = 375hsb = 200 # horizontal side bearinghsb2 = 30over = 10 # overshootwidth = 2*r+2*over+2*hsb2########################################begin('play', 0x01, hsb, width)poly(( (s,r), (0, 2*r),))end()########################################w=150begin('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 = 65r0 = r-3*wcn = 4movebase(-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 = 11mm = 8line(-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), (1000, 500),))end()########################################begin('brightness', 0x0A, hsb2, width)movebase(r, r)circle(150)circle(-100)rb = 375wb = 50l = 140n = 8for 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%%%EndComments12 dict begin/FontInfo 9 dict dup begin/version (Version 1.00) readonly def/Notice (This is generated file.) 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 defend 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 810} readonly def/Encoding 256 array"""print string.join(encoding, '\n')i = len(encoding)while i<256: print 'dup %i /.notdef put' % i i = i+1print """\readonly defcurrentdict endcurrentfile eexecdup /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 [ -10 0 800 810 640 650 720 730 ] def/StdHW [ 65 ] def/StdVW [ 65 ] def/StemSnapH [ 65 800 ] def/StemSnapV [ 65 150 ] def/MinFeature {16 16} def/password 5839 def/Subrs 1 arraydup 0 { return } NP ND2 index/CharStrings %i dict dup begin""" % countprint """\/.notdef { 0 400 hsbw endchar} ND"""print string.join(chars, '\n')print """\endendreadonly putnoaccess putdup/FontName get exch definefont popmark currentfile closefile"""
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -