openrat-cms

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

LatexRenderer.class.php (3299B)


      1 <?php
      2 
      3 namespace wikiparser\renderer;
      4 use util\Text;
      5 
      6 /**
      7  * Renderer fuer das LaTex-Format.
      8  *
      9  * Diese Klasse erzeugt aus dem internen DOM-Baum ein LaTex-Dokument.
     10  *
     11  * @author Jan Dankert, $Author$
     12  * @version $Revision$
     13  * @package openrat.text
     14  */
     15 class LatexRenderer
     16 {
     17 	var $linkedObjectIds = array();
     18 
     19 	/**
     20 	 * Rendert ein Dokument-Element.
     21 	 *
     22 	 * @param Object $child Element
     23 	 * @return String
     24 	 */
     25 	function renderElement($child)
     26 	{
     27 		$val = '';
     28 		$before = '';
     29 		$after = '';
     30 
     31 		switch (strtolower(get_class($child))) {
     32 			case 'tableofcontentelement':
     33 				$before = '\tableofcontents' . "\n";
     34 				break;
     35 
     36 			case 'rawelement':
     37 				$tag = '';
     38 				$val = $child->src;
     39 
     40 				break;
     41 
     42 			case 'textelement':
     43 				$val = $child->text;
     44 				//$val = Text::encodeHtml( $val );
     45 				$val = Text::replaceHtmlChars($val);
     46 				break;
     47 
     48 			case 'footnoteelement':
     49 				$before = '\footnote{';
     50 				$after = '}';
     51 				break;
     52 
     53 			case 'codeelement':
     54 
     55 				break;
     56 
     57 			case 'quoteelement':
     58 				break;
     59 
     60 
     61 			case 'paragraphelement':
     62 				$before = "\n";
     63 				break;
     64 
     65 			case 'speechelement':
     66 
     67 				break;
     68 
     69 			case 'linebreakelement':
     70 				$after = '\\';
     71 				break;
     72 
     73 			case 'linkelement':
     74 				// Ggf. Hyperref-Paket verwenden.
     75 				break;
     76 
     77 			case 'imageelement':
     78 				break;
     79 
     80 			case 'strongelement':
     81 				$before = '\textbf{';
     82 				$after = '}';
     83 				break;
     84 
     85 			case 'emphaticelement':
     86 				$before = '\textit{';
     87 				$after = '}';
     88 				break;
     89 
     90 			case 'insertedelement':
     91 				$before = '';
     92 				$after = '';
     93 				break;
     94 
     95 			case 'removedelement':
     96 				$before = '';
     97 				$after = '';
     98 				break;
     99 
    100 			case 'headlineelement':
    101 
    102 				switch ($child->level) {
    103 					case 1:
    104 						$before = '\section';
    105 						break;
    106 					case 2:
    107 						$before = '\subsection';
    108 						break;
    109 					case 3:
    110 					default:
    111 						$before = '\subsubsection';
    112 						break;
    113 				}
    114 				$before .= '{';
    115 				$after = '}';
    116 				break;
    117 
    118 			case 'tableelement':
    119 				$before = '\begin{tabular}' . "\n";
    120 				$after = '\end{tabular}' . "\n";
    121 				break;
    122 
    123 			case 'tablelineelement':
    124 				$before = '';
    125 				$after = '\\';
    126 				break;
    127 
    128 			case 'definitionlistelement':
    129 				break;
    130 
    131 			case 'definitionitemelement':
    132 				break;
    133 
    134 			case 'macroelement':
    135 				break;
    136 
    137 			case 'tablecellelement':
    138 				$before = '';
    139 				$after = ' & ';
    140 				break;
    141 
    142 			case 'listelement':
    143 				$before = '\begin{itemize}' . "\n";
    144 				$after = '\end{itemize}' . "\n";
    145 				break;
    146 
    147 			case 'teletypeelement':
    148 				$before = '\texttt{';
    149 				$after = '}';
    150 				break;
    151 
    152 			case 'numberedlistelement':
    153 				$before = '\begin{itemize}' . "\n";
    154 				$after = '\end{itemize}' . "\n";
    155 				break;
    156 
    157 			case 'listentryelement':
    158 				$before = '\item ';
    159 				break;
    160 
    161 			default:
    162 
    163 				$tag = 'unknown-element';
    164 				$attr['class'] = strtolower(get_class($child));
    165 				break;
    166 		}
    167 
    168 		$val .= $before;
    169 		foreach ($child->children as $c) {
    170 			$val .= $this->renderElement($c);
    171 		}
    172 		$val .= $after;
    173 
    174 		return $val;
    175 	}
    176 
    177 
    178 	/**
    179 	 * Rendering des Dokumentes.<br>
    180 	 *
    181 	 * @return String
    182 	 */
    183 	function render()
    184 	{
    185 		$this->renderedText = '';
    186 		$this->renderedText .= '\documentclass{article}' . "\n";
    187 		$this->renderedText .= '\begin{document}' . "\n";
    188 
    189 		foreach ($this->children as $child)
    190 			$this->renderedText .= $this->renderElement($child);
    191 
    192 		$this->renderedText .= '\end{document}' . "\n";
    193 
    194 		return $this->renderedText;
    195 	}
    196 }
    197 
    198 ?>