goba Sat Aug 3 08:56:59 2002 EDT Added files: /phpdoc/scripts file-entities.php.in
Removed files: /phpdoc/scripts file-entities.php Modified files: /phpdoc/scripts .cvsignore Log: Use configure features to specify parameters, so we do not need to tweak code because of windows problems...
Index: phpdoc/scripts/.cvsignore diff -u phpdoc/scripts/.cvsignore:1.6 phpdoc/scripts/.cvsignore:1.7 --- phpdoc/scripts/.cvsignore:1.6 Thu Aug 1 19:08:42 2002 +++ phpdoc/scripts/.cvsignore Sat Aug 3 08:56:59 2002 @@ -4,3 +4,4 @@ makedoc missing-entities.sh missing-entities.php +file-entities.php Index: phpdoc/scripts/file-entities.php.in +++ phpdoc/scripts/file-entities.php.in <?php /* # +----------------------------------------------------------------------+ # | PHP Version 4 | # +----------------------------------------------------------------------+ # | Copyright (c) 1997-2002 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 2.02 of the PHP licience, | # | that is bundled with this package in the file LICENCE and is | # | avalible through the world wide web at | # | http://www.php.net/license/2_02.txt. | # | If uou did not receive a copy of the PHP license and are unable to | # | obtain it through the world wide web, please send a note to | # | [EMAIL PROTECTED] so we can mail you a copy immediately | # +----------------------------------------------------------------------+ # | Authors: Hartmut Holzgraefe <[EMAIL PROTECTED]> | # | Gabor Hojtsy <[EMAIL PROTECTED]> | # +----------------------------------------------------------------------+ # # $Id: file-entities.php.in,v 1.1 2002/08/03 12:56:58 goba Exp $ */ /** * * Create phpdoc/entities/file-entities.ent with respect * to all the specialities needed: * * . ZendAPI integration * . CHM only appendix integration * . Special install part (temporary) * . Reserved constant part (temporary) * . Translated language files with English ones as fallbacks * . Global function index * * Also take in account, that if XSLT style sheets are used, * special file:/// prefixed path values are needed. * */ // Always flush output ob_implicit_flush(); // This script runs for a long time set_time_limit(0); // ......:ARGUMENT PARSING:..................................................... // Zend API integration info (either a path or "not found") $zendapi = ("@ZENDAPI@" == "not found" ? FALSE : "@ZENDAPI@"); // XSL sheets are used or not (either "yes" or "no") $xsl_sheet_used = ("@DOCBOOKXSL_USED@" == "yes" ? TRUE : FALSE); // The output directory, which we need to parse for windows specific // things, special cygwin path notation, and correct all problems is // needed. Also use absolute path to have meaningful error messages $out_dir = preg_replace("!^/cygdrive/(\\w)/!", "\\1:/", "@WORKDIR@"); $out_dir = str_replace("\\", "/", abs_path($out_dir)); $out_dir = preg_replace("!/scripts$!", "", $out_dir); // The source directory is passed in the 5th argument counting from backwards. // All backslashes are converted, and the possible "scripts" dirname at the // end is omitted $srcdir = str_replace("\\", "/", abs_path("@SRCDIR@")); $srcdir = preg_replace("!/scripts$!", "", $srcdir); // The translation dir is passed as the 6th argument, counting // from the end of the argument list $trans_dir = "$srcdir/@LANGDIR@"; // The original directory is in the base directory, and named "en" $orig_dir = "$srcdir/en"; // ......:ENTITY CREATION:...................................................... // Put all the file entitites info $entities $entities = array(); file_entities($orig_dir, $trans_dir, $orig_dir, $entities); // Open file for appending and write out all entitities $fp = fopen("$out_dir/entities/file-entities.ent", "w"); if (!$fp) { die("ERROR: Failed to open $out_dir/entities/file-entities.ent for writing\n"); } echo "\ncreating entities/file-entities.ent...\n"; // File header fputs($fp, "<!-- DON'T TOUCH - AUTOGENERATED BY file-entities.php -->\n\n"); // ZendAPI integration if ($zendapi !== FALSE) { fputs( $fp, "<!-- begin ZendAPI integration -->\n" . entstr("% zend.defs", "$zendapi/Extending_Zend.ent") . entstr("zendapi.toc", "$zendapi/Extending_Zend.xml") . "%zend.defs;\n<!-- end ZendAPI integration -->\n\n" ); echo " Zend part included\n"; } else { fputs( $fp, "<!-- ZendAPI not found -->\n" . entstr("zendapi.toc", "") . "\n" ); echo " Zend part not found\n"; } // Install part already splitted? [temporary] if (file_exists("$trans_dir/chapters/install.xml")) { fputs( $fp, "<!-- old install.xml found in language dir -->\n" . entstr("chapters.install", "$trans_dir/chapters/install.xml") . "\n" ); echo " Using install.xml in language dir\n"; } else { fputs( $fp, "<!-- old install.xml not found in language dir -->\n" . entstr("chapters.install", "$out_dir/installpart.xml") . "\n" ); echo " Using the install part from installpart.xml\n"; } // Reserved constants list is special [temporary] fputs( $fp, "<!-- reserved constants in one central file -->\n" . entstr("appendices.reserved.constants", "$out_dir/reserved.constants.xml") . "\n" ); // The global function index page is special fputs( $fp, "<!-- global function index file -->\n" . entstr("global.function-index", "$out_dir/funcindex.xml") . "\n" . "<!-- all other files -->\n" ); // Write out all other entities foreach ($entities as $entity) { fputs($fp, $entity); } fclose($fp); // Here is the end of the code exit; // ......:FUNCTION DECLARATIONS:................................................ /** * Generate absolute path from a relative path, taking accout * the current wokring directory. * * @param string $path Relative path * @return string Absolute path generated */ function abs_path($path) { // This is already an absolute path (begins with / or a drive letter) if (preg_match("!^(/|\\w:)!", $path)) { return $path; } // Get directory parts $absdirs = explode("/", getcwd()); $dirs = explode("/", $path); // Generate array representation of absolute path foreach ($dirs as $dir) { if (empty($dir) or $dir == ".") continue; else if ($dir == "..") array_pop($absdirs); else array_push($absdirs, $dir); } // Return with string return join("/", $absdirs); } /** * Create file entities, and put them into the array passed as the * last argument (passed by reference). * * @param string $work_dir English files' directory * @param string $trans_dir Translation's directory * @param string $orig_dir Original directory * @param array $entities Entities string array * @return boolean Success signal */ function file_entities($work_dir, $trans_dir, $orig_dir, &$entities) { $trans_path = str_replace($orig_dir, $trans_dir, $work_dir); // Try to open English working directory $dh = opendir($work_dir); if (!$dh) { return FALSE; } // If the working directory is a reference functions directory if (preg_match("!/reference/.*/functions$!", $work_dir)) { // Start new functions file with empty entity set $function_entities = array(); $functions_file = "$work_dir.xml"; // Get relative file path to original directory, and form an entity $functions_file_entity = str_replace("$orig_dir/", "", $work_dir); $functions_file_entity = fname2entname($functions_file_entity); $entities[] = entstr($functions_file_entity, $functions_file); } // While we can read that directory while (($file = readdir($dh)) !== FALSE) { // If file name begins with . skip it if ($file{0} == ".") { continue; } // If we found a directory, and it's name is not // CVS, recursively go into it, and generate entities if (is_dir($work_dir . "/" . $file)) { if ($file == "CVS") { continue; } file_entities($work_dir . "/" . $file, $trans_dir, $orig_dir, $entities); } // If the file name ends in ".xml" if (preg_match("!\\.xml$!", $file)) { // Get relative file name and get entity name for it $name = str_replace( "$orig_dir/", "", $work_dir . "/" . preg_replace("!\\.xml$!", "", $file) ); $name = fname2entname($name); // If this is a functions directory, collect it into // the special $function_entities array if (isset($function_entities)) { $function_entities[] = "&$name;"; } // Special treatment for function reference entities if splitted version available if (strstr($work_dir,"/functions")) { $splitfile = str_replace(".xml", "/reference.xml", $file); $splitpath = str_replace("/functions", "/reference", $trans_path) . "/" . $splitfile; if (file_exists($splitpath)) { $entities[] = entstr($name, $splitpath); continue; } $splitpath = str_replace("/functions", "/reference", $trans_path) . "/" . $splitfile; if (file_exists($splitpath)) { $entities[] = entstr($name, $splitpath); continue; } } // If we have a translated file, use it, otherwise fall back to English if (file_exists("$trans_path/$file")) { $path = "$trans_path/$file"; } else { $path = "$work_dir/$file"; } // Append to entities array $entities[] = entstr($name, $path); } // end of "if xml file" } // end of readdir loop // Close directory closedir($dh); // If we created a function entities list, write it out if (isset($function_entities)) { // Sort by name sort($function_entities); // Write out all entities with newlines $fp = fopen($functions_file, "w"); foreach ($function_entities as $entity) { fputs($fp, "$entity\n"); } fclose($fp); } // Find all files available in the translation but not in the original English tree if ($orig_dir != $trans_dir && file_exists($trans_path) && is_dir($trans_path)) { // Open translation path $dh = @opendir($trans_path); if ($dh) { while (($file = readdir($dh)) !== FALSE) { if ($file{0} =="." || $file == "CVS") { continue; } if (is_dir($trans_path."/".$file)) { continue; } // If this is an XML file if (preg_match("!\\.xml$!",$file)) { // Generate relative file path and entity name out of it $name = str_replace( "$orig_dir/", "", $work_dir . "/" . preg_replace("!\\.xml$!", "", $file) ); $name = fname2entname($name); // If the file found is not in the English dir, append to entities list if (!file_exists("$work_dir/$file")) { $path = "$trans_path/$file"; $entities[] = entstr($name, $path); } } // if this is an XML file end } // readdir iteration end closedir($dh); } } } // end of funciton file_entities() /** * Convert a file name (with path) to an entity name. * * Converts: _ => - and / => . * * @param string $fname File name * @return string Entity name */ function fname2entname($fname) { return str_replace("_", "-", str_replace("/", ".", $fname)); } /** * Return entity string with the given entityname and filename. * * @param string $entname Entity name * @param string $filename Name of file * @return string Entity declaration string */ function entstr($entname, $filename) { global $xsl_sheet_used; // If we have no file, than this is not a system entity if ($filename == "") { return sprintf("<!ENTITY %-40s ''>\n", $entname); } else { // If XSL sheet is used, we need the special file:/// // notation before the file name if ($xsl_sheet_used) { $filename = "file:///" . $filename; } return sprintf("<!ENTITY %-40s SYSTEM '%s'>\n", $entname, $filename); } } ?>
-- PHP Documentation Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php