summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt <kurt.w.jung@gmail.com>2019-04-30 14:32:56 -0400
committerKurt <kurt.w.jung@gmail.com>2019-04-30 14:32:56 -0400
commit88c06828a097914c971a893f0048cd911e9b1a22 (patch)
tree364756465275dca27404b9d424a178b289c3f32e
parent04d2090aeec620cca72622aa752cf53aaf0b0fbb (diff)
Use Lua script to generate README, doc.go and index.html rather than autoreadme
-rw-r--r--.gitignore5
-rw-r--r--Makefile31
-rw-r--r--README.md185
-rwxr-xr-xcheck3
-rwxr-xr-xcov1
-rw-r--r--doc.go144
-rw-r--r--doc/doc.lua100
-rw-r--r--doc/ftr.html3
-rw-r--r--doc/hdr.html55
-rw-r--r--document.md260
-rwxr-xr-xmkdoc23
11 files changed, 620 insertions, 190 deletions
diff --git a/.gitignore b/.gitignore
index b28eb22..87a2697 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,8 @@ private
*.swp
**/*.test
.idea/
+doc/body.html
+doc/body.md
+doc/index.html
+doc/index.html.ok
+coverage.html
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5a78d8e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,31 @@
+doc : README.md doc.go doc/index.html.ok
+
+test :
+ go test -v
+
+cov :
+ go test -v -coverprofile=coverage && go tool cover -html=coverage -o=coverage.html
+
+check :
+ golint .
+ go vet -all .
+ gofmt -s -l .
+
+%.html.ok : %.html
+ tidy -quiet -output /dev/null $<
+ touch $@
+
+README.md doc.go doc/index.html : document.md
+
+doc/body.md README.md doc.go : document.md
+ lua doc/doc.lua
+ gofmt -s -w doc.go
+
+doc/index.html : doc/hdr.html doc/body.html doc/ftr.html
+ cat doc/hdr.html doc/body.html doc/ftr.html > $@
+
+doc/body.html : doc/body.md
+ markdown -f +links,+image,+smarty,+ext,+divquote -o $@ $<
+
+clean :
+ rm -f coverage.html coverage doc/*.ok doc/body.md README.md doc.go doc/index.html doc/body.html
diff --git a/README.md b/README.md
index 54c4d55..145d798 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-# gofpdf
+# GoFPDF document generator
-![gofpdf](image/logo_gofpdf.jpg?raw=true "gofpdf")
+[![MIT licensed][badge-mit]][license]
+[![Report][badge-report]][report]
+[![GoDoc][badge-doc]][godoc]
-[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/jung-kurt/gofpdf/master/license.txt)
-[![GoDoc](https://godoc.org/github.com/jung-kurt/gofpdf?status.svg)](https://godoc.org/github.com/jung-kurt/gofpdf)
-[![Build Status](https://travis-ci.org/jung-kurt/gofpdf.svg?branch=master)](https://travis-ci.org/jung-kurt/gofpdf)
+![gofpdf](image/logo_gofpdf.jpg?raw=true "gofpdf")
Package gofpdf implements a PDF document generator with high level support for
text, drawing and images.
@@ -35,31 +35,29 @@ on Linux, Mac and Windows platforms.
Like FPDF version 1.7, from which gofpdf is derived, this package does not yet
support UTF-8 fonts. In particular, languages that require more than one code
page such as Chinese, Japanese, and Arabic are not currently supported. This is
-explained in [issue 109](https://github.com/jung-kurt/gofpdf/issues/109). However, support is provided to automatically translate
-UTF-8 runes to code page encodings for languages that have fewer than 256
-glyphs.
+explained in [issue 109][issue109]. However, support is provided to
+automatically translate UTF-8 runes to code page encodings for languages that
+have fewer than 256 glyphs.
## Installation
-
To install the package on your system, run
-```
+```shell
go get github.com/jung-kurt/gofpdf
```
Later, to receive updates, run
-```
+```shell
go get -u -v github.com/jung-kurt/gofpdf/...
```
## Quick Start
-
The following Go code generates a simple PDF file.
-```
+```go
pdf := gofpdf.New("P", "mm", "A4", "")
pdf.AddPage()
pdf.SetFont("Arial", "B", 16)
@@ -67,12 +65,12 @@ pdf.Cell(40, 10, "Hello, world")
err := pdf.OutputFileAndClose("hello.pdf")
```
-See the functions in the [fpdf_test.go](https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go) file (shown as examples in this
-documentation) for more advanced PDF examples.
+See the functions in the
+[fpdf_test.go][fpdf-test]
+file (shown as examples in this documentation) for more advanced PDF examples.
## Errors
-
If an error occurs in an Fpdf method, an internal error field is set. After
this occurs, Fpdf method calls typically return without performing any
operations and the error state is retained. This error management scheme
@@ -80,17 +78,18 @@ facilitates PDF generation since individual method calls do not need to be
examined for failure; it is generally sufficient to wait until after Output()
is called. For the same reason, if an error occurs in the calling application
during PDF generation, it may be desirable for the application to transfer the
-error to the Fpdf instance by calling the SetError() method or the SetErrorf()
-method. At any time during the life cycle of the Fpdf instance, the error state
-can be determined with a call to Ok() or Err(). The error itself can be
-retrieved with a call to Error().
+error to the Fpdf instance by calling the `SetError()` method or the
+`SetErrorf()` method. At any time during the life cycle of the Fpdf instance,
+the error state can be determined with a call to `Ok()` or `Err()`. The error
+itself can be retrieved with a call to `Error()`.
## Conversion Notes
-
-This package is a relatively straightforward translation from the original [FPDF](http://www.fpdf.org/) library written in PHP (despite the caveat in the introduction to [Effective
-Go](https://golang.org/doc/effective_go.html)). The API names have been retained even though the Go idiom would suggest
-otherwise (for example, pdf.GetX() is used rather than simply pdf.X()). The
+This package is a relatively straightforward translation from the original
+[FPDF][fpdf] library written in PHP (despite the caveat in the
+introduction to [Effective Go][effective-go]). The
+API names have been retained even though the Go idiom would suggest otherwise
+(for example, `pdf.GetX()` is used rather than simply `pdf.X()`). The
similarity of the two libraries makes the original FPDF website a good source
of information. It includes a forum and FAQ.
@@ -105,63 +104,60 @@ rather than PHP.
## Example PDFs
-
-A side effect of running "go test ./..." is the production of a number of
+A side effect of running `go test ./...` is the production of a number of
example PDFs. These can be found in the gofpdf/pdf directory after the tests
complete.
Please note that these examples run in the context of a test. In order run an
-example as a standalone application, you'll need to examine [fpdf_test.go](https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go) for
-some helper routines, for example exampleFilename() and summary().
+example as a standalone application, you'll need to examine
+[fpdf_test.go][fpdf-test] for some helper routines, for example
+`exampleFilename()` and `summary()`.
Example PDFs can be compared with reference copies in order to verify that they
have been generated as expected. This comparison will be performed if a PDF
with the same name as the example PDF is placed in the gofpdf/pdf/reference
-directory and if the third argument to ComparePDFFiles() in
+directory and if the third argument to `ComparePDFFiles()` in
internal/example/example.go is true. (By default it is false.) The routine that
summarizes an example will look for this file and, if found, will call
-ComparePDFFiles() to check the example PDF for equality with its reference PDF.
+`ComparePDFFiles()` to check the example PDF for equality with its reference PDF.
If differences exist between the two files they will be printed to standard
output and the test will fail. If the reference file is missing, the comparison
is considered to succeed. In order to successfully compare two PDFs, the
placement of internal resources must be consistent and the internal creation
-timestamps must be the same. To do this, the methods SetCatalogSort() and
-SetCreationDate() need to be called for both files. This is done automatically
+timestamps must be the same. To do this, the methods `SetCatalogSort()` and
+`SetCreationDate()` need to be called for both files. This is done automatically
for all examples.
## Nonstandard Fonts
-
Nothing special is required to use the standard PDF fonts (courier, helvetica,
-times, zapfdingbats) in your documents other than calling SetFont().
+times, zapfdingbats) in your documents other than calling `SetFont()`.
In order to use a different TrueType or Type1 font, you will need to generate a
font definition file and, if the font will be embedded into PDFs, a compressed
-version of the font file. This is done by calling the MakeFont function or
+version of the font file. This is done by calling the `MakeFont()` function or
using the included makefont command line utility. To create the utility, cd
-into the makefont subdirectory and run "go build". This will produce a
+into the makefont subdirectory and run `go build`. This will produce a
standalone executable named makefont. Select the appropriate encoding file from
the font subdirectory and run the command as in the following example.
-```
+```shell
./makefont --embed --enc=../font/cp1252.map --dst=../font ../font/calligra.ttf
```
In your PDF generation code, call AddFont() to load the font and, as with the
standard fonts, SetFont() to begin using it. Most examples, including the
package example, demonstrate this method. Good sources of free, open-source
-fonts include [Google Fonts](http://www.google.com/fonts/) and [DejaVu Fonts](http://dejavu-fonts.org/).
+fonts include [Google Fonts][gfont] and [DejaVu Fonts][dfont].
## Related Packages
-
-The [draw2d](https://github.com/llgcode/draw2d) package is a two dimensional
-vector graphics library that can generate output in different forms. It uses
-gofpdf for its document production mode.
+The [draw2d][draw2d] package is a two dimensional vector graphics library that
+can generate output in different forms. It uses gofpdf for its document
+production mode.
## Contributing Changes
-
gofpdf is a global community effort and you are invited to make it even better.
If you have implemented a new feature or corrected a problem, please consider
contributing your change to the project. A contribution that does not directly
@@ -173,56 +169,54 @@ Here are guidelines for making submissions. Your change should
* be compatible with the MIT License
* be properly documented
* be formatted with `go fmt`
-* include an example in [fpdf_test.go](https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go) if appropriate
-* conform to the standards of [golint](https://github.com/golang/lint) and
-[go vet](https://godoc.org/golang.org/x/tools/cmd/vet), that is, `golint .` and
+* include an example in [fpdf_test.go][test] if appropriate
+* conform to the standards of [golint][lint] and
+[go vet][vet], that is, `golint .` and
`go vet .` should not generate any warnings
-* not diminish [test coverage](https://blog.golang.org/cover)
+* not diminish [test coverage][coverage]
-[Pull requests](https://help.github.com/articles/using-pull-requests/) work
-nicely as a means of contributing your changes.
+[Pull requests][pr] are the preferred means of accepting your changes.
## License
-
gofpdf is released under the MIT License. It is copyrighted by Kurt Jung and
the contributors acknowledged below.
## Acknowledgments
-
-This package's code and documentation are closely derived from the [FPDF](http://www.fpdf.org/) library created by Olivier Plathey, and a number of font and
-image resources are copied directly from it. Bruno Michel has provided valuable
-assistance with the code. Drawing support is adapted from the FPDF geometric
-figures script by David Hernández Sanz. Transparency support is adapted from
-the FPDF transparency script by Martin Hall-May. Support for gradients and
-clipping is adapted from FPDF scripts by Andreas Würmser. Support for outline
-bookmarks is adapted from Olivier Plathey by Manuel Cornes. Layer support is
-adapted from Olivier Plathey. Support for transformations is adapted from the
-FPDF transformation script by Moritz Wagner and Andreas Würmser. PDF
-protection is adapted from the work of Klemen Vodopivec for the FPDF product.
-Lawrence Kesteloot provided code to allow an image's extent to be determined
-prior to placement. Support for vertical alignment within a cell was provided
-by Stefan Schroeder. Ivan Daniluk generalized the font and image loading code
-to use the Reader interface while maintaining backward compatibility. Anthony
-Starks provided code for the Polygon function. Robert Lillack provided the
-Beziergon function and corrected some naming issues with the internal curve
-function. Claudio Felber provided implementations for dashed line drawing and
-generalized font loading. Stani Michiels provided support for multi-segment
-path drawing with smooth line joins, line join styles, enhanced fill modes, and
-has helped greatly with package presentation and tests. Templating is adapted
-by Marcus Downing from the FPDF_Tpl library created by Jan Slabon and Setasign.
-Jelmer Snoeck contributed packages that generate a variety of barcodes and help
-with registering images on the web. Jelmer Snoek and Guillermo Pascual
-augmented the basic HTML functionality with aligned text. Kent Quirk
-implemented backwards-compatible support for reading DPI from images that
-support it, and for setting DPI manually and then having it properly taken into
-account when calculating image size. Paulo Coutinho provided support for static
-embedded fonts. Dan Meyers added support for embedded JavaScript. David Fish
-added a generic alias-replacement function to enable, among other things, table
-of contents functionality. Andy Bakun identified and corrected a problem in
-which the internal catalogs were not sorted stably. Paul Montag added encoding
-and decoding functionality for templates, including images that are embedded in
+This package's code and documentation are closely derived from the [FPDF][fpdf]
+library created by Olivier Plathey, and a number of font and image resources
+are copied directly from it. Bruno Michel has provided valuable assistance with
+the code. Drawing support is adapted from the FPDF geometric figures script by
+David Hernández Sanz. Transparency support is adapted from the FPDF
+transparency script by Martin Hall-May. Support for gradients and clipping is
+adapted from FPDF scripts by Andreas Würmser. Support for outline bookmarks is
+adapted from Olivier Plathey by Manuel Cornes. Layer support is adapted from
+Olivier Plathey. Support for transformations is adapted from the FPDF
+transformation script by Moritz Wagner and Andreas Würmser. PDF protection is
+adapted from the work of Klemen Vodopivec for the FPDF product. Lawrence
+Kesteloot provided code to allow an image's extent to be determined prior to
+placement. Support for vertical alignment within a cell was provided by Stefan
+Schroeder. Ivan Daniluk generalized the font and image loading code to use the
+Reader interface while maintaining backward compatibility. Anthony Starks
+provided code for the Polygon function. Robert Lillack provided the Beziergon
+function and corrected some naming issues with the internal curve function.
+Claudio Felber provided implementations for dashed line drawing and generalized
+font loading. Stani Michiels provided support for multi-segment path drawing
+with smooth line joins, line join styles, enhanced fill modes, and has helped
+greatly with package presentation and tests. Templating is adapted by Marcus
+Downing from the FPDF_Tpl library created by Jan Slabon and Setasign. Jelmer
+Snoeck contributed packages that generate a variety of barcodes and help with
+registering images on the web. Jelmer Snoek and Guillermo Pascual augmented the
+basic HTML functionality with aligned text. Kent Quirk implemented
+backwards-compatible support for reading DPI from images that support it, and
+for setting DPI manually and then having it properly taken into account when
+calculating image size. Paulo Coutinho provided support for static embedded
+fonts. Dan Meyers added support for embedded JavaScript. David Fish added a
+generic alias-replacement function to enable, among other things, table of
+contents functionality. Andy Bakun identified and corrected a problem in which
+the internal catalogs were not sorted stably. Paul Montag added encoding and
+decoding functionality for templates, including images that are embedded in
templates; this allows templates to be stored independently of gofpdf. Paul
also added support for page boxes used in printing PDF documents. Wojciech
Matusiak added supported for word spacing.
@@ -233,4 +227,27 @@ Matusiak added supported for word spacing.
UTF-8 runes to code page bytes is provided.
* Improve test coverage as reported by the coverage tool.
-
+[badge-author]: https://img.shields.io/badge/author-Kurt_Jung-blue.svg
+[badge-doc]: https://img.shields.io/badge/godoc-GoFPDF-blue.svg
+[badge-github]: https://img.shields.io/badge/project-Git_Hub-blue.svg
+[badge-mit]: https://img.shields.io/badge/license-MIT-blue.svg
+[badge-report]: https://goreportcard.com/badge/github.com/jung-kurt/gofpdf
+[badge-status]: https://travis-ci.org/jung-kurt/gofpdf.svg?branch=master)
+[coverage]: https://blog.golang.org/cover
+[dfont]: http://dejavu-fonts.org/
+[draw2d]: https://github.com/llgcode/draw2d
+[fpdf]: http://www.fpdf.org/
+[gfont]: http://www.google.com/fonts/
+[github]: https://github.com/jung-kurt/gofpdf
+[godoc]: https://godoc.org/github.com/jung-kurt/gofpdf
+[jung]: https://github.com/jung-kurt/
+[license]: https://raw.githubusercontent.com/jung-kurt/gofpdf/master/LICENSE
+[lint]: https://github.com/golang/lint
+[pr]: https://help.github.com/articles/using-pull-requests/
+[report]: https://goreportcard.com/report/github.com/jung-kurt/gofpdf
+[status]: https://travis-ci.org/jung-kurt/gofpdf
+[test]: https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go
+[vet]: https://godoc.org/golang.org/x/tools/cmd/vet
+[issue109]: https://github.com/jung-kurt/gofpdf/issues/109
+[fpdf-test]: https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go
+[effective-go]: https://golang.org/doc/effective_go.html \ No newline at end of file
diff --git a/check b/check
deleted file mode 100755
index dcc2519..0000000
--- a/check
+++ /dev/null
@@ -1,3 +0,0 @@
-golint .
-go vet -all .
-gofmt -s -l .
diff --git a/cov b/cov
deleted file mode 100755
index a07edce..0000000
--- a/cov
+++ /dev/null
@@ -1 +0,0 @@
-go test -coverprofile=coverage && go tool cover -html=coverage
diff --git a/doc.go b/doc.go
index 6492f7e..78afc23 100644
--- a/doc.go
+++ b/doc.go
@@ -1,20 +1,4 @@
/*
- * Copyright (c) 2013-2017 Kurt Jung (Gmail: kurt.w.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.
- */
-
-/*
Package gofpdf implements a PDF document generator with high level support for
text, drawing and images.
@@ -60,9 +44,9 @@ on Linux, Mac and Windows platforms.
Like FPDF version 1.7, from which gofpdf is derived, this package does not yet
support UTF-8 fonts. In particular, languages that require more than one code
page such as Chinese, Japanese, and Arabic are not currently supported. This is
-explained in issue 109. However, support is provided to automatically translate
-UTF-8 runes to code page encodings for languages that have fewer than 256
-glyphs.
+explained in issue 109. However, support is provided to
+automatically translate UTF-8 runes to code page encodings for languages that
+have fewer than 256 glyphs.
Installation
@@ -84,8 +68,9 @@ The following Go code generates a simple PDF file.
pdf.Cell(40, 10, "Hello, world")
err := pdf.OutputFileAndClose("hello.pdf")
-See the functions in the fpdf_test.go file (shown as examples in this
-documentation) for more advanced PDF examples.
+See the functions in the
+fpdf_test.go
+file (shown as examples in this documentation) for more advanced PDF examples.
Errors
@@ -96,17 +81,18 @@ facilitates PDF generation since individual method calls do not need to be
examined for failure; it is generally sufficient to wait until after Output()
is called. For the same reason, if an error occurs in the calling application
during PDF generation, it may be desirable for the application to transfer the
-error to the Fpdf instance by calling the SetError() method or the SetErrorf()
-method. At any time during the life cycle of the Fpdf instance, the error state
-can be determined with a call to Ok() or Err(). The error itself can be
-retrieved with a call to Error().
+error to the Fpdf instance by calling the SetError() method or the
+SetErrorf() method. At any time during the life cycle of the Fpdf instance,
+the error state can be determined with a call to Ok() or Err(). The error
+itself can be retrieved with a call to Error().
Conversion Notes
-This package is a relatively straightforward translation from the original FPDF
-library written in PHP (despite the caveat in the introduction to Effective
-Go). The API names have been retained even though the Go idiom would suggest
-otherwise (for example, pdf.GetX() is used rather than simply pdf.X()). The
+This package is a relatively straightforward translation from the original
+FPDF library written in PHP (despite the caveat in the
+introduction to Effective Go). The
+API names have been retained even though the Go idiom would suggest otherwise
+(for example, pdf.GetX() is used rather than simply pdf.X()). The
similarity of the two libraries makes the original FPDF website a good source
of information. It includes a forum and FAQ.
@@ -121,13 +107,14 @@ rather than PHP.
Example PDFs
-A side effect of running "go test ./..." is the production of a number of
+A side effect of running go test ./... is the production of a number of
example PDFs. These can be found in the gofpdf/pdf directory after the tests
complete.
Please note that these examples run in the context of a test. In order run an
-example as a standalone application, you'll need to examine fpdf_test.go for
-some helper routines, for example exampleFilename() and summary().
+example as a standalone application, you'll need to examine
+fpdf_test.go for some helper routines, for example
+exampleFilename() and summary().
Example PDFs can be compared with reference copies in order to verify that they
have been generated as expected. This comparison will be performed if a PDF
@@ -151,9 +138,9 @@ times, zapfdingbats) in your documents other than calling SetFont().
In order to use a different TrueType or Type1 font, you will need to generate a
font definition file and, if the font will be embedded into PDFs, a compressed
-version of the font file. This is done by calling the MakeFont function or
+version of the font file. This is done by calling the MakeFont() function or
using the included makefont command line utility. To create the utility, cd
-into the makefont subdirectory and run "go build". This will produce a
+into the makefont subdirectory and run go build. This will produce a
standalone executable named makefont. Select the appropriate encoding file from
the font subdirectory and run the command as in the following example.
@@ -162,13 +149,13 @@ the font subdirectory and run the command as in the following example.
In your PDF generation code, call AddFont() to load the font and, as with the
standard fonts, SetFont() to begin using it. Most examples, including the
package example, demonstrate this method. Good sources of free, open-source
-fonts include http://www.google.com/fonts/ and http://dejavu-fonts.org/.
+fonts include Google Fonts and DejaVu Fonts.
Related Packages
-The draw2d package (https://github.com/llgcode/draw2d) is a two dimensional
-vector graphics library that can generate output in different forms. It uses
-gofpdf for its document production mode.
+The draw2d package is a two dimensional vector graphics library that
+can generate output in different forms. It uses gofpdf for its document
+production mode.
Contributing Changes
@@ -176,7 +163,7 @@ gofpdf is a global community effort and you are invited to make it even better.
If you have implemented a new feature or corrected a problem, please consider
contributing your change to the project. A contribution that does not directly
pertain to the core functionality of gofpdf should be placed in its own
-directory directly beneath the `contrib` directory.
+directory directly beneath the contrib directory.
Here are guidelines for making submissions. Your change should
@@ -184,18 +171,17 @@ Here are guidelines for making submissions. Your change should
• be properly documented
-• be formatted with `go fmt`
+• be formatted with go fmt
• include an example in fpdf_test.go if appropriate
-• conform to the standards of golint (https://github.com/golang/lint) and
-go vet (https://godoc.org/golang.org/x/tools/cmd/vet), that is, `golint .` and
-`go vet .` should not generate any warnings
+• conform to the standards of golint and
+go vet, that is, golint . and
+go vet . should not generate any warnings
-• not diminish test coverage (https://blog.golang.org/cover)
+• not diminish test coverage
-Pull requests (https://help.github.com/articles/using-pull-requests/) work
-nicely as a means of contributing your changes.
+Pull requests are the preferred means of accepting your changes.
License
@@ -204,39 +190,39 @@ the contributors acknowledged below.
Acknowledgments
-This package's code and documentation are closely derived from the FPDF library
-(http://www.fpdf.org/) created by Olivier Plathey, and a number of font and
-image resources are copied directly from it. Bruno Michel has provided valuable
-assistance with the code. Drawing support is adapted from the FPDF geometric
-figures script by David Hernández Sanz. Transparency support is adapted from
-the FPDF transparency script by Martin Hall-May. Support for gradients and
-clipping is adapted from FPDF scripts by Andreas Würmser. Support for outline
-bookmarks is adapted from Olivier Plathey by Manuel Cornes. Layer support is
-adapted from Olivier Plathey. Support for transformations is adapted from the
-FPDF transformation script by Moritz Wagner and Andreas Würmser. PDF
-protection is adapted from the work of Klemen Vodopivec for the FPDF product.
-Lawrence Kesteloot provided code to allow an image's extent to be determined
-prior to placement. Support for vertical alignment within a cell was provided
-by Stefan Schroeder. Ivan Daniluk generalized the font and image loading code
-to use the Reader interface while maintaining backward compatibility. Anthony
-Starks provided code for the Polygon function. Robert Lillack provided the
-Beziergon function and corrected some naming issues with the internal curve
-function. Claudio Felber provided implementations for dashed line drawing and
-generalized font loading. Stani Michiels provided support for multi-segment
-path drawing with smooth line joins, line join styles, enhanced fill modes, and
-has helped greatly with package presentation and tests. Templating is adapted
-by Marcus Downing from the FPDF_Tpl library created by Jan Slabon and Setasign.
-Jelmer Snoeck contributed packages that generate a variety of barcodes and help
-with registering images on the web. Jelmer Snoek and Guillermo Pascual
-augmented the basic HTML functionality with aligned text. Kent Quirk
-implemented backwards-compatible support for reading DPI from images that
-support it, and for setting DPI manually and then having it properly taken into
-account when calculating image size. Paulo Coutinho provided support for static
-embedded fonts. Dan Meyers added support for embedded JavaScript. David Fish
-added a generic alias-replacement function to enable, among other things, table
-of contents functionality. Andy Bakun identified and corrected a problem in
-which the internal catalogs were not sorted stably. Paul Montag added encoding
-and decoding functionality for templates, including images that are embedded in
+This package's code and documentation are closely derived from the FPDF
+library created by Olivier Plathey, and a number of font and image resources
+are copied directly from it. Bruno Michel has provided valuable assistance with
+the code. Drawing support is adapted from the FPDF geometric figures script by
+David Hernández Sanz. Transparency support is adapted from the FPDF
+transparency script by Martin Hall-May. Support for gradients and clipping is
+adapted from FPDF scripts by Andreas Würmser. Support for outline bookmarks is
+adapted from Olivier Plathey by Manuel Cornes. Layer support is adapted from
+Olivier Plathey. Support for transformations is adapted from the FPDF
+transformation script by Moritz Wagner and Andreas Würmser. PDF protection is
+adapted from the work of Klemen Vodopivec for the FPDF product. Lawrence
+Kesteloot provided code to allow an image's extent to be determined prior to
+placement. Support for vertical alignment within a cell was provided by Stefan
+Schroeder. Ivan Daniluk generalized the font and image loading code to use the
+Reader interface while maintaining backward compatibility. Anthony Starks
+provided code for the Polygon function. Robert Lillack provided the Beziergon
+function and corrected some naming issues with the internal curve function.
+Claudio Felber provided implementations for dashed line drawing and generalized
+font loading. Stani Michiels provided support for multi-segment path drawing
+with smooth line joins, line join styles, enhanced fill modes, and has helped
+greatly with package presentation and tests. Templating is adapted by Marcus
+Downing from the FPDF_Tpl library created by Jan Slabon and Setasign. Jelmer
+Snoeck contributed packages that generate a variety of barcodes and help with
+registering images on the web. Jelmer Snoek and Guillermo Pascual augmented the
+basic HTML functionality with aligned text. Kent Quirk implemented
+backwards-compatible support for reading DPI from images that support it, and
+for setting DPI manually and then having it properly taken into account when
+calculating image size. Paulo Coutinho provided support for static embedded
+fonts. Dan Meyers added support for embedded JavaScript. David Fish added a
+generic alias-replacement function to enable, among other things, table of
+contents functionality. Andy Bakun identified and corrected a problem in which
+the internal catalogs were not sorted stably. Paul Montag added encoding and
+decoding functionality for templates, including images that are embedded in
templates; this allows templates to be stored independently of gofpdf. Paul
also added support for page boxes used in printing PDF documents. Wojciech
Matusiak added supported for word spacing.
diff --git a/doc/doc.lua b/doc/doc.lua
new file mode 100644
index 0000000..dbe87c1
--- /dev/null
+++ b/doc/doc.lua
@@ -0,0 +1,100 @@
+-- This script reads a single page of Markdown-like documentation and generates
+-- output in three different forms: gofmt, git-flavored markdown, and
+-- standard markdown.
+
+local gsub, match, len, find, concat, insert =
+string.gsub, string.match, string.len, string.find, table.concat, table.insert
+
+local function write(filestr, str)
+ local f = io.open(filestr, 'w+')
+ if f then
+ f:write(str)
+ f:close()
+ end
+end
+
+local function codeblock(tbl, mode)
+ local newtbl = {}
+ local incode = false
+ local pos1, pos2, prefix, syntax
+ for j, str in ipairs(tbl) do
+ prefix, syntax = match(str, '^(```)(%a*)')
+ if prefix and len(syntax) > 0 then
+ incode = true
+ if mode == 'r' then
+ insert(newtbl, str)
+ end
+ elseif prefix then
+ incode = false
+ if mode == 'r' then
+ insert(newtbl, str)
+ end
+ else
+ if incode and mode ~= 'r' then
+ str = '\t' .. str
+ end
+ insert(newtbl, str)
+ end
+ end
+ return newtbl
+end
+
+local function markdownwrite(tbl, filestr)
+ tbl = codeblock(tbl, 'm')
+ local str = concat(tbl, '\n')
+ write(filestr, str)
+end
+
+local function readmewrite(tbl, filestr)
+ tbl = codeblock(tbl, 'r')
+ local str = concat(tbl, '\n')
+ str = gsub(str, '\n%> ', '\n')
+ -- str = gsub(str, '%b<>', '')
+ write(filestr, str)
+end
+
+local function godocwrite(tbl, filestr)
+ tbl = codeblock(tbl, 'g')
+ for j, str in ipairs(tbl) do
+ str = gsub(str, '^#+ *', '')
+ tbl[j] = gsub(str, '^* ', '\n• ')
+ end
+ local str = concat(tbl, '\n')
+ str = gsub(str, '\n\n\n+', '\n\n')
+ str = gsub(str, '\n%> ', '\n')
+ str = gsub(str, '`', '')
+ str = gsub(str, '/%*', '\x01')
+ str = gsub(str, '%*', '')
+ str = gsub(str, '\x01', '\x2f*')
+ -- str = gsub(str, '%b<>', '')
+ -- replace [foo][bar] with foo
+ str = gsub(str, '%[(%C-)%]%[%C-%]', '%1')
+ str = '/*\n' .. str .. '\n*/\npackage gofpdf\n'
+ write(filestr, str)
+end
+
+local godoc, markdown, readme = {}, {}, {}
+local modeg, modem, moder
+
+for str in io.lines('document.md') do
+ local mode = string.match(str, '^~(%a*)~$')
+ if mode then
+ modeg = find(mode, 'g') ~= nil
+ moder = find(mode, 'r') ~= nil
+ modem = find(mode, 'm') ~= nil
+ else
+ if modeg then
+ insert(godoc, str)
+ end
+ if modem then
+ insert(markdown, str)
+ end
+ if moder then
+ insert(readme, str)
+ end
+ end
+end
+
+markdownwrite(markdown, 'doc/body.md')
+godocwrite(godoc, 'doc.go')
+readmewrite(readme, 'README.md')
diff --git a/doc/ftr.html b/doc/ftr.html
new file mode 100644
index 0000000..47fc456
--- /dev/null
+++ b/doc/ftr.html
@@ -0,0 +1,3 @@
+ </body>
+
+</html>
diff --git a/doc/hdr.html b/doc/hdr.html
new file mode 100644
index 0000000..bbc2758
--- /dev/null
+++ b/doc/hdr.html
@@ -0,0 +1,55 @@
+<!doctype html>
+
+<html>
+
+<head>
+ <meta name="viewport" content="width=device-width initial-scale=1 maximum-scale=1 minimum-scale=1 user-scalable=0" />
+ <title>CGI for Caddy</title>
+ <style>
+ body {
+ max-width: 800px;
+ font-family: sans-serif;
+ padding: 1em;
+ }
+
+ h1,
+ h2,
+ h3 {
+ color: #345;
+ }
+
+ .syntax {
+ display: block;
+ white-space: pre;
+ font-family: monospace;
+ background-color: #efe;
+ border: 1px solid #474;
+ margin: 1em 0;
+ padding: 0.25em 1.5em;
+ }
+
+ .warning {
+ background-color: #ffd;
+ border: 1px solid #665;
+ margin: 1em 0;
+ padding: 0.25em 1.5em;
+ }
+
+ .key {
+ color: #474;
+ }
+
+ .subkey {
+ font-style: italic;
+ }
+
+ pre {
+ margin: 1.5em 0;
+ background-color: #eee;
+ padding: 1em;
+ overflow-x: scroll;
+ }
+ </style>
+</head>
+
+<body>
diff --git a/document.md b/document.md
new file mode 100644
index 0000000..69aaf41
--- /dev/null
+++ b/document.md
@@ -0,0 +1,260 @@
+~rm~
+# GoFPDF document generator
+
+~m~
+[![Git Hub repository][badge-github]][github]
+[![Kurt Jung][badge-author]][jung]
+~rm~
+[![MIT licensed][badge-mit]][license]
+[![Report][badge-report]][report]
+[![GoDoc][badge-doc]][godoc]
+
+![gofpdf](image/logo_gofpdf.jpg?raw=true "gofpdf")
+
+~rgm~
+Package gofpdf implements a PDF document generator with high level support for
+text, drawing and images.
+
+## Features
+
+* Choice of measurement unit, page format and margins
+* Page header and footer management
+* Automatic page breaks, line breaks, and text justification
+* Inclusion of JPEG, PNG, GIF, TIFF and basic path-only SVG images
+* Colors, gradients and alpha channel transparency
+* Outline bookmarks
+* Internal and external links
+* TrueType, Type1 and encoding support
+* Page compression
+* Lines, Bézier curves, arcs, and ellipses
+* Rotation, scaling, skewing, translation, and mirroring
+* Clipping
+* Document protection
+* Layers
+* Templates
+* Barcodes
+* Charting facility
+
+gofpdf has no dependencies other than the Go standard library. All tests pass
+on Linux, Mac and Windows platforms.
+
+Like FPDF version 1.7, from which gofpdf is derived, this package does not yet
+support UTF-8 fonts. In particular, languages that require more than one code
+page such as Chinese, Japanese, and Arabic are not currently supported. This is
+explained in [issue 109][issue109]. However, support is provided to
+automatically translate UTF-8 runes to code page encodings for languages that
+have fewer than 256 glyphs.
+
+## Installation
+
+To install the package on your system, run
+
+```shell
+go get github.com/jung-kurt/gofpdf
+```
+
+Later, to receive updates, run
+
+```shell
+go get -u -v github.com/jung-kurt/gofpdf/...
+```
+
+## Quick Start
+
+The following Go code generates a simple PDF file.
+
+```go
+pdf := gofpdf.New("P", "mm", "A4", "")
+pdf.AddPage()
+pdf.SetFont("Arial", "B", 16)
+pdf.Cell(40, 10, "Hello, world")
+err := pdf.OutputFileAndClose("hello.pdf")
+```
+
+See the functions in the
+[fpdf_test.go][fpdf-test]
+file (shown as examples in this documentation) for more advanced PDF examples.
+
+## Errors
+
+If an error occurs in an Fpdf method, an internal error field is set. After
+this occurs, Fpdf method calls typically return without performing any
+operations and the error state is retained. This error management scheme
+facilitates PDF generation since individual method calls do not need to be
+examined for failure; it is generally sufficient to wait until after Output()
+is called. For the same reason, if an error occurs in the calling application
+during PDF generation, it may be desirable for the application to transfer the
+error to the Fpdf instance by calling the `SetError()` method or the
+`SetErrorf()` method. At any time during the life cycle of the Fpdf instance,
+the error state can be determined with a call to `Ok()` or `Err()`. The error
+itself can be retrieved with a call to `Error()`.
+
+## Conversion Notes
+
+This package is a relatively straightforward translation from the original
+[FPDF][fpdf] library written in PHP (despite the caveat in the
+introduction to [Effective Go][effective-go]). The
+API names have been retained even though the Go idiom would suggest otherwise
+(for example, `pdf.GetX()` is used rather than simply `pdf.X()`). The
+similarity of the two libraries makes the original FPDF website a good source
+of information. It includes a forum and FAQ.
+
+However, some internal changes have been made. Page content is built up using
+buffers (of type bytes.Buffer) rather than repeated string concatenation.
+Errors are handled as explained above rather than panicking. Output is
+generated through an interface of type io.Writer or io.WriteCloser. A number of
+the original PHP methods behave differently based on the type of the arguments
+that are passed to them; in these cases additional methods have been exported
+to provide similar functionality. Font definition files are produced in JSON
+rather than PHP.
+
+## Example PDFs
+
+A side effect of running `go test ./...` is the production of a number of
+example PDFs. These can be found in the gofpdf/pdf directory after the tests
+complete.
+
+Please note that these examples run in the context of a test. In order run an
+example as a standalone application, you'll need to examine
+[fpdf_test.go][fpdf-test] for some helper routines, for example
+`exampleFilename()` and `summary()`.
+
+Example PDFs can be compared with reference copies in order to verify that they
+have been generated as expected. This comparison will be performed if a PDF
+with the same name as the example PDF is placed in the gofpdf/pdf/reference
+directory and if the third argument to `ComparePDFFiles()` in
+internal/example/example.go is true. (By default it is false.) The routine that
+summarizes an example will look for this file and, if found, will call
+`ComparePDFFiles()` to check the example PDF for equality with its reference PDF.
+If differences exist between the two files they will be printed to standard
+output and the test will fail. If the reference file is missing, the comparison
+is considered to succeed. In order to successfully compare two PDFs, the
+placement of internal resources must be consistent and the internal creation
+timestamps must be the same. To do this, the methods `SetCatalogSort()` and
+`SetCreationDate()` need to be called for both files. This is done automatically
+for all examples.
+
+## Nonstandard Fonts
+
+Nothing special is required to use the standard PDF fonts (courier, helvetica,
+times, zapfdingbats) in your documents other than calling `SetFont()`.
+
+In order to use a different TrueType or Type1 font, you will need to generate a
+font definition file and, if the font will be embedded into PDFs, a compressed
+version of the font file. This is done by calling the `MakeFont()` function or
+using the included makefont command line utility. To create the utility, cd
+into the makefont subdirectory and run `go build`. This will produce a
+standalone executable named makefont. Select the appropriate encoding file from
+the font subdirectory and run the command as in the following example.
+
+```shell
+./makefont --embed --enc=../font/cp1252.map --dst=../font ../font/calligra.ttf
+```
+
+In your PDF generation code, call AddFont() to load the font and, as with the
+standard fonts, SetFont() to begin using it. Most examples, including the
+package example, demonstrate this method. Good sources of free, open-source
+fonts include [Google Fonts][gfont] and [DejaVu Fonts][dfont].
+
+## Related Packages
+
+The [draw2d][draw2d] package is a two dimensional vector graphics library that
+can generate output in different forms. It uses gofpdf for its document
+production mode.
+
+## Contributing Changes
+
+gofpdf is a global community effort and you are invited to make it even better.
+If you have implemented a new feature or corrected a problem, please consider
+contributing your change to the project. A contribution that does not directly
+pertain to the core functionality of gofpdf should be placed in its own
+directory directly beneath the `contrib` directory.
+
+Here are guidelines for making submissions. Your change should
+
+* be compatible with the MIT License
+* be properly documented
+* be formatted with `go fmt`
+* include an example in [fpdf_test.go][test] if appropriate
+* conform to the standards of [golint][lint] and
+[go vet][vet], that is, `golint .` and
+`go vet .` should not generate any warnings
+* not diminish [test coverage][coverage]
+
+[Pull requests][pr] are the preferred means of accepting your changes.
+
+## License
+
+gofpdf is released under the MIT License. It is copyrighted by Kurt Jung and
+the contributors acknowledged below.
+
+## Acknowledgments
+
+This package's code and documentation are closely derived from the [FPDF][fpdf]
+library created by Olivier Plathey, and a number of font and image resources
+are copied directly from it. Bruno Michel has provided valuable assistance with
+the code. Drawing support is adapted from the FPDF geometric figures script by
+David Hernández Sanz. Transparency support is adapted from the FPDF
+transparency script by Martin Hall-May. Support for gradients and clipping is
+adapted from FPDF scripts by Andreas Würmser. Support for outline bookmarks is
+adapted from Olivier Plathey by Manuel Cornes. Layer support is adapted from
+Olivier Plathey. Support for transformations is adapted from the FPDF
+transformation script by Moritz Wagner and Andreas Würmser. PDF protection is
+adapted from the work of Klemen Vodopivec for the FPDF product. Lawrence
+Kesteloot provided code to allow an image's extent to be determined prior to
+placement. Support for vertical alignment within a cell was provided by Stefan
+Schroeder. Ivan Daniluk generalized the font and image loading code to use the
+Reader interface while maintaining backward compatibility. Anthony Starks
+provided code for the Polygon function. Robert Lillack provided the Beziergon
+function and corrected some naming issues with the internal curve function.
+Claudio Felber provided implementations for dashed line drawing and generalized
+font loading. Stani Michiels provided support for multi-segment path drawing
+with smooth line joins, line join styles, enhanced fill modes, and has helped
+greatly with package presentation and tests. Templating is adapted by Marcus
+Downing from the FPDF_Tpl library created by Jan Slabon and Setasign. Jelmer
+Snoeck contributed packages that generate a variety of barcodes and help with
+registering images on the web. Jelmer Snoek and Guillermo Pascual augmented the
+basic HTML functionality with aligned text. Kent Quirk implemented
+backwards-compatible support for reading DPI from images that support it, and
+for setting DPI manually and then having it properly taken into account when
+calculating image size. Paulo Coutinho provided support for static embedded
+fonts. Dan Meyers added support for embedded JavaScript. David Fish added a
+generic alias-replacement function to enable, among other things, table of
+contents functionality. Andy Bakun identified and corrected a problem in which
+the internal catalogs were not sorted stably. Paul Montag added encoding and
+decoding functionality for templates, including images that are embedded in
+templates; this allows templates to be stored independently of gofpdf. Paul
+also added support for page boxes used in printing PDF documents. Wojciech
+Matusiak added supported for word spacing.
+
+## Roadmap
+
+* Handle UTF-8 source text natively. Until then, automatic translation of
+UTF-8 runes to code page bytes is provided.
+* Improve test coverage as reported by the coverage tool.
+
+~mr~
+[badge-author]: https://img.shields.io/badge/author-Kurt_Jung-blue.svg
+[badge-doc]: https://img.shields.io/badge/godoc-GoFPDF-blue.svg
+[badge-github]: https://img.shields.io/badge/project-Git_Hub-blue.svg
+[badge-mit]: https://img.shields.io/badge/license-MIT-blue.svg
+[badge-report]: https://goreportcard.com/badge/github.com/jung-kurt/gofpdf
+[badge-status]: https://travis-ci.org/jung-kurt/gofpdf.svg?branch=master)
+[coverage]: https://blog.golang.org/cover
+[dfont]: http://dejavu-fonts.org/
+[draw2d]: https://github.com/llgcode/draw2d
+[fpdf]: http://www.fpdf.org/
+[gfont]: http://www.google.com/fonts/
+[github]: https://github.com/jung-kurt/gofpdf
+[godoc]: https://godoc.org/github.com/jung-kurt/gofpdf
+[jung]: https://github.com/jung-kurt/
+[license]: https://raw.githubusercontent.com/jung-kurt/gofpdf/master/LICENSE
+[lint]: https://github.com/golang/lint
+[pr]: https://help.github.com/articles/using-pull-requests/
+[report]: https://goreportcard.com/report/github.com/jung-kurt/gofpdf
+[status]: https://travis-ci.org/jung-kurt/gofpdf
+[test]: https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go
+[vet]: https://godoc.org/golang.org/x/tools/cmd/vet
+[issue109]: https://github.com/jung-kurt/gofpdf/issues/109
+[fpdf-test]: https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go
+[effective-go]: https://golang.org/doc/effective_go.html
diff --git a/mkdoc b/mkdoc
deleted file mode 100755
index 8c082c3..0000000
--- a/mkdoc
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-# https://github.com/jimmyfrasche/autoreadme
-autoreadme -f -template README.md.template
-# Improve the appearance of the markdown document with features unavailable in godoc
-cat README.md | tr '\n' '\v' | sed \
- -e 's/\v##\([^\v]*\)/\v## \1\v\v/g' \
- -e 's/\v• /* /g' \
- -e 's/\(http:\/\/www\.google\.com\/fonts\/\)/[Google Fonts](\1)/g' \
- -e 's/\(http:\/\/dejavu-fonts\.org\/\)/[DejaVu Fonts](\1)/g' \
- -e 's/draw2d.package.(\(https:\/\/github\.com\/llgcode\/draw2d\))/[draw2d](\1) package/g' \
- -e 's/FPDF.library.(\(http:\/\/www\.fpdf\.org\/\))/[FPDF](\1) library/g' \
- -e 's/original.FPDF.library/original [FPDF](http:\/\/www.fpdf.org\/) library/g' \
- -e 's/\(Effective.Go\)/[\1](https:\/\/golang.org\/doc\/effective_go.html)/g' \
- -e 's/\(fpdf_test.go\)/[\1](https:\/\/github.com\/jung-kurt\/gofpdf\/blob\/master\/fpdf_test.go)/g' \
- -e 's/golint.(\(https:\/\/github\.com\/golang\/lint\))/[golint](\1)/g' \
- -e 's/go.vet.(\(https:\/\/godoc\.org\/golang\.org\/x\/tools\/cmd\/vet\))/[go vet](\1)/g' \
- -e 's/test.coverage.(\(https:\/\/blog\.golang\.org\/cover\))/[test coverage](\1)/g' \
- -e 's/Pull.requests.(\(https:\/\/help\.github\.com\/articles\/using\-pull\-requests\/\))/[Pull requests](\1)/g' \
- -e 's/Your change should\v/Your change should\v\v/g' \
- -e 's/issue 109/[issue 109](https:\/\/github.com\/jung-kurt\/gofpdf\/issues\/109)/g' \
- | tr '\v' '\n' > _0
-mv _0 README.md