X-Git-Url: http://git.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 = "";
+ $close = "\n>";
+ }
+ 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'])."" . $tag['tag'] . ">";
+ }
+ }
+ 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$tag>\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);
+ }
+ }
+
+/******************************************************************************/
+
+?>