openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

TextRenderer.class.php (2582B)


      1 <?php
      2 
      3 namespace wikiparser\renderer;
      4 use cms\base\Configuration;
      5 use wikiparser\model\LineBreakElement;
      6 use wikiparser\model\RawElement;
      7 
      8 /**
      9  * Dokument-Objekt.<br>
     10  * Diese Objekt verk�rpert das Root-Objekt in einem DOM-Baum.<br>
     11  * <br>
     12  * Dieses Objekt kann Text parsen und seine Unterobjekte selbst erzeugen.<br>
     13  *
     14  * @author Jan Dankert, $Author$
     15  * @version $Revision$
     16  * @package openrat.text
     17  */
     18 class TextRenderer
     19 {
     20 	var $linkedObjectIds = array();
     21 
     22 	/**
     23 	 * Fu�noten.
     24 	 *
     25 	 * @var Array
     26 	 */
     27 	var $footnotes = array();
     28 
     29 
     30 	/**
     31 	 * Rendert ein Dokument-Element.
     32 	 *
     33 	 * @param Object $child Element
     34 	 * @return String
     35 	 */
     36 	function renderElement($child)
     37 	{
     38 		$className = strtolower(get_class($child));
     39 		$val = '';
     40 
     41 		$length = Configuration::subset(['editor','text'])->get('linelength',70);
     42 
     43 		switch ($className) {
     44 			case 'footnoteelement':
     45 
     46 				$nr = 1;
     47 				foreach ($this->footnotes as $fn)
     48 					if (strtolower(get_class($fn)) == 'linebreakelement')
     49 						$nr++;
     50 
     51 				$val = $nr;
     52 				if (Configuration::subset(['editor','footnote'])->is('bracket'))
     53 					$val = '(' . $nr . ')';
     54 
     55 				if ($nr == 1) {
     56 					$this->footnotes[] = new RawElement("\n\n---\n");
     57 				}
     58 				$this->footnotes[] = new LineBreakElement();
     59 				$this->footnotes[] = new RawElement($val);
     60 				$this->footnotes[] = new RawElement(' ');
     61 				foreach ($child->children as $c)
     62 					$this->footnotes[] = $c;
     63 
     64 				$child->children = array();
     65 
     66 				break;
     67 
     68 			case 'headlineelement':
     69 				$val = "\n" . wordwrap($child->text, $length);
     70 				$val .= str_repeat('-', min($length, strlen($val)));
     71 				break;
     72 
     73 			case 'paragraphelement':
     74 				$val = "\n\n";
     75 				break;
     76 
     77 			case 'strongelement':
     78 
     79 				foreach ($child->children as $c)
     80 					$val .= $this->renderElement($c);
     81 				$val = strtoupper($val);
     82 
     83 				$child->children = array();
     84 
     85 				break;
     86 
     87 			case 'textelement':
     88 				$length = Configuration::subset(['editor','text'])->get('linelength',70);
     89 				$val .= wordwrap($child->text, $length);
     90 				break;
     91 
     92 			case 'linebreakelement':
     93 				$val .= "\n";
     94 				break;
     95 			default:
     96 		}
     97 
     98 		foreach ($child->children as $c) {
     99 			$val .= $this->renderElement($c);
    100 		}
    101 
    102 		return $val;
    103 
    104 //				die( 'unknown document type: '.$this->type );
    105 
    106 	}
    107 
    108 
    109 	/**
    110 	 * Rendering des Dokumentes.<br>
    111 	 *
    112 	 * @return String
    113 	 */
    114 	function render()
    115 	{
    116 		$this->renderedText = '';
    117 		$this->footnotes = array();
    118 
    119 		foreach ($this->children as $child)
    120 			$this->renderedText .= $this->renderElement($child);
    121 
    122 		foreach ($this->footnotes as $child)
    123 			$this->renderedText .= $this->renderElement($child);
    124 
    125 		return $this->renderedText;
    126 	}
    127 }
    128 
    129 ?>