1<?php 2if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../../').'/'); 3if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 4require_once(DOKU_PLUGIN.'syntax.php'); 5 6class syntax_plugin_zul_zirkelundlineal extends DokuWiki_Syntax_Plugin { 7 /* 8 <applet 9 code="rene.zirkel.ZirkelApplet.class" 10 archive="zirkel.jar" 11 width="551" height="359"> 12 <param name="file" value="einheitsvektor.zir"> 13 </applet> 14*/ 15 16 var $dflt = array( 17 'name' => '', // Name der Konstruktionsdatei 18 'width' => 551, 19 'height' => 359, 20 'demo' => '',#true', // Selbstablaufende Demo (siehe unten) 21 'edit' => '',#false', Damit werden auch eingebettete Stile edierbar 22 23 'style' => '', // Applet-Stil ("plain", "full", "3D", "nonvisual", "icons", "breaks") 24 'editdigits' => '', //Nachkommastellen in Dialogen 25 'displaydigits' => '', // Nachkommastellen in Größenanzeigen 26 'angledigits' => '', // Nachkommastellen bei Winkeln 27 'movefixname' => 'false', // Zeige Namen von fixen Objekten 28 'grid' => '', // Gitterstil ("none","coordinates","normal") 29 'font' => '', // Kann "bold" und "large" enthalten 30 'color' => '255 255 255', // Setzt die Hintergrundfarbe für das Applet in der Form "255,255,255" oder "#FFFFFF". 31 'colorbackground' => '', // Setzt die Hintergrundfarbe für Dialoge etc. 32 'colorselect' => '', // Farbe für selektierte Objekte 33 'colortarget' => '', // Farbe für Zielobjekte 34// 'colornochecktarget' => '', 35 36 'tools' => '', // Enthält die Strings für die Werkzeuge (s.u.) 37 'options' => '', // Enthält Strings für die Optionen (s.u.) 38 'job' => '', //another "file" Name der Aufgabendatei 39// 'track' => '', 40 'smallicons' => '', // Kleine Icons verwenden. 41 42 'language' => 'de', // Spracheinstellung ("de","en", etc.) 43 'color1' => '', 44 'color2' => '', // Setzt die Farben für die Objekte 45 'arrowsize' => '', // Setzt die Größe der Pfeile 46 'intersection' => '', // Frägt vor Schnitten 47 'pointon' => '', // Frägt vor Punkten auf Objekten 48 'choice' => '', // Stellt den Wahldialog an 49 'showhidden' => '', // Versteckte Objekte werden angezeigt 50 'movename' => '', // Zeige Namen bei Bewegungen an 51 'minpointsize' => '', // Minimale Punktgröße 52 'minfontsize' => '', // Minimale Zeichengröße 53 'interactive' => '', // Verhindere Benutzereingaben, wenn "false" 54 'snap' => '', // "left" schnappt mit der linken Maustaste ein. 55 'nomousezoom' => '', // Verhindert verschieben oder Zoomen mit der Maus. 56 'nopopupmenu' => '', // Verhindert die Popupmenus. 57 'jumptostart' => '', // Springt zum Anfang, bzw. zum ersten Haltepunkt 58 'noconfirmation' => '', // Zeigt keine Bestätigung nach dem Lösen der Aufgabe 59 'restrictedmove' => '', // Erlaubt nur Bewegungen, bei denen keine Punkte ungültig werden. das funktioniert wie beim automatischen Ortslinienwerkzeug, 60 'shadow' => '', // Schaltet den Schatten an oder aus ("true" oder "false") 61 'shadowcolor' => '', // Farbe für den Hintergrund, auf den der Schatten geworfen wird. 62 ); 63 64 /** 65 * return some info 66 */ 67 function getInfo(){ 68 return array( 69 'author' => 'jaloma', 70 'email' => 'jaloma.ac@googlemail.com', 71 'date' => '05/11/2008', 72 'name' => 'ZirkelUndLineal Plugin', 73 'desc' => 'Include ZirkelUndLineal-Files to your Wiki with <ZirkelUndLineal name="" width="" height="">. See http://www.geogebra.org/source/program/applet/geogebra_applet_param.html', 74 'url' => 'http://jaloma.ac.googlepages.com/plugin:ZirkelUndLineal' 75 ); 76 } 77 78 /** 79 * Plugin Type 80 */ 81 82 function getType(){ return 'substition'; } 83 function getSort(){ return 316; } 84 function connectTo($mode) { 85 $this->Lexer->addSpecialPattern("<ZirkelUndLineal.*?/>",$mode,'plugin_zul_zirkelundlineal'); 86 } 87 88 function matchLength() { 89 return strlen("<ZirkelUndLineal "); 90 } 91 92 function handle($match, $state, $pos, &$handler){ 93 // strip markup 94 $match = html_entity_decode(substr($match,$this->matchLength(),-2)); 95 $gmap = $this->_extract_params($match); 96 return $gmap; 97 } 98 99 /** 100 * extract parameters for the gmsdisplay from the parameter string 101 * 102 * @param string $str_params string of key="value" pairs 103 * @return array associative array of parameters key=>value 104 */ 105 function _extract_params($str_params) { 106 $param = array(); 107 preg_match_all('/(\w*)="(.*?)"/us',$str_params,$param,PREG_SET_ORDER); 108 if (sizeof($param) == 0) { 109 preg_match_all("/(\w*)='(.*?)'/us",$str_params,$param,PREG_SET_ORDER); 110 } 111 // parse match for instructions, break into key value pairs 112 $gmap = $this->dflt; 113 foreach($param as $kvpair) { 114 list($match,$key,$val) = $kvpair; 115 if (isset($gmap[$key])) $gmap[$key] = $val; 116 } 117 118 return $gmap; 119 } 120 121/** 122 * Create output 123 */ 124 function render($mode, &$renderer, $data) { 125 if($mode == 'xhtml'){ 126 $renderer->doc .= $this->_contact($data); 127 return true; 128 } 129 return false; 130 } 131 132 function getCode() { 133 return "rene.zirkel.ZirkelApplet.class"; 134 } 135 function getArchive() { 136 return "zirkel.jar"; 137 } 138 139 function _contact($data){ 140 global $conf; 141 $file = $data['name']; 142 $hasfile = $file != null && $file != ''; 143 $file = $conf['savedir'] . '/media/' . str_replace( ":", "/", $file ); 144// echo $file.'<br/>'; 145 146 $width = $data['width']; 147 $height = $data['height']; 148 149 $style = $data['style']; 150 $editdigits = $data['editdigits']; 151 $displaydigits = $data['displaydigits']; 152 $angledigits = $data['angledigits']; 153 $movefixname = $data['movefixname']; 154 $grid = $data['grid']; 155 $font = $data['font']; 156 $color = $data['color']; 157 $colorbackground = $data['colorbackground']; 158 $colorselect = $data['colorselect']; 159 $colortarget = $data['colortarget']; 160 $colornochecktarget = $data['colornochecktarget']; 161 $language = $data['language']; 162 163 $tools = $data['tools']; 164 $options = $data['options']; 165 $job = $data['job']; 166 $track = $data['track']; 167 $smallicons = $data['smallicons']; 168 $demo = $data['demo']; 169 $edit = $data['edit']; 170 171 $color1 = $data['color1']; 172 $color2 = $data['color2']; 173 $arrowsize = $data['arrowsize']; 174 $intersection = $data['intersection']; 175 $pointon = $data['pointon']; 176 $choice = $data['choice']; 177 $showhidden = $data['showhidden']; 178 $movename = $data['movename']; 179 $minpointsize = $data['minpointsize']; 180 $minfontsize = $data['minfontsize']; 181 $interactive = $data['interactive']; 182 $snap = $data['snap']; 183 $nomousezoom = $data['nomousezoom']; 184 $nopopupmenu = $data['nopopupmenu']; 185 $jumptostart = $data['jumptostart']; 186 $noconfirmation = $data['noconfirmation']; 187 $restrictedmove = $data['restrictedmove']; 188 $shadow = $data['shadow']; 189 $shadowcolor = $data['shadowcolor']; 190 191 192 $txt = ""; 193 $archive = $this->getConf('jarbase').'/'.$this->getArchive(); 194 $txt .= '<applet'. 195 ' code="'.$this->getCode().'"'. 196 ' archive="'.$archive.'"'. 197 ' width="'.$width.'" height="'.$height.'">'; 198 if ($hasfile != '') { 199 $txt .= '<param name="file" value="'.$file.'"/>'; 200 } 201 202 if ($style != '') { 203 $txt .= '<param name="style" value="'.$style.'"/>'; 204 } 205 if ($editdigits != '') { 206 $txt .= '<param name="editdigits" value="'.$editdigits.'"/>'; 207 } 208 if ($displaydigits != '') { 209 $txt .= '<param name="displaydigits" value="'.$displaydigits.'"/>'; 210 } 211 if ($angledigits != '') { 212 $txt .= '<param name="angledigits" value="'.$angledigits.'"/>'; 213 } 214 if ($movefixname != '') { 215 $txt .= '<param name="movefixname" value="'.$movefixname.'"/>'; 216 } 217 if ($grid != '') { 218 $txt .= '<param name="grid" value="'.$grid.'"/>'; 219 } 220 if ($font != '') { 221 $txt .= '<param name="font" value="'.$font.'"/>'; 222 } 223 if ($color != '') { 224 $txt .= '<param name="color" value="'.$color.'"/>'; 225 } 226 if ($demo != '') { 227 $txt .= '<param name="demo" value="'.$demo.'"/>'; 228 } 229 if ($edit != '') { 230 $txt .= '<param name="edit" value="'.$edit.'"/>'; 231 } 232 if ($colorbackground != '') { 233 $txt .= '<param name="colorbackground" value="'.$colorbackground.'"/>'; 234 } 235 if ($colorselect != '') { 236 $txt .= '<param name="colorselect" value="'.$colorselect.'"/>'; 237 } 238 if ($colortarget != '') { 239 $txt .= '<param name="colortarget" value="'.$colortarget.'"/>'; 240 } 241 if ($colornochecktarget != '') { 242 $txt .= '<param name="colornochecktarget" value="'.$colornochecktarget.'"/>'; 243 } 244 245 246 if ($tools != '') { 247 $txt .= '<param name="tools" value="'.$tools.'"/>'; 248 } 249 if ($options != '') { 250 $txt .= '<param name="options" value="'.$options.'"/>'; 251 } 252 if ($job != '') { 253 $txt .= '<param name="job" value="'.$job.'"/>'; 254 } 255 if ($track != '') { 256 $txt .= '<param name="track" value="'.$track.'"/>'; 257 } 258 if ($smallicons != '') { 259 $txt .= '<param name="smallicons" value="'.$smallicons.'"/>'; 260 } 261 262 if ($language != '') { 263 $txt .= '<param name="language" value="'.$language.'"/>'; 264 } 265 266 if ($color1 != '') { 267 $txt .= '<param name="color1" value="'.$color1.'"/>'; 268 } 269 if ($color2 != '') { 270 $txt .= '<param name="color2" value="'.$color2.'"/>'; 271 } 272 if ($arrowsize != '') { 273 $txt .= '<param name="arrowsize" value="'.$arrowsize.'"/>'; 274 } 275 if ($intersection != '') { 276 $txt .= '<param name="intersection" value="'.$intersection.'"/>'; 277 } 278 if ($pointon != '') { 279 $txt .= '<param name="pointon" value="'.$pointon.'"/>'; 280 } 281 if ($choice != '') { 282 $txt .= '<param name="choice" value="'.$choice.'"/>'; 283 } 284 if ($showhidden != '') { 285 $txt .= '<param name="showhidden" value="'.$showhidden.'"/>'; 286 } 287 if ($movename != '') { 288 $txt .= '<param name="movename" value="'.$movename.'"/>'; 289 } 290 if ($minpointsize != '') { 291 $txt .= '<param name="minpointsize" value="'.$minpointsize.'"/>'; 292 } 293 if ($minfontsize != '') { 294 $txt .= '<param name="minfontsize" value="'.$minfontsize.'"/>'; 295 } 296 if ($interactive != '') { 297 $txt .= '<param name="interactive" value="'.$interactive.'"/>'; 298 } 299 if ($snap != '') { 300 $txt .= '<param name="snap" value="'.$snap.'"/>'; 301 } 302 if ($nomousezoom != '') { 303 $txt .= '<param name="nomousezoom" value="'.$nomousezoom.'"/>'; 304 } 305 if ($nopopupmenu != '') { 306 $txt .= '<param name="nopopupmenu" value="'.$nopopupmenu.'"/>'; 307 } 308 if ($jumptostart != '') { 309 $txt .= '<param name="jumptostart" value="'.$jumptostart.'"/>'; 310 } 311 if ($noconfirmation != '') { 312 $txt .= '<param name="noconfirmation" value="'.$noconfirmation.'"/>'; 313 } 314 if ($restrictedmove != '') { 315 $txt .= '<param name="restrictedmove" value="'.$restrictedmove.'"/>'; 316 } 317 318 if ($shadow != '') { 319 $txt .= '<param name="shadow" value="'.$shadow.'"/>'; 320 } 321 if ($shadowcolor != '') { 322 $txt .= '<param name="shadowcolor" value="'.$shadowcolor.'"/>'; 323 } 324 $txt .= 'Please <a href="http://www.java.com">install Java 1.4.2</a> (or later) to use this page.'. 325 '</applet>'; 326 $txt .= '<br />'; 327 if ($this->getConf('showHelpUrl')) { 328// $txt .= '<a href="http://www.geogebra.org/help/docude/" target="help_geogebra">Online-Hilfe</a> —'; 329 } 330 if ($this->getConf('showDownloadUrl') && $hasfile) { 331 $txt .= ' <a href="'.$file.'">Download</a> —'; 332 } 333 $user = $_SERVER['REMOTE_USER']; 334 $txt .= ' Erstellt mit © <a href="http://mathsrv.ku-eichstaett.de/MGF/homes/grothman/java/zirkel/" target="zirkelundlineal">ZirkelUndLineal</a> durch '.$user; 335 return $txt; 336 } 337 338}//class 339