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> &mdash;';
329		}
330		if ($this->getConf('showDownloadUrl') && $hasfile) {
331			$txt .= ' <a href="'.$file.'">Download</a> &mdash;';
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