[pmwiki-users] remove markup rules for just one run of MarkupToHTML
Carlos AB
cabsec.pmwiki at gmail.com
Thu Mar 25 22:36:55 CDT 2010
On 3/25/10, Peter Bowers <pbowers at pobox.com> wrote:
> On Wed, Mar 24, 2010 at 8:29 PM, Carlos AB <cabsec.pmwiki at gmail.com> wrote:
>> I'm trying to make MarkupToHTML() put html inside a textarea, the
>> problem is that I need (:if:), (:pagelist:), and some other markups to
>> be changed for just one run and not subsequent runs.
>>
>> I tried DisableMarkup() but it changes the markup for all runs of
>> MarkupToHTML() and it won't process (:if:) in Site.PageActions ,
>> *.GroupHeader|Footer pages and others.
>>
>> How can I disable certain Markups for just one run of MarkupToHTML?
>
> The building of the table of markup rules and the ordering of that
> table and etc is the heart, the genius behind pmwiki. It is
> incredibly powerful and very flexible ... to a point. I am not aware
> of any way to do what you are looking for.
>
> However, maybe you could look at it differently. If there are a
> certain subset of rules that you need to apply then the toolbox recipe
>
> http://www.pmwiki.org/wiki/Cookbook/Toolbox
>
> offers the function RunMarkupRules() which allows you to create your
> own mini-table of rules and run those rules over some markup text.
> For instance, in a recipe I often want to allow comments and
> conditional processing and include capabilities on pages -- so I just
> run those 3 rules over my page before I start using the text -- that
> greatly enhances the functionality & flexibility of a recipe...
>
> But if you are looking for the full set of rules or even a large
> majority of them it probably isn't too practical to build the whole
> rule table -- although I suppose ultimately it's not that big a
> deal... Theoretically there's probalby some array in pmwiki you could
> traverse to build this array and leave something out as well -- I've
> just never looked into that particular capability...
>
> -Peter
>
Thank you for your reply Peter,
I tried some other things before your e-mail arrived, including
creating a MyMarkupToHTML function, disabling markups before running
the real MarkupToHTML and trying to re-enable it after, but it didn't
work quite well.
Finally I decided to go with something a little bit more classy and
ended up with a new BuildMarkupRules function which is now called
(take a wild guess here) MyBuildMarkupRules. :)
and it goes like this:
function MyBuildMarkupRules($rid) {
global $MarkupTable,$LinkPattern;
$mt = $MarkupTable;
uasort($mt,'mpcmp');
foreach($mt as $id=>$m){
if(!in_array($id,$rid)){
if (@$m['pat'] && @$m['seq']){
$mr[str_replace('\\L',$LinkPattern,$m['pat'])]=$m['rep'];
}
}
}
return $mr;
}
and changed a MyMarkupToHTML accordingly to :
function MyMarkupToHTML($pagename, $text, $opt = NULL,$rid) {
# convert wiki markup text to HTML output
global $MarkupFrame, $MarkupFrameBase, $RedoMarkupLine;
array_unshift($MarkupFrame, array_merge($MarkupFrameBase, (array)$opt));
$markrules = MyBuildMarkupRules($rid);
foreach((array)$text as $l)
$lines[] = $MarkupFrame[0]['escape'] ? PVSE($l) : $l;
$lines[] = '(:closeall:)';
$out = '';
while (count($lines)>0) {
$x = array_shift($lines);
$RedoMarkupLine=0;
foreach($markrules as $p=>$r) {
if ($p{0} == '/') $x=preg_replace($p,$r,$x);
elseif (strstr($x,$p)!==false) $x=eval($r);
if (isset($php_errormsg))
{ echo "ERROR: pat=$p $php_errormsg"; unset($php_errormsg); }
if ($RedoMarkupLine) { $lines=array_merge((array)$x,$lines); continue 2; }
}
if ($x>'') $out .= "$x\n";
}
foreach((array)(@$MarkupFrame[0]['posteval']) as $v) eval($v);
array_shift($MarkupFrame);
return $out;
}
It is working fine, so far.
Thank you for speedy reply,
CarlosAB
More information about the pmwiki-users
mailing list