*
* A set of replace-on-edit rules for automatically converting
* HTML to PmWiki markup
*
* Developed and tested using the PmWiki 2.2 series.
*
* To install, add the following line to your configuration file :
include_once("$FarmD/cookbook/convert-html.php");
*
* For more information, please see the online documentation at
* http://www.pmwiki.org/wiki/Cookbook/ConvertHTML
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License,
* Version 2, as published by the Free Software Foundation.
* http://www.gnu.org/copyleft/gpl.html
*/
$RecipeInfo['ConvertHTML']['Version'] = '2009-08-25';
SDVA( $ROEPatterns, array(
'#
\s*(.*?)\*s \n*#is' => "(: title $1:)\n",
'# \n*#i' => "(:$2 $4:)\n",
'##' => "%comment% $1 %%",
'#<(ul|ol|dl)\s+([^>]+)>\s*(<(li|dt)\b[^>]*>)#i' => '<$1>$3%apply=list $2% ',
'#<(li|dt)\s+([^>]+)>#i' => "<$1>%apply=item $2% ",
'#\s*(<(ul|ol)\s*>\s*)\n?#ise' => 'ConvertHtmlList(stripslashes("$1"))',
'#\s*(.*?)(?: )?\s*\s*(.*?)(?: )?\n#is' => "\n:$1:$2\n",
'#\s*?dl\s*>#i' => '',
'#\s*#is' => "\n(:table$1:)$2\n(:tableend:)",
'#\s*]*)?>(.*?) #is' => "\n(:cell$1:)$2",
'#\s*]*)?>\s*\(:cell\b(.*?) #is' => "\n(:cellnr$1$2",
'#<(p|h\d)\s+([^>]+)>#i' => "<$1>%block $2% ",
'#\s*(.*?) \n*#ise' => "\"\n\n\".str_repeat('!','$1').' '.stripslashes('$2').\"\n\"",
'#\s*\s*(.*?)
\n?#is' => "\n\n$1\n",
'#\s*\s*#is' => "\n\n",
'#\s*
]*)?>\s*(.*?)\n?
\n*#is' => "\n(:div$1:)\n$2\n(:divend:)\n",
'#]*)>(.*?) #ise' => '"%".ConvertHtmlSpan(stripslashes("$1"))."% $2 %%"',
'#\s*\s*(.*?) \n*#is' => "\n->$1\n",
'# \n*#i' => "[[<<]]\n",
'# \n*#i' => "\\\\\\\n",
'#\s* \n*#i' => "\n----\n",
'#?(i|em)>#i' => "''",
'#?(b|strong)>#i' => "'''",
'#?(code|tt)>#i' => "@@",
'#(.*?) #is' => "[@$1@]",
'#(.*?) #is' => "'+$1+'",
'#(.*?) #is' => "'-$1-'",
'#(.*?) #is' => "'^$1^'",
'#(.*?) #is' => "'_$1_'",
'#(.*?) #is' => "{+$1+}",
'#(.*?)#is' => "{-$1-}",
'#(<(?:a|img)\b[^>]+\b(href|src)=)([\'"])([./][^\'"]*?)\3#i' => "$1$3Path:$4$3",
'#(<(?:a|img)\b[^>]+\b(href|src)=)([\'"])([^/:\'"]+\.[^/:\'"]+?)\3#i' => "$1$3Attach:$4$3",
'#]*\bname=([\'"])([^\'"]*?)\1[^>]*>(.*?) #ise' => '"[[#".preg_replace("/\s+/","_",stripslashes("$2")).\']] $3\'',
'#]*)>(.*?) #ise' => 'ConvertHtmlLink(stripslashes("$1"), stripslashes("$2"))',
'# ]*)\bsrc=([\'"])([^\'"]*?)\2\s([^>]*?)\s*(?:/?|>\n?#i' => "%apply=img $1$4%$3%%\n",
'#(.*%apply=img\b[^%]+)\balign=([\'"]?)(l|r)(?:eft|ight)\2([^%]*%[^%]+)%%#i' => '%$3float% $1$4%%',
'#(%apply=img\b[^%]+)\b(?:alt|title)=([\'"])([^\'"]+?)\2([^%]*%[^%]+)%%#i' => '$1$4"$3"%%',
'#%apply=img\b(?:\s+(?:alt|title)=([\'"])\s*\1)*\s*%([^%]+)%%#' => '$2',
'##i' => '(:input end:)',
'# ]*)\stype=([\'"]?)(\w+)\2([^>]*?)/?>#i' => '(:input $3$1$4:)',
'##i' => '(:input textarea$1 value=\'$2\':)',
'#]*)>(.*?) #ise' => 'preg_replace("!]*)>\s*(.*?)\s* !is","(:input select$1\$1 label=\"\$2\":)","$2")'
));
function ConvertHtmlLink($param, $txt) {
$opt = array_change_key_case(ParseArgs($param), CASE_LOWER);
if (empty($opt['href'])) return "$txt ";
$link = "[[{$opt['href']}|$txt]]";
$ws = '';
foreach( array('target','rel','accesskey') as $p ) if (!empty($opt[$p])) $ws .= "$p=\"{$opt[$p]}\" ";
if (empty($ws)) return $link;
$ws = str_replace('target="_blank"', 'newwin', rtrim($ws, ' '));
return "%$ws%$link";
}
function ConvertHtmlSpan($param) {
return preg_replace(
array( '/%/', '/(?:class|style)=([\'"])(.*?)\1/' ),
array( 'pct', '$2' ),
$param );
}
function ConvertHtmlList($html) {
$out = '';
$lit = array();
$strip = FALSE;
$html = preg_replace('#(?(?:ol|ul|li))\b([^>]+)>#i','$1>',$html);
$lia = preg_split( '#\s*(?(?:ol|ul|li)\s*>)\s*#i', $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
foreach( $lia as $n ) switch($n) {
case '': case '':
$lit[] = "\n".str_repeat( '*', count($lit)+1 ).' ';
break;
case '': case '':
$lit[] = "\n".str_repeat( '#', count($lit)+1 ).' ';
break;
case ' ': case ' ':
case '': case '':
array_pop($lit);
$strip = FALSE;
break;
case '': case ' ':
if($lit) $out .= end($lit);
$strip = TRUE;
break;
case ' ': case '':
$strip = FALSE;
break;
default:
if ($strip) {
$out .= preg_replace('/\s+/',' ',$n);
$strip = FALSE;
} else $out .= $n;
}
return $out;
}