/
syntax.php
113 lines (91 loc) · 2.84 KB
/
syntax.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
/**
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');
/**
* All DokuWiki plugins to extend the parser/rendering mechanism
* need to inherit from this class
*/
class syntax_plugin_flash extends DokuWiki_Syntax_Plugin {
/**
* return some info
*/
function getInfo(){
return confTohash(dirname(__FILE__).'/plugin.info.txt');
}
/**
* What kind of syntax are we?
*/
function getType(){
return 'substition';
}
function getPType(){
return 'block';
}
/**
* Where to sort in?
*/
function getSort(){
return 160;
}
/**
* Connect pattern to lexer
*/
function connectTo($mode) {
$this->Lexer->addSpecialPattern('<flash.*?>\n.*?\n</flash>',$mode,'plugin_flash');
}
/**
* Handle the match
*/
function handle($match, $state, $pos, Doku_Handler $handler){
// prepare default data
$return = array(
'data' => $data,
'width' => 425,
'height' => 350,
'align' => 'center',
);
// prepare input
$lines = explode("\n",$match);
$conf = array_shift($lines);
$conf = substr($conf,6,-1);
array_pop($lines);
// parse adhoc configs
if(preg_match('/\b(left|center|right)\b/i',$conf,$match)) $return['align'] = $match[1];
if(preg_match('/\b(\d+)x(\d+)\b/',$conf,$match)){
$return['width'] = $match[1];
$return['height'] = $match[2];
}
// strip configs to find swf
$conf = preg_replace('/\b(left|center|right|(\d+)x(\d+))\b/i','',$conf);
$conf = trim($conf);
$return['swf'] = ml($conf,'',true,'&');
// parse parameters
$return['data'] = linesToHash($lines);
foreach($return['data'] as $key => $val){
if($key{0} == '!') {
$return['data'][substr($key,1)] = ml($val,'',true,'&');
unset($return['data'][$key]);
}
}
return $return;
}
/**
* Create output
*/
function render($mode, Doku_Renderer $R, $data) {
if($mode != 'xhtml') return false;
$att = array();
$att['class'] = 'media'.$data['align'];
if($data['align'] == 'right') $att['align'] = 'right';
if($data['align'] == 'left') $att['align'] = 'left';
$R->doc .= html_flashobject($data['swf'],$data['width'],$data['height'],$data['data'],$data['data'],$att);
return true;
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :