$file) { // for every html file ParseXHTML ($file, $lang, $doc, $fidlist, $idlist); } WriteBookInfoList ($fidlist, $bilist); /* var_dump ($fidlist); */ copy ("style.css", "tmp/style.css"); // copy the style file to the temporary directory /***** ParseXHTML () **********************************/ /* Parse the XHTML files * */ function ParseXHTML (&$file, $lang, $doc, &$fidlist, &$idlist) { global $fencoding; $data = file_get_contents ($file); // get the xhtml-file content $parser = xml_parser_create ($fencoding); $imglist = array (); // initiate the image list array xml_parser_set_option ($parser, XML_OPTION_CASE_FOLDING, 0); // xml_parser_set_option ($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct ($parser, $data, $values, $tags); // parse the xhtml file xml_parser_free ($parser); MakePictureList ($values, $tags, $imglist, $lang, $doc); // build the list with the used images CopyImages ($imglist); // copy the used images into the temp folder ChangeLinks ($values, $tags, $lang, $doc); // changed the links, so we can use the files with xdocman MakeFileIDList ($file, $values, $tags, $fidlist, $idlist); /* echo "array: tags\n"; var_dump ($tags); echo "array: values\n"; var_dump ($values); echo "array: imglist\n"; var_dump ($imglist); echo "array:".$file." generate output\n"; */ OutputXHTML ($file, $values, $tags, 0); } /***** MakeFileIDList (...) **********************************/ /* */ function MakeFileIDList ($file, &$values, &$tags, &$fidlist, &$idlist) { echo "file = $file\n"; $fidlist[$file] = array (); foreach ($tags['a'] as $key => $val) { if (isset ($values[$val]['attributes'])) { foreach ($values[$val]['attributes'] as $tkey => $tval) { if ($tkey == 'id') { // $idList[$tval] = $tval; // echo "id = $tval \n"; if (isset ($idlist[$tval])) { echo "setzen $file: $tval = $idlist[$tval] \n"; $fidlist[$file][$tval]['title'] = $idlist[$tval]['title']; $fidlist[$file][$tval]['element'] = $idlist[$tval]['element']; } } } } } } /***** ChangeLinks (...) **********************************/ /* * changes href in if href is sort of chxxx.html or index.html or ixxx.html * to ?lang=en&doc=xd-999&file=chxxx.html */ function ChangeLinks (&$values, &$tags, $lang, $doc) { foreach ($tags['a'] as $key => $val) { if (($values[$val]['type'] == 'open') || ($values[$val]['type'] == 'complete')) { if (isset ($values[$val]['attributes']['href'])) { $olddest = $values[$val]['attributes']['href']; echo "string = " . $olddest; preg_match ("/([ch|index|ix|pr|co|ar]).*\.html.*/i", $olddest, $linkval); // preg_match ("/#.*/i", $olddest, $idval); $newdest = ""; if (isset ($linkval[0])) { // $newdest .= "manual.php?lang=$lang&doc=$doc&file=".$linkval[0]; // echo " link = " . $linkval[0]; preg_match ("/#.*/i", $olddest, $lidval); if (isset ($lidval[0])) { echo " id = ". $lidval[0]; $newdest .= "manual.php?lang=$lang&doc=$doc&id=".str_replace ('#', "", $lidval[0])."&file=".$linkval[0]; } else { $newdest .= "manual.php?lang=$lang&doc=$doc&file=".$linkval[0]; } } /* else if (isset ($idval[0])) { echo " id = ".$idval[0]; $newdest = $olddest; } */ else { $newdest = $olddest; } echo "\n"; $values[$val]['attributes']['href'] = $newdest; } } } } /***** CopyImages (...) **********************************/ /* */ function CopyImages (&$imglist) { CreateDirectory ('tmp/img'); CreateDirectory ('tmp/img/callouts'); CreateDirectory ('tmp/img/nav'); CreateDirectory ('tmp/img/admon'); foreach ($imglist as $key => $img) { $path = explode ('/', $img); if (($path[1] != 'callouts') && ($path[1] != 'nav') && ($path[1] != 'admon')) { $dest = "tmp/".$path[0].'/'.$path[3]; } else { $dest = "tmp/".$img; } copy ($img, $dest); } } /***** MakePictureList (...) **********************************/ /* */ function MakePictureList (&$values, &$tags, &$imglist, &$lang, &$doc) { //** scan every tag for the onmouseover and onmouseout attribute foreach ($tags['a'] as $key => $val) { if (isset ($values[$val]['attributes'])) { foreach ($values[$val]['attributes'] as $tkey => $tval) { if (($tkey == 'onmouseover') || ($tkey == 'onmouseout')) { //** strip everthing before the '=' $ta = explode ('=', $tval); $img = str_replace ("'", "", $ta[1]); if (!in_array ($img, $imglist)) { array_push ($imglist, $img); } $values[$val]['attributes'][$tkey] = $ta[0]."='docs/".$lang."/".$doc."/".$img."'"; } } } } //** scan every tag for the src attribute foreach ($tags['img'] as $key => $val) { if (isset ($values[$val]['attributes'])) { foreach ($values[$val]['attributes'] as $tkey => $tval) { if ($tkey == 'src') { if (!in_array ($tval, $imglist)) { array_push ($imglist, $tval); } //** now change the image path from img/en/xxxx/xxx.png to img/xxx.png $path = explode ('/', $tval); if (($path[1] != 'callouts') && ($path[1] != 'nav') && ($path[1] != 'admon')) { $newpath = $path[0].'/'.$path[3]; $img = "docs/".$lang."/".$doc."/".$newpath; $values[$val]['attributes'][$tkey] = $img; } else { $values[$val]['attributes'][$tkey] = "docs/".$lang."/".$doc."/".$tval; } } } } } } /***** OutputXHTML (...) **********************************/ /* */ function OutputXHTML (&$file, &$values, &$tags, $all) { global $fencoding; global $recode_it; global $encoding_in; global $encoding_out; $fp = fopen ("tmp/".$file, "w"); $i = count ($values); //** get start and end if ($all) { $start = 0; $end = $i; } else { $start = $tags['body'][0] + 1; $end = $tags['body'][1] - 1; } if ($all) { $text = ''."\n"; $text .= ''."\n"; fwrite ($fp, $text); } if ($fp) { foreach ($values as $key => $tag) { if (($key < $start) || ($key > $end)) { continue; } $cdata = 0; $open = 0; if ($tag['type'] == 'open') { $text = "<"; $close = "\n>"; $open = 1; } else if ($tag['type'] == 'close') { $text = ""; } else if ($tag['type'] == 'cdata') { $cdata = 1; } else { //** it's complete $text = "<"; $close = " /\n>"; } if ($cdata) { $text = htmlspecialchars ($tag['value']); } else { $text .= $tag['tag']; if (isset ($tag['attributes'])) { foreach ($tag['attributes'] as $key => $att) { $text .= ' '.$key. '="' . $att . '"'; } } if (isset ($tag['value'])) { if ($open) { $text .= ">".htmlspecialchars ($tag['value']); } else { $text .= ">".htmlspecialchars ($tag['value']).""; } } else { if (($tag['tag'] == 'a') && ($tag['type'] == 'complete')) { $text .= ">"; } else { $text .= $close; } } } if ($recode_it) { $text = mb_convert_encoding ($text, 'HTML-ENTITIES', $encoding_in); } fwrite ($fp, $text); } } } /***** CreateDirectory (...) **********************************/ function CreateDirectory ($dirname) { $path = ""; $dir = split ('[/|\\]', $dirname); for ($i = 0; $i < count ($dir); $i++) { $path .= $dir[$i]."/"; if (!is_dir ($path)) { @mkdir ($path, 0777); @chmod ($path, 0777); } } if (is_dir ($dirname)) { return 1; } return 0; } /***** BuildIDList (...) **********************************/ function BuildIDList ($lang, $doc, &$idlist, &$bilist) { global $fencoding; $data = file_get_contents ($lang."_".$doc.".xml"); // get the xml-file content $parser = xml_parser_create ($fencoding); xml_parser_set_option ($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option ($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct ($parser, $data, $values, $tags); // parse the xml file xml_parser_free ($parser); MakeIDList ($values, $tags, $idlist); // build the list with the used ids MakeBIList ($values, $tags, $bilist); // build the Book Info list echo "array: bilist\n"; var_dump ($bilist); echo "array: tags\n"; var_dump ($tags); echo "array: values\n"; var_dump ($values); } /***** MakeIDList (...) **********************************/ function MakeIDList (&$values, &$tags, &$idlist) { $taglist = array ("chapter", "sect1", "sect2", "sect3", "sect4", "figure"); foreach ($taglist as $tlkey => $tag) { // for every tag with a possible id if (isset ($tags[$tag])) { foreach ($tags[$tag] as $key => $val) { if (isset ($values[$val]['attributes'])) { foreach ($values[$val]['attributes'] as $tkey => $tval) { if ($tkey == 'id') { // we have an id, so look for the title if ($values[$val + 1]['tag'] == 'title') { // if the next tag is a title // $idlist[$tval] = $values[$val + 1]['value']; $idlist[$tval]['title'] = $values[$val + 1]['value']; $idlist[$tval]['element'] = $tag; // the element } } } } } } } } /***** MakeBIList (...) **********************************/ function MakeBIList (&$values, &$tags, &$bilist) { $start = 0; $end = 0; if (isset ($tags['book'])) { // $count = count ($tags['book']); $start = $tags['bookinfo'][0] + 1; $end = $tags['bookinfo'][1] - 1; $state = 0; } else if (isset ($tags['article'])) { $start = $tags['articleinfo'][0] + 1; $end = $tags['articleinfo'][1] - 1; $state = 0; } // get the status attribute from book or article if (isset ($values[0]['attributes']['status'])) { $status = explode ('_', $values[0]['attributes']['status']); if (($status[0] == 'progress') && (isset ($status[1]))) { $bilist['status'] = $status[1]; } else { $bilist['status'] = $status[0]; } } // search for the title for ($index = $start; $index <= $end; $index++) { switch ($state) { case 0: // search the title tag if ($values[$index]['tag'] == 'title') { if (isset ($values[$index]['value'])) { $bilist['title'] = $values[$index]['value']; } if ($values[$index]['type'] == 'open') { $state = 1; // title is not complete, so append the other tags (i.e. from quote or emphasis) } else { $state = 2; // title is complete } } break; case 1: // append the values of every tag until the closing title tag if ($values[$index]['tag'] == 'title') { if (isset ($values[$index]['value'])) { $bilist['title'] .= $values[$index]['value']; } if ($values[$index]['type'] == 'close') { $state = 2; // title is complete } } else { if (isset ($values[$index]['value'])) { $bilist['title'] .= $values[$index]['value']; } } break; default: break; } if ($state == 2) { // if we have the title leave the loop break; } } // search for the revnumber and revdate within the last revision within revhistory if (isset ($tags['revision'])) { // ok we have a revision $count = count ($tags['revision']); $start = $tags['revision'][$count - 2]; $end = $tags['revision'][$count - 1]; } if (isset ($tags['revnumber'])) { $count = count ($tags['revnumber']); for ($index = 0; $index < $count; $index++) { $val_index = $tags['revnumber'][$index]; if (($val_index > $start) && ($val_index < $end)) { $bilist['revnumber'] = $values[$val_index]['value']; } } } if (isset ($tags['date'])) { $count = count ($tags['date']); for ($index = 0; $index < $count; $index++) { $val_index = $tags['date'][$index]; if (($val_index > $start) && ($val_index < $end)) { $bilist['revdate'] = $values[$val_index]['value']; } } } } /***** WriteBookInfoList (...) **********************************/ function WriteBookInfoList (&$fidlist, &$bilist) { global $fencoding; global $recode_it; global $encoding_in; $fp = fopen ("tmp/docinfo.xml", "w"); if ($fp) { $text = "" . "\n"; fwrite ($fp, $text); $text = "\n"; fwrite ($fp, $text); foreach ($bilist as $tag => $value) { $text = " <$tag>$value\n"; fwrite ($fp, $text); } foreach ($fidlist as $filename => $file) { $text = " \n $filename\n"; fwrite ($fp, $text); foreach ($file as $id => $idvalue) { $text = " \n ".$id."\n"; fwrite ($fp, $text); $text = " ".$idvalue['element']."\n"; fwrite ($fp, $text); $text = " ".$idvalue['title']."\n \n"; if ($recode_it) { $text = mb_convert_encoding ($text, 'HTML-ENTITIES', $encoding_in); } fwrite ($fp, $text); } $text = " \n"; fwrite ($fp, $text); } $text = ""; fwrite ($fp, $text); fclose ($fp); } } /******************************************************************************/ ?>