1<?php 2 3/* 4 This file is part of ActiveLink PHP DOC Package (www.active-link.com). 5 Copyright (c) 2002-2004 by Zurab Davitiani 6 7 You can contact the author of this software via E-mail at 8 hattrick@mailcan.com 9 10 ActiveLink PHP DOC Package is free software; you can redistribute it and/or modify 11 it under the terms of the GNU Lesser General Public License as published by 12 the Free Software Foundation; either version 2.1 of the License, or 13 (at your option) any later version. 14 15 ActiveLink PHP DOC Package is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU Lesser General Public License for more details. 19 20 You should have received a copy of the GNU Lesser General Public License 21 along with ActiveLink PHP DOC Package; if not, write to the Free Software 22 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23*/ 24 25import("org.active-link.doc.Method"); 26 27/** 28 * PHPClass class provides a structural definition for a class 29 * @class PHPClass 30 * @package org.active-link.doc 31 * @author Zurab Davitiani 32 * @version 0.3.4 33 * @requires Method 34 * @see PHPClass 35 */ 36 37class PHPClass { 38 39 var $methods; 40 var $properties; 41 var $info; 42 43 /** 44 * Constructor, if filename is supplied parses the file into the object 45 * @method PHPClass 46 * @param optional string filename 47 * @returns none 48 */ 49 function PHPClass($filename = "") { 50 $this->methods = array(); 51 $this->properties = array(); 52 $this->info = array(); 53 if($filename != "") 54 $this->parseFromFile($filename); 55 } 56 57 /** 58 * Deletes a property by name 59 * @method deleteInfo 60 * @param string name 61 * @returns true if successful, false otherwise 62 */ 63 function deleteInfo($name) { 64 $success = false; 65 if(array_key_exists($name, $this->info)) { 66 unset($this->info[$name]); 67 $success = true; 68 } 69 return $success; 70 } 71 72 /** 73 * Returns a property value by name 74 * @method getInfo 75 * @param string name 76 * @returns string value if successful, false otherwise 77 */ 78 function getInfo($name) { 79 if(array_key_exists($name, $this->info)) 80 return $this->info[$name]; 81 else 82 return false; 83 } 84 85 /** 86 * Parses a class from supplied filename 87 * @method parseFromFile 88 * @param string filename 89 * @returns true if successful, false otherwise 90 */ 91 function parseFromFile($filename) { 92 $success = false; 93 if(file_exists($filename) && is_readable($filename)) { 94 $arrContents = file($filename); 95 $parsing = false; 96 $parsingBlocks = array(); 97 $tempBlock = array(); 98 foreach($arrContents as $line) { 99 if(trim($line) == "/**") { 100 $parsing = true; 101 $blockstart = true; 102 } 103 elseif($parsing && trim($line) == "*/") { 104 $parsing = false; 105 $parsingBlocks[] = $tempBlock; 106 $tempBlock = array(); 107 } 108 else { 109 if($parsing) { 110 if($blockstart) { 111 $tempBlock[] = $line; 112 $blockstart = false; 113 } 114 else { 115 $tempBlock[] = $line; 116 } 117 } 118 } 119 } 120 foreach($parsingBlocks as $blockLines) { 121 $block = array(); 122 foreach($blockLines as $line) { 123 $str = strstr($line, "@"); 124 $str = substr($str, 1); 125 if($str !== false) { 126 $separatorPos = (strpos($str, " ") && strpos($str, "\t")) ? min(strpos($str, " "), strpos($str, "\t")) : (strpos($str, " ") ? strpos($str, " ") : (strpos($str, "\t") ? strpos($str, "\t") : strlen($str))); 127 $name = trim(substr($str, 0, $separatorPos)); 128 $value = trim(substr($str, $separatorPos)); 129 } 130 else { 131 $name = "description"; 132 $value = trim($line); 133 } 134 if($name == "param" || $name == "description") 135 $block[$name][] = $value; 136 else 137 $block[$name] = $value; 138 } 139 //print("<pre>"); 140 //print_r($block); 141 //print("</pre>"); 142 if(array_key_exists("method", $block)) { 143 $tempMethod = new Method($block["method"]); 144 unset($block["method"]); 145 if(isset($block["param"]) && is_array($block["param"])) { 146 foreach($block["param"] as $param) { 147 $tempMethod->setParam($param, ""); 148 } 149 } 150 unset($block["param"]); 151 foreach($block as $name => $value) { 152 $tempMethod->setInfo($name, $value); 153 } 154 $this->setMethod($tempMethod); 155 } 156 elseif(array_key_exists("class", $block)) { 157 $this->setInfo("name", $block["class"]); 158 unset($block["class"]); 159 foreach($block as $name => $value) { 160 $this->setInfo($name, $value); 161 } 162 } 163 } 164 $success = true; 165 } 166 return $success; 167 } 168 169 /** 170 * Sets a property by name 171 * @method setInfo 172 * @param string name, string value 173 * @returns none 174 */ 175 function setInfo($name, $value) { 176 $this->info[$name] = $value; 177 } 178 179 /** 180 * Adds a method to the class definition 181 * @method setMethod 182 * @param object method 183 * @returns true if successful, false otherwise 184 */ 185 function setMethod($method) { 186 $success = false; 187 if(is_object($method) && get_class($method) == "method") { 188 $this->methods[$method->getInfo("name")] = $method; 189 $success = true; 190 } 191 return $success; 192 } 193 194} 195 196?> 197