SYNOPSIS
use Defoma::Subst;
$Sb = defoma_subst_open(
rulename => rulename,
threshold => threshold,
idobject => id_object,
private => private_flag
);
defoma_subst_close( subst_object );
defoma_subst_register( subst_object, font, realname );
defoma_subst_unregister( subst_object, font realname );
defoma_subst_add_rule( subst_object, required_id, rule... );
defoma_subst_remove_rule( subst_object, required_id, rule... );
DESCRIPTION
Defoma::Subst is a Defoma module to handle subst-cache and subst-rule. When a certain id is required but not provided as RealName or Alias by any font, fonts which have similar appearance and the same characters should substitute for such a font. Required ids and their information about appearance and charset things (called *rule*) are described in a subst-rule. Defoma::Subst compares such a rule of a certain required id with hints of a substitutive font and calculates the degree of similarity in percentage, and registers the required id and the font with the value as its priority as 'Substituted' type to an id-cache through Defoma::Id module.subst-rule is mainly edittable by users, which means users edit subst-rule file to add/remove/modify the required ids and their information, but sometimes unedittable by them and modified by a Defoma-configuration script. The former is called public subst-rule and the latter is called private subst-rule.
subst-cache holds fonts which are candidacies for substituting for required ids. As mentioned above, a rule of a required id and hints of such a font are compared. Hints are not recorded in a subst-cache so retrieved from an id-cache. In addition a required id and its rule are recorded in an subst-rule, so subst-cache, subst-rule and id-cache are strongly linked up. Especially subst-cache and subst-rule are not separatable and Defoma::Subst handles these two through a single united object.
defoma_subst_open is a function used to open a subst-cache and subst-rule specified by rulename and private_flag and returns the subst_object used for further operation. If the subst-rule is private one, set private_flag to non-zero. Otherwise it can be omitted. The subst-rule becomes public. id_object must be specified because subst-cache and subst-rule are strongly linked up to id-cache as mentioned above. Hints of a substitutive font are retrieved from the id-cache specified by the id_object, and required ids described in the subst-rule are registered to the id-cache. threshold prevents fonts that have less degree of similarity from being registered. If a required id is already registered in the id-cache, substitutive fonts whose degree of similarity are less than this threshold are not registered to an id-cache.
defoma_subst_close is a function used to close a subst-cache and subst-rule specified by subst_object. Internally it writes the content of cache and rule stored in a memory to files.
defoma_subst_register is a function used to register a font which is candidate for substituting for required ids to the subst-cache specified by subst_object. RealName of the font must be specified.
defoma_subst_unregister is a function used to unregister a font from the subst-cache specified by subst_object. RealName can be omitted.
defoma_subst_add_rule is a function used to add a required id and its rule to the subst-rule specified by subst_object.
defoma_subst_remove_rule is a function used to remove a required id and its rule from the subst-rule specified by sbst_object. If rule is omitted, all the rules describing the required_id are removed from the subst-rule. Otherwise only one rule specified by rule and required_id is removed.
EXAMPLES
1. Open private subst-rule and subst-rule.
$Id = defoma_id_open(); $Sb = defoma_subst_open(rulename => 'subst1', idobject => $Id);
2. Register a substitutive font.
defoma_id_register($Id, type => 'real', font => $font, id => $realname, priority => $priority, hints => join(' ', @_)); defoma_subst_register($Sb, $font, $realname);
3. Unregister.
defoma_subst_unregister($Id, $font); defoma_id_unregister($Id, 'real', $font);
4. Add a rule.
defoma_subst_add_rule($Sb, 'Helvetica', @hints);
5. Remove all rules for Helvetica.
defoma_subst_remove_rule($Sb, 'Helvetica');