Skip to content

harfbuzz-raku/HarfBuzz-Subset-raku

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[Raku HarfBuzz Project] / [HarfBuzz-Subset Module]

HarfBuzz-Subset-raku

Description

Bindings to the HarfBuzz Subset font subsetting library.

Synopsis

use HarfBuzz::Subset;

# face to be subsetted
my $file = "t/fonts/NimbusRoman-Regular.otf";

my @unicodes = 'Hello, World!'.ords;
my HarfBuzz::Subset $subset .= new: :face{ :$file }, :input{ :@unicodes };
my Blob() $buf = $subset;
'/tmp/my-nimbus-subset.otf'.IO.spurt: :bin, $buf;

Description

This module binds to the HarfBuzz library's subsetting capability and allows a font to be compacted to a smaller set of glyphs.

Subsetting is useful in a number of domains, including

  • embedded PDF fonts, and
  • fast loading Web-Fonts (you'll need additional external tools to then package as WOFF or EOT format).

class HarfBuzz::Subset Methods

new

method new( HarfBuzz::Font() :$font!, HarfBuzz::Subset::Input :$input() ) returns HarfBuzz::Subset:D;

  • :$font is either a HarfBuzz::Font object or a hash of coerceable options.
  • :$input is either a HarfBuzz::Subset::Input object or a hash of coerceable options.

Blob

Binary image of the subsetted font. This can be saved to a file with the same extension as the input font (typically .ttf or .otf) or embedded somehow (for example in a PDF file).

HarfBuzz subsetting currently works on TrueType, and OpenType font formats. It also accepts TrueType Collections (typically with file extension .ttc) and OpenType Collections (file extension .otc). In these cases, the subsetted font is unpacked, and should be saved with file extensions .ttf or .otf respectively.

HarfBuzz::Subset::Input Methods

new

method new(
    UInt :@unicodes,      # unicode code-points to include
    UInt :@glyphs,        # glyph identifiers to include
    Str  :@drop-tables,   # additional SFnt tables to drop
    Bool :$hints=True,    # retain font hinting
    Bool :$retain-gids,   # retain glyph identifiers
    Bool :$subroutines=True,
) returns HarfBuzz::Subset::Input:D;

Creates a font subsetting profile. Only the characters specified in :@unicodes and/or the glyph identifiers specified in :@glyphs are retained.

COERCE

method COERCE( %(
    :@unicodes, :@glyphs, :@drop-tables,
    :$hints, :$retain-gids, :$subroutines,
) returns HarfBuzz::Subset::Input:D;

An object can be coerced from a Hash of options.

Installation and Dependencies

Debian

Debian version 12+ is required for sufficiently up-to-date harbuzz packages:

$ cat /etc/debian_version # 12.0 or better
$ sudo apt install libharfbuzz-dev
$ zef install HarfBuzz::Subset

MacOS

If brew search harfbuzz returns a version of 3.0.0, or better, then brew install harfbuzz can be used to install the package.

Other

In general, harfbuzz 3.0.0+ is required for font subsetting. If your platform doesn't have a recent enough packaged version, harfbuzz font can be downloaded and built from https://github.com/harfbuzz/harfbuzz.

About

Bindings to the harfbuzz-subset font subsetting library

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages