[Pmwiki-users] PmWiki 2 custom markup, draft 1

John Rankin john.rankin
Mon Sep 6 16:10:20 CDT 2004


On Tuesday, 7 September 2004 3:29 AM, Patrick R. Michaud <pmichaud at pobox.com> wrote:
>On Mon, Sep 06, 2004 at 01:02:32PM +1200, John Rankin wrote:
>> [The Markup function] looks superb!
>> 
>> Let me test a scenario, which appears not easy in 1 (?) but entirely
>> possible in 2.
>> An author wants to insert a
>>     [:newpage:]
>> directive to break up a long page into readable chunks.
>> In browse view, pmwiki initially displays the text up to the first
>> [:newpage:] directive, plus a 
>>     Page 1 2 3 ...
>> line. [...]
>> 
>> So with PmWiki 2, it's something like:
>>     Markup("newpage",">include","/\\[:newpage:\\]/e", then I get lost...
>> So how do I invoke this?
>
>Discussion below, but for demonstration purposes I've implemented this 
>feature at http://www.pmwiki.org/pmwiki2/pmwiki.php/Cookbook/BreakPage .  
>The code is at
>http://www.pmwiki.org/pmwiki2/uploads/Cookbook/breakpage.php .
>
>I decided to name the directive [:breakpage:] instead of [:newpage:] 
>because "new page" means something else to me (i.e., create a "new 
>wiki page").  Of course we can change this to something else.

Yes, that's very nice.

>
>...
>
>Using a pattern match to process the entire text may not be the
>most efficient mechanism in the world, so PmWiki 2 offers an
>alternative to using preg_replace for markup translations.  If the 
>third argument call to Markup() doesn't begin with a slash, then 
>it's a substring to be searched for in the text, and the replacement is 
>PHP code to be processed with eval().  
>
>  Markup('breakpage','>include','[:breakpage:]',
>    'return PageBreak($pagename,$x);');
>
>says that if the text being processed contains the string '[:breakpage:]',
>then replace it with the value returned by a call to PageBreak().
>$x is the entire text being processed (analogous to $Text in PmWiki 1).
>For some operations this may be more efficient, but it always
>replaces the entire string with the value returned from the code,
>and you don't have the text matching/extraction possibilities that
>preg_replace provides.
>
>Pm
>

? So instead of writing
else
  Markup('breakpage','directives','/\\[:breakpage:\\]/','');
you could have written
else
  Markup('breakpage','directives','[:breakpage:]','');

One thing I dont quite see. If one used this variation for the 
[:breakpage:] browse directive, how does the truncated $x get 
returned? Or is that not an appropriate use?

-- 
JR
--
John Rankin





More information about the pmwiki-users mailing list