openrat-cms

# OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

Line.class.php (4503B)


      1 <?php
      2 
      3 /**
      4  * Darstellung einer Zeile in einem Freitext.<br>
      5  * <br>
      6  * Im Konstruktor wird die Zeile analysiert und es wird festgestellt, was
      7  * die Zeile f�r einen Inhalt hat (z.B. ein Listenelement, eine �berschrift, usw.)<br>
      8  * 
      9  * @author Jan Dankert
     10  * @version $Revision$
     11  * @package openrat.services
     12  */
     13 class Line
     14 {
     15 	var $source;                       // Der urspr�ngliche Inhalt
     16 	var $value;                        // Der textuelle Inhalt (sofern vorhanden)
     17 	
     18 	var $isDefinition   = false;       // Definitionseintrag
     19 	var $isList         = false;       // nicht-numerierte Liste
     20 	var $isNumberedList = false;       // numerierte Liste
     21 	var $indent         = 0;           // Einschubtiefe der Liste
     22 	
     23 	var $isHeadline          = false;  // �berschrift
     24 	var $isHeadlineUnderline = false;  // unterstrichene �berschrift
     25 	var $headlineLevel       = 0;      // Grad der �berschrift (1,2,3...)
     26 	
     27 	
     28 	var $isTableOfContent = false;     // Inhaltsverzeichnis
     29 	var $isTable          = false;       // Tabelle
     30 	var $isCode           = false;       // Code
     31 	var $isQuote          = false;       // Zitat
     32 	var $isQuotePraefix   = false;       // Zitatbeginn/-ende
     33 	
     34 	var $isUnparsed     = false;
     35 	
     36 	var $isEmpty        = false;       // Zeile ist leer
     37 	var $isNormal       = false;       // Zeile ist ohne besonderen Inhalt, d.h. keine Tabelle, kein Zitat, usw.
     38 
     39 	
     40 	
     41 	/**
     42 	 * Erzeugt einen Zeilenobjekt, der Text im Parameter wird dabei geparst.
     43 	 */
     44 	function __construct( $s )
     45 	{
     46 		global $conf;
     47 		$text_markup = $conf['editor']['text-markup'];
     48 //		Html::debug($text_markup); 
     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 		{
     77 			if	( substr($s,0,3*strlen($char))==str_repeat($char,3*strlen($char)) )
     78 			{
     79 				$this->isHeadlineUnderline = true;
     80 				$this->isNormal            = true;
     81 				$this->level               = intval($lev);
     82 			}
     83 		}
     84 		
     85 		if	( $this->isAnErsterStelle($s,$text_markup['table-of-content']) )
     86 		{
     87 			$this->isTableOfContent  = true;
     88 			$this->isNumberedList    = false;
     89 			$this->isList    = false;
     90 			$this->value             = '';
     91 		}
     92 		elseif
     93 			( $this->isHeadline          ||
     94 		      $this->isHeadlineUnderline ||
     95 		      $this->isList              ||
     96 		      $this->isNumberedList         )
     97 		{
     98 			;
     99 		}
    100 		elseif	( $this->isAnErsterStelle($s,$text_markup['table-cell-sep']) )
    101 		{
    102 			$this->isTable           = true;
    103 			$this->value             = '';
    104 		}
    105 		elseif	( $this->isAnErsterStelle($s,$text_markup['pre-begin']) && !$this->isHeadlineUnderline )
    106 		{
    107 			$this->isCode            = true;
    108 			$this->value             = substr($s,strlen($text_markup['pre-begin']));
    109 		}
    110 		elseif	( strpos($s, $text_markup['definition-sep'])!== false )
    111 		{
    112 			$this->isDefinition = true;
    113 		}
    114 		elseif	( trim($s)==$text_markup['quote-line-begin'] )
    115 		{
    116 			$this->isQuote           = true;
    117 		}
    118 		elseif	( $this->isAnErsterStelle($s,$text_markup['quote']) && strlen(trim($s))>1 )
    119 		{
    120 			$this->isQuotePraefix = true;
    121 			$this->value = ltrim(substr($s,strlen($text_markup['quote'])));
    122 			$this->level = strspn( str_replace(' ','',$s),$text_markup['quote'] );
    123 		}
    124 		elseif	( $this->isAnErsterStelle($s,'`') )
    125 		{
    126 			$this->isUnparsed = true;
    127 			$this->value      = substr($this->value,1);
    128 		}
    129 		elseif	(  $s == '' )
    130 		{
    131 			$this->isEmpty  = true;
    132 		}
    133 		else
    134 		{
    135 			$this->isNormal = true;
    136 		}
    137 	}
    138 
    139 
    140 	/**
    141 	 * Stellt fest, ob $wort am Anfang von $text steht.
    142 	 */	
    143 	function isAnErsterStelle( $text,$wort )
    144 	{
    145 //		Html::debug($text,"Text");
    146 //		Html::debug($wort,"Wort");
    147 //		Html::debug(substr($text,0,strlen($wort))==$wort,'Ergebnis');
    148 		return substr($text,0,strlen($wort))==$wort;
    149 	}
    150 }
    151 
    152 ?>