openrat-cms

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

commit 9b500e0c4342b51683f18e1607ac3f594f077fbb
parent 819f61dd1b82aea11f6c8b56f2903b76bf11a5c2
Author: dankert <devnull@localhost>
Date:   Wed,  2 Nov 2005 22:27:02 +0100

Uebersetzen von Text-Markup in ein DOM (Document Object Model).

Diffstat:
textClasses/AbstractElement.class.php | 18++++++++++++++++++
textClasses/CodeElement.class.php | 14++++++++++++++
textClasses/DefinitionListElement.class.php | 14++++++++++++++
textClasses/DefinitionListEntryElement.class.php | 14++++++++++++++
textClasses/DefinitionListItemElement.class.php | 14++++++++++++++
textClasses/DocumentElement.class.php | 843+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
textClasses/EmphaticElement.class.php | 23+++++++++++++++++++++++
textClasses/FootnoteElement.class.php | 14++++++++++++++
textClasses/HeadlineElement.class.php | 22++++++++++++++++++++++
textClasses/ImageElement.class.php | 14++++++++++++++
textClasses/InsertedElement.class.php | 14++++++++++++++
textClasses/LineBreakElement.class.php | 14++++++++++++++
textClasses/LinkElement.class.php | 99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
textClasses/ListElement.class.php | 15+++++++++++++++
textClasses/ListEntryElement.class.php | 13+++++++++++++
textClasses/NumberedListElement.class.php | 14++++++++++++++
textClasses/ParagraphElement.class.php | 14++++++++++++++
textClasses/QuoteElement.class.php | 13+++++++++++++
textClasses/RemovedElement.class.php | 14++++++++++++++
textClasses/SpeechElement.class.php | 14++++++++++++++
textClasses/StrongElement.class.php | 28++++++++++++++++++++++++++++
textClasses/TableCellElement.class.php | 16++++++++++++++++
textClasses/TableElement.class.php | 23+++++++++++++++++++++++
textClasses/TableLineElement.class.php | 14++++++++++++++
textClasses/TableOfContentElement.class.php | 14++++++++++++++
textClasses/TeletypeElement.class.php | 14++++++++++++++
textClasses/TextElement.class.php | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
textClasses/include.inc.php | 31+++++++++++++++++++++++++++++++
28 files changed, 1418 insertions(+), 0 deletions(-)

diff --git a/textClasses/AbstractElement.class.php b/textClasses/AbstractElement.class.php @@ -0,0 +1,17 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class AbstractElement +{ + var $children = array(); + + var $style = ''; + var $class = ''; + var $title = ''; +} + +?>+ \ No newline at end of file diff --git a/textClasses/CodeElement.class.php b/textClasses/CodeElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class CodeElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/DefinitionListElement.class.php b/textClasses/DefinitionListElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class DefinitionListElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/DefinitionListEntryElement.class.php b/textClasses/DefinitionListEntryElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class DefinitionListEntryElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/DefinitionListItemElement.class.php b/textClasses/DefinitionListItemElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class DefinitionListItemElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/DocumentElement.class.php b/textClasses/DocumentElement.class.php @@ -0,0 +1,842 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class DocumentElement extends AbstractElement +{ + var $linkedObjectIds = array(); + + + + function parse( $text ) + { + + $zeilen = array(); + $nr = 0; + foreach( $text as $t ) + { +// $t = $this->fixLinks( $t ); // Verweise vervollstaendigen. + $zeilen[++$nr] = new Line( $t ); + } + +// echo "<pre>"; +// print_r($zeilen); +// echo "</pre>"; + + $this->children = $this->parseMultiLineText( $zeilen ); + } + + + + function parseMultiLineText( $zeilen ) + { + $children = array(); + $anzahlZeilen = count( $zeilen ); + $zeilen[0] = new Line(''); + $zeilen[$anzahlZeilen+1] = new Line(''); + for ( $zeileNr=1; $zeileNr<=$anzahlZeilen; $zeileNr++ ) + { + $letzteZeile = $zeilen[$zeileNr-1]; + $dieseZeile = $zeilen[$zeileNr ]; + $naechsteZeile = $zeilen[$zeileNr+1]; + // Leerzeilen ignorieren + if ( $dieseZeile->isEmpty ) + { + continue; + } + + + // Text nicht parsen + if ( $dieseZeile->isTableOfContent ) + { + $children[] = new TableOfContentElement(); + continue; + } + + + // Text nicht parsen + if ( $dieseZeile->isUnparsed ) + { + $children[] = new TextElement( $dieseZeile->value ); + continue; + } + + + // Ueberschriften + // Markierung in der Folgezeile mit "...", "---" oder "===" + if ( $naechsteZeile->isHeadlineUnderline ) + { + $headline = new HeadlineElement($naechsteZeile->level); + $headline->children = $this->parseSimple( $dieseZeile->value); + $children[] = $headline; + $zeileNr++; + continue; // Naechste Zeile + } + + + // Ueberschriften + // Markierung mit "+++..." am Zeilenbeginn. + if ( $dieseZeile->isHeadline ) + { + $headline = new HeadlineElement($dieseZeile->level); + $headline->children = $this->parseSimple( $dieseZeile->value); + $children[] = $headline; + continue; // Naechste Zeile + } + + // Zitate + if ( $dieseZeile->isQuote ) + { + $bisZeileNr = $zeileNr+1; + do + { + $bisZeileNr++; + } + while( !$zeilen[$bisZeileNr]->isQuote && $bisZeileNr<=$anzahlZeilen ); + + $quote = new QuoteElement(); + $zeilenAuszug = array(); + $nr=0; + for( $zn=$zeileNr+1;$zn<$bisZeileNr;$zn++) + { + $zeilenAuszug[++$nr] = $zeilen[$zn]; + } + $quote->children = $this->parseMultiLineText($zeilenAuszug); + $zeileNr = $bisZeileNr+1; + $children[] = $quote; + continue; + } + + + + // Zitate + if ( $dieseZeile->isQuotePraefix ) + { + $bisZeileNr = $zeileNr+1; + do + { + $bisZeileNr++; + } + while( !$zeilen[$bisZeileNr]->isQuote && !$zeilen[$bisZeileNr]->isQuotePraefix && $bisZeileNr<=$anzahlZeilen ); + + $quote = new QuoteElement(); + $zeilenAuszug = array(); + $nr=0; + for( $zn=$zeileNr+1;$zn<$bisZeileNr;$zn++) + { + $zeilenAuszug[++$nr] = $zeilen[$zn]; + } + $quote->children = $this->parseMultiLineText($zeilenAuszug); + $zeileNr = $bisZeileNr+1; + $children[] = $quote; + continue; + } + + + + // Code + if ( $dieseZeile->isCode) + { + $bisZeileNr = $zeileNr+1; + while( $bisZeileNr<$anzahlZeilen && !$zeilen[$bisZeileNr]->isCode ) + $bisZeileNr++; + + $code = new CodeElement(); + for( $zn=$zeileNr+1;$zn<$bisZeileNr;$zn++) + { + $code->children[] = new TextElement( $zeilen[$zn]->source ); + + if ( $zn < $bisZeileNr-1 ) + $code->children[] = new LineBreakElement(); + } + $zeileNr = $bisZeileNr; + $children[] = $code; + continue; + } + + + // Tabellen + if ( $dieseZeile->isTable ) + { + $bisZeileNr = $zeileNr; + while( $bisZeileNr<=$anzahlZeilen && $zeilen[$bisZeileNr]->isTable ) + $bisZeileNr++; + + $tabelle = new TableElement(); + $zeilenAuszug = array(); + for( $zn=$zeileNr;$zn<=$bisZeileNr;$zn++) + { + $zeilenAuszug[$zn-$zeileNr+1] = $zeilen[$zn]; + } + $tabelle->children = $this->parseTable($zeilenAuszug); + $children[] = $tabelle; + $zeileNr = $bisZeileNr+1; + continue; + } + + + // Listen + if ( $dieseZeile->isList || $dieseZeile->isNumberedList ) + { + + $bisZeileNr = $zeileNr; + while( $bisZeileNr<=$anzahlZeilen && + ($zeilen[$bisZeileNr]->isList || $zeilen[$bisZeileNr]->isNumberedList) ) + $bisZeileNr++; + $bisZeileNr--; + + if ( $dieseZeile->isList ) + $liste = new ListElement(); + else + $liste = new NumberedListElement(); + +// echo "von Zeile $zeileNr bis $bisZeileNr"; + $zeilenAuszug = array(); + $nr=0; + + for( $zn=$zeileNr;$zn<=$bisZeileNr;$zn++) + { + $zeilenAuszug[++$nr] = $zeilen[$zn]; + } + + $liste->children = $this->parseList($zeilenAuszug,1); + $children[] = $liste; + $zeileNr = $bisZeileNr; + continue; + } + + + + // Textabsaetze + $bisZeileNr = $zeileNr+1; + while( $bisZeileNr < $anzahlZeilen && + !$zeilen[$bisZeileNr ]->isTable && + !$zeilen[$bisZeileNr ]->isCode && + !$zeilen[$bisZeileNr ]->isList && + !$zeilen[$bisZeileNr ]->isNumberedList && + !$zeilen[$bisZeileNr ]->isHeadline && + !$zeilen[$bisZeileNr+1]->isHeadlineUnderline && + !$zeilen[$bisZeileNr ]->isEmpty) + { + $bisZeileNr++; + } + $bisZeileNr--; + + $para = new ParagraphElement(); + for( $zn=$zeileNr;$zn<=$bisZeileNr;$zn++) + { + if ( $zeilen[$zn]->isEmpty ) + continue; + + if ( $zeilen[$zn]->isUnparsed ) + $para->children[] = new TextElement( $zeilen[$zn]->source ); + + foreach( $this->parseSimple($zeilen[$zn]->value) as $e ) + $para->children[] = $e; + + if ( $zn < $bisZeileNr ) + $para->children[] = new LineBreakElement(); + } + $zeileNr = $bisZeileNr; + $children[] = $para; + continue; + } + + return $children; + } + + + + function parseList( $zeilen,$tiefe ) + { + $children = array(); + $anzahlZeilen = count( $zeilen ); + $entry = null; + for ( $zeileNr=1; $zeileNr<=$anzahlZeilen; $zeileNr++ ) + { + $dieseZeile = $zeilen[$zeileNr]; + + // Listen + if ( $dieseZeile->indent <= $tiefe ) + { + if ( $zeileNr > 1 ) + $children[] = $entry; + + $entry = new ListEntryElement(); + $entry->children = $this->parseSimple( $dieseZeile->value ); + } + else + { + // Weitere Schachtelung der Liste + if ( $dieseZeile->isList ) + $liste = new ListElement(); + else + $liste = new NumberedListElement(); + + $bisZeileNr = $zeileNr; + + while( $bisZeileNr<=$anzahlZeilen && $zeilen[$bisZeileNr]->indent != $tiefe ) + $bisZeileNr++; + $bisZeileNr--; + +// echo "von $zeileNr bis $bisZeileNr (insges. $anzahlZeilen)"; + $zeilenAuszug = array(); + $nr=0; + for( $zn=$zeileNr;$zn<=$bisZeileNr;$zn++) + { + $zeilenAuszug[++$nr] = $zeilen[$zn]; + } + $liste->children = $this->parseList($zeilenAuszug,$tiefe+1); + $entry->children[] = $liste; + $zeileNr = $bisZeileNr; + } + } + $children[] = $entry; + + return $children; + } + + function parseTable( $zeilen ) + { + $children = array(); + $anzahlZeilen = count( $zeilen ); + for ( $zeileNr=1; $zeileNr<=$anzahlZeilen; $zeileNr++ ) + { + $dieseZeile = $zeilen[$zeileNr]; + + $zeile = new TableLineElement(); + + // Listen + $zellen = explode('|',$dieseZeile->source); + $colSpan = 1; + + foreach( $zellen as $zellenInhalt ) + { + if ( $zellenInhalt=='') + { + $colSpan++; + continue; + } + + $zelle = new TableCellElement(); + $zelle->colSpan = $colSpan; + $colSpan = 1; + + if ( substr($zellenInhalt,0,1) == '!' ) + { + $zelle->isHeading = true; + $zellenInhalt = substr($zellenInhalt,1); + } + + $zelle->children = $this->parseSimple( $zellenInhalt); + + $zeile->children[] = $zelle; + } + + $children[] = $zeile; + } + + return $children; + } + + + + function parseLinks( $text ) + { + $posM = strpos($text,'"->"'); + + if ( $posM === false ) + return false; + + $posL = strpos(substr($text,0,$posM-1),'"'); + + if ( $posL === false ) + return false; + + $posR = strpos($text,'"',$posM+4); + + if ( $posR === false ) + return false; + + $parts = array(); + $parts[] = substr($text,0 ,$posL ); // Anfang + $parts[] = substr($text,$posL+1,$posM-$posL-1); // Linktext + $parts[] = substr($text,$posM+4,$posR-$posM-4); // Verweisziel + $parts[] = substr($text,$posR+1 ); // Rest + +// echo "<pre>"; +// echo "Link:$text"; +// echo "janjan:"; +// print_r($parts); +// echo "</pre>"; + return $parts; + } + + + + function parseImages( $text ) + { + $posM = strpos($text,'image:'); + + if ( $posM === false ) + return false; + + $posL = strpos(substr($text,0,$posM-1),'"'); + + if ( $posL === false ) + return false; + + $posR = strpos($text,'"',$posM+4); + + if ( $posR === false ) + return false; + + $parts = array(); + $parts[] = substr($text,0 ,$posL ); // Anfang + $parts[] = substr($text,$posL+1,$posM-$posL-1); // Linktext + $parts[] = substr($text,$posM+4,$posR-$posM-4); // Verweisziel + $parts[] = substr($text,$posR+1 ); // Rest + +// echo "<pre>"; +// echo "Link:$text"; +// echo "janjan:"; +// print_r($parts); +// echo "</pre>"; + return $parts; + } + + + + function parseSimpleParts( $text,$seperator ) + { + if ( strlen($seperator)>=2 ) + { + $sepLinks = substr($seperator,0,1); + $sepRechts = substr($seperator,1,1); + } + else + { + $sepLinks = $seperator; + $sepRechts = $seperator; + } + + $posL = strpos($text,$sepLinks); + + if ( $posL === false ) + return false; + + $posR = strpos($text,$sepRechts,$posL+1); + + if ( $posR === false ) + return false; + + $parts = array(); + $parts[] = substr($text,0 ,$posL ); + $parts[] = substr($text,$posL+1,$posR-$posL-1); + $parts[] = substr($text,$posR+1 ); + +// echo "Parse $seperator ergibt "; +// print_r($parts); + + return $parts; + } + + + + + function parseSimpleElement( $text,$seperator,$className ) + { + $erg = $this->parseSimpleParts( $text,$seperator ); + if ( is_array($erg) ) + { + $idx = -1; + $elements = array(); + + $davor = $this->parseSimple($erg[++$idx]); + foreach( $davor as $davorEl ) + $elements[] = $davorEl; + + $newEl = new $className(); + $newEl->children = $this->parseSimple($erg[++$idx]); + $elements[] = $newEl; + + $danach = $this->parseSimple($erg[++$idx]); + foreach( $danach as $danachEl ) + $elements[] = $danachEl; + return $elements; + } + + return false; + } + + + + function fixLinks( $text ) + { + // Text->... umsetzen nach "Text"->... (Anfuehrungszeichen ergaenzen) + $text = ereg_replace( '([A-Za-z0-9._-]+)\-\>','"\\1"->',$text ); + + // ...->Link umsetzen nach ...->"Link" (Anfuehrungszeichen ergaenzen) + $text = ereg_replace( '\->([A-Za-z0-9\.\:\_\/\,\?\=\&-]+)','->"\\1"',$text ); + + // alleinstehende externe Links +// $text = ereg_replace( '((https?|ftps?|news|gopher):\/\/([A-Za-z0-9._\/\,-]*))([^"])','"\\1"->"\\1"\\2',$text ); + + // alleinstehende E-Mail Adressen + $text = ereg_replace( '([A-Za-z0-9._-]+@[A-Za-z0-9\.\_\-]+)([^"])','"\\1"->"\\1"\\2',$text ); + + // Bilder + $text = ereg_replace( 'image:\/?\/?([A-Za-z0-9\.\:\_\/\,\?\=\&-]+)','{\\1}',$text ); + + return $text; + } + + + + function parseSimple( $text ) + { + $text = $this->fixLinks($text); +// echo "parseSimple($text)"; + $elements = array(); + + if ( trim($text) == '' ) + return $elements; + + $erg = $this->parseLinks( $text ); + if ( is_array($erg) ) + { +// print_r($erg); + $idx = -1; + + $davor = $this->parseSimple($erg[++$idx]); + foreach( $davor as $davorEl ) + $elements[] = $davorEl; + + $link = new LinkElement(); + $link->children = $this->parseSimple($erg[++$idx]); + $link->setTarget( $erg[++$idx] ); + + if ( $link->objectId != 0 ) + $this->linkedObjectIds[] = $link->objectId; + $elements[] = $link; + + $danach = $this->parseSimple($erg[++$idx]); + foreach( $danach as $danachEl ) + $elements[] = $danachEl; + + return $elements; + } + + + $erg = $this->parseSimpleParts( $text,'{}' ); + if ( is_array($erg) ) + { + $idx = -1; + + $davor = $this->parseSimple($erg[++$idx]); + foreach( $davor as $davorEl ) + $elements[] = $davorEl; + + $image = new ImageElement(); + $t = new TextElement($erg[++$idx]); + $image->setTarget( $t->text ); + $t->text = ''; + $image->children[] = $t; + + if ( $image->objectId != 0 ) + $this->linkedObjectIds[] = $image->objectId; + $elements[] = $image; + + $danach = $this->parseSimple($erg[++$idx]); + foreach( $danach as $danachEl ) + $elements[] = $danachEl; + + return $elements; + } + + + $erg = $this->parseSimpleElement( $text,'*','StrongElement' ); + if ( is_array($erg) ) + return $erg; + + $erg = $this->parseSimpleElement( $text,'_','EmphaticElement' ); + if ( is_array($erg) ) + return $erg; + + $erg = $this->parseSimpleElement( $text,'=','TeletypeElement' ); + if ( is_array($erg) ) + return $erg; + + $erg = $this->parseSimpleElement( $text,'++','InsertedElement' ); + if ( is_array($erg) ) + return $erg; + + $erg = $this->parseSimpleElement( $text,'--','RemovedElement' ); + if ( is_array($erg) ) + return $erg; + + $erg = $this->parseSimpleElement( $text,'"','SpeechElement' ); + if ( is_array($erg) ) + return $erg; + + + $t = new TextElement($text); + $elements[] = $t; + + return $elements; + } + + + + function renderElement( $child ) + { + switch( $this->type ) + { + case 'html': + + $attr = array(); + $val = ''; + $praefix = ''; + $suffix = ''; + + if ( count($child->children) > 0 ) + { + $subChild1 = $child->children[0]; + + if ( !empty($subChild1->class) ) + $attr['class'] = $subChild1->class; + + if ( !empty($subChild1->style) ) + $attr['style'] = $subChild1->style; + + if ( !empty($subChild1->title) ) + $attr['title'] = $subChild1->title; + } + + switch( strtolower(get_class($child)) ) + { + case 'textelement': + $tag = ''; +// $tag = 'span'; + $val = $child->text; + break; + + case 'codeelement': + $tag = 'pre'; + break; + + case 'quoteelement': + $tag = 'blockquote'; + break; + + + case 'paragraphelement': + $tag = 'p'; + break; + + case 'paragraphelement': + $tag = 'p'; + break; + + case 'speechelement': + $tag = 'cite'; + $praefix = '&bdquo;'; + $suffix = '&ldquo;'; + break; + + case 'linebreakelement': + $tag = 'br'; + break; + + case 'linkelement': + $tag = 'a'; + $attr['href'] = htmlspecialchars($child->getUrl()); + break; + + case 'imageelement': + $attr['alt'] = ''; + + if ( empty($attr['title']) ) + { + $tag = 'img'; + $attr['src'] = $child->getUrl(); + $attr['border'] = '0'; + } + else + { + $tag = 'dl'; + + if ( empty($attr['class']) ) + $attr['class'] = "image"; + + $child->children = array(); + $dt = new DefinitionListItemElement(); + $dt->children[] = new TextElement('(image)'); + $dt->children[] = $child; + $child->children[] = $dt; + + $dd = new DefinitionListEntryElement(); + $dd->children[] = new TextElement('(image)'); + $dd->children[] = new TextElement($attr['title']); + $child->children[] = $dd; + } + break; + + case 'strongelement': + $tag = 'strong'; + break; + + case 'emphaticelement': + $tag = 'em'; + break; + + case 'insertedelement': + $tag = 'ins'; + break; + + case 'removedelement': + $tag = 'del'; + break; + + case 'headlineelement': + $tag = 'h'.$child->level; + break; + + case 'tableelement': + $tag = 'table'; + break; + + case 'tablelineelement': + $tag = 'tr'; + break; + + case 'definitionlistelement': + $tag = 'dl'; + break; + + case 'definitionlistitemelement': + $tag = 'dt'; + break; + + case 'definitionlistentryelement': + $tag = 'dd'; + break; + + case 'tablecellelement': + if ( $child->isHeading ) + $tag = 'th'; else $tag = 'td'; + + if ( $child->rowSpan > 1 ) + $attr['rowspan'] = $child->rowSpan; + if ( $child->colSpan > 1 ) + $attr['colspan'] = $child->colSpan; + break; + + case 'listelement': + $tag = 'ul'; + break; + + case 'teletypeelement': + $tag = 'code'; + break; + + case 'numberedlistelement': + $tag = 'ol'; + break; + + case 'listentryelement': + $tag = 'li'; + break; + + default: + + $tag = 'unknown-element'; + $attr['class'] = strtolower(get_class($child)); + break; + } + + $val .= $praefix; + foreach( $child->children as $c ) + { + $val .= $this->renderElement( $c ); + } + + $val .= $suffix; +// echo "text:$val"; + return $this->renderHtmlElement($tag,$val,$attr); + + case 'text': + $className = strtolower(get_class($child)); + $val = ''; + + if ( $className == 'textelement' ) + $val .= $child->text; + + foreach( $child->children as $c ) + { + $val .= $this->renderElement( $c ); + } + + return $val; + + default: + die( 'unknown document type: '.$this->type ); + } + + } + + + + function render( $type='txt' ) + { + if ( $type == 'text' || + $type == 'txt' || + $type == 'ascii' ) + $type = 'text'; + + if ( $type == 'xhtml' || + $type == 'html' || + $type == '' || + $type == 'htm' || + $type == 'xml' ) + $type = 'html'; + + $this->type = $type; + $this->renderedText = ''; + + foreach( $this->children as $child ) + $this->renderedText .= $this->renderElement( $child ); + + return $this->renderedText; + } + + + + function renderHtmlElement( $tag,$value,$attr=array() ) + { + if ( $tag == '' ) + return $value; + + $val = '<'.$tag; + foreach( $attr as $attrName=>$attrInhalt ) + { + $val .= ' '.$attrName.'="'.$attrInhalt.'"'; + } + + if ( $value == '' ) + { + // Inhalt ist leer, also Kurzform verwenden. + $val .= ' />'; + return $val; + } + + $val .= '>'.$value.'</'.$tag.'>'; + return $val; + } + +} + +?>+ \ No newline at end of file diff --git a/textClasses/EmphaticElement.class.php b/textClasses/EmphaticElement.class.php @@ -0,0 +1,22 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class EmphaticElement extends AbstractElement +{ + function render( $type ) + { + switch( $type ) + { + case 'html': + return '<p>'.$this->value.'</p>'; + default: + return $this->value; + } + } +} + +?>+ \ No newline at end of file diff --git a/textClasses/FootnoteElement.class.php b/textClasses/FootnoteElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class DefinitionListElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/HeadlineElement.class.php b/textClasses/HeadlineElement.class.php @@ -0,0 +1,21 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class HeadlineElement extends AbstractElement +{ + /** + * Konstruktor. + */ + function HeadlineElement( $level=1 ) + { + $this->level = $level; + } + + var $level = 1; +} + +?>+ \ No newline at end of file diff --git a/textClasses/ImageElement.class.php b/textClasses/ImageElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class ImageElement extends LinkElement +{ + var $description; +} + +?>+ \ No newline at end of file diff --git a/textClasses/InsertedElement.class.php b/textClasses/InsertedElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class InsertedElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/LineBreakElement.class.php b/textClasses/LineBreakElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class LineBreakElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/LinkElement.class.php b/textClasses/LinkElement.class.php @@ -0,0 +1,98 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class LinkElement extends AbstractElement +{ + var $target; + var $mail; + var $protocol = ''; + var $objectId = 0; + var $user = ''; + var $password = ''; + var $host = ''; + var $port = ''; + var $query = ''; + var $fragment = ''; + var $path = ''; + + function setTarget( $target ) + { +// $target = urlencode($target); + $this->target = $target; + + $url = parse_url( $target ); + +// echo "<pre>url:"; +// print_r($url); +// echo "</pre>"; + + $this->protocol = @$url['scheme']; + $this->user = @$url['user' ]; + $this->password = @$url['pass' ]; + $this->host = @$url['host' ]; + $this->port = @$url['port' ]; + $this->path = @$url['path' ]; + $this->query = @$url['query' ]; + $this->fragment = @$url['fragment']; + + if ( $this->protocol == 'object' ) + $this->objectId = intval($url['host']); + + + if ( $this->protocol == '' ) + { + if ( strpos($target,'@') !== false ) + { + $this->protocol = 'mailto'; + $this->mail = $this->target; + } + + // "..."->"123" + if ( intval($url['path']) > 0 ) + { + $this->protocol = 'object'; + $this->objectId = intval($url['path']); + } + } + +// echo "<pre>"; +// print_r($this); +// echo "</pre>"; + } + + + function getUrl() + { + $url = ''; + $url .= $this->protocol.'://'; + if ( $this->user != '' ) + { + $url .= $this->user; + if ( $this->password != '' ) + { + $url .= ':'.$this->password; + } + $url .= '@'; + } + + $url .= $this->host; + if ( $this->port != '' ) + $url .= ':'.$this->host; + + $url .= $this->path; + + if ( $this->query != '' ) + $url .= '?'.$this->query; + + if ( $this->fragment != '' ) + $url .= '#'.$this->fragment; + + return $url; + } +} + +?>+ \ No newline at end of file diff --git a/textClasses/ListElement.class.php b/textClasses/ListElement.class.php @@ -0,0 +1,14 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class ListElement extends AbstractElement +{ + + +} + +?>+ \ No newline at end of file diff --git a/textClasses/ListEntryElement.class.php b/textClasses/ListEntryElement.class.php @@ -0,0 +1,12 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class ListEntryElement extends AbstractElement +{ +} + +?>+ \ No newline at end of file diff --git a/textClasses/NumberedListElement.class.php b/textClasses/NumberedListElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class NumberedListElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/ParagraphElement.class.php b/textClasses/ParagraphElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class ParagraphElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/QuoteElement.class.php b/textClasses/QuoteElement.class.php @@ -0,0 +1,12 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class QuoteElement extends AbstractElement +{ +} + +?>+ \ No newline at end of file diff --git a/textClasses/RemovedElement.class.php b/textClasses/RemovedElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class RemovedElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/SpeechElement.class.php b/textClasses/SpeechElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class SpeechElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/StrongElement.class.php b/textClasses/StrongElement.class.php @@ -0,0 +1,27 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class StrongElement extends AbstractElement +{ + function render( $type ) + { + switch( $type ) + { + case 'html': + return '<p>'.$this->value.'</p>'; + default: + return $this->value; + } + } + + + + var $markup = array( 'beginswith' =>'*' , + 'endswith'=>'*' ); +} + +?>+ \ No newline at end of file diff --git a/textClasses/TableCellElement.class.php b/textClasses/TableCellElement.class.php @@ -0,0 +1,15 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class TableCellElement extends AbstractElement +{ + var $rowSpan = 1; + var $colSpan = 1; + var $isHeading = false; +} + +?>+ \ No newline at end of file diff --git a/textClasses/TableElement.class.php b/textClasses/TableElement.class.php @@ -0,0 +1,22 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class TableElement extends AbstractElement +{ + function render( $type ) + { + switch( $type ) + { + case 'html': + return '<p>'.$this->value.'</p>'; + default: + return $this->value; + } + } +} + +?>+ \ No newline at end of file diff --git a/textClasses/TableLineElement.class.php b/textClasses/TableLineElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class TableLineElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/TableOfContentElement.class.php b/textClasses/TableOfContentElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class TableOfContentElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/TeletypeElement.class.php b/textClasses/TeletypeElement.class.php @@ -0,0 +1,13 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class TeletypeElement extends AbstractElement +{ + +} + +?>+ \ No newline at end of file diff --git a/textClasses/TextElement.class.php b/textClasses/TextElement.class.php @@ -0,0 +1,63 @@ +<?php + +/** + * @author $Author$ + * @version $Revision$ + * @package openrat.text + */ +class TextElement extends AbstractElement +{ + var $text = ''; + + function TextElement( $t='' ) + { + $this->text = $t; + + $this->parseStyleClass(); + $this->parseTitleText(); + } + + + function parseStyleClass() + { + $char1 = substr($this->text,0,1); + if ( $char1 == "(" ) + { + $pos2 = strpos($this->text,")",2); + if ( $pos2 !== false ) + { + $this->style = substr($this->text,1,$pos2-1); + $this->text = substr($this->text,$pos2+1); + + // Wenn kein Doppelpunkt in den Styleangaben vorkommt, dann + // handelt es sich um einen Klassennamen. + if ( strpos($this->style,':') === false ) + { + $this->class = $this->style; + $this->style = ''; + } + } + } + } + + + + function parseTitleText() + { + $char1 = substr($this->text,0,1); + if ( $char1 == "'" ) + { + $pos2 = strpos($this->text,"'",2); + echo "aklsjflaskjd:$pos2"; + if ( $pos2 !== false ) + { + $this->title = substr($this->text,1,$pos2-1); + $this->text = substr($this->text,$pos2+1); + } + } + } + + +} + +?>+ \ No newline at end of file diff --git a/textClasses/include.inc.php b/textClasses/include.inc.php @@ -0,0 +1,30 @@ +<?php + +require_once( OR_TEXTCLASSES_DIR."AbstractElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."QuoteElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."CodeElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."DocumentElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."EmphaticElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."HeadlineElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."LineBreakElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."LinkElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."ImageElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."TeletypeElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."SpeechElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."ListElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."ListEntryElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."NumberedListElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."ParagraphElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."StrongElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."TableElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."TableLineElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."TableCellElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."TableOfContentElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."TextElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."DefinitionListElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."DefinitionListItemElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."DefinitionListEntryElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."InsertedElement.class.".PHP_EXT ); +require_once( OR_TEXTCLASSES_DIR."RemovedElement.class.".PHP_EXT ); + +?>+ \ No newline at end of file