HarfBuzz-Shaper
view release on metacpan or search on metacpan
lib/HarfBuzz/Shaper.pm view on Meta::CPAN
package HarfBuzz::Shaper;
use 5.010001;
use strict;
use warnings;
use Carp;
use Encode;
our $VERSION = '0.033';
require XSLoader;
XSLoader::load('HarfBuzz::Shaper', $VERSION);
=head1 NAME
HarfBuzz::Shaper - Use HarfBuzz for text shaping
=head1 SYNOPSIS
use HarfBuzz::Shaper;
my $hb = HarfBuzz::Shaper->new;
$hb->set_font('LiberationSans.ttf');
$hb->set_size(36);
$hb->set_text("Hello!");
my $info = $hb->shaper;
The result is an array of hashes, one element for each glyph to be typeset.
=head1 DESCRIPTION
HarfBuzz::Shaper is a perl module that provides access to a small
subset of the native HarfBuzz library.
The subset is suitable for typesetting programs that need to deal with
complex languages like Devanagari, Hebrew or Arabic.
This module is intended to be used with module L<Text::Layout>. Feel
free to (ab)use it for other purposes.
Following the above example, the returned info is an array of hashes,
one element for each glyph to be typeset. The hash contains the
following items:
ax: horizontal advance
ay: vertical advance
dx: horizontal offset
dy: vertical offset
g: glyph index in font (CId)
name: glyph name
Note that the number of glyphs does not necessarily match the number
of input characters!
=head1 DISCLAIMER
This module provides a thin interface layer between Perl and the
native HarfBuzz library. It is agnostic with regard to the details of
multi-language typesetting. HarfBuzz has a friendly community to help
you.
L<https://lists.freedesktop.org/mailman/listinfo/harfbuzz>
=head1 METHODS
=head2 $hb = HarfBuzz::Shaper->new( [ options ] )
Creates a new shaper object.
Options:
=over 4
=item *
B<font => > I<font filename>
=item *
B<size => > I<text size>
=back
=cut
sub new {
my ( $pkg, $opts ) = @_;
$opts //= {};
my $self = bless {} => $pkg;
$self->{harfbuzz} = hb_version_string();
$self->{buffer} = hb_buffer_create();
$self->{features} = [];
if ( $opts->{font} ) {
$self->set_font( delete $opts->{font} );
}
if ( $opts->{size} ) {
$self->set_size( delete $opts->{size} );
}
return $self;
}
=head2 $hb->reset( [ I<full> ] )
Reset (clear) the buffer settings for font, size, language, direction
and script. With I<full>, also clears the font cache.
=cut
sub reset {
my ( $self, $full ) = @_;
for ( qw ( font size text language direction script shaped ) ) {
delete $self->{$_};
}
if ( $full ) {
for ( keys %$self ) {
next unless /^(font|face)_/;
delete $self->{$_};
( run in 1.191 second using v1.01-cache-2.11-cpan-98e64b0badf )