From caed6a338466079a637af39db2836b5f4b1771a9 Mon Sep 17 00:00:00 2001 From: Kurt Jung Date: Fri, 2 Aug 2013 14:59:27 -0400 Subject: Initial commit into mercurial --- makefont/doc.go | 23 +++++++++++++++++ makefont/makefont.go | 63 +++++++++++++++++++++++++++++++++++++++++++++++ makefont/makefont_test.go | 19 ++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 makefont/doc.go create mode 100644 makefont/makefont.go create mode 100644 makefont/makefont_test.go (limited to 'makefont') diff --git a/makefont/doc.go b/makefont/doc.go new file mode 100644 index 0000000..306ead2 --- /dev/null +++ b/makefont/doc.go @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2013 Kurt Jung + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* +Command makefont generates a font definition file. + +This utility is used to generate a font definition file that allows TrueType +and Type1 fonts to be used in PDFs produced with the fpdf package. +*/ +package main diff --git a/makefont/makefont.go b/makefont/makefont.go new file mode 100644 index 0000000..159db5b --- /dev/null +++ b/makefont/makefont.go @@ -0,0 +1,63 @@ +package main + +import ( + "flag" + "fmt" + "gofpdf" + "os" +) + +func errPrintf(fmtStr string, args ...interface{}) { + fmt.Fprintf(os.Stderr, fmtStr, args...) +} + +func showHelp() { + errPrintf("Usage: %s [options] font_file [font_file...]\n", os.Args[0]) + flag.PrintDefaults() + errPrintf("Example: %s --embed --enc=../font/cp1252.map --dst=../font calligra.ttf /opt/font/symbol.pfb\n", os.Args[0]) +} + +func tutorialSummary(f *gofpdf.Fpdf, fileStr string) { + if f.Ok() { + fl, err := os.Create(fileStr) + defer fl.Close() + if err == nil { + f.Output(fl) + } else { + f.SetError(err) + } + } + if f.Ok() { + fmt.Printf("Successfully generated %s\n", fileStr) + } else { + errPrintf("%s\n", f.Error()) + } +} + +func main() { + var dstDirStr, encodingFileStr string + var err error + var help, embed bool + flag.StringVar(&dstDirStr, "dst", ".", "directory for output files (*.z, *.json)") + flag.StringVar(&encodingFileStr, "enc", "cp1252.map", "code page file") + flag.BoolVar(&embed, "embed", false, "embed font into PDF") + flag.BoolVar(&help, "help", false, "command line usage") + flag.Parse() + if help { + showHelp() + } else { + args := flag.Args() + if len(args) > 0 { + for _, fileStr := range args { + err = gofpdf.MakeFont(fileStr, encodingFileStr, dstDirStr, os.Stderr, embed) + if err != nil { + errPrintf("%s\n", err) + } + // errPrintf("Font file [%s], Encoding file [%s], Embed [%v]\n", fileStr, encodingFileStr, embed) + } + } else { + errPrintf("At least one Type1 or TrueType font must be specified\n") + showHelp() + } + } +} diff --git a/makefont/makefont_test.go b/makefont/makefont_test.go new file mode 100644 index 0000000..8193a5c --- /dev/null +++ b/makefont/makefont_test.go @@ -0,0 +1,19 @@ +package main + +import ( + "os/exec" + "strings" + "testing" +) + +func TestMakefont(t *testing.T) { + const expect = "Font definition file successfully generated" + out, err := exec.Command("./makefont", "--dst=../font", "--embed", + "--enc=../font/cp1252.map", "../font/calligra.ttf").CombinedOutput() + if err != nil { + t.Fatal(err) + } + if !strings.Contains(string(out), expect) { + t.Fatalf("Unexpected output from makefont") + } +} -- cgit v1.2.1-24-ge1ad