first_child();
do {
if ($child->node_type() == XML_ELEMENT_NODE) {
switch ($child->tagname()) {
case "normal":
if ($root->has_attribute('name')) {
$names = explode(',', $root->get_attribute('name'));
foreach ($names as $name) {
$resolver->add_normal_encoding_override($name,
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
};
};
if ($root->has_attribute('mask')) {
foreach ($names as $name) {
$resolver->add_normal_encoding_override_mask($root->get_attribute('mask'),
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
};
};
break;
case "bold":
if ($root->has_attribute('name')) {
$names = explode(',', $root->get_attribute('name'));
foreach ($names as $name) {
$resolver->add_bold_encoding_override($name,
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
};
};
if ($root->has_attribute('mask')) {
foreach ($names as $name) {
$resolver->add_bold_encoding_override_mask($root->get_attribute('mask'),
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
};
};
break;
};
};
} while ($child = $child->next_sibling());
}
function parse_metrics_node_config_file($root, &$resolver) {
$resolver->add_afm_mapping($root->get_attribute('typeface'),
$root->get_attribute('file'));
}
function parse_ttf_node_config_file($root, &$resolver) {
switch (FONT_EMBEDDING_MODE) {
case 'all':
$embed_flag = true;
break;
case 'none':
$embed_flag = false;
break;
case 'config':
$embed_flag = (bool)$root->get_attribute('embed');
break;
}
$resolver->add_ttf_mapping($root->get_attribute('typeface'),
$root->get_attribute('file'),
$embed_flag);
}
function parse_family_encoding_override_node_config_file($family, $root, &$resolver) {
$child = $root->first_child();
do {
if ($child->node_type() == XML_ELEMENT_NODE) {
switch ($child->tagname()) {
case "normal":
$names = explode(",",$root->get_attribute('name'));
foreach ($names as $name) {
$resolver->add_family_normal_encoding_override($family,
$name,
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
};
break;
case "bold":
$names = explode(",",$root->get_attribute('name'));
foreach ($names as $name) {
$resolver->add_family_bold_encoding_override($family,
$name,
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
};
break;
};
};
} while ($child = $child->next_sibling());
}
function parse_fonts_family_node_config_file($root, &$resolver) {
// Note: font family names are always converted to lower case to be non-case-sensitive
$child = $root->first_child();
do {
if ($child->node_type() == XML_ELEMENT_NODE) {
$font_family_name = strtolower($root->get_attribute('name'));
switch ($child->tagname()) {
case "normal":
$resolver->add_normal_family($font_family_name,
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
break;
case "bold":
$resolver->add_bold_family($font_family_name,
$child->get_attribute('normal'),
$child->get_attribute('italic'),
$child->get_attribute('oblique'));
break;
case "encoding-override":
parse_family_encoding_override_node_config_file($font_family_name, $child, $resolver);
break;
};
};
} while ($child = $child->next_sibling());
}
function parse_fonts_node_config_file($root, &$resolver) {
$child = $root->first_child();
do {
if ($child->node_type() == XML_ELEMENT_NODE) {
switch ($child->tagname()) {
case "alias":
$resolver->add_alias(strtolower($child->get_attribute('alias')), $child->get_attribute('family'));
break;
case "family":
parse_fonts_family_node_config_file($child, $resolver);
break;
case "encoding-override":
parse_encoding_override_node_config_file($child, $resolver);
break;
case "ttf":
parse_ttf_node_config_file($child, $resolver);
break;
case "metrics":
parse_metrics_node_config_file($child, $resolver);
break;
};
};
} while ($child = $child->next_sibling());
}
function parse_config_file($filename) {
// Save old magic_quotes_runtime value and disable it
$mq_runtime = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
$doc = TreeBuilder::build(file_get_contents($filename));
$root=$doc->document_element();
$child = $root->first_child();
do {
if ($child->node_type() == XML_ELEMENT_NODE) {
switch ($child->tagname()) {
case "fonts":
global $g_font_resolver;
parse_fonts_node_config_file($child, $g_font_resolver);
break;
case "fonts-pdf":
global $g_font_resolver_pdf;
parse_fonts_node_config_file($child, $g_font_resolver_pdf);
break;
case "media":
add_predefined_media($child->get_attribute('name'),
(float)$child->get_attribute('height'),
(float)$child->get_attribute('width'));
break;
};
};
} while ($child = $child->next_sibling());
// Restore old magic_quotes_runtime values
set_magic_quotes_runtime($mq_runtime);
}
?>