home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / PHPDoc / indexer / PhpdocIndexer.php
PHP Script  |  2001-02-18  |  6KB  |  196 lines

  1. <?php
  2. /**
  3. * Builds Indexlists with the result from the  
  4. *
  5. * @author   Ulf Wendel  <ulf.wendel@redsys.de>
  6. * @version  $Id: PhpdocIndexer.php,v 1.3 2001/02/18 15:48:48 uw Exp $
  7. */
  8. class PhpdocIndexer extends PhpdocObject {
  9.  
  10.     /**
  11.     * Array of all packages.
  12.     *
  13.     * @var  array
  14.     */
  15.     var $packages = array();
  16.     
  17.     /**
  18.     * Current classtree.
  19.     *
  20.     * @var  array
  21.     */
  22.     var $classtree = array();
  23.     
  24.     /**
  25.     * Current modulegroup.
  26.     *
  27.     * @var  array
  28.     */
  29.     var $modulegroup = array();
  30.     
  31.     /**
  32.     * Array of all elements (functions, variables, constant, included files, classes, packages).
  33.     *
  34.     * @var  array
  35.     */
  36.     var $elements = array();
  37.     
  38.     /**
  39.     * Array of fields that get added to the elementlist
  40.     *
  41.     * @var  array
  42.     */ 
  43.     var $elementFields = array("functions", "variables", "consts", "uses");
  44.     
  45.     /**
  46.     * Adds a class to the index lists (elements, packages, classtree).
  47.     *
  48.     * @param    array    
  49.     * @access   public
  50.     * @see      addModule()
  51.     */
  52.     function addClass(&$class) {
  53.         
  54.         $package = isset($class["package"]) ? $class["package"] : "No Package specified";
  55.         $this->packages[$package]["classes"][] = $class["name"];
  56.         $this->classtree[$class["name"]] = (isset($class["subclasses"])) ? $class["subclasses"] : array();
  57.         $this->addElements($class, "class");
  58.         
  59.     } // end func addClass
  60.     
  61.     /**
  62.     * Adds a module to the index lists (elements, packages, classtree).
  63.     * 
  64.     * @param    array
  65.     * @access   public
  66.     * @see      addClass()
  67.     */
  68.     function addModule(&$module) {
  69.         
  70.         $package = isset($module["package"]) ? $module["package"] : "No Package specified";
  71.         $this->packages[$package]["modules"][] = $module["name"];
  72.         $this->modulegroup[$module["group"]][] = $module["name"];
  73.         $this->addElements($module, "module");
  74.         
  75.     }    // end func addModule
  76.  
  77.     /**
  78.     * Returns the current classtree and resets the internal classtree field.
  79.     *
  80.     * @access   public
  81.     * @return   array   $classtree
  82.     */
  83.     function getClasstree() {
  84.         
  85.         $data = $this->classtree;
  86.         $this->classtree = array();
  87.         return $data;
  88.         
  89.     } // end func getClasstree    
  90.     
  91.     /**
  92.     * Returns the current modulegroup and resets the internal modulegroup field.
  93.     * 
  94.     * @access   public
  95.     * @return   array   $modulegroup
  96.     */
  97.     function getModulegroup() {
  98.         
  99.         $data = $this->modulegroup;
  100.         $this->modulegroup = array();
  101.         return $data;
  102.         
  103.     } // end func getModulegroup
  104.  
  105.     /**
  106.     * Returns the package list and resets the internal package field.
  107.     *
  108.     * @access   public
  109.     * @return   array   $packages
  110.     */
  111.     function getPackages() {
  112.     
  113.         reset($this->packages);
  114.         while (list($package, ) = each($this->packages))
  115.             $this->elements[substr($package, 0, 1)][$package][] = array(
  116.                                                                         "type"          => "package",
  117.                                                                         "sdesc"         => "",
  118.                                                                         "source"        => "",
  119.                                                                         "sourcetype"    => ""
  120.                                                                     );                                
  121.         $data = $this->packages;
  122.         $this->packages = array();
  123.         
  124.         return $data;
  125.     } // end func getPackages
  126.     
  127.     /**
  128.     * Returns the element index list and resets the internal elements field.
  129.     * 
  130.     * @access   public
  131.     * @return   array
  132.     */
  133.     function getElementlist() {
  134.         
  135.         $data = $this->elements;
  136.         $this->elements = array();
  137.         return $data;
  138.     } // end func getElementlist
  139.     
  140.     /**
  141.     * Adds an element to the elementlist.
  142.     * @param    array    
  143.     * @param    string    Element type: class, module.
  144.     */
  145.     function addElements(&$elements, $type) {
  146.         
  147.         $index = substr($elements["name"], 0, 1);
  148.         $elname = $elements["name"];
  149.         $this->elements[$index][$elname][] = array(
  150.                                                     "type"          => $type, 
  151.                                                     "sdesc"         => (isset($elements["sdesc"])) ? $elements["sdesc"] : "",
  152.                                                     "source"        => "",
  153.                                                     "sourcetype"    => $type
  154.                                                 );
  155.  
  156.         reset($this->elementFields);
  157.         while (list($k, $field) = each($this->elementFields)) {
  158.             if (!isset($elements[$field])) 
  159.                 continue;
  160.             
  161.             reset($elements[$field]);
  162.             while (list($name, $data) = each($elements[$field])) {
  163.                 
  164.                 
  165.                 if ("variables" == $field) {
  166.                 
  167.                     $index = substr($data["name"], 1, 1);
  168.                     $name = $data["name"];
  169.                     
  170.                 } else if ("uses" == $field) {
  171.  
  172.                     $index = substr($data["file"], 0, 1);                
  173.                     $name = $data["file"];
  174.                         
  175.                 } else {
  176.                     
  177.                     $index = substr($data["name"], 0, 1);
  178.                     $name = $data["name"];
  179.                     
  180.                 }
  181.                 
  182.                 $this->elements[$index][$name][] = array(
  183.                                                             "type"          => $field,
  184.                                                             "sdesc"         => (isset($data["sdesc"])) ? $data["sdesc"] : "",
  185.                                                             "source"        => $elname,
  186.                                                             "sourcetype"    => $type
  187.                                                         );
  188.                 
  189.             }
  190.             
  191.         }
  192.         
  193.     } // end func addElements
  194.     
  195. } // end class PhpdocIndexer
  196. ?>