ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eric Fetzer <elstonk...@yahoo.com>
Subject Re: AppendToProperty MacroDef
Date Thu, 21 Jan 2010 18:10:52 GMT
How do you say in JavaScript, treat the following string as a literal string?  In C# you can
escape out the characters one at a time the same way as you do in JavaScript:

string myString = "C:\\Program Files\\JavaScript\\is\\goofy";

or you can tell it that the entire string is literal with an @:

string myString = @"C:\Program Files\JavaScript\is\goofy";

Thanks,
Eric



________________________________
From: Scot P. Floess <sfloess@nc.rr.com>
To: Ant Users List <user@ant.apache.org>
Sent: Thu, January 21, 2010 9:08:03 AM
Subject: Re: AppendToProperty MacroDef

Interesting... OK :(

On Thu, 21 Jan 2010, Eric Fetzer wrote:

> Same as tmpProp on the other side:
>
> main:
>      [echo] myProp is:  C:\noDog\Hates\Big\Juicy\Bones
>      [echo] tmpProp is:  C:\noDog\Hates\Big\Juicy\Bones
>
>
>
>
> ________________________________
> From: Scot P. Floess <sfloess@nc.rr.com>
> To: Ant Users List <user@ant.apache.org>
> Sent: Thu, January 21, 2010 8:48:29 AM
> Subject: Re: AppendToProperty MacroDef
>
>
> Will you echo ${myProp} itself?  For example before the first 
> propertyregex...
>
> Sorry, I don't have time right this minute to look at this and type in the 
> example :)
>
>
>
> On Thu, 21 Jan 2010, Eric Fetzer wrote:
>
>> And to leverage your \n example:
>>
>> <project default="main">
>> <taskdef resource="net/sf/antcontrib/antlib.xml"/>
>> <property name="myProp" value="C:\noDog\Hates\Big\Juicy\Bones"/>
>> <property name="myProp2" value="C:\\noDog\\Hates\\Big\\Juicy\\Bones"/>
>> <property name="myProp3" value="C:\noDog\\Hates\Big\\Juicy\Bones"/>
>>   <target name="main">
>>     <propertyregex property="tmpProp" input="${myProp}" override="true" regexp="\\"
replace="\\\\" global="true"/>
>>     <echo message="tmpProp is:  ${tmpProp}"/>
>>     <propertyregex property="tmpProp2" input="${myProp2}" override="true" regexp="\\"
replace="\\\\" global="true"/>
>>     <echo message="tmpProp is:  ${tmpProp2}"/>
>>     <propertyregex property="tmpProp3" input="${myProp3}" override="true" regexp="\\"
replace="\\\\" global="true"/>
>>     <echo message="tmpProp is:  ${tmpProp3}"/>
>>     <propertyregex property="tmpProp4" input="${myProp}" override="true" regexp="\"
replace="\\" global="true"/>
>>     <echo message="tmpProp is:  ${tmpProp4}"/>
>>   </target>
>> </project>
>>
>> Produces:
>>
>> main:
>>      [echo] tmpProp is:  C:\noDog\Hates\Big\Juicy\Bones
>>      [echo] tmpProp is:  C:\\noDog\\Hates\\Big\\Juicy\\Bones
>>      [echo] tmpProp is:  C:\noDog\\Hates\Big\\Juicy\Bones
>> BUILD FAILED
>> java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
>> \
>>  ^
>>         at java.util.regex.Pattern.error(Pattern.java:1650)
>>         at java.util.regex.Pattern.compile(Pattern.java:1403)
>>         at java.util.regex.Pattern.<init>(Pattern.java:1124)
>>         at java.util.regex.Pattern.compile(Pattern.java:840)
>>         at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.getCompiledPatter
>> n(Jdk14RegexpMatcher.java:67)
>>         at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.matches(Jdk14Rege
>> xpMatcher.java:94)
>>         at net.sf.antcontrib.property.RegexTask.doReplace(RegexTask.java:135)
>>         at net.sf.antcontrib.property.RegexTask.execute(RegexTask.java:192)
>>         at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
>> java:39)
>>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
>> sorImpl.java:25)
>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>         at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
>> a:106)
>>         at org.apache.tools.ant.Task.perform(Task.java:348)
>>         at org.apache.tools.ant.Target.execute(Target.java:357)
>>         at org.apache.tools.ant.Target.performTasks(Target.java:385)
>>         at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
>>         at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
>>         at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
>> cutor.java:41)
>>         at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
>>         at org.apache.tools.ant.Main.runBuild(Main.java:758)
>>         at org.apache.tools.ant.Main.startAnt(Main.java:217)
>>         at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
>>         at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
>> Total time: 0 seconds
>>
>>
>>
>>
>> ________________________________
>> From: Eric Fetzer <elstonkers@yahoo.com>
>> To: Ant Users List <user@ant.apache.org>
>> Sent: Thu, January 21, 2010 8:28:07 AM
>> Subject: Re: AppendToProperty MacroDef
>>
>> Let me give you a better example Scot.  Substitution seems to ignore escape characters
entirely.  As the task is written now, I don't imagine there is a way to replace \'s.
>>
>> <project default="main">
>> <taskdef resource="net/sf/antcontrib/antlib.xml"/>
>> <property name="myProp" value="C:\myDog\Loves\Big\Juicy\Bones"/>
>> <property name="myProp2" value="C:\\myDog\\Loves\\Big\\Juicy\\Bones"/>
>> <property name="myProp3" value="C:\myDog\\Loves\Big\\Juicy\Bones"/>
>>   <target name="main">
>>     <propertyregex property="tmpProp" input="${myProp}" override="true" regexp="\\"
replace="\\\\" global="true"/>
>>     <echo message="tmpProp is:  ${tmpProp}"/>
>>     <propertyregex property="tmpProp2" input="${myProp2}" override="true" regexp="\\"
replace="\\\\" global="true"/>
>>     <echo message="tmpProp2 is:  ${tmpProp2}"/>
>>     <propertyregex property="tmpProp3" input="${myProp3}" override="true" regexp="\\"
replace="\\\\" global="true"/>
>>     <echo message="tmpProp3 is:  ${tmpProp3}"/>
>>     <propertyregex property="tmpProp4" input="${myProp}" override="true" regexp="\"
replace="\\" global="true"/>
>>     <echo message="tmpProp4 is:  ${tmpProp4}"/>
>>   </target>
>> </project>
>>
>> Produces:
>>
>> main:
>>      [echo] tmpProp is:  C:\myDog\Loves\Big\Juicy\Bones
>>      [echo] tmpProp2 is:  C:\\myDog\\Loves\\Big\\Juicy\\Bones
>>      [echo] tmpProp3 is:  C:\myDog\\Loves\Big\\Juicy\Bones
>> BUILD FAILED
>> java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
>> \
>>  ^
>>         at java.util.regex.Pattern.error(Pattern.java:1650)
>>         at java.util.regex.Pattern.compile(Pattern.java:1403)
>>         at java.util.regex.Pattern.<init>(Pattern.java:1124)
>>         at java.util.regex.Pattern.compile(Pattern.java:840)
>>         at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.getCompiledPatter
>> n(Jdk14RegexpMatcher.java:67)
>>         at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.matches(Jdk14Rege
>> xpMatcher.java:94)
>>         at net.sf.antcontrib.property.RegexTask.doReplace(RegexTask.java:135)
>>         at net.sf.antcontrib.property.RegexTask.execute(RegexTask.java:192)
>>         at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
>> java:39)
>>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
>> sorImpl.java:25)
>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>         at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
>> a:106)
>>         at org.apache.tools.ant.Task.perform(Task.java:348)
>>         at org.apache.tools.ant.Target.execute(Target.java:357)
>>         at org.apache.tools.ant.Target.performTasks(Target.java:385)
>>         at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
>>         at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
>>         at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
>> cutor.java:41)
>>         at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
>>         at org.apache.tools.ant.Main.runBuild(Main.java:758)
>>         at org.apache.tools.ant.Main.startAnt(Main.java:217)
>>         at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
>>         at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
>> Total time: 0 seconds
>>
>>
>>
>>
>> ________________________________
>> From: Scot P. Floess <sfloess@nc.rr.com>
>> To: Ant Users List <user@ant.apache.org>
>> Sent: Thu, January 21, 2010 8:09:33 AM
>> Subject: Re: AppendToProperty MacroDef
>>
>>
>> I might be wrong but I think the output you are seeing is correct - as in 
>> the \ is escapeed thereby printing only 1 \ not 2...  For example if you 
>> consider \n it is emitted as a newline...but if you do \\n the output will 
>> be a literal \n (as in a backslash followed by the letter n)...  Try 
>> printing out the property when you don't do the regex for \\\\ - for 
>> example something like:
>>
>> C:\foo\nbar
>>
>> I bet the output has a new line in it ;)
>>
>> On Thu, 21 Jan 2010, Eric Fetzer wrote:
>>
>>> Yeah, that's what I did.  The small repro just shows that it doesn't affect
the string with the \'s whatsoever...  If there were actual instances of \\ in there maybe
it would do something, but there are only \'s.  Seems like for the saving down of the property,
it uses escape characters, but for the substitution part, it doesn't.  I'd call it a bug
I think.
>>>
>>>
>>>
>>> On Jan 21, 2010, at 7:10 AM, "Scot P. Floess" <sfloess@nc.rr.com> wrote:
>>>
>>>
>>> OK, so in looking more closely, what I meant to say was to do the <propertyregex
property="tmpProp"  first and then the one you had initially afterward using the first :)
>>>
>>> If I get a free moment today I'll see if I can get it to work...  Little busy
at the moment - maybe at lunch today :)
>>>
>>> On Wed, 20 Jan 2010, Scot P. Floess wrote:
>>>
>>>
>>> Yeah, I'll give it some thought and see if there is something I can think of
tomorrow as well :)
>>>
>>> On Wed, 20 Jan 2010, Eric Fetzer wrote:
>>>
>>> I tried this Scot, but it didn't do it.  So here's an easy repro:
>>> <project default="main">
>>> <taskdef resource="net/sf/antcontrib/antlib.xml"/>
>>> <property name="myProp" value="C:\myDog\Loves\Big\Juicy\Bones"/>
>>>   <target name="main">
>>>     <propertyregex property="tmpProp" input="${myProp}" override="true"
regexp="\\" replace="\\\\" global="true"/>
>>>     <echo message="tmpProp is:  ${tmpProp}"/>
>>>   </target>
>>> </project>
>>> It produces:
>>> [echo] tmpProp is:  C:\myDog\Loves\Big\Juicy\Bones
>>> If I change it to:
>>> <project default="main">
>>> <taskdef resource="net/sf/antcontrib/antlib.xml"/>
>>> <property name="myProp" value="C:\myDog\Loves\Big\Juicy\Bones"/>
>>>   <target name="main">
>>>     <propertyregex property="tmpProp" input="${myProp}" override="true"
regexp="\" replace="\\" global="true"/>
>>>     <echo message="tmpProp is:  ${tmpProp}"/>
>>>   </target>
>>> </project>
>>> it crashes with:
>>> java.util.regex.PatternSyntaxException: Unexpected internal error near index
1
>>> \
>>> ^
>>>         at java.util.regex.Pattern.error(Pattern.java:1650)
>>>         at java.util.regex.Pattern.compile(Pattern.java:1403)
>>>         at java.util.regex.Pattern.<init>(Pattern.java:1124)
>>>         at java.util.regex.Pattern.compile(Pattern.java:840)
>>>         at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.getCompiledPatter
>>> n(Jdk14RegexpMatcher.java:67)
>>>         at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.matches(Jdk14Rege
>>> xpMatcher.java:94)
>>>         at net.sf.antcontrib.property.RegexTask.doReplace(RegexTask.java:135)
>>>         at net.sf.antcontrib.property.RegexTask.execute(RegexTask.java:192)
>>>         at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
>>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
>>> java:39)
>>>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
>>> sorImpl.java:25)
>>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>>         at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
>>> a:106)
>>>         at org.apache.tools.ant.Task.perform(Task.java:348)
>>>         at org.apache.tools.ant.Target.execute(Target.java:357)
>>>         at org.apache.tools.ant.Target.performTasks(Target.java:385)
>>>         at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
>>>         at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
>>>         at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
>>> cutor.java:41)
>>>         at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
>>>         at org.apache.tools.ant.Main.runBuild(Main.java:758)
>>>         at org.apache.tools.ant.Main.startAnt(Main.java:217)
>>>         at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
>>>         at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
>>> I don't know that what we're trying to do is possible with propertyregex.  It
seems it may need some scripting.  All I'm really trying to do is:
>>> if(property1.indexOf(string1) >= 0) then return true;
>>> I'll take a look at how to achieve this tomorrow.  Thanks!
>>> Eric
>>> ________________________________
>>> From: Scot P. Floess <sfloess@nc.rr.com>
>>> To: Ant Users List <user@ant.apache.org>
>>> Sent: Wed, January 20, 2010 2:21:41 PM
>>> Subject: Re: AppendToProperty MacroDef
>>> Mmm - you may need to do this before your first propertyregex
>>> <propertyregex property="tmpProp" input="${propertyList}" override="true"
regexp="\\" replace="\\\\" globale="true"/>
>>> Basically the above will escape the \
>>> On Wed, 20 Jan 2010, Eric Fetzer wrote:
>>> Well, out of that error and on to the next.  It seems that PropertyRegEx has
an issue with the "\" as well.  I wrote a different macrodef that works without slashes,
but not with slashes.  Anyone see a better way?
>>>   <macrodef name="md.isInPropList" description="Find if a dir is a subdir
of any dir in the list">
>>>     <attribute name="var.item"/>
>>>     <attribute name="var.itemList"/>
>>>     <sequential>
>>>       <!--First get rid of any values left from previous calls to this
md and set to false-->
>>>       <unset name="isInList"/>
>>>       <property name="isInList" value="false"/>
>>>       <!--For loop on each item in itemlist to see if any of them are true-->
>>>       <for list="@{var.itemList}" param="item">
>>>         <sequential>
>>>           <!--Make sure regExResult isn't left over-->
>>>           <unset name="regExResult"/>
>>>           <!--Regex expression that will result in the value if it is
in there-->
>>>           <propertyregex property="regExResult"
>>>             input="${propertyList}"
>>>             override="true"
>>>             regexp=".*(@{item})"
>>>             select="\1"
>>>             casesensitive="false"
>>>           />
>>>           <!--If regExResult is set to the value of the item, we have
a match-->
>>>           <if>
>>>             <equals arg1="${regExResult}" arg2="${item}"/>
>>>             <then>
>>>               <unset name="isInList"/>
>>>               <property name="isInList" value="true"/>
>>>             </then>
>>>           </if>
>>>         </sequential>
>>>       </for>
>>>     </sequential>
>>>   </macrodef>
>>> Thanks,
>>> Eric
>>> ________________________________
>>> From: Eric Fetzer <elstonkers@yahoo.com>
>>> To: Ant Users List <user@ant.apache.org>
>>> Sent: Wed, January 20, 2010 1:40:34 PM
>>> Subject: Re: AppendToProperty MacroDef
>>> Beautiful, thanks Scott!
>>> On Jan 20, 2010, at 1:18 PM, "Scot P. Floess" <sfloess@nc.rr.com> wrote:
>>> You could use Ant Contrib's var task - probably be a little easier :)
>>> <macrodef name="md.AppendProperty">
>>> <attribute name="var.propertyName"/>
>>> <attribute name="var.stringAppend"/>
>>> <sequential>
>>>   <var name="@{var.propertyName}" value="${@{var.propertyName}}@{var.stringAppend}"/>
>>> </sequential>
>>> </macrodef>
>>> On Wed, 20 Jan 2010, Eric Fetzer wrote:
>>> Hi all.  I wrote a MacroDef to append a string to a property.  All works as
planned until you slip a "\" in there and then it gets jacked up.  My javascripting has MUCH
to be desired.  Any help?
>>>   <macrodef name="md.AppendProperty">
>>>     <attribute name="var.propertyName"/>
>>>     <attribute name="var.stringAppend"/>
>>>     <sequential>
>>>       <script language="javascript"> <![CDATA[
>>>         curVal=project.getProperty("@{var.propertyName}");
>>>         project.setProperty("@{var.propertyName}",curVal+"@{var.stringAppend}");
>>>         ]]>
>>>       </script>
>>>     </sequential>
>>>   </macrodef>
>>> Thanks,
>>> Eric
>>> Scot P. Floess
>>> 27 Lake Royale
>>> Louisburg, NC  27549
>>> 252-478-8087 (Home)
>>> 919-890-8117 (Work)
>>> Chief Architect JPlate  http://sourceforge.net/projects/jplate
>>> Chief Architect JavaPIM  http://sourceforge.net/projects/javapim
>>> Architect Keros          http://sourceforge.net/projects/keros
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: user-help@ant.apache.org
>>>       ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: user-help@ant.apache.org
>>> Scot P. Floess
>>> 27 Lake Royale
>>> Louisburg, NC  27549
>>> 252-478-8087 (Home)
>>> 919-890-8117 (Work)
>>> Chief Architect JPlate  http://sourceforge.net/projects/jplate
>>> Chief Architect JavaPIM  http://sourceforge.net/projects/javapim
>>> Architect Keros          http://sourceforge.net/projects/keros
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: user-help@ant.apache.org
>>>
>>> Scot P. Floess
>>> 27 Lake Royale
>>> Louisburg, NC  27549
>>>
>>> 252-478-8087 (Home)
>>> 919-890-8117 (Work)
>>>
>>> Chief Architect JPlate  http://sourceforge.net/projects/jplate
>>> Chief Architect JavaPIM  http://sourceforge.net/projects/javapim
>>>
>>> Architect Keros          http://sourceforge.net/projects/keros
>>>
>>>
>>> Scot P. Floess
>>> 27 Lake Royale
>>> Louisburg, NC  27549
>>>
>>> 252-478-8087 (Home)
>>> 919-890-8117 (Work)
>>>
>>> Chief Architect JPlate  http://sourceforge.net/projects/jplate
>>> Chief Architect JavaPIM  http://sourceforge.net/projects/javapim
>>>
>>> Architect Keros          http://sourceforge.net/projects/keros
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: user-help@ant.apache.org
>>>
>>>
>>>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: user-help@ant.apache.org
>>>
>>>
>>
>> Scot P. Floess
>> 27 Lake Royale
>> Louisburg, NC  27549
>>
>> 252-478-8087 (Home)
>> 919-890-8117 (Work)
>>
>> Chief Architect JPlate  http://sourceforge.net/projects/jplate
>> Chief Architect JavaPIM  http://sourceforge.net/projects/javapim
>>
>> Architect Keros          http://sourceforge.net/projects/keros
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>> For additional commands, e-mail: user-help@ant.apache.org
>
> Scot P. Floess
> 27 Lake Royale
> Louisburg, NC  27549
>
> 252-478-8087 (Home)
> 919-890-8117 (Work)
>
> Chief Architect JPlate  http://sourceforge.net/projects/jplate
> Chief Architect JavaPIM  http://sourceforge.net/projects/javapim
>
> Architect Keros          http://sourceforge.net/projects/keros
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
> For additional commands, e-mail: user-help@ant.apache.org

Scot P. Floess
27 Lake Royale
Louisburg, NC  27549

252-478-8087 (Home)
919-890-8117 (Work)

Chief Architect JPlate  http://sourceforge.net/projects/jplate
Chief Architect JavaPIM  http://sourceforge.net/projects/javapim

Architect Keros          http://sourceforge.net/projects/keros

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


      
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message