python: โค๊ดฟอนต์ย้อนกลับ
Submitted by wd on Fri, 2008-03-14 19:29
เพื่อให้ครบกระบวน ต่อด้วยโค๊ดย้อนกลับอีกที
ต่อจาก python: เขียนโค๊ดคลี่แสต็กฟอนต์ ที่ผ่านมานะครับ
ต่อจาก python: เขียนโค๊ดคลี่แสต็กฟอนต์ ที่ผ่านมานะครับ
$ vi dfont.py
...
def stack_format(stacklist):
def flush(newlist, templist, ind, cur_ind):
if ind == 0:
newlist.append('NPUSHB')
else:
newlist.append('NPUSHW')
newlist.append(' %s' % len(templist))
newlist.extend(templist)
return newlist, [], cur_ind
if len(stacklist)==0: return []
n = 0
newlist = []
templist = []
if int(stacklist[0]) < 256:
ind = 0
else:
ind = 1
while n < len(stacklist):
if int(stacklist[n]) < 256:
cur_ind = 0
else:
cur_ind = 1
if ind == cur_ind:
templist.insert(0,' '+stacklist[n])
else:
newlist, templist, ind = flush(newlist, templist, ind, cur_ind) #FLUSH
n += 1
newlist, templist, ind = flush(newlist, templist, ind, cur_ind) #FLUSH
return newlist
def ins_encode(txt):
"""Encode simple code into TrueType Instruction code"""
comment_list = ['#',';'] #COMMENT CHARACTER
flush_list = ['SVTCA'] #FLUSH STACK
stacklist = []
newlist = []
templist = []
txtlist = txt.split('\n')
for line in txtlist:
line = line.replace("\t"," ")
if " " in line:
l = line.split(" ")
else:
l = [line]
l = [ j for j in l if j != "" ]
if l == []:
continue
if l[0][0] in comment_list: #BYPASS COMMENT
continue
for f in flush_list: #?FLUSH STACK
if f == l[0][:len(f)]:
newlist.extend(stack_format(stacklist))
stacklist = []
newlist.extend(templist)
templist = []
break
if '[' in l[0]: #TO UPPERCASE
ltemp = l[0].split('[',1)
temp = ltemp[0].upper()+'['+ltemp[1]
else:
temp = l[0].upper()
templist.append(temp) #KEEP COMMAND
l.pop(0) #PROCESS REST STACK NUM
for element in l:
if element[0] in comment_list:
break
else:
stacklist.append(element)
if stacklist != []:
newlist.extend(stack_format(stacklist))
newlist.extend(templist)
print '===Encode==============================='
print '\n'.join(newlist)
if __name__ == "__main__":
txt = sys.argv[1]
#ins_decode(txt)
ins_encode(txt)
ทดสอบด้วยตัวอย่าง n เมื่อกี้นี้$ dfont.py "
แปะด้วยโค๊ดเทียมที่ถูกคลี่แล้ว จากตัวอย่าง n
"
===Encode=============================== NPUSHB 10 2 8 0 78 13 9 8 11 70 20 SRP0 MIRP[rp0,min,rnd,grey] MIRP[min,rnd,grey] SHP[rp2] MIRP[rp0,rnd,grey] MIRP[min,rnd,grey] IUP[x] NPUSHB 15 3 9 0 3 14 1 6 135 14 17 184 12 188 10 1 SVTCA[y-axis] MDAP[rnd] ALIGNRP MIRP[rnd,grey] MIRP[rp0,rnd,grey] MDRP[rnd,grey] MIRP[min,rnd,grey] SRP1 SRP2 SLOOP IP IUP[y] NPUSHB 5 96 21 207 21 2 SVTCA[x-axis] DELTAP1ไม่เหมือนเป๊ะ แต่น่าจะทำงานได้เหมือนกัน
- Printer-friendly version
- Log in or register to post comments
- 5457 reads







Recent comments