summaryrefslogtreecommitdiff
path: root/chinese/bg5pdf
diff options
context:
space:
mode:
authorYing-Chieh Liao <ijliao@FreeBSD.org>2002-07-04 18:34:31 +0000
committerYing-Chieh Liao <ijliao@FreeBSD.org>2002-07-04 18:34:31 +0000
commit6813118cff3ad028155b29df12145e8b08e77732 (patch)
treedece5fc1fc5155b97e326ed6f1c9005bc7e402f7 /chinese/bg5pdf
parentRemove an explicit dependency on nautilus2. This taken care of by (diff)
Add GB2312 Support
bump PORTREVISION PR: 40194 Submitted by: maintainer
Notes
Notes: svn path=/head/; revision=62439
Diffstat (limited to 'chinese/bg5pdf')
-rw-r--r--chinese/bg5pdf/Makefile2
-rw-r--r--chinese/bg5pdf/files/patch-gbpdf302
-rw-r--r--chinese/bg5pdf/pkg-plist1
3 files changed, 305 insertions, 0 deletions
diff --git a/chinese/bg5pdf/Makefile b/chinese/bg5pdf/Makefile
index b72367201481..e48bf5054022 100644
--- a/chinese/bg5pdf/Makefile
+++ b/chinese/bg5pdf/Makefile
@@ -7,6 +7,7 @@
PORTNAME= bg5pdf
PORTVERSION= 1.0.0
+PORTREVISION= 1
CATEGORIES= chinese print
MASTER_SITES= http://students.washington.edu/cschin/bg5ps/bg5pdf/ \
ftp://freebsd.sinica.edu.tw/pub/statue/bg5pdf/
@@ -21,6 +22,7 @@ WRKSRC= ${WRKDIR}/${PORTNAME}
do-install:
@${MKDIR} ${EXAMPLESDIR}
${INSTALL_SCRIPT} ${WRKSRC}/bg5pdf ${PREFIX}/bin
+ ${INSTALL_SCRIPT} ${WRKSRC}/gbpdf ${PREFIX}/bin
${INSTALL_PROGRAM} ${WRKSRC}/bg5pdflib.so ${PYTHON_SITELIBDIR}
${INSTALL_DATA} ${WRKSRC}/test.big5 ${EXAMPLESDIR}
${INSTALL_DATA} ${WRKSRC}/test.big5.pdf ${EXAMPLESDIR}
diff --git a/chinese/bg5pdf/files/patch-gbpdf b/chinese/bg5pdf/files/patch-gbpdf
new file mode 100644
index 000000000000..8a8069f46d01
--- /dev/null
+++ b/chinese/bg5pdf/files/patch-gbpdf
@@ -0,0 +1,302 @@
+--- gbpdf.orig Fri Jul 5 01:38:22 2002
++++ gbpdf Fri Jul 5 01:39:10 2002
+@@ -0,0 +1,299 @@
++#!/usr/bin/env python
++
++"""
++Bg5pdf is a simple wrapper for wrapping big5 encoding text file into
++PDF file by using PDFlib. The output of this program does not contain
++embedding fonts. You have to download Acrobat Acroread Asianfont pack
++to view and print the output file. This wrapper does not provide any
++formatting function except simple line wrapping. If you need
++sophisticated formatting, you should try CJK-LaTex or other equivalent
++tools.
++
++Information about PDFlib can be found at http://www.pdflib.com.
++You might need it if you need to compile bg5pdflib module which
++is used by gbpdf.
++
++You can download Acrobat Acroread Asianfont Pack at
++http://www.adobe.com/products/acrobat/acrrasianfontpack.html
++
++============================================================================
++
++Copyright (C) 2001 by Chen-Shan Chin
++gbpdf ver. 1.0 Date:Jun 3 2001
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or any
++ later version. This program is distributed in the hope that it will
++ be useful, but WITHOUT ANY WARRANTY; without even implied warranty of
++ MERCHANTABILITY of FITTNESS
++
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
++ details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Sofeware
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA
++
++"""
++
++import getopt
++from string import *
++from sys import *
++from bg5pdflib import *
++#If you want to use python binding (pdflib_py.so) coming with PDFlib,
++#remark the above line and unmark the next line.
++#from pdflib_py import *
++
++
++False = 0
++True = 1
++
++ASCII = 0
++GB2312 = 1
++
++
++def renderer(doc, fn):
++ p = PDF_new()
++ if PDF_open_file(p, fn) == -1:
++ print "Couldn't open PDF file '%s'\n" % fn
++ exit(2)
++ PDF_set_info(p, "Author", "gbpdf")
++ PDF_set_info(p, "Creator", "gbpdf")
++ PDF_set_info(p, "Title", "%s" % fn)
++ cfname = doc.fontName
++ cEncoding = doc.encoding
++ fontSize = doc.fontSize
++ topM = 792.0 / 11.0
++ leftM = 792.0 / 11.0
++
++ PDF_begin_page(p, 612, 792)
++ font = PDF_findfont(p, cfname, cEncoding, 0)
++ PDF_setfont(p, font, fontSize)
++ mode = GB2312
++ y = 0
++ pageN = 1
++ for l in doc.parsedLines:
++ if len(l) == 0:
++ y = y + fontSize
++ continue
++ x = 0.0
++ PDF_set_text_pos(p, leftM + x, 792 - topM -y)
++ curStr = ""
++ for pos in range(len(l)):
++ ch = l[pos]
++ if ch[0] != mode:
++ if len(curStr) != 0:
++ if mode == GB2312:
++ font = PDF_findfont(p, cfname, cEncoding, 0)
++ PDF_setfont(p, font, fontSize)
++ PDF_show(p, curStr)
++ else:
++ font = PDF_findfont(p, "Courier", "host", 0)
++ PDF_setfont(p, font, fontSize)
++ PDF_show(p, curStr)
++ mode = ch[0]
++ curStr = ch[1]
++ else:
++ curStr = curStr + ch[1]
++
++ if len(curStr) != 0:
++ if mode == 1:
++ font = PDF_findfont(p, cfname, cEncoding, 0)
++ PDF_setfont(p, font, fontSize)
++ PDF_show(p, curStr)
++ else:
++ font = PDF_findfont(p, "Courier", "host", 0)
++ PDF_setfont(p, font, fontSize)
++ PDF_show(p, curStr)
++
++ y = y + fontSize + doc.lineSpacing
++ if y > 792 - 2* topM:
++ font = PDF_findfont(p, "Helvetica-Oblique", "host", 0)
++ PDF_setfont(p, font, 12)
++ PDF_show_xy(p,"Converted to PDF by gbpdf", 400, 750)
++ PDF_show_xy(p,"file name: %s--Page %d" % (doc.infileName, pageN), 60,750)
++ PDF_setlinewidth(p,2)
++ PDF_moveto(p, 50, 740)
++ PDF_lineto(p, 562, 740)
++ PDF_stroke(p)
++ PDF_end_page(p)
++ pageN = pageN + 1
++ PDF_begin_page(p, 612, 792)
++ font = PDF_findfont(p, cfname, cEncoding, 0)
++ PDF_setfont(p, font, fontSize)
++ mode = GB2312
++ y = 0
++ font = PDF_findfont(p, "Helvetica-Oblique", "host", 0)
++ PDF_setfont(p, font, 12)
++ PDF_show_xy(p,"Converted to PDF by gbpdf", 400, 750);
++ PDF_show_xy(p,"file name: %s--Page %d" % (doc.infileName, pageN), 60,750)
++ PDF_setlinewidth(p,2)
++ PDF_moveto(p, 50, 740)
++ PDF_lineto(p, 562, 740)
++ PDF_stroke(p)
++ PDF_end_page(p)
++ PDF_close(p)
++ PDF_delete(p)
++
++class document:
++ infileName = ""
++ fontSize = 12;
++ fontNames = ["STSong-Light"]
++ fontName = fontNames[0]
++ encodings = ["GBK-EUC-H"]
++ encoding = encodings[0]
++ wrapped = False
++ numOfChr = 55 #number of character per line for wrapping text
++ parsedLines=[]
++ lineSpacing = 2
++
++ def getChr(self, st, i):
++ if i + 1 < len(st) and\
++ (ord(st[i]) >= 161 and ord(st[i]) <= 249) and \
++ ((ord(st[i+1]) >=64 and ord(st[i+1]) <=126) or \
++ (ord(st[i+1]) >=161 and ord(st[i+1]) <=254)) : # bg5_c
++ cnchr = st[i:i+2]
++ return (cnchr, 2)
++ else:
++ cnchr = st[i]
++ return (cnchr, 1)
++
++ def setFontSize(self, fs):
++ self.fontSize = fs
++
++ def setFont(self, fn):
++ if not fn in self.fontNames:
++ raise FontError
++ else:
++ self.fontName = fn
++
++ def setWrapped(self, yn, nc):
++ if yn > 0:
++ self.wrapped = True
++ self.numOfChr = nc
++
++ def setLineSpacing(self, ls):
++ self.lineSpacing = ls
++
++ def setFontSize(self, fs):
++ self.fontSize = fs
++
++ def parseFile(self, filename):
++ self.infileName = filename
++ try:
++ f = open(filename,"r");
++ except IOError:
++ print 'can not open file: "%s"' % filename
++ exit(2)
++ for line in f.readlines():
++ line = rstrip(line)
++ #if line[-1] == '\n':
++ # line = line[:-1]
++ if len(line) == 0:
++ self.parsedLines.append([])
++ continue
++ pline = []
++ pos = 0
++ cpos = 0
++ line_len = len(line)
++ while 1:
++ (chrx, inc) = self.getChr(line, pos)
++ pos = pos + inc
++ cpos = cpos + inc
++ if inc == 2:
++ pline.append([GB2312, chrx])
++ else:
++ pline.append([ASCII, chrx])
++ if pos >= line_len:
++ break
++ if (self.wrapped == True) and ((cpos + 2) >= self.numOfChr):
++ cpos = 0
++ self.parsedLines.append(pline)
++ pline = []
++ self.parsedLines.append(pline)
++
++def usage():
++ print "usage: gbpdf [option] inputfile outfile"
++ print "d: integer, s:string"
++ print "-w d, --wrap=d: wrapping line up to d ASCII characters (Each GB2312 character"
++ print " occupis two ASCII character spaces.)"
++ print "-s d, --size=d: set the size of font (default: 11)"
++ print "-f s, --font=s: set font (default: 'Msung-Light')"
++ print "-l d, --linespacing=d: set spacing between line (default:2)"
++ print "--inputfile=s: input file name"
++ print "--outputfile=s: outfile name (default: inputfile.pdf)"
++ print "--showfonts: show avaiable fonts"
++
++getopt.GetoptError = getopt.error
++
++def main():
++ try:
++ opts, args =\
++ getopt.getopt(argv[1:],
++ "w:s:f:l:",
++ ["size=",
++ "font=",
++ "linespacing=",
++ "inputfile=",
++ "outputfile=",
++ "wrap=",
++ "showfonts"])
++ except getopt.error:
++ usage()
++ exit(2)
++
++ #print opts, args
++
++ doc = document()
++ doc.setFont(doc.fontNames[0])
++ doc.setWrapped(False, 0)
++ doc.setLineSpacing(2)
++ doc.setFontSize(11)
++
++ infile = ""
++ outfile = ""
++
++ for opt in opts:
++ if opt[0] == "--size" or opt[0] == "-s":
++ doc.setFontSize(atof(opt[1]))
++ continue
++ if opt[0] == "--font" or opt[0] == "-f":
++ doc.setFont(opt[1])
++ continue
++ if opt[0] == "--wrap" or opt[0] == "-w":
++ doc.setWrapped(True, atoi(opt[1]))
++ continue
++ if opt[0] == "--linespacing" or opt[0] == "-l":
++ doc.setLineSpacing(atof(opt[1]))
++ if opt[0] == "--inputfile":
++ infile = opt[1]
++ continue
++ if opt[0] == "--outfile":
++ outfile = opt[1]
++ continue
++ if opt[0] == "--showfonts":
++ print "Avaiable Fonts:"
++ for f in doc.fontNames:
++ print f
++ exit(2)
++
++ if len(args) == 2:
++ infile = args[0]
++ outfile = args[1]
++ elif len(args) == 1:
++ infile = args[0]
++
++ if infile == "":
++ print "no input file name"
++ exit(2)
++
++ if outfile == "":
++ outfile = infile+".pdf"
++
++ doc.parseFile(infile)
++ renderer(doc,outfile)
++ print "Output File is %s" % outfile
++
++if __name__ == "__main__":
++ main()
diff --git a/chinese/bg5pdf/pkg-plist b/chinese/bg5pdf/pkg-plist
index ef57186f0bc4..280c1fe60fa2 100644
--- a/chinese/bg5pdf/pkg-plist
+++ b/chinese/bg5pdf/pkg-plist
@@ -1,4 +1,5 @@
bin/bg5pdf
+bin/gbpdf
lib/%%PYTHON_VERSION%%/site-packages/bg5pdflib.so
share/examples/bg5pdf/test.big5
share/examples/bg5pdf/test.big5.pdf