Templates from Usage Messages
- To: mathgroup at smc.vnet.net
- Subject: [mg110959] Templates from Usage Messages
- From: "David Park" <djmpark at comcast.net>
- Date: Wed, 14 Jul 2010 05:35:45 -0400 (EDT)
I would like to have a form of input arguments that contain operational
symbols as well as variables, and especially I would like to use the Span
operation. Here is an example:
foo::usage =
"foo[a, b;;c] will operate on structure a between parts b and c.";
foo[a_, (b_Integer?Positive) ;; (c_Integer?Positive)] := {a, b, c}
foo[a, 2;;3]
{a,2,3}
The problem is that I don't know how to write the first part of the usage
message such that the command completion template will come out with two
variable slots for a and b with a ";;" between. Try using command completion
of foo.
However, I was able to write a routine that creates this type of template.
makeTemplate::usage =
"makeTemplate[splvar, {plvars}][function[args\[Ellipsis]] will make \
a template for function in which splvar is a selected placeholder, \
and the symbols listed in plvars are placeholders.";
makeTemplate[splvar_, plvars_] := Function[expr,
Module[
{spl = SymbolName[splvar], pl, splrule, plrules},
If[Length[plvars] > 0,
pl = SymbolName /@ plvars;
plrules = (# -> TagBox[FrameBox[#], "Placeholder"]) & /@ pl,
plrules = {}];
splrule = spl -> TagBox[FrameBox[spl], "SelectionPlaceholder"];
(MakeBoxes[expr] /. splrule /. plrules) // DisplayForm
], HoldFirst]
makeTemplate[a, {b, c}][foo[a, b ;; c]]
gives the desired template, and I can, for example, use that in an
ActionMenu drop-down paste operation.
I just can't get it into a usage message and normal command completion.
David Park UMLF
djmpark at comcast.net
<http://home.comcast.net/~djmpark> http://home.comcast.net/~djmpark/