SHA256
1
0
forked from pool/a2ps-h
a2ps-h/a2ps-h.py

232 lines
6.7 KiB
Python
Raw Normal View History

#! /usr/bin/env python
#
# (C) Mizi Research
# distributed under GPL
#
# Author: Hwang, ChiDeok (hwang@mizi.co.kr)
# 2000.03.14
#
# ChangeLog:
# -o option<6F><6E> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쳪 argument<6E><74> <20>־<EFBFBD><D6BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
# ps <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD> a2ps <20><> <20>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
# argument<6E><74> <20><> <20>־<EFBFBD><D6BE><EFBFBD> <20><><EFBFBD><EFBFBD> stdin<69><6E><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE>帲. (2000/03/16)
# string<6E><67>ȯ<EFBFBD><C8AF> postscript language<67><65><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>. (2000/03/20)
# string<6E><67>ȯ<EFBFBD><C8AF> <20>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (2000/03/23)
# stdin<69><6E><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><> <20><><EFBFBD><20>ʿ<EFBFBD><CABF>ϸ<EFBFBD> a2ps<70><73> <20><><EFBFBD><EFBFBD> (2000/12/28)
# mutt<74><74> <20>Բ<EFBFBD> <20><> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> -m<>ɼ<EFBFBD><C9BC><EFBFBD> <20>߰<EFBFBD> (2000/01/03)
import string,sys,os
try:
from os import tmpnam # python2.0
except:
def tmpnam():
return "/tmp/a2ps-h-tmp"
hps = '/Gulim-Medium-KSC-EUC-H'
hbps = '/Gulim-Medium-KSC-EUC-H'
hbops = '/Gulim-Medium-KSC-EUC-H'
hops = '/Gulim-Medium-KSC-EUC-H'
hps = '/Gulim-Regular'
hbps = '/Gulim-Regular'
hbops = '/Gulim-Regular'
hops = '/Gulim-Regular'
def startswith(s, needle):
if len(needle) > len(s): return 0
return s[:len(needle)] == needle
def trans_file(filename):
if type(filename) == type([]):
lines = filename
else:
lines = open(filename).readlines()
for i in range(len(lines)):
if startswith(lines[i], '% Check PostScript language '):
print show_override
print lines[i],
elif startswith(lines[i], '% Dictionary for ISO-8859-1'):
print lines[i],
print lines[i+1],
print hangul_font
lines = lines[i+10:]
break
else:
print lines[i],
for line in lines: print line,
hangul_font = """\
16 dict begin
/FontName /fCourier def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Courier findfont %(hps)s findfont ] def
FontName currentdict
end
definefont /fCourier exch def
16 dict begin
/FontName /fCourier-Bold def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Courier-Bold findfont %(hbps)s findfont ] def
FontName currentdict
end
definefont /fCourier-Bold exch def
16 dict begin
/FontName /fCourier-BoldOblique def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Courier-BoldOblique findfont %(hbops)s findfont ] def
FontName currentdict
end
definefont /fCourier-BoldOblique exch def
16 dict begin
/FontName /fCourier-Oblique def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Courier-Oblique findfont %(hops)s findfont ] def
FontName currentdict
end
definefont /fCourier-Oblique exch def
16 dict begin
/FontName /fHelvetica def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Helvetica findfont %(hps)s findfont ] def
FontName currentdict
end
definefont /fHelvetica exch def
16 dict begin
/FontName /fHelvetica-Bold def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Helvetica-Bold findfont %(hbps)s findfont ] def
FontName currentdict
end
definefont /fHelvetica-Bold exch def
16 dict begin
/FontName /fTimes-Bold def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Times-Bold findfont %(hbps)s findfont ] def
FontName currentdict
end
definefont /fTimes-Bold exch def
16 dict begin
/FontName /fTimes-Roman def /FontType 0 def
/WMode 0 def /FMapType 3 def /FontMatrix matrix def
/Encoding [0 1] def
/FDepVector [ /Times-Roman findfont %(hps)s findfont ] def
FontName currentdict
end
definefont /fTimes-Roman exch def
""" % locals()
show_override = """\
%
%%Copyright: (c) 2000, 2001 Chideok Hwang
/han-trans {
dup length 3 mul string /mystr exch def
/mylen 0 def
/in-hangul false def
{
dup 128 gt {
in-hangul {
% c
mystr exch mylen exch put
/mylen mylen 1 add def
} {
/in-hangul true def
% 255 1 c
mystr mylen (\\377\\1) putinterval
mystr exch mylen 2 add exch put
/mylen mylen 3 add def
} ifelse
} {
in-hangul not {
% c
mystr exch mylen exch put
/mylen mylen 1 add def
} {
/in-hangul false def
% 255 0 c
mystr mylen (\\377\\0) putinterval
mystr exch mylen 2 add exch put
/mylen mylen 3 add def
} ifelse
} ifelse
} forall
mystr 0 mylen getinterval
} bind def
/origshow {show} bind def
/show {han-trans origshow} bind def
/origstringwidth {stringwidth} bind def
/stringwidth { han-trans origstringwidth } bind def
%\
"""
def run_a2ps(input_file):
ps = os.popen('a2ps --output=- ' + input_file)
return ps.readlines()
def run_a2ps_from_stdin(contents):
infile_name = tmpnam()
infile = open(infile_name, 'w')
infile.write(contents)
del infile # flush
a2ps_args = ' --center-title="' + title + '" ' + \
'--footer="<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>" ' + \
'--output=- '+ infile_name
ps = os.popen('a2ps ' + a2ps_args, 'r')
outlines = ps.readlines()
os.remove(infile_name)
return outlines
try:
i = sys.argv.index('-o')
sys.stdout = open(sys.argv[i+1], 'w')
del sys.argv[i:i+2]
except: pass
if '-h' in sys.argv:
sys.exit(0)
if '-m' in sys.argv:
# called from mutt
i = sys.argv.index('-m')
del sys.argv[i]
assert len(sys.argv) == 1
input_buf = sys.stdin.read()
magic = input_buf[:5];
import re
title = re.search('^Subject:(.*)$', input_buf, re.M).group(1)
input_file = None
elif len(sys.argv) == 1:
input_buf = sys.stdin.read()
magic = input_buf[:5]
title = 'From Stdin'
input_file = None
else:
input_file = sys.argv[1]
magic = open(input_file).read(5)
if magic != '%!PS-':
if input_file:
input_lines = run_a2ps(input_file)
else:
input_lines = run_a2ps_from_stdin(input_buf)
trans_file(input_lines)