rev |
line source |
slaxemulator@14
|
1 <?php
|
slaxemulator@14
|
2 /**
|
slaxemulator@14
|
3 * Add Note capability to dokuwiki
|
slaxemulator@14
|
4 *
|
slaxemulator@14
|
5 * <note>This is note</note>
|
slaxemulator@14
|
6 * <note classic>This is note</note>
|
slaxemulator@14
|
7 * <note important>This is an important note</note>
|
slaxemulator@14
|
8 * <note warning>This is a big warning</note>
|
slaxemulator@14
|
9 * <note tip>This is a tip</note>
|
slaxemulator@14
|
10 *
|
slaxemulator@14
|
11 * by Olivier Cortès <olive@deep-ocean.net>
|
slaxemulator@14
|
12 * under the terms of the GNU GPL v2.
|
slaxemulator@14
|
13 *
|
slaxemulator@14
|
14 * Originaly derived from the work of :
|
slaxemulator@14
|
15 * Stephane Chamberland <stephane.chamberland@ec.gc.ca> (Side Notes PlugIn)
|
slaxemulator@14
|
16 * Carl-Christian Salvesen <calle@ioslo.net> (Graphviz plugin)
|
slaxemulator@14
|
17 *
|
slaxemulator@14
|
18 * Contributions by Eric Hameleers <alien [at] slackware [dot] com> :
|
slaxemulator@14
|
19 * use <div> instead of <table>,
|
slaxemulator@14
|
20 * contain the images and stylesheet inside the plugin,
|
slaxemulator@14
|
21 * permit nesting of notes,
|
slaxemulator@14
|
22 *
|
slaxemulator@14
|
23 * Contributed by Christopher Smith <chris [at] jalakai [dot] co [dot] uk>
|
slaxemulator@14
|
24 * fix some parsing problems and a security hole.
|
slaxemulator@14
|
25 * make note types case independent
|
slaxemulator@14
|
26 * simplify code reading
|
slaxemulator@14
|
27 * modernise the plugin for changes/fixes/improvements to the underlying Dokuwiki plugin class,
|
slaxemulator@14
|
28 * improve efficiency.
|
slaxemulator@14
|
29 *
|
slaxemulator@14
|
30 * Contributed by Aurélien Bompard <aurelien [at] bompard [dot] org>
|
slaxemulator@14
|
31 * support for the ODT output format.
|
slaxemulator@14
|
32 *
|
slaxemulator@14
|
33 * @license GNU_GPL_v2
|
slaxemulator@14
|
34 * @author Olivier Cortes <olive@deep-ocean.net>
|
slaxemulator@14
|
35 */
|
slaxemulator@14
|
36
|
slaxemulator@14
|
37 if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
|
slaxemulator@14
|
38 if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
|
slaxemulator@14
|
39 require_once(DOKU_PLUGIN.'syntax.php');
|
slaxemulator@14
|
40
|
slaxemulator@14
|
41
|
slaxemulator@14
|
42 class syntax_plugin_note extends DokuWiki_Syntax_Plugin {
|
slaxemulator@14
|
43
|
slaxemulator@14
|
44 var $notes = array(
|
slaxemulator@14
|
45 'noteimportant' => array('important', 'importante'),
|
slaxemulator@14
|
46 'notewarning' => array('warning','bloquante','critique'),
|
slaxemulator@14
|
47 'notetip' => array('tip','tuyau','idée'),
|
slaxemulator@14
|
48 'noteclassic' => array('','classic','classique')
|
slaxemulator@14
|
49 );
|
slaxemulator@14
|
50
|
slaxemulator@14
|
51 var $default = 'noteclassic';
|
slaxemulator@14
|
52
|
slaxemulator@14
|
53 function getInfo(){
|
slaxemulator@14
|
54 return confToHash(dirname(__FILE__).'/info.txt');
|
slaxemulator@14
|
55 }
|
slaxemulator@14
|
56
|
slaxemulator@14
|
57
|
slaxemulator@14
|
58 function getType(){ return 'container'; }
|
slaxemulator@14
|
59 function getPType(){ return 'normal'; }
|
slaxemulator@14
|
60 function getAllowedTypes() {
|
slaxemulator@14
|
61 return array('container','substition','protected','disabled','formatting','paragraphs');
|
slaxemulator@14
|
62 }
|
slaxemulator@14
|
63 function getSort(){ return 195; }
|
slaxemulator@14
|
64
|
slaxemulator@14
|
65 // override default accepts() method to allow nesting
|
slaxemulator@14
|
66 // - ie, to get the plugin accepts its own entry syntax
|
slaxemulator@14
|
67 function accepts($mode) {
|
slaxemulator@14
|
68 if ($mode == substr(get_class($this), 7)) return true;
|
slaxemulator@14
|
69 return parent::accepts($mode);
|
slaxemulator@14
|
70 }
|
slaxemulator@14
|
71
|
slaxemulator@14
|
72 function connectTo($mode) {
|
slaxemulator@14
|
73 $this->Lexer->addEntryPattern('<note.*?>(?=.*?</note>)',$mode,'plugin_note');
|
slaxemulator@14
|
74 }
|
slaxemulator@14
|
75 function postConnect() {
|
slaxemulator@14
|
76 $this->Lexer->addExitPattern('</note>','plugin_note');
|
slaxemulator@14
|
77 }
|
slaxemulator@14
|
78
|
slaxemulator@14
|
79 function handle($match, $state, $pos, &$handler){
|
slaxemulator@14
|
80
|
slaxemulator@14
|
81 switch ($state) {
|
slaxemulator@14
|
82
|
slaxemulator@14
|
83 case DOKU_LEXER_ENTER :
|
slaxemulator@14
|
84 $note = strtolower(trim(substr($match,5,-1)));
|
slaxemulator@14
|
85
|
slaxemulator@14
|
86 foreach( $this->notes as $class => $names ) {
|
slaxemulator@14
|
87 if (in_array($note, $names))
|
slaxemulator@14
|
88 return array($state, $class);
|
slaxemulator@14
|
89 }
|
slaxemulator@14
|
90
|
slaxemulator@14
|
91 return array($state, $this->default);
|
slaxemulator@14
|
92
|
slaxemulator@14
|
93 case DOKU_LEXER_UNMATCHED :
|
slaxemulator@14
|
94 return array($state, $match);
|
slaxemulator@14
|
95
|
slaxemulator@14
|
96 default:
|
slaxemulator@14
|
97 return array($state);
|
slaxemulator@14
|
98 }
|
slaxemulator@14
|
99 }
|
slaxemulator@14
|
100
|
slaxemulator@14
|
101 function render($mode, &$renderer, $indata) {
|
slaxemulator@14
|
102
|
slaxemulator@14
|
103 if($mode == 'xhtml'){
|
slaxemulator@14
|
104
|
slaxemulator@14
|
105 list($state, $data) = $indata;
|
slaxemulator@14
|
106
|
slaxemulator@14
|
107 switch ($state) {
|
slaxemulator@14
|
108 case DOKU_LEXER_ENTER :
|
slaxemulator@14
|
109 $renderer->doc .= '<p><div class="'.$data.'">';
|
slaxemulator@14
|
110 break;
|
slaxemulator@14
|
111
|
slaxemulator@14
|
112 case DOKU_LEXER_UNMATCHED :
|
slaxemulator@14
|
113 $renderer->doc .= $renderer->_xmlEntities($data);
|
slaxemulator@14
|
114 break;
|
slaxemulator@14
|
115
|
slaxemulator@14
|
116 case DOKU_LEXER_EXIT :
|
slaxemulator@14
|
117 $renderer->doc .= "\n</div></p>";
|
slaxemulator@14
|
118 break;
|
slaxemulator@14
|
119 }
|
slaxemulator@14
|
120 return true;
|
slaxemulator@14
|
121
|
slaxemulator@14
|
122 } elseif ($mode == 'odt'){
|
slaxemulator@14
|
123
|
slaxemulator@14
|
124 list($state, $data) = $indata;
|
slaxemulator@14
|
125
|
slaxemulator@14
|
126 switch ($state) {
|
slaxemulator@14
|
127 case DOKU_LEXER_ENTER :
|
slaxemulator@14
|
128 $type = substr($data, 4);
|
slaxemulator@14
|
129 if ($type == "classic") {
|
slaxemulator@14
|
130 $type = "note"; // the icon for classic notes is named note.png
|
slaxemulator@14
|
131 }
|
slaxemulator@14
|
132 $colors = array("note"=>"#eeffff", "warning"=>"#ffdddd", "important"=>"#ffffcc", "tip"=>"#ddffdd");
|
slaxemulator@14
|
133 $renderer->autostyles["pluginnote"] = '
|
slaxemulator@14
|
134 <style:style style:name="pluginnote" style:family="table">
|
slaxemulator@14
|
135 <style:table-properties style:width="15cm" table:align="center" style:shadow="#808080 0.18cm 0.18cm"/>
|
slaxemulator@14
|
136 </style:style>';
|
slaxemulator@14
|
137 $renderer->autostyles["pluginnote.A"] = '
|
slaxemulator@14
|
138 <style:style style:name="pluginnote.A" style:family="table-column">
|
slaxemulator@14
|
139 <style:table-column-properties style:column-width="1.5cm"/>
|
slaxemulator@14
|
140 </style:style>';
|
slaxemulator@14
|
141 $renderer->autostyles["pluginnote.B"] = '
|
slaxemulator@14
|
142 <style:style style:name="pluginnote.B" style:family="table-column">
|
slaxemulator@14
|
143 <style:table-column-properties style:column-width="13.5cm"/>
|
slaxemulator@14
|
144 </style:style>';
|
slaxemulator@14
|
145 $renderer->autostyles["pluginnote".$type.".A1"] = '
|
slaxemulator@14
|
146 <style:style style:name="pluginnote'.$type.'.A1" style:family="table-cell">
|
slaxemulator@14
|
147 <style:table-cell-properties style:vertical-align="middle" fo:padding="0.1cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
|
slaxemulator@14
|
148 </style:style>';
|
slaxemulator@14
|
149 $renderer->autostyles["pluginnote".$type.".B1"] = '
|
slaxemulator@14
|
150 <style:style style:name="pluginnote'.$type.'.B1" style:family="table-cell">
|
slaxemulator@14
|
151 <style:table-cell-properties style:vertical-align="middle" fo:padding="0.3cm" fo:border-left="none" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
|
slaxemulator@14
|
152 </style:style>';
|
slaxemulator@14
|
153 // Content
|
slaxemulator@14
|
154 $renderer->p_close();
|
slaxemulator@14
|
155 $renderer->doc .= '<table:table table:name="" table:style-name="pluginnote">';
|
slaxemulator@14
|
156 $renderer->doc .= '<table:table-column table:style-name="pluginnote.A"/>';
|
slaxemulator@14
|
157 $renderer->doc .= '<table:table-column table:style-name="pluginnote.B"/>';
|
slaxemulator@14
|
158 $renderer->doc .= '<table:table-row>';
|
slaxemulator@14
|
159 $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.A1" office:value-type="string">';
|
slaxemulator@14
|
160 // Don't use p_open, as it's not the same style-name
|
slaxemulator@14
|
161 $renderer->doc .= '<text:p text:style-name="Table_20_Contents">';
|
slaxemulator@14
|
162 $src = DOKU_PLUGIN."note/images/".$type.".png";
|
slaxemulator@14
|
163 $renderer->_odtAddImage($src);
|
slaxemulator@14
|
164 $renderer->doc .= '</text:p>';
|
slaxemulator@14
|
165 $renderer->doc .= '</table:table-cell>';
|
slaxemulator@14
|
166 $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.B1" office:value-type="string">';
|
slaxemulator@14
|
167 $renderer->p_open();
|
slaxemulator@14
|
168 break;
|
slaxemulator@14
|
169
|
slaxemulator@14
|
170 case DOKU_LEXER_UNMATCHED :
|
slaxemulator@14
|
171 $renderer->cdata($data);
|
slaxemulator@14
|
172 break;
|
slaxemulator@14
|
173
|
slaxemulator@14
|
174 case DOKU_LEXER_EXIT :
|
slaxemulator@14
|
175 $renderer->p_close();
|
slaxemulator@14
|
176 $renderer->doc .= '</table:table-cell>';
|
slaxemulator@14
|
177 $renderer->doc .= '</table:table-row>';
|
slaxemulator@14
|
178 $renderer->doc .= '</table:table>';
|
slaxemulator@14
|
179 $renderer->p_open();
|
slaxemulator@14
|
180 break;
|
slaxemulator@14
|
181 }
|
slaxemulator@14
|
182 return true;
|
slaxemulator@14
|
183 }
|
slaxemulator@14
|
184
|
slaxemulator@14
|
185 // unsupported $mode
|
slaxemulator@14
|
186 return false;
|
slaxemulator@14
|
187 }
|
slaxemulator@14
|
188 }
|
slaxemulator@14
|
189
|
slaxemulator@14
|
190 //Setup VIM: ex: et ts=4 enc=utf-8 :
|
slaxemulator@14
|
191 ?>
|