Wiki source for LinkParsing


Show raw source

===== Link Parsing =====

>>See also:
~-WantedFormatters
~-LinkTails
>>::c::

This page is dedicated to discussions on the development of a **better link formatter**, i.e. a formatter supporting (optional) link titles, anchors, url parameters etc.

I start posting some code that I'm using to test regex for parsing forced links.
It should correctly parse links like the following

##""[[HomePage | (!Hello world;p=1&q=2) This is the home page with title]]""##

giving something like this: ""<a href="http://wikka.jsnx.com/HomePage?p=1&q=2" title="Hello world"> This is the home page with title</a>"".

The parentheses are used to select ;-separated URL options, like title or URL parameters. The space before the parenthesis is optional.
##!Hello world## corresponds to the title.
##p=1&q=2## corresponds to the URL parameters.

%%(php)
<?php

//$pattern = "/^\[\[(\S*)(\s\(\!(.+)\))?(\s+(.+))?\]\]$/s";
//$pattern = "/\[\[(.*)\]\]/";
$pattern = "/\[\[([^\(\)\s]+)(\s*\((.+)\))*(\s+.+)*\]\]/";

if ($q) {
print 'String: '.$q;
preg_match($pattern, $q, $matches);
if (is_array($matches)) {
$url = $matches[1];
$desc = $matches[4];
$optionlist = $matches[3];
if ($optionlist) {
$options = explode(";", $optionlist);
if (is_array($options)) {
echo '<br />Options: ';
print_r($options);
foreach($options as $option){
switch(true){
case (preg_match("/!(.+)/", $option, $istitle)):
$title = $istitle[1];
break;

case (preg_match("=", $option, $isparameter)):
$parameters = $isparameter[0];
break;
}
}
} else {
echo '<br />Specified options are not valid';
}
} else {
print '<br />No options';
}
echo '<br />Link chunks: ';
print_r($matches);
echo '<br />Rendered link: '.$this->Link($url, '', $desc, '', '', $title).'<br />';
} else {
echo 'String does not match pattern';
}
} else {
print 'Please enter a string';
}
?>
%%

----
CategoryDevelopmentFormatters
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki