#! perl use strict; use warnings; use utf8; package Text::Layout::FontDescriptor; use Carp; our $VERSION = "0.039"; =head1 NAME Text::Layout::FontDescriptor - font description for Text::Layout =head1 SYNOPSIS Font descriptors are used internally by Text::Layout and Text::Layout::FontConfig. =cut =head1 METHODS =over =item new( [ %atts ] ) Creates a new FontDescriptor object. Attributes: =over =item family =item style =item weight The Family, style, and weight of this font. There are mandatory. For defaults, use an empty string. =item size Optional, font size. =item font The actual font data. =item loader A code reference to call to actually create/load the font if necessary. Loading will store the font data in the C property. =back =back =cut sub new { my ( $pkg, %atts ) = @_; my $self = bless { style => "", weight => "", %atts } => $pkg; return $self; } =over =item get_font Returns the actual font data for the font this descriptor describes. If necessary, the backend will be called to create/load the font. =back =cut sub get_font { my ( $self, $context ) = @_; $self->{font} ||= do { croak("Forgot to pass a layout context to get_font?") unless UNIVERSAL::isa( $context, 'Text::Layout' ); $context->load_font( $self->{loader_data}, $self ); }; } =over =item get_family =item get_style =item get_weight Accessors to the font family, style, and weight. Readonly. =back =cut sub get_family { my ( $self ) = @_; $self->{family}; } sub get_style { my ( $self ) = @_; $self->{style}; } sub get_weight { my ( $self ) = @_; $self->{weight}; } =over =item set_size =item get_size Sets/gets the size property of the font. =back =cut sub set_size { my ( $self, $size ) = @_; $self->{size} = $size; } sub get_size { my ( $self ) = @_; $self->{size}; } =over =item set_direction =item get_direction Sets/gets the direction property of the font. =back =cut sub set_direction { my ( $self, $direction ) = @_; $self->{direction} = $direction; } sub get_direction { my ( $self ) = @_; $self->{direction}; } # Not documented -- internal use only. sub set_shaping { my ( $self, $sh ) = @_; $self->{shaping} = $sh // 1; } sub get_shaping { my ( $self ) = @_; $self->{shaping}; } # Not documented -- internal use only. sub set_interline { my ( $self, $sh ) = @_; $self->{interline} = $sh // 1; } sub get_interline { my ( $self ) = @_; $self->{interline}; } # Not documented -- internal use only. # Note that the ascender/descender values are filled in at load time, # unless overridden by a set_... call. sub set_ascender { my ( $self, $asc ) = @_; $self->{ascender} = $asc; } sub get_ascender { my ( $self ) = @_; $self->{ascender}; } sub set_descender { my ( $self, $desc ) = @_; $self->{descender} = $desc; } sub get_descender { my ( $self ) = @_; $self->{descender}; } =over =item to_string Returns a Pango-style font string, C. =back =cut sub to_string { my ( $self ) = @_; my $desc = ucfirst( $self->{family} ); $desc .= ucfirst( $self->{style} ) if $self->{style} && $self->{style} ne "normal"; $desc .= " " . ucfirst( $self->{weight} ) if $self->{weight} && $self->{weight} ne "normal"; $desc .= " " . $self->{size} if $self->{size}; return $desc; } use overload '""' => \&to_string; =head1 SEE ALSO L, L. =head1 AUTHOR Johan Vromans, C<< >> =head1 SUPPORT This module is part of L. Development takes place on GitHub: L. You can find documentation for this module with the perldoc command. perldoc Text::Layout::FontDescriptor Please report any bugs or feature requests using the issue tracker for Text::Layout on GitHub. =head1 LICENSE See L. =cut 1;