Documentation ¶
Overview ¶
Package fonts provides supports for parsing several font formats (postscript, bitmap and truetype) and provides a common API, inspired by freetype.
It does not currently support CIDType1 fonts.
Index ¶
- type BitmapFormat
- type BitmapSize
- type Cmap
- type CmapEncoding
- type CmapIter
- type CmapSimple
- type Face
- type FaceDescription
- type FaceID
- type FaceMetadata
- type FaceMetrics
- type FaceRenderer
- type Faces
- type FontDescriptor
- type FontExtents
- type FontLoader
- type FontSummary
- type GID
- type GlyphBitmap
- type GlyphData
- type GlyphExtents
- type GlyphOutline
- type GlyphSVG
- type LineMetric
- type PSInfo
- type Resource
- type Segment
- type SegmentOp
- type SegmentPoint
- type Stretch
- type Style
- type Weight
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BitmapFormat ¶ added in v0.0.4
type BitmapFormat uint8
BitmapFormat identifies the format on the glyph raw data. Across the various font files, many formats may be encountered : black and white bitmaps, PNG, TIFF, JPG.
const ( BlackAndWhite BitmapFormat PNG JPG TIFF )
type BitmapSize ¶ added in v0.0.2
BitmapSize expose the size of bitmap glyphs. One font may contain several sizes.
type Cmap ¶
type Cmap interface { // Iter returns a new iterator over the cmap // Multiple iterators may be used over the same cmap // The returned interface is garanted not to be nil Iter() CmapIter // Lookup avoid the construction of a map and provides // an alternative when only few runes need to be fetched. // It returns a default value and false when no glyph is provided. Lookup(rune) (GID, bool) }
Cmap stores a compact representation of a cmap, offering both on-demand rune lookup and full rune range. It is conceptually equivalent to a map[rune]GID, but is often implemented more efficiently.
type CmapEncoding ¶ added in v0.0.2
type CmapEncoding uint8
const ( EncOther CmapEncoding = iota EncUnicode EncSymbol )
type CmapIter ¶
type CmapIter interface { // Next returns true if the iterator still has data to yield Next() bool // Char must be called only when `Next` has returned `true` Char() (rune, GID) }
CmapIter is an interator over a Cmap.
type CmapSimple ¶
CmapSimple is a map based Cmap implementation.
func (CmapSimple) Iter ¶
func (s CmapSimple) Iter() CmapIter
type Face ¶
type Face interface { FaceMetadata FaceMetrics FaceRenderer }
Face provides a unified access to various font formats. It describes the content of one font from a font file. Implementation must be pointer to simplify caching and hashing.
type FaceDescription ¶ added in v0.0.6
type FaceDescription struct {
Family string
}
FaceDescription is a summary of a font file.
type FaceID ¶ added in v0.0.2
type FaceID struct { File string // The filename or identifier of the font file. // The index of the face in a collection. It is always 0 for // single font files. Index uint16 // For variable fonts, stores 1 + the instance index. // (0 to ignore variations). Instance uint16 }
FaceID represents an identifier of a face (possibly in a collection), and an optional variable instance.
type FaceMetadata ¶ added in v0.0.5
type FaceMetadata interface { // Cmap returns the mapping between input character codes // and glyph ids. The returned encoding identifies which system is used // to describe characters. Cmap() (Cmap, CmapEncoding) // PostscriptInfo returns the Postscript information, // or false is not available. PostscriptInfo() (PSInfo, bool) // PoscriptName returns the PoscriptName of the font, // or an empty string. PoscriptName() string // LoadSummary fetchs global details about the font. // Conceptually, this method just returns it receiver, but this enables lazy loading. LoadSummary() (FontSummary, error) // LoadBitmaps returns the available bitmap sizes, or an empty // slice for outline fonts. LoadBitmaps() []BitmapSize }
FaceMetadata exposes some summary information about the font.
type FaceMetrics ¶
type FaceMetrics interface { // Upem returns the units per em of the font file. // If not found, should return 1000 as fallback value. // This value is only relevant for scalable fonts. Upem() uint16 // GlyphName returns the name of the given glyph, or an empty // string if the glyph is invalid or has no name. GlyphName(gid GID) string // LineMetric returns the metric identified by `metric` (in fonts units), or false // if the font does not provide such information. LineMetric(metric LineMetric) (float32, bool) // FontHExtents returns the extents of the font for horizontal text, or false // it not available, in font units. // `varCoords` (in normalized coordinates) is only useful for variable fonts. FontHExtents() (FontExtents, bool) // FontVExtents is the same as `FontHExtents`, but for vertical text. FontVExtents() (FontExtents, bool) // NominalGlyph returns the glyph used to represent the given rune, // or false if not found. NominalGlyph(ch rune) (GID, bool) // HorizontalAdvance returns the horizontal advance in font units. // When no data is available but the glyph index is valid, this method // should return a default value (the upem number for example). // If the glyph is invalid it should return 0. // `coords` is used by variable fonts, and is specified in normalized coordinates. HorizontalAdvance(gid GID) float32 // VerticalAdvance is the same as `HorizontalAdvance`, but for vertical advance. VerticalAdvance(gid GID) float32 // GlyphHOrigin fetches the (X,Y) coordinates of the origin (in font units) for a glyph ID, // for horizontal text segments. // Returns `false` if not available. GlyphHOrigin(GID) (x, y int32, found bool) // GlyphVOrigin is the same as `GlyphHOrigin`, but for vertical text segments. GlyphVOrigin(GID) (x, y int32, found bool) // GlyphExtents retrieve the extents for a specified glyph, of false, if not available. // `coords` is used by variable fonts, and is specified in normalized coordinates. // For bitmap glyphs, the closest resolution to `xPpem` and `yPpem` is selected. GlyphExtents(glyph GID, xPpem, yPpem uint16) (GlyphExtents, bool) }
FaceMetrics exposes details of the font content. Implementation must be valid map keys to simplify caching.
type FaceRenderer ¶ added in v0.0.4
type FaceRenderer interface { // GlyphData loads the glyph content, or return nil // if 'gid' is not supported. // For bitmap glyphs, the closest resolution to `xPpem` and `yPpem` is selected. GlyphData(gid GID, xPpem, yPpem uint16) GlyphData }
FaceRenderer exposes access to glyph contents
type Faces ¶ added in v0.0.2
type Faces = []Face
Faces is the parsed content of a font ressource. Note that variable fonts are not repeated in this slice, since instances are accessed on each font.
type FontDescriptor ¶ added in v0.0.7
type FontDescriptor interface { // Family queries the font family name. Family() string // Aspect queries the visual properties of the font. // If not found, zero values should be returned. Aspect() (Style, Weight, Stretch) // AdditionalStyle returns a description of the style of the font, // including information not found by Aspect() AdditionalStyle() string // Cmap returns the Unicode to Glyph mapping LoadCmap() (Cmap, error) }
FontDescriptor is a handle on a font, able to efficiently query some global information.
type FontExtents ¶
type FontExtents struct { Ascender float32 // Typographic ascender. Descender float32 // Typographic descender. LineGap float32 // Suggested line spacing gap. }
FontExtents exposes font-wide extent values, measured in font units. Note that typically ascender is positive and descender negative in coordinate systems that grow up.
type FontLoader ¶
FontLoader implements the general parsing of a font file. Some font format support to store several fonts inside one file. For the other formats, the returned slice will have length 1.
type FontSummary ¶
type FontSummary struct { Familly string Style string IsItalic, IsBold bool HasScalableGlyphs, HasBitmapGlyphs, HasColorGlyphs bool }
FontSummary stores basic informations about the style of the font.
type GID ¶
type GID uint32
GID is used to identify glyphs in a font. It is mostly internal to the font and should not be confused with Unicode code points.
type GlyphBitmap ¶ added in v0.0.4
type GlyphBitmap struct { // The actual image content, whose interpretation depends // on the Format field. Data []byte Format BitmapFormat Width, Height int // number of columns and rows }
type GlyphData ¶ added in v0.0.4
type GlyphData interface {
// contains filtered or unexported methods
}
GlyphData describe how to graw a glyph. It is either an GlyphOutline, GlyphSVG or GlyphBitmap.
type GlyphExtents ¶
type GlyphExtents struct { XBearing float32 // Left side of glyph from origin YBearing float32 // Top side of glyph from origin Width float32 // Distance from left to right side Height float32 // Distance from top to bottom side }
GlyphExtents exposes extent values, measured in font units. Note that height is negative in coordinate systems that grow up.
type GlyphOutline ¶ added in v0.0.4
type GlyphOutline struct {
Segments []Segment
}
GlyphOutline exposes the path to draw for vector glyph. Coordinates are expressed in fonts units.
type GlyphSVG ¶ added in v0.0.4
type GlyphSVG struct { // The SVG image content, decompressed if needed. // The actual glyph description is an SVG element // with id="glyph<GID>" (as in id="glyph12"), // and several glyphs may share the same Source Source []byte // According to the specification, a fallback outline // should be specified for each SVG glyphs Outline GlyphOutline }
GlyphSVG is an SVG description for the glyph, as found in Opentype SVG table.
type LineMetric ¶
type LineMetric uint8
LineMetric identifies one metric about the font. Some formats only support a subset of the metrics defined by the constants.
const ( // Distance above the baseline of the top of the underline. // Since most fonts have underline positions beneath the baseline, this value is typically negative. UnderlinePosition LineMetric = iota // Suggested thickness to draw for the underline. UnderlineThickness // Distance above the baseline of the top of the strikethrough. StrikethroughPosition // Suggested thickness to draw for the strikethrough. StrikethroughThickness SuperscriptEmYSize SuperscriptEmXOffset SubscriptEmYSize SubscriptEmYOffset SubscriptEmXOffset CapHeight XHeight )
type PSInfo ¶
type PSInfo struct { FontName string // Postscript font name. FullName string // full name of the font. FamilyName string // family name of the font. Version string // font program version identifier (optional) Notice string // font name trademark or copyright notice (optional) Weight string // Weight of the font: normal, bold, etc. ItalicAngle int // italic angle of the font, usually 0. or negative. IsFixedPitch bool // true if all the characters have the same width. UnderlinePosition int UnderlineThickness int }
PSInfo exposes global properties of a postscript font.
type Resource ¶
type Resource interface { Read([]byte) (int, error) ReadAt([]byte, int64) (int, error) Seek(int64, int) (int64, error) }
Resource is a combination of io.Reader, io.Seeker and io.ReaderAt. This interface is satisfied by most things that you'd want to parse, for example *os.File, io.SectionReader or *bytes.Reader.
type Segment ¶ added in v0.0.5
type Segment struct { Op SegmentOp // Args is up to three (x, y) coordinates, depending on the // operation. // The Y axis increases up. Args [3]SegmentPoint }
func (*Segment) ArgsSlice ¶ added in v0.0.5
func (s *Segment) ArgsSlice() []SegmentPoint
ArgsSlice returns the effective slice of points used (whose length is between 1 and 3).
type SegmentPoint ¶ added in v0.0.5
type SegmentPoint struct {
X, Y float32 // expressed in fonts units
}
func (*SegmentPoint) Move ¶ added in v0.0.5
func (pt *SegmentPoint) Move(dx, dy float32)
Move translates the point.
type Stretch ¶ added in v0.0.7
type Stretch float32
Stretch is the width of a font as an approximate fraction of the normal width. Widths range from 0.5 to 2.0 inclusive, with 1.0 as the normal width.
const ( // Ultra-condensed width (50%), the narrowest possible. StretchUltraCondensed Stretch = 0.5 // Extra-condensed width (62.5%). StretchExtraCondensed Stretch = 0.625 // Condensed width (75%). StretchCondensed Stretch = 0.75 // Semi-condensed width (87.5%). StretchSemiCondensed Stretch = 0.875 // Normal width (100%). StretchNormal Stretch = 1.0 // Semi-expanded width (112.5%). StretchSemiExpanded Stretch = 1.125 // Expanded width (125%). StretchExpanded Stretch = 1.25 // Extra-expanded width (150%). StretchExtraExpanded Stretch = 1.5 // Ultra-expanded width (200%), the widest possible. StretchUltraExpanded Stretch = 2.0 )
type Style ¶ added in v0.0.7
type Style uint8
Style (also called slant) allows italic or oblique faces to be selected.
type Weight ¶ added in v0.0.7
type Weight float32
Weight is the degree of blackness or stroke thickness of a font. This value ranges from 100.0 to 900.0, with 400.0 as normal.
const ( // Thin weight (100), the thinnest value. WeightThin Weight = 100 // Extra light weight (200). WeightExtraLight Weight = 200 // Light weight (300). WeightLight Weight = 300 // Normal (400). WeightNormal Weight = 400 // Medium weight (500, higher than normal). WeightMedium Weight = 500 // Semibold weight (600). WeightSemibold Weight = 600 // Bold weight (700). WeightBold Weight = 700 // Extra-bold weight (800). WeightExtraBold Weight = 800 // Black weight (900), the thickest value. WeightBlack Weight = 900 )
Directories ¶
Path | Synopsis |
---|---|
Package binaryreader provides a convenient reader to decode (big endian) binary content.
|
Package binaryreader provides a convenient reader to decode (big endian) binary content. |
Pacakge bitmap provides support for bitmap fonts found in .pcf files.
|
Pacakge bitmap provides support for bitmap fonts found in .pcf files. |
copied from https://git.maze.io/go/unipdf/src/branch/master/internal/textencoding
|
copied from https://git.maze.io/go/unipdf/src/branch/master/internal/textencoding |
Package psinterpreter implement a Postscript interpreter required to parse .CFF files, and Type1 and Type2 Charstrings.
|
Package psinterpreter implement a Postscript interpreter required to parse .CFF files, and Type1 and Type2 Charstrings. |
Simple encodings map a subset of the unicode characters (at most 256) to a set of single bytes.
|
Simple encodings map a subset of the unicode characters (at most 256) to a set of single bytes. |
Package truetype provides support for OpenType and TrueType font formats, used in PDF.
|
Package truetype provides support for OpenType and TrueType font formats, used in PDF. |
Package type1 implements a parser for Adobe Type1 fonts, defined by .afm files (https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5004.AFM_Spec.pdf) and .pdf files (https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/T1_SPEC.pdf)
|
Package type1 implements a parser for Adobe Type1 fonts, defined by .afm files (https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5004.AFM_Spec.pdf) and .pdf files (https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/T1_SPEC.pdf) |
Package type1c provides a parser for the CFF font format defined at https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf.
|
Package type1c provides a parser for the CFF font format defined at https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf. |