Location: PHPKode > scripts > Simple Documenter > simple-documenter/documenter.inc
<?
/**
 Datei:
 documenter.inc
 
 Beschreibung:
 Erstellt die Dokumentation
 einer Klasse oder einer Funktionssammlung.
 
***/

class documenter{
	
	var $color_privat = '#FF0000'; // Farbe fuer 'privat'
	var $color_public = '#00FF00';  // Farbe fuer 'public'
	var $tabellenkopf = '#DEB887';  // Farbe des Tabellenkopfes
	var $zelle = '#FAEBD7';  // Farbe der Zelle
	var $rahmenfarbe = '#A9A9A9'; // Farbe des Rahmen der Grundtabelle
	
	var $datei; // Dateiname und Pfad
	var $methoden = array(); // Funktionen und Methoden einer Klasse
	var $eigenschaften = array(); // Eigenschaften einer Klasse
	var $inhalt;  // Inhalt der gelesenen Datei
	var $kopf = array();  // Beschreibung der Datei
	var $teile = array();  // Beschreibung der Funktionen
	
/**
	 Name: 
	 documenter()
	 
	 Kurzbeschreibung:
	 Konstruktor der Klasse
	 
	 Beschreibung:
	 Konstruktor der Klasse.
	 Uebernimmt den Dateinamen und den Pfad zur Datei
	 
	 Typ: @public
	 
	 Input:
	 $datei = Pfad zur Datei und Name der Datei
	 
	***/
	function documenter($datei){
		if(!is_file($datei)){
			echo 'Datei '.$datei.' nicht vorhanden !';
		}
		else{
			$this->datei = $datei;
			$this->einlesen();
			$this->bestimmung_variablen();
			$this->methoden = $this->bestimmung_bloecke();
			if($this->methoden)
				$this->bloecke_zerlegen();
		}
	}
	
/**
 Name:
 ausgabe()
 
 Kurzbeschreibung:
 Gibt Uebersichtstabelle aus.
 
 Beschreibung:
 Gibt die Uebersichtstabelle aus
 Bestandteile der Tabelle sind.
 Beschreibung des Inhaltes der Datei.
 Beschreibung der Klassenvariablen.
 Beschreibung der Methoden und Funktionen.
 
 Typ: @public
 
 Output:
 $tabelle = Datei mit dem Uebersichtsinhalt
 
***/
	function ausgabe(){
		$inhalt = "<html>\n<head><title>".$this->datei."</title>\n</head>\n<body>\n";
		$inhalt .= "<table align='center' border='0' cellspacing='3' cellpadding='0' width='400'>";
		
		if($this->kopf){
			$inhalt .= "<tr><td>";
			$inhalt .= $this->aufbereitung_kopf();
			$inhalt .= "</td></tr>";
		}
		
		if($this->eigenschaften){
			$inhalt .= "<tr><td>";
			$inhalt .= $this->aufbereitung_variablen();
			$inhalt .= "</td></tr>";
		}
		
		if($this->methoden){
			foreach($this->teile as $name => $methodeninhalt){
				$inhalt .= "<tr><td>";
				$inhalt .= $this->aufbereitung_methoden($methodeninhalt);
				$inhalt .= "</td></tr>";
			}
		}
		
		$inhalt .= "<td><tr></table>";
		
		$inhalt .= "</body>\n</html>";
			
		$name = explode('.',$this->datei);
		$datei = $name[0].".htm";
		
		$fp = fopen($datei,'w');
		fputs($fp,$inhalt);
		fclose($fp);
		
		echo $inhalt;
		
		return;
	}
	
/**
 Name:
 aufbereitung_kopf()
 
 Kurzbeschreibung:
 
 
 Beschreibung:
 Bereitet Informationen ueber Datei auf.
 
 Typ: privat
 
 Output:
 $kopf = Inhalt der Dateibeschreibung
 
***/
	function aufbereitung_kopf(){
		$kopf = "<table border='0' cellpadding='2' cellspacing='2' style='background-color:".$this->rahmenfarbe."'>";
		$kopf .= "<tr><td style='background-color:".$this->tabellenkopf."'>".$this->kopf[1]."</td><td style='background-color:".$this->zelle."'>".$this->kopf[2]."</td></tr>";
		$kopf .= "<tr><td style='background-color:".$this->tabellenkopf."'>".$this->kopf[3]."</td><td style='background-color:".$this->zelle."'>".nl2br($this->kopf[4])."</td></tr>";
		
		$kopf .= "</table>";
		return $kopf;
	}
	
/**
 Name:
 aufbereitung_variablen()
 
 Kurzbeschreibung:
 Bereitet die Variablen der Klasse auf.
 
 Beschreibung:
 Bereitet die Variablen der Klasse auf.
 Es wird der Variablenname angezeigt.
 Es wird die Beschreibung der Variable angezeigt.
 
 Typ: privat
 
 Output:
 $variable = Inhalt der Klassenvariablen
 
***/
	function aufbereitung_variablen(){
		$variable = "<table cellpadding='2' cellspacing='2' style='background-color:".$this->rahmenfarbe."'><tr><td  colspan='2' align='center' style='background-color:".$this->tabellenkopf."'>Variablen der Klasse</td></tr>";
		for($i=0;$i<count($this->eigenschaften);$i++){
			$variable .= "<tr><td style='background-color:".$this->tabellenkopf."'> ".$this->eigenschaften[$i]['name']." </td><td style='background-color:".$this->zelle."'>".$this->eigenschaften[$i]['erlaeuterung']."</td></tr>";
		}
		$variable .= "</table>";
		return $variable;
	}
	
/**
 Name:
 aufbereitung_methoden()
 
 Kurzbeschreibung:
 Bereitet die Methoden / Funktionen zur Ausgabe vor
 
 Beschreibung:
 Bereitet die Funktionen zur Ausgabe vor.
 Parameter sind.
 
 
 Typ: privat
 
 Input:
 $inhalt = Inhalt der Methode
 
 Output:
 $methoden = Parameter der Methoden und Funktionen als Tabelle
 
***/
	function aufbereitung_methoden($inhalt){
		$methoden = "<table cellpadding='2' cellspacing='2' style='background-color:".$this->rahmenfarbe."'>";
		foreach($inhalt as $name => $inhalt){
			if($name == 'Name')
				$methoden .= "<tr><td colspan='2'  align='center' style='background-color:".$this->tabellenkopf."'> Name der Funktion: ".$inhalt."</td></tr>";
			elseif($name == 'Typ')
				if($inhalt == 'privat')
					$methoden .= "<tr><td style='background-color:".$this->tabellenkopf."'>".$name.":</td><td style='background-color:".$this->color_privat."'>".$inhalt . "</td></tr>";
				else
					$methoden .= "<tr><td style='background-color:".$this->tabellenkopf."'>".$name.":</td><td style='background-color:".$this->color_public."'>".$inhalt . "</td></tr>";
			else
				$methoden .= "<tr><td style='background-color:".$this->tabellenkopf."'>".$name.":</td><td style='background-color:".$this->zelle."'>".$inhalt . "</td></tr>";
		}
		$methoden .= "</table>";
		
		return $methoden;
	}
	
	
/**
	 Name:
	 einlesen
	 
	 Kurzbeschreibung:
	 Liest den String ein.
	 Bildet Array der Kommentarbloecke.
	 
	 Beschreibung:
	 Liest die zu dokumentierende Datei ein.
	 Jede Variable in einer Klasse und jeder Kommentarblock
	 in einer Funktionssammlung und in einer Klasse
	 wird in einem Array gespeichert.
	 
	 Typ: @privat
	 
	 Input:
	 $variable = Eigenschaften einer Klasse
	 $kommentar = Funktionen und Methoden einer Klasse
	 
	***/
	function einlesen(){
		$fp = fopen($this->datei,'r');
		$this->inhalt = fread($fp,filesize($this->datei));
		fclose($fp);
		
		return;
	}
	
/**
 Name:
 bestimmung_variablen()
 
 Kurzbeschreibung:
 filtert die Klassenvariablen
 
 Beschreibung:
 Filtert aus der Gesamtdatei die Klassenvariablen heraus.
 Baut ein Array in dem der Name der Variable ist und deren Beschreibung
 
 Typ: @privat
 
***/
	function bestimmung_variablen(){
		
		$test_variablen = preg_match_all("#(var)(\s+)([\$a-z0-9]+)([\w\W]+)([/]{2,2})([\w\W]+)(\n{1,1})#iU",$this->inhalt,$variablen);
		if($test_variablen){
			for($i=0;$i<count($variablen[0]);$i++){
				$this->eigenschaften[$i]['name'] = $variablen[3][$i].$variablen[4][$i];
				$this->eigenschaften[$i]['erlaeuterung'] = $variablen[6][$i];
			}
		}
		
		return;
	}
	
/**
 Name:
 bestimmung_bloecke()
 
 Kurzbeschreibung:
 filtert die Bloecke heraus
 
 Beschreibung:
 Filtert aus der Gesamtdatei die Beschreibungsbloecke heraus.
 
 Typ: @privat
 
 Output:
 $bloecke[2] = Inhalt der Informationsbloecke
 
***/
	function bestimmung_bloecke(){
		$this->count_block = preg_match_all( 	"#(\/\*\*)([\w\W]+)(\*\*\*\/)#iU",$this->inhalt,$bloecke);
		
		return $bloecke[2];
	}
	
/**
 Name:
 bloecke_zerlegen()
 
 Kurzbeschreibung:
 zerlegt einen Informationsblock.
 
 Beschreibung:
 zerlegt einen Informationsblock in die einzelnen
 Parameter.
 Die Parameter sind dabei:
 
 
 Typ: @privat
 
***/
	function bloecke_zerlegen(){
		
		for($i=0;$i<count($this->methoden);$i++){
			if(eregi('datei:',$this->methoden[$i]))
				$this->bilde_kopf($i);
			elseif(eregi('name:',$this->methoden[$i]))
				$this->bilde_beschreibung($i);
		}
		
		return;
	}
	
/**
 Name:
 bilde_kopf()
 
 Kurzbeschreibung:
 Beinhaltet die Informationen
 zur Datei
 
 Beschreibung:
 Ermittelt die Informationen zur Datei.
 Die Parameter sind der Name der Datei.
 Die Kurzbeschreibung.
 Die Beschreibung als Langtext
 
 Typ: @privat
 
 Input:
 $zahl = Abschnitt der Methode $this->methoden in der sich der Kopf befindet
 
***/
	function bilde_kopf($zahl){
		preg_match("#(datei:)([\w\W]+)(beschreibung:)([\w\W]+)#i",$this->methoden[$zahl],$this->kopf);
		for($i=1;$i<count($this->kopf);$i++){
			$this->kopf[$i] = trim($this->kopf[$i]);
		}
		
		return;
	}
	
/**
 Name:
 bilde_beschreibung()
 
 Kurzbeschreibung:
 Beinhaltet die Informationen
 zu den einzelnen Bloecken
 
 Beschreibung:
 Ermittelt die Informationen zu den Bloecken.
 Die Parameter sind
 Der Name der Funktion / Methode.
 Die Kurzbeschreibung.
 Die Beschreibung als Langtext.
 Der Typ der Funktion / Methode.
 Die Input - Variablen.
 Das Output - Array / Variable.
 
 Typ: @privat
 
 Input:
 $zahl = Abschnitt der Methode $this->methoden in der sich die Beschreibung der Methode befindet
 
***/
	function bilde_beschreibung($zahl){
		$this->methoden[$zahl] = trim($this->methoden[$zahl]);
		$LZ = array("\n", "\r", "\t", "\x0B", "\0");
		$this->methoden[$zahl] = str_replace($LZ, '', $this->methoden[$zahl]);
		
		preg_match("#(name:)([\w\W]+)(kurzbeschreibung:)([\w\W]+)(beschreibung:)([\w\W]+)(typ: )([a-z]{6,6})([\w\W]+)#i",$this->methoden[$zahl],$teil1);
		$this->teile[$zahl]['Name'] = $teil1[2];
		$this->teile[$zahl]['Kurzbeschreibung'] = $teil1[4];
		$this->teile[$zahl]['Beschreibung'] = $teil1[6];
		$this->teile[$zahl]['Typ'] = $teil1[8];
		
		if(eregi('input:',$teil1[9]) and eregi('output',$teil1[9])){
			preg_match(  	"#(input:)([\w\W]+)(output:)([\w\W]+)#i",$teil1[9],$teil2);
			$teil2[2] = str_replace('$','<br>$',$teil2[2]);
			$this->teile[$zahl]['Input'] = $teil2[2];
			$teil2[4] = str_replace('$','<br>$',$teil2[4]);
			$this->teile[$zahl]['Output'] = $teil2[4];
		}
		elseif(eregi('input:',$teil1[9])){
			preg_match(  	"#(input:)([\w\W]+)#i",$teil1[9],$teil2);
			$teil2[2] = str_replace('$','<br>$',$teil2[2]);
			$this->teile[$zahl]['Input'] = $teil2[2];
		}
		elseif(eregi('output:',$teil1[9])){
			preg_match(  	"#(output:)([\w\W]+)#i",$teil1[9],$teil2);
			$teil2[2] = str_replace('$','<br>$',$teil2[2]);
			$this->teile[$zahl]['Output'] = $teil2[2];
		}
		
		return;
	}
	
	
}  // Ende der Klasse

?>
Return current item: Simple Documenter