Reputation: 1007
I want to use ANT build to translate .properties
file into text file (code).
Input file my.properties
:
FOO=foo bar
BAR=bar bar foo
Desired output file Constants.as
:
package foo.bar {
public final class Constants {
public static const FOO:String = "FOO";
public static const BAR:String = "BAR";
}
}
Note: ActionScript can't use properties files like Java, so I need to use this translation as a pre-build task. My properties file is localization and I want the keys as constants.
Upvotes: 0
Views: 436
Reputation: 16235
You could do this by including a filterchain in a concat task.
<concat destfile="Constants.as">
<header filtering="false">
package foo.bar {
public final class Constants {
</header>
<footer filtering="false">
}
}
</footer>
<fileset file="my.properties"/>
<filterchain>
<tokenfilter>
<ignoreblank/>
<trim/>
<replaceregex pattern="(.*)=(.*)" replace=" public static const \1:String = "\2";"/>
</tokenfilter>
</filterchain>
</concat>
Upvotes: 1
Reputation: 1007
I've managed to hack it through scriptdef
in JavaScript.
Any ideas how to do it better?
<scriptdef name="localization-regen" language="javascript">
<attribute name="input.file.path"/>
<attribute name="output.file.category"/>
<attribute name="output.file.package"/>
<attribute name="output.file.dir"/>
<attribute name="output.property"/>
<![CDATA[
importPackage(java.io);
inputFilePath = attributes.get("input.file.path");
outputFileCategory = attributes.get("output.file.category");
outputFilePackage = attributes.get("output.file.package");
outputFileDir = attributes.get("output.file.dir");
outputFileClass = "LocalizationKeys" + outputFileCategory.substring(0, 1).toUpperCase() + outputFileCategory.substring(1, outputFileCategory.length());
inputFile = new File(inputFilePath);
inputStream = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile)));
outputLines = "";
for(line = inputStream.readLine(); line != null; line = inputStream.readLine())
{
vars = line.split("=");
c = vars[0];
if(c.substring(0, 1) == "#") continue;
outputLines += "\t\tpublic static const " + c + ":String = \"" + c + "\";\n";
}
output = "";
output = "package " + outputFilePackage + "\n"
+ "{\n"
+ "\tpublic final class " + outputFileClass + "\n"
+ "\t{\n"
+ outputLines
+ "\t}\n"
+ "}";
outputFilePath = outputFileDir + "/" + outputFileClass+ ".as";
out = new BufferedWriter(new FileWriter(outputFilePath));
out.write(output, 0, output.length);
out.flush();
out.close();
]]>
</scriptdef>
Upvotes: 0