Date: Fri, 21 Apr 2017 10:30:46 +0000 (UTC) From: Dmitry Marakasov <amdmi3@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r439043 - in head/chinese/bg5pdf: . files Message-ID: <201704211030.v3LAUk1i030933@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: amdmi3 Date: Fri Apr 21 10:30:46 2017 New Revision: 439043 URL: https://svnweb.freebsd.org/changeset/ports/439043 Log: - Fix shebangs - Switch to options helpers - Simplify by converting a patch which creates file to a plain file Added: head/chinese/bg5pdf/files/gbpdf - copied, changed from r439042, head/chinese/bg5pdf/files/patch-gbpdf Deleted: head/chinese/bg5pdf/files/patch-gbpdf Modified: head/chinese/bg5pdf/Makefile Modified: head/chinese/bg5pdf/Makefile ============================================================================== --- head/chinese/bg5pdf/Makefile Fri Apr 21 10:29:55 2017 (r439042) +++ head/chinese/bg5pdf/Makefile Fri Apr 21 10:30:46 2017 (r439043) @@ -3,7 +3,7 @@ PORTNAME= bg5pdf PORTVERSION= 1.0.0 -PORTREVISION= 6 +PORTREVISION= 7 CATEGORIES= chinese print MASTER_SITES= ftp://freebsd.sinica.edu.tw/pub/statue/bg5pdf/ \ LOCAL/chinsan @@ -15,26 +15,30 @@ LICENSE= GPLv2 LIB_DEPENDS= libpdf.so:print/pdflib -USES= python:2 +USES= python:2 shebangfix +SHEBANG_FILES= bg5pdf gbpdf +python_OLD_CMD= "/usr/bin/env /usr/bin/python" CFLAGS+= -fPIC WRKSRC= ${WRKDIR}/${PORTNAME} OPTIONS_DEFINE= EXAMPLES -post-patch: - ${REINPLACE_CMD} -e 's,/usr/bin/python,python,g' ${WRKSRC}/bg5pdf +post-extract: + @${CP} ${FILESDIR}/gbpdf ${WRKSRC} do-build: ${CC} ${CFLAGS} -shared ${WRKSRC}/bg5pdflib.c -I${PREFIX}/include \ -I${PYTHON_INCLUDEDIR} -L${PREFIX}/lib -lpdf -o ${WRKSRC}/bg5pdflib.so do-install: - @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} + @${MKDIR} ${STAGEDIR}${PYTHON_SITELIBDIR} + ${INSTALL_LIB} ${WRKSRC}/bg5pdflib.so ${STAGEDIR}${PYTHON_SITELIBDIR} ${INSTALL_SCRIPT} ${WRKSRC}/bg5pdf ${STAGEDIR}${PREFIX}/bin ${INSTALL_SCRIPT} ${WRKSRC}/gbpdf ${STAGEDIR}${PREFIX}/bin - @${MKDIR} ${STAGEDIR}${PYTHON_SITELIBDIR} - ${INSTALL_PROGRAM} ${WRKSRC}/bg5pdflib.so ${STAGEDIR}${PYTHON_SITELIBDIR} + +do-install-EXAMPLES-on: + @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_DATA} ${WRKSRC}/test.big5 ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_DATA} ${WRKSRC}/test.big5.pdf ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_SCRIPT} ${WRKSRC}/genTest.py ${STAGEDIR}${EXAMPLESDIR} Copied and modified: head/chinese/bg5pdf/files/gbpdf (from r439042, head/chinese/bg5pdf/files/patch-gbpdf) ============================================================================== --- head/chinese/bg5pdf/files/patch-gbpdf Fri Apr 21 10:29:55 2017 (r439042, copy source) +++ head/chinese/bg5pdf/files/gbpdf Fri Apr 21 10:30:46 2017 (r439043) @@ -1,302 +1,299 @@ ---- 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() +#!/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()
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704211030.v3LAUk1i030933>