Yesterday I said that macrodef attributes should be implemented as
properties and not as textual substitution.
On overnight reflection, I have changed by mind.
MacroDef has been using textual substitution in the ant beta
builds without much problems (*.. well not quite see below).
The only issue is the notation used is the same as for properties.
The proposed new notation is @{x} where x is the attribute.
I have implemented the new notation and added the following:
* the escape sequence @@{x} is used to allow @{x} to be
placed in the text without substitution of x. - this
corresponds to the $${x} escape sequence for properties.
* the macro replacement is now done on the default values for
the attributes - this allows Jan's use case to work:
<target name="jan">
<macrodef name="dep">
<attribute name="root"/>
<attribute name="file" default="@{root}.dep"/>
<sequential>
<script language="javascript"> <![CDATA[
// attribute expansion from macrodef (script can“t reach the
// values)
root = "@{root}";
file = "@{file}";
importClass(java.lang.System);
System.out.println(
"root is " + root + " and file is " + file);
]]>
</script>
</sequential>
</macrodef>
<dep root="foo"/>
</target>
This prints out
jan:
[script] root is foo and file is foo.dep
The order of the attributes is important -
<macrodef name="dep">
<attribute name="file" default="@{root}.dep"/>
<attribute name="root"/>
will set file to @{root}.dep.
A problem encountered in using macrodef for any not trivial macros
is the need to isolate the use of properties.
For this I have proposed using the local property patch, but if
macrodef properties are to be implemented as textual substitution
and not as local properties, the two issues can be separated.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]