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

Reply via email to