4 * Copyright 1999, 2000, 2001, 2002 $ThePhpWikiProgrammingTeam
5 * Copyright 2009 Marc-Etienne Vargenau, Alcatel-Lucent
7 * This file is part of PhpWiki.
9 * PhpWiki is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * PhpWiki is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with PhpWiki; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 * OldStyleTable: Layout tables using the old table style.
29 * <?plugin OldStyleTable border||=0 summary=""
30 * || __Name__ |v __Cost__ |v __Notes__
31 * | __First__ | __Last__
32 * |> Jeff |< Dairiki |^ Cheap |< Not worth it
33 * |> Marco |< Polo | Cheaper |< Not available
37 * Note that multiple <code>|</code>'s lead to spanned columns,
38 * and <code>v</code>'s can be used to span rows. A <code>></code>
39 * generates a right justified column, <code><</code> a left
40 * justified column and <code>^</code> a centered column
41 * (which is the default.)
43 * @author Geoffrey T. Dairiki
46 class WikiPlugin_OldStyleTable
50 return _("OldStyleTable");
53 function getDescription() {
54 return _("Layout tables using the old markup style.");
57 function getVersion() {
58 return preg_replace("/[Revision: $]/", '',
62 function getDefaultArguments() {
72 function handle_plugin_args_cruft($argstr, $args) {
76 function run($dbi, $argstr, &$request, $basepage) {
78 include_once('lib/InlineParser.php');
80 $args = $this->getArgs($argstr, $request);
81 $default = $this->getDefaultArguments();
82 foreach (array('cellpadding','cellspacing','border') as $arg) {
83 if (!is_numeric($args[$arg])) {
84 $args[$arg] = $default[$arg];
87 $lines = preg_split('/\s*?\n\s*/', $argstr);
88 $table_args = array();
89 $default_args = array_keys($default);
90 foreach ($default_args as $arg) {
91 if ($args[$arg] == '' and $default[$arg] == '')
92 continue; // ignore '' arguments
93 if ($arg == 'caption')
94 $caption = $args[$arg];
96 $table_args[$arg] = $args[$arg];
98 $table = HTML::table($table_args);
100 $table->pushContent(HTML::caption($caption));
101 if (preg_match("/^\s*(cellpadding|cellspacing|border|caption|summary)/", $lines[0]))
103 foreach ($lines as $line) {
106 if (strstr($line,"=")) {
107 $tmp = explode("=",$line);
108 if (in_array(trim($tmp[0]),$default_args))
111 if ($line[0] != '|') {
112 // bogus error if argument
113 trigger_error(sprintf(_("Line %s does not begin with a '|'."), $line), E_USER_WARNING);
115 $table->pushContent($this->_parse_row($line, $basepage));
122 function _parse_row ($line, $basepage) {
123 $brkt_link = "\\[ .*? [^]\s] .*? \\]";
124 $cell_content = "(?: [^[] | ".ESCAPE_CHAR."\\[ | $brkt_link )*?";
126 preg_match_all("/(\\|+) (v*) ([<>^]?) \s* ($cell_content) \s* (?=\\||\$)/x",
127 $line, $matches, PREG_SET_ORDER);
131 foreach ($matches as $m) {
134 if (strlen($m[1]) > 1)
135 $attr['colspan'] = strlen($m[1]);
136 if (strlen($m[2]) > 0)
137 $attr['rowspan'] = strlen($m[2]) + 1;
140 $attr['align'] = 'center';
141 else if ($m[3] == '>')
142 $attr['align'] = 'right';
144 $attr['align'] = 'left';
146 // Assume new-style inline markup.
147 $content = TransformInline($m[4], 2.0, $basepage);
149 $row->pushContent(HTML::td($attr, HTML::raw(' '),
150 $content, HTML::raw(' ')));
156 // (c-file-style: "gnu")
161 // c-hanging-comment-ender-p: nil
162 // indent-tabs-mode: nil