openrat-cms

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

Line.class.php (4169B)


      1 <?php
      2 
      3 namespace wikiparser\util;
      4 use cms\base\Configuration;
      5 
      6 /**
      7  * Darstellung einer Zeile in einem Freitext.<br>
      8  * <br>
      9  * Im Konstruktor wird die Zeile analysiert und es wird festgestellt, was
     10  * die Zeile f�r einen Inhalt hat (z.B. ein Listenelement, eine �berschrift, usw.)<br>
     11  *
     12  * @author Jan Dankert
     13  * @version $Revision$
     14  * @package openrat.services
     15  */
     16 class Line
     17 {
     18 	var $source;                       // Der urspr�ngliche Inhalt
     19 	var $value;                        // Der textuelle Inhalt (sofern vorhanden)
     20 
     21 	var $isDefinition = false;       // Definitionseintrag
     22 	var $isList = false;       // nicht-numerierte Liste
     23 	var $isNumberedList = false;       // numerierte Liste
     24 	var $indent = 0;           // Einschubtiefe der Liste
     25 
     26 	var $isHeadline = false;  // �berschrift
     27 	var $isHeadlineUnderline = false;  // unterstrichene �berschrift
     28 	var $headlineLevel = 0;      // Grad der �berschrift (1,2,3...)
     29 
     30 
     31 	var $isTableOfContent = false;     // Inhaltsverzeichnis
     32 	var $isTable = false;       // Tabelle
     33 	var $isCode = false;       // Code
     34 	var $isQuote = false;       // Zitat
     35 	var $isQuotePraefix = false;       // Zitatbeginn/-ende
     36 
     37 	var $isUnparsed = false;
     38 
     39 	var $isEmpty = false;       // Zeile ist leer
     40 	var $isNormal = false;       // Zeile ist ohne besonderen Inhalt, d.h. keine Tabelle, kein Zitat, usw.
     41 
     42 
     43 	/**
     44 	 * Erzeugt einen Zeilenobjekt, der Text im Parameter wird dabei geparst.
     45 	 */
     46 	function __construct($s)
     47 	{
     48 		$text_markup = Configuration::subset(['editor','text-markup'])->getConfig();
     49 
     50 		$list_numbered = $text_markup['list-numbered'];
     51 		$list_unnumbered = $text_markup['list-unnumbered'];
     52 		$headline = $text_markup['headline'];
     53 
     54 		$this->source = $s;
     55 		$this->value = $s;
     56 
     57 		$this->isList = $this->isAnErsterStelle(ltrim($s), $list_unnumbered);
     58 		$this->isNumberedList = $this->isAnErsterStelle(ltrim($s), $list_numbered);
     59 		$this->indent = strlen($s) - strlen(ltrim($s)) + 1;
     60 
     61 		if ($this->isList || $this->isNumberedList)
     62 			$this->value = ltrim(substr($s, $this->indent));
     63 
     64 		$this->level = strspn($s, $headline);
     65 		$this->isHeadline = $this->level >= 1;
     66 
     67 		if ($this->isHeadline)
     68 			$this->value = ltrim(substr($s, $this->level));
     69 
     70 
     71 		$hl = array(1 => $text_markup['headline_level1_underline'],
     72 			2 => $text_markup['headline_level2_underline'],
     73 			3 => $text_markup['headline_level3_underline']);
     74 
     75 		foreach ($hl as $lev => $char) {
     76 			if (substr($s, 0, 3 * strlen($char)) == str_repeat($char, 3 * strlen($char))) {
     77 				$this->isHeadlineUnderline = true;
     78 				$this->isNormal = true;
     79 				$this->level = intval($lev);
     80 			}
     81 		}
     82 
     83 		if ($this->isAnErsterStelle($s, $text_markup['table-of-content'])) {
     84 			$this->isTableOfContent = true;
     85 			$this->isNumberedList = false;
     86 			$this->isList = false;
     87 			$this->value = '';
     88 		} elseif
     89 		($this->isHeadline ||
     90 			$this->isHeadlineUnderline ||
     91 			$this->isList ||
     92 			$this->isNumberedList) {
     93 			;
     94 		} elseif ($this->isAnErsterStelle($s, $text_markup['table-cell-sep'])) {
     95 			$this->isTable = true;
     96 			$this->value = '';
     97 		} elseif ($this->isAnErsterStelle($s, $text_markup['pre-begin']) && !$this->isHeadlineUnderline) {
     98 			$this->isCode = true;
     99 			$this->value = substr($s, strlen($text_markup['pre-begin']));
    100 		} elseif (strpos($s, $text_markup['definition-sep']) !== false) {
    101 			$this->isDefinition = true;
    102 		} elseif (trim($s) == $text_markup['quote-line-begin']) {
    103 			$this->isQuote = true;
    104 		} elseif ($this->isAnErsterStelle($s, $text_markup['quote']) && strlen(trim($s)) > 1) {
    105 			$this->isQuotePraefix = true;
    106 			$this->value = ltrim(substr($s, strlen($text_markup['quote'])));
    107 			$this->level = strspn(str_replace(' ', '', $s), $text_markup['quote']);
    108 		} elseif ($this->isAnErsterStelle($s, '`')) {
    109 			$this->isUnparsed = true;
    110 			$this->value = substr($this->value, 1);
    111 		} elseif ($s == '') {
    112 			$this->isEmpty = true;
    113 		} else {
    114 			$this->isNormal = true;
    115 		}
    116 	}
    117 
    118 
    119 	/**
    120 	 * Stellt fest, ob $wort am Anfang von $text steht.
    121 	 */
    122 	function isAnErsterStelle($text, $wort)
    123 	{
    124 //		Html::debug($text,"Text");
    125 //		Html::debug($wort,"Wort");
    126 //		Html::debug(substr($text,0,strlen($wort))==$wort,'Ergebnis');
    127 		return substr($text, 0, strlen($wort)) == $wort;
    128 	}
    129 }
    130 
    131 ?>