X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.help/docbook-src/guide/parse.php b/net.sourceforge.phpeclipse.help/docbook-src/guide/parse.php new file mode 100644 index 0000000..23ffe1d --- /dev/null +++ b/net.sourceforge.phpeclipse.help/docbook-src/guide/parse.php @@ -0,0 +1,559 @@ + $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); + } + } + +/******************************************************************************/ + +?>