Peter - 
>>but if macrodef properties are to be implemented as textual substitution
>>and not as local properties, the two issues can be separated.

Did you mean to say "but if macrodef ATTRIBUTES are to be implemented as 
textual substitution and not as local properties ..."

Or are you talking about properties defined within the execution of a "call" to 
a macrodef?

-----Original Message-----
From:   Peter reilly [mailto:[EMAIL PROTECTED]
Sent:   Thu 11/27/2003 7:08 AM
To:     [EMAIL PROTECTED]
Cc:     
Subject:        Macrodef attributes and Local revisited again
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]





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to