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
_______________________________________________ pmwiki-devel mailing list pmwiki-devel@pmichaud.com http://www.pmichaud.com/mailman/listinfo/pmwiki-devel