File Coverage

blib/lib/Text/Layout/FontDescriptor.pm
Criterion Covered Total %
statement 38 58 65.5
branch 7 8 87.5
condition 6 13 46.1
subroutine 13 23 56.5
pod 10 18 55.5
total 74 120 61.6


line stmt bran cond sub pod time code
1             #! perl
2              
3 6     6   41 use strict;
  6         13  
  6         181  
4 6     6   29 use warnings;
  6         13  
  6         133  
5 6     6   28 use utf8;
  6         10  
  6         60  
6              
7             package Text::Layout::FontDescriptor;
8              
9 6     6   232 use Carp;
  6         10  
  6         4721  
10              
11              
12              
13             our $VERSION = "0.031";
14              
15             =head1 NAME
16              
17             Text::Layout::FontDescriptor - font description for Text::Layout
18              
19             =head1 SYNOPSIS
20              
21             Font descriptors are used internally by Text::Layout and
22             Text::Layout::FontConfig.
23              
24             =cut
25              
26             =head1 METHODS
27              
28             =over
29              
30             =item new( [ %atts ] )
31              
32             Creates a new FontDescriptor object.
33              
34             Attributes:
35              
36             =over
37              
38             =item family
39              
40             =item style
41              
42             =item weight
43              
44             The Family, style, and weight of this font. There are mandatory. For
45             defaults, use an empty string.
46              
47             =item size
48              
49             Optional, font size.
50              
51             =item font
52              
53             The actual font data.
54              
55             =item loader
56              
57             A code reference to call to actually create/load the font if necessary.
58              
59             Loading will store the font data in the C property.
60              
61             =back
62              
63             =back
64              
65             =cut
66              
67             sub new {
68 21     21 1 120 my ( $pkg, %atts ) = @_;
69 21         238 my $self = bless { style => "",
70             weight => "",
71             %atts } => $pkg;
72              
73 21         159 return $self;
74             }
75              
76             =over
77              
78             =item get_font
79              
80             Returns the actual font data for the font this descriptor describes.
81              
82             If necessary, the backend will be called to create/load the font.
83              
84             =back
85              
86             =cut
87              
88             sub get_font {
89 5     5 1 396 my ( $self, $context ) = @_;
90 5   66     22 $self->{font} ||= do {
91 2 50       24 croak("Forgot to pass a layout context to get_font?")
92             unless UNIVERSAL::isa( $context, 'Text::Layout' );
93 2         10 $context->load_font( $self->{loader_data}, $self );
94             };
95             }
96              
97             =over
98              
99             =item get_family
100              
101             =item get_style
102              
103             =item get_weight
104              
105             Accessors to the font family, style, and weight.
106              
107             Readonly.
108              
109             =back
110              
111             =cut
112              
113             sub get_family {
114 0     0 1 0 my ( $self ) = @_;
115 0         0 $self->{family};
116             }
117              
118             sub get_style {
119 0     0 1 0 my ( $self ) = @_;
120 0         0 $self->{style};
121             }
122              
123             sub get_weight {
124 0     0 1 0 my ( $self ) = @_;
125 0         0 $self->{weight};
126             }
127              
128             =over
129              
130             =item set_size
131              
132             =item get_size
133              
134             Sets/gets the size property of the font.
135              
136             =back
137              
138             =cut
139              
140             sub set_size {
141 5     5 1 14 my ( $self, $size ) = @_;
142 5         23 $self->{size} = $size;
143             }
144              
145             sub get_size {
146 2     2 1 6 my ( $self ) = @_;
147 2         10 $self->{size};
148             }
149              
150             =item set_direction
151              
152             =item get_direction
153              
154             Sets/gets the direction property of the font.
155              
156             =back
157              
158             =cut
159              
160             sub set_direction {
161 0     0 1 0 my ( $self, $direction ) = @_;
162 0         0 $self->{direction} = $direction;
163             }
164              
165             sub get_direction {
166 0     0 1 0 my ( $self ) = @_;
167 0         0 $self->{direction};
168             }
169              
170             # Not documented -- internal use only.
171              
172             sub set_shaping {
173 0     0 0 0 my ( $self, $sh ) = @_;
174 0   0     0 $self->{shaping} = $sh // 1;
175             }
176              
177             sub get_shaping {
178 1     1 0 2 my ( $self ) = @_;
179 1         5 $self->{shaping};
180             }
181              
182             # Not documented -- internal use only.
183              
184             sub set_interline {
185 0     0 0 0 my ( $self, $sh ) = @_;
186 0   0     0 $self->{interline} = $sh // 1;
187             }
188              
189             sub get_interline {
190 0     0 0 0 my ( $self ) = @_;
191 0         0 $self->{interline};
192             }
193              
194             # Not documented -- internal use only.
195              
196             # Note that the ascender/descender values are filled in at load time,
197             # unless overridden by a set_... call.
198              
199             sub set_ascender {
200 0     0 0 0 my ( $self, $asc ) = @_;
201 0         0 $self->{ascender} = $asc;
202             }
203              
204             sub get_ascender {
205 3     3 0 7 my ( $self ) = @_;
206 3         9 $self->{ascender};
207             }
208              
209             sub set_descender {
210 0     0 0 0 my ( $self, $desc ) = @_;
211 0         0 $self->{descender} = $desc;
212             }
213              
214             sub get_descender {
215 3     3 0 6 my ( $self ) = @_;
216 3         15 $self->{descender};
217             }
218              
219             =over
220              
221             =item to_string
222              
223             Returns a Pango-style font string, C.
224              
225             =back
226              
227             =cut
228              
229             sub to_string {
230 53     53 1 93 my ( $self ) = @_;
231 53         114 my $desc = ucfirst( $self->{family} );
232             $desc .= ucfirst( $self->{style} )
233 53 100 66     216 if $self->{style} && $self->{style} ne "normal";
234             $desc .= " " . ucfirst( $self->{weight} )
235 53 100 66     174 if $self->{weight} && $self->{weight} ne "normal";
236 53 100       105 $desc .= " " . $self->{size} if $self->{size};
237 53         350 return $desc;
238             }
239              
240 6     6   4671 use overload '""' => \&to_string;
  6         3819  
  6         61  
241              
242             =head1 SEE ALSO
243              
244             L, L.
245              
246             =head1 AUTHOR
247              
248             Johan Vromans, C<< >>
249              
250             =head1 SUPPORT
251              
252             This module is part of L.
253              
254             Development takes place on GitHub:
255             L.
256              
257             You can find documentation for this module with the perldoc command.
258              
259             perldoc Text::Layout::FontDescriptor
260              
261             Please report any bugs or feature requests using the issue tracker for Text::Layout on GitHub.
262              
263             =head1 LICENSE
264              
265             See L.
266              
267             =cut
268              
269             1;