Defoma::Common(3) Defoma module providing miscellaneous functions.

SYNOPSIS

use Defoma::Common;

$h = parse_hints_start( hints... );

$hsub = parse_hints_subhints( hints_hash, face );

$hsub = parse_hints_subhints_inherit( hints_hash, face );

parse_hints_cut( hints_hash, hinttypes... );

parse_hints_cut_except( hints_hash, hinttypes... );

@hints = parse_hints_build( hints_hash );

$charset = get_charset( xencoding );

$xencoding = get_xencoding( charset, encoding );

@XLFDs = get_xlfd_of_font( font, level => level, face => face );

my $num = weight_ascii2integer( weightstring );

my $num = weight_a2i( weightstring );

DESCRIPTION

parse_hints_start is a function to convert hints in an array to a hash. Hints consist of a list of hinttype and its value(s). Following is the example of hints in an array form.

--FontName Helvetica-BoldItalic --Family Helvetica --GeneralFamily SansSerif --Weight Bold --Shape NoSerif Italic --Charset ISO8859-1

In this example, FontName, Family, GeneralFamily, Weight, Shape and Charset are hinttypes. Items starting with double minus characters '--' are taken as hinttype. The others are taken as values. The function converts this array to a hash described in the following style.

FontName => 'Helvetica-BoldItalic',
Family => 'Helvetica',
GeneralFamily => 'SansSerif',
Weight => 'Bold',
Shape => 'NoSerif Italic',
Charset => 'ISO8859-1'

You see that hinttypes are used as keys of a hash, and that Shape has two values, NoSerif and Italic. If a certain hinttype has more than one values, they are combined into a single string separated by space.

parse_hints_subhints is a function to get a sub hint hash pointed by face from the hint hash specified by hints_hash. Please look at following example of a hint hash.

$h = {Inherit => 'Charset Weight',
      FontName => 'Helvetica',
      Charset => 'ISO8859-1',
      Weight => 'Medium',
      Shape => 'Upright',
      FontName1 => 'Helvetica-Bold',
      Weight1 => 'Bold',
      FontName2 => 'Helvetica-Unicode',
      Charset2 => 'ISO10646-1'};

You see there're some numbered hinttypes. parse_hints_subhints extracts the hints of the specific number from it. For example, you can extract the non-numbered hints FontName and Charset by:

$hsub = parse_hints_subhints($h, 0);

and the content of $hsub will be:

FontName => 'Helvetica',
Charset => 'ISO8859-1',
Weight => 'Medium',
Shape => 'Upright'

If you set 1 to the second argument of parse_hints_subhints, the content of $hsub will be:

FontName => 'Helvetica-Bold',
Weight => 'Bold'

Note that the number of each hinttype is removed.

parse_hints_subhints_inherit is almost the same as parse_hints_subhints, only differs it inherits non-numbered hints specified by Inherit hinttype. Following is the result of parse_hints_subhints_inherit with 1 and 2 set to the second argument in the example of parse_hints_subhints.

FontName => 'Helvetica-Bold',
Weight => 'Bold',
Charset => 'ISO8859-1'
FontName => 'Helvetica-Unicode',
Weight => 'Medium',
Charset => 'ISO10646-1'

parse_hints_cut is a function to remove hinttypes specified by hinttypes and their values from the hint hash. It is supposed to be used together with parse_hints_build function.

parse_hints_cut_except is a function to remove all hinttypes except those specified by hinttypes and their values from the hint hash. It is supposed to be used together with parse_hints_build function.

parse_hints_build is a function to convert hints in a hash to an array.

get_charset is a function to convert X-RegistryEncoding specified by xencoding into Charset. X-RegistryEncoding is the last two elements of XLFD, like iso8859-1 and jisx0208.1983-0. The returned values of these two are ISO8859-1 and JISX0208 respectively.

get_xencoding is a function to convert Charset and Encoding specified by charset and encoding into X-RegistryEncoding. encoding is often omitted.

weight_ascii2integer is a function to convert Weight in string (like Bold and Medium) into a numeric value (integer). Medium is always zero, and the bolder, the larger, the lighter, the smaller. For example, Bold is +2, and Light is -2. weight_a2i is abbreviation for weight_ascii2integer.

get_xlfd_of_font is a function to get an array of XLFDs of a font specified by font. You can control the amount of gained XLFDs by level and face options. level must be either of 'min', 'normal', or 'max'. When min is specified, not-slanted not-boldized XLFDs registered in xfont category will be returned. When normal is specified, XLFDs including boldized and/or slanted (but not reverse slanted) ones registered in xfont category will be returned. When max is specified, all generated XLFDs will be returned.

EXAMPLES

$h = parse_hints_start(@_);
@shape = split(/ /, $h->{Shape});
@alias = split(/ /, $h->{Alias});
$priority = $h->{Priority};
$realname = $h->{FontName};
$realname =~ s/ .*//;
parse_hints_cut($h, 'Priority', 'FontName', 'Charset');
@hints = parse_hints_build($h);