hi

so here some of my personal conclusions from everyone's wonderful emails.

* InterMap

i couldn't figure out how to make InterMap work for my situation. if i'm correct, it seems InterMap is looking for something like - AnotherSite:OneOfItsPages - and i'm looking for something that replaces text that has no idea that one day it will be a link. i.e. so that John Doe becomes [[http://johndoe.com|John Doe]] without any forethought or link markup written.

but perhaps i'm misunderstanding how the InterMap could be implemented. the thing that is so nice about the InterMap setup is that you can maintain your list on a wiki page, instead of in config.php. do let me know if i'm missing something here...


* Markup

i mangled PM's code (similar to Peter's - thanks!) a bit and got the following case-insenstive version to work deliciously. it also includes Eemeli's great idea of having a back-tick escape figure so that:
        john doe                turns into              
[[http://johndoe.com|john doe]]
        John Doe                turns into              
[[http://johndoe.com|John Doe]]
        `John Doe               remains         John Doe


# all keys must be completely lowercase in order for this to work
$NameToLinkArray = array(
        'john doe' => 'http://www.johndoe.com',
        'sally struthers' => 'http://www.def.com'
);

Markup('names', 'inline',
        '/(`?)\b(' . join('|', array_keys($NameToLinkArray)) . ')\b/ei',
        'AutoNameToLinkFunc("$2","$1")'
);

function AutoNameToLinkFunc($name, $escape) {
        global $NameToLinkArray;
        if ($escape) return $name;
$link = '%newwin%[['.$NameToLinkArray[strtolower($name)].'|'.Keep ($name).']]';
        return $link;
}

* i had to substitute the AutoNameToLinkFunc because i couldn't figure out how to get pmwiki to find $NameToLinkArray - i got errors, and had to resort to calling it as a global in a function. perhaps someone knows how to finagle this without having to declare a separate function, as PM did in his recent example?

question/next step:
is there a way to set up my list of names on a wiki page (like Site.NamesToLinks), like InterMap is setup?

i like this a lot - superuseful!
i've added a page for this latter recipe: http://www.pmwiki.org/wiki/ Cookbook/AutoLink
(suggestions for a better name? this was the first that came to mind)

thanks for the help!
adam



On 26 Aug 2009, at 7:47 AM, Patrick R. Michaud wrote:

On Wed, Aug 26, 2009 at 02:51:02AM +0200, Melodye Bowers wrote:
$foo = array('John' => 'http://www.abc.com', 'Sally' => 'http:// www.def.com');
foreach ($foo as $name => $site) {
   Markup('/\b'.$name.'\b/', '%newwin%'.$site.'%%', ...);
}

Does that work?

It "works", but only for very small numbers of names.  After adding
100 or so such rules the speed of markup processing will degrade
noticeably.

Better would be to combine all of the names into a single markup rule
(code below is untested, for illustration only):

    $foo = array('John' => 'http://www.abc.com',
                 'Sally' => 'http://www.def.com');

    Markup('names', 'inline',
      '/\b(' . join('|', array_keys($foo)) . ')\b/e',
      "'[['.\$foo[$1].'|'.Keep('$1').']]'");

It's also possible that one could make use of the $IMap array
for this in config.php (also untested):

    $IMap['John'] = 'http://www.abc.com/';
    $IMap['Sally'] = 'http://www.def.com/';

Pm

_______________________________________________
pmwiki-users mailing list
[email protected]
http://www.pmichaud.com/mailman/listinfo/pmwiki-users

Reply via email to