DocBookRenderer.class.php
gehe zur Dokumentation dieser Datei00001 <?php
00002
00015 class DocBookRenderer
00016 {
00017 var $linkedObjectIds = array();
00018 var $encodeHtml = false;
00019
00020
00027 function renderElement( $child )
00028 {
00029 global $conf;
00030
00031 $attr = array();
00032 $val = '';
00033 $praefix = '';
00034 $suffix = '';
00035 $empty = false;
00036
00037 switch( strtolower(get_class($child)) )
00038 {
00039 case 'tableofcontentelement':
00040 $tag = 'toc';
00041 break;
00042
00043 case 'rawelement':
00044 $tag = '';
00045 $val = $child->src;
00046
00047 break;
00048
00049 case 'textelement':
00050 $tag = 'para';
00051
00052 $val = $child->text;
00053 $val = Text::encodeHtml( $val );
00054 $val = Text::replaceHtmlChars( $val );
00055 break;
00056
00057 case 'footnoteelement':
00058 $tag = 'footnote';
00059 break;
00060
00061 case 'codeelement':
00062
00063 $tag = 'emphasis';
00064 $attr['role'] = 'code';
00065 break;
00066
00067 case 'quoteelement':
00068 $tag = 'blockquote';
00069 break;
00070
00071
00072 case 'paragraphelement':
00073 $tag = 'para';
00074 break;
00075
00076 case 'speechelement':
00077 $tag = 'citiation';
00078 break;
00079
00080 case 'linebreakelement':
00081 $tag = '';
00082 $val = "\n";
00083 break;
00084
00085 case 'linkelement':
00086 $tag = 'ulink';
00087 $attr['url'] = htmlspecialchars($child->getUrl());
00088 break;
00089
00090 case 'imageelement':
00091 $empty = true;
00092 $tag = 'graphic';
00093 $attr['fileref'] = $child->getUrl();
00094 break;
00095
00096 case 'strongelement':
00097 $tag = 'emphasis';
00098 $attr['role'] = 'strong';
00099 break;
00100
00101 case 'emphaticelement':
00102 $tag = 'emphasis';
00103 $attr['role'] = 'italic';
00104 break;
00105
00106 case 'insertedelement':
00107 $tag = 'emphasis';
00108 $attr['role'] = 'inserted';
00109 break;
00110
00111 case 'removedelement':
00112 $tag = 'emphasis';
00113 $attr['role'] = 'removed';
00114 break;
00115
00116 case 'headlineelement':
00117 $tag = 'chapter';
00118
00119 $l = new LinkElement();
00120 $l->name = $child->getName();
00121 $child->children[] = $l;
00122
00123 break;
00124
00125 case 'tableelement':
00126 $tag = 'table';
00127 break;
00128
00129 case 'tablelineelement':
00130 $tag = 'row';
00131 break;
00132
00133 case 'definitionlistelement':
00134 $tag = 'variablelist';
00135 break;
00136
00137 case 'definitionitemelement':
00138 if ( !empty($child->key) )
00139 {
00140 $tag = 'listitem';
00141 $val = $child->key;
00142 }
00143 else
00144 {
00145 $tag = 'term';
00146 }
00147 break;
00148
00149 case 'tablecellelement':
00150
00151 $tag = 'entry';
00152 break;
00153
00154 case 'listelement':
00155 $tag = 'itemizedlist';
00156 break;
00157
00158 case 'teletypeelement':
00159 $tag = 'emphasis';
00160 $attr['role'] = 'code';
00161 break;
00162
00163 case 'numberedlistelement':
00164 $tag = 'orderedlist';
00165 break;
00166
00167 case 'listentryelement':
00168 $tag = 'listitem';
00169 break;
00170
00171 default:
00172
00173 $tag = 'unknown-element';
00174 $attr['class'] = strtolower(get_class($child));
00175 break;
00176 }
00177
00178 $val .= $praefix;
00179 foreach( $child->children as $c )
00180 {
00181 $val .= $this->renderElement( $c );
00182 }
00183
00184 $val .= $suffix;
00185 return $this->renderXmlElement($tag,$val,$empty,$attr);
00186
00187 }
00188
00189
00190
00200 function renderXmlElement( $tag,$value,$empty,$attr=array() )
00201 {
00202 global $conf;
00203 if ( $tag == '' )
00204 return $value;
00205
00206 $val = '<'.$tag;
00207 foreach( $attr as $attrName=>$attrInhalt )
00208 {
00209 $val .= ' '.$attrName.'="'.$attrInhalt.'"';
00210 }
00211
00212 if ( $value == '' && $empty )
00213 {
00214 $val .= ' />';
00215 return $val;
00216 }
00217
00218 $val .= '>'.$value.'</'.$tag.'>';
00219 return $val;
00220 }
00221
00222
00223
00229 function render()
00230 {
00231 $this->renderedText = '';
00232 $this->renderedText .= '<?xml version="1.0" encoding="UTF-8" ?>';
00233 $this->renderedText .= '<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">';
00234
00235 foreach( $this->children as $child )
00236 $this->renderedText .= $this->renderElement( $child );
00237
00238 return $this->renderedText;
00239 }
00240 }
00241
00242 ?>