[pmwiki-users] Category Markup

DaveG pmwiki at solidgone.com
Sat Dec 17 22:51:02 CST 2005


Well, here's where I'm at now. I'm totally unable to get tge regex in 
CategoriesToTags to convert from "Cat: [[!a]],[[!b]]" to "Tag: a,b". 
Apart from that everything seems to fire okay.

function TagsToCategories($tags) {
    return 'Cat:'.preg_replace('/\\w+/', '[[!$0]]', $tags);
}
#----
function CategoriesToTags($tags) {
    return '*'.$tags.'* Tags:'.preg_replace('/([a-z]+)/', '$0', $tags);
}

function MyConvertTags($pagename, &$page, &$new) {
    $x=$new['text'];

    $new['text'] = preg_replace("/^Tags?: *([\\w, ]+)/ie", 
"TagsToCategories('$1')", $new['text']);
    if ($x==$new['text'])
       $new['text'] = preg_replace('/^Cat?: *([\\[\\[!\\w\\]\\], 
]+)/ie',"CategoriesToTags('$1')", $new['text']);
}

  ~ ~ Dave

DaveG wrote:
> Your sample didn't work as it stood, I just get the text 
> "TagsToCategories('a,b')", on *Save*, where I would expect no action 
> until Edit.
> 
> 1] In this case, does the EditFunctions simply act when Editing, or also 
> when Saving? It *appears* to do both.
> 
> 2] What does the /m switch do? Things appear to work better when I use 
> /e instead.
> 
> 3] Based on the answer to (1), shouldn't we create a "CategoriesToTags 
> routine, and change the pattern appropriately to convert "Tags: [[!a]]" 
> into "Tags: a"?
> 
> Based on a "yes" to (3) I created routines to do the reverse 
> replacement. What fails on my code is the reverse conversion from "Tags: 
> a,b" to "Tags: [[!a]],[[!b]]" when switching to Edit.
> 
> Here's what I have so far (ref 
> http://www.solidgone.com/pmwiki/index.php?n=Main.WikiSandbox):
> $ROSPatterns["/^Tags?: *([\\w, ]+)/ie"] = "TagsToCategories('$1')";
> function TagsToCategories($tags) {
>    return 'Tags:'.preg_replace('/\\w+/', '[[!$0]]', $tags);
> }
> #----
> function CategoriesToTags($tags) {
>    return 'Tags:'.preg_replace('/[\\[\\[![\\w]\\]\\]]+/', '$1', $tags);
> }
> 
> function MyConvertTags($pagename, &$page, &$new) {
>    $new['text'] = preg_replace('/^Tags?: *([\\[\\[!\\w\\]\\], ]+)/e',
>                     "CategoriesToTags('$1')", $new['text']);
> }
> 
> array_unshift($EditFunctions, 'MyConvertTags');
> #----
> 
> 
>  ~ ~ Dave
> 
> Patrick R. Michaud wrote:
> 
>> On Sat, Dec 17, 2005 at 12:55:39AM -0500, DaveG wrote:
>>
>>> I abandoned the regex from hell, and used a function instead :) Is 
>>> there such a thing as ReplaceOnEdit?
>>
>>
>>
>> It can be done with an EditFunction:
>>
>>    function MyConvertTags($pagename, &$page, &$new) {
>>      $new['text'] = preg_replace('/^Tags?: *([\\w, ]+)/m', 
>>                                 "TagsToCategories('$1')", $new['text']);
>>    }
>>
>>    array_unshift($EditFunctions, 'MyConvertTags');
>>
>> But it might also be worthwhile for me to define a $ROEPatterns
>> that can corresponds to $ROSPatterns.
>>
>> Pm
>>
> 
> _______________________________________________
> pmwiki-users mailing list
> pmwiki-users at pmichaud.com
> http://host.pmichaud.com/mailman/listinfo/pmwiki-users
> 




More information about the pmwiki-users mailing list