[pmwiki-devel] Regex and recipe philosphy

Simon nzskiwi at gmail.com
Fri Jul 12 22:39:51 CDT 2013


This is a question about a regex, and a corollary about the philosophy of
recipe parameters.

I'm trying to write a directive recipe (see excerpt
below)[1<http://khandallah.wellington.net.nz/pmwiki/pmwiki.php/Main/WikiSandbox>
]
It seems to me that it makes sense to be relatively strict about the syntax
for the directive.

It more or less get the parsing of the parameters correct, except for the
backreference of the height|width parameters, where I did not want order to
be important
(in fact other than the first ll | topo50 parameter I'd rather the order
was not important).

Q: For height|width, when both are supplied I only see one (the last)
returned as a backreference, is this because where there are multiple
matches for a back reference only the last is returned?
(I haven't been able to locate any documentation about this).


In looking for an exemplar recipe I observe that
Markup('exemplar', 'directive',
  '/\\(:exemplar\s*(.*?)\s*:\\)/ei',
  "FmtExemplar(PSS('$1')");
most directives accept anything within their scope, then use
$arg = ParseArgs($args);

Then the arguments defined are processed, and any unexpected arguments are
disregarded.

So my corollary question is:
Is this good practice, or just expedient, given the difficulty (as I
perceive it) of defining a parameter list in regex?

tia

Simon








## Add a custom markup
# (:nztopo ll=-41.293722,174.871482 :)
# (:nztopo topo50=BP33912708,BP33876687 height=300 width=400 pin=1:)
# arguments are
#  ll= or topo50= -- latitude,longitude or topo50 map grid coordinates
#  height= -- image height in pixels
#  width= -- image width in pixels
#  pin= -- show pin
Markup( 'NZTopo',
  'directives', "/\\(:nztopo
((?:ll=[-+]?\d{1,2}[.]\d+[,][-+]?[1]?\d{1,2}[.]\d+)|(?:topo50=[ABC][A-Z][0-4]\d{7}[,][ABC][A-Z][0-4]\d{7}))\s*((?:height|width)=\d+\s*){0,2}(pin=[01])?\s*:\\)/ei",
  "Keep(NZTopo_Parse(PSS('$1'), PSS('$2'), PSS('$3'), PSS('$4'),
PSS('$5')))" );
# s = dot matches all chars including newline
# e = backreference substitution by expression
# i = case insensitive
# m = multiline
# uses lazy evaluation, preserves leading and trailing white space
# Keep prevents PmWiki markup being applied
#
/** Main NZTopo parser
 *   /param   arguements as documented above
 *   /return  The HTML-formatted NZTopo markup wrapped in a <div> of class
"nztopo", see http://www.topomap.co.nz/.
 */
function NZTopo_Parse($coords, $height, $width, $pin, $p5) {




Useful references:
http://www.pmwiki.org/wiki/PmWiki/CustomMarkup
http://www.pmwiki.org/wiki/PmWiki/CustomMarkupAlt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.pmichaud.com/pipermail/pmwiki-devel/attachments/20130713/a9ca5eca/attachment.html>


More information about the pmwiki-devel mailing list