tools/multi/c/patch/3_4_1 -text
tools/multi/common/Makefile-multi.inc -text
tools/multi/j/Makefile-j.inc -text
+tools/multi/j/icu4jscan/.classpath -text
+tools/multi/j/icu4jscan/.project -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/CapDocument.java -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/CapElement.java -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/CapNode.java -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/CapScan.java -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/ScanICU.java -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/ScanJava.java -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/SimpleScan.java -text
+tools/multi/j/icu4jscan/src/com/ibm/icu/dev/scan/Spinner.java -text
tools/multi/proj/provider/Makefile.local-sample -text
tools/multi/proj/provider/icu-config.sed -text
tools/multi/proj/provider/readme.txt -text
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/CLDR_JAR"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/ICU_META_LIB"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/ICU_UTILITIES"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>icu4jscan</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+package com.ibm.icu.dev.scan;
+
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+public class CapDocument implements CapNode {
+
+ public class TextCap extends CapElement {
+ TextCap(String str) {
+ super(str);
+ }
+
+ public void write(PrintWriter pw, int i) {
+ writeIndent(pw,i);
+ pw.write(getName()+"\n");
+ }
+ }
+
+ public class CommentElement extends CapElement {
+ CommentElement(String str) {
+ super(str);
+ }
+ public void write(PrintWriter pw, int indent) {
+ writeIndent(pw,indent);
+ pw.write("<!-- "+getName()+" -->\n");
+ }
+ }
+
+ TagElement root = new TagElement();
+
+ public class TagElement extends CapElement {
+ public TagElement() {
+ super("");
+ }
+ public TagElement(String name) {
+ super(name);
+ }
+
+ public void write(PrintWriter pw, int indent) {
+ if(getName().length()>0) {
+ writeIndent(pw,indent);
+ pw.write("<"+getName());
+ if(!attributes.isEmpty()) {
+ for(Iterator iter = attributes.entrySet().iterator();iter.hasNext();) {
+ Map.Entry o = (Map.Entry)iter.next();
+ pw.write(" "+o.getKey().toString()+"=\""+o.getValue()+"\"");
+ }
+ }
+ pw.write(">\n");
+ indent++;
+ }
+
+ for(Iterator iter = children.iterator();iter.hasNext();) {
+ CapNode ch = (CapNode)iter.next();
+ ch.write(pw, indent);
+ }
+
+ if(getName().length()>0) {
+ indent--;
+ writeIndent(pw,indent);
+ pw.write("</"+getName());
+ pw.write(">\n");
+ }
+ }
+ }
+
+ private static void writeIndent(PrintWriter pw, int indent) {
+ for(;indent>0;indent--) {
+ pw.write(' ');
+ }
+ }
+
+ public CapElement createCapElement(String name) {
+ return new TagElement(name);
+ }
+
+ public void appendChild(CapElement base) {
+ root.appendChild(base);
+ }
+
+ public static CapDocument newCapDocument() {
+ return new CapDocument();
+ }
+
+ public static void printDOMTree(CapDocument out, PrintWriter pw,
+ String string, Object object) {
+ pw.write(string+"\n");
+ out.root.write(pw,0);
+ }
+
+ public void write(PrintWriter pw, int indent) {
+ root.write(pw,0);
+ }
+
+ public CapNode createTextNode(String trim) {
+ return new TextCap(trim);
+ }
+
+ public CapElement createComment(String com) {
+ return new CommentElement(com);
+ }
+
+ public int compareTo(Object arg0) {
+ return getName().compareTo(((CapNode)arg0).getName());
+ }
+
+ public String getName() {
+ return root.getName();
+ }
+}
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+package com.ibm.icu.dev.scan;
+
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+public abstract class CapElement implements CapNode {
+ String com;
+ CapElement(String str) {
+ com = str;
+ }
+
+ public String getName() {
+ return com;
+ }
+
+ public abstract void write(PrintWriter pw, int i);
+
+ public int compareTo(Object arg0) {
+ if(arg0 == this) return 0;
+ int str = getName().compareTo(((CapNode)arg0).getName());
+ if(str!=0) return str;
+
+ if(arg0 instanceof CapElement) {
+ CapElement oth = (CapElement)arg0;
+ return attributes.toString().compareTo(oth.attributes.toString());
+ }
+ return 0;
+ }
+
+ Map attributes = new HashMap();
+ Set children = new TreeSet();
+ public void setAttribute(String k, String v) {
+ attributes.put(k, v);
+
+ }
+
+ public void appendChild(CapNode e) {
+ children.add(e);
+
+ }
+
+ public String getNodeName() {
+ return getName();
+ }
+
+}
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+package com.ibm.icu.dev.scan;
+
+import java.io.PrintWriter;
+
+public interface CapNode extends Comparable {
+
+ void write(PrintWriter pw, int i);
+
+ String getName();
+
+}
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+package com.ibm.icu.dev.scan;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Calendar;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.unicode.cldr.util.LDMLUtilities;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.ibm.icu.dev.meta.IcuInfo;
+import com.ibm.icu.dev.meta.XMLUtil;
+import com.ibm.icu.util.VersionInfo;
+
+public abstract class CapScan {
+
+ /** Capabilities string **/
+ public static final String FORMATTING = "formatting";
+ public static final String COLLATION = "collation";
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) throws IOException, ParserConfigurationException {
+
+ System.err.println("# "+CapScan.class.getSimpleName()+": This is just the base class. Use a subclass.");
+ System.exit(1);
+ }
+
+ protected String prog;
+
+ protected Element addCapability(Document out, Element capabilities, String name) {
+ return addCapability(out, capabilities, name, (String)null);
+ }
+ protected Element addCapability(Document out, Element capabilities, String name,
+ String version) {
+
+ Element e = out.createElement(IcuInfo.FEATURE);
+ e.setAttribute(IcuInfo.TYPE,name.trim());
+ if(version!=null) {
+ e.setAttribute(IcuInfo.VERSION,version.trim());
+ }
+ capabilities.appendChild(e);
+ return e;
+ }
+
+ protected Element addCapability(Document out, Element capabilities, String name,
+ VersionInfo version) {
+ return addCapability(out, capabilities, name, IcuInfo.versionInfoToShortString(version));
+ }
+
+ protected CapScan(String prog) {
+ this.prog = prog;
+ }
+
+ Document out;
+
+ protected Element createProduct(String productName) {
+ Element base = out.createElement(IcuInfo.ICU_INFO);
+ out.appendChild(base);
+
+ Element products = out.createElement(IcuInfo.ICU_PRODUCTS);
+ base.appendChild(products);
+
+ Element product = out.createElement(IcuInfo.ICU_PRODUCT);
+ product.setAttribute(IcuInfo.TYPE, productName);
+ products.appendChild(product);
+ return product;
+ }
+
+ protected Element createRelease(Element product, String version) {
+ Element releases = out.createElement(IcuInfo.RELEASES);
+ product.appendChild(releases);
+
+ Element release = out.createElement(IcuInfo.RELEASE);
+ release.setAttribute(IcuInfo.VERSION, version);
+ releases.appendChild(release);
+ return release;
+ }
+
+ protected void runMain(String args[]) throws IOException, ParserConfigurationException {
+
+
+ System.err.println("# "+prog+": startup.");
+ // TODO Auto-generated method stub
+ out = XMLUtil.getBuilder().newDocument();
+
+ Element product = createProduct(getProduct());
+
+ Element release = createRelease(product, getRelease());
+
+
+ Element capabilities = out.createElement(IcuInfo.CAPABILITIES);
+ release.appendChild(capabilities);
+
+ addCapabilitiesTo(capabilities);
+
+
+ // write out
+ OutputStream outstr = null;
+ outstr = System.out;
+// java.io.FileOutputStream fos = null;
+// if(outfile!=null) {
+// fos = new FileOutputStream(outfile);
+// out = fos;
+// if(verbose) System.err.println("# Write <"+outfile+">");
+// } else {
+// out = System.out;
+// if(verbose) System.err.println("# Write <stdout>");
+// }
+// try {
+ java.io.OutputStreamWriter writer = new java.io.OutputStreamWriter(
+ outstr);
+ String copy = "";
+ if(true) copy = ("<!-- Copyright (c) "+Calendar.getInstance().get(Calendar.YEAR)+" IBM Corporation and Others, All Rights Reserved. -->\n");
+ LDMLUtilities.printDOMTree(out, new PrintWriter(writer),copy+"\n<!DOCTYPE icuInfo SYSTEM \"http://icu-project.org/dtd/icumeta.dtd\">\n",null); //
+ writer.flush();
+ }
+ protected abstract String getProduct();
+
+ protected abstract String getRelease();
+
+ protected abstract void addCapabilitiesTo(Element capabilities);
+}
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+/**
+ *
+ */
+package com.ibm.icu.dev.scan;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.unicode.cldr.util.LDMLUtilities;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import com.ibm.icu.dev.meta.IcuInfo;
+import com.ibm.icu.dev.meta.XMLUtil;
+import com.ibm.icu.lang.UCharacter;
+import com.ibm.icu.text.Collator;
+import com.ibm.icu.text.DateFormat;
+import com.ibm.icu.text.RuleBasedCollator;
+import com.ibm.icu.util.TimeZone;
+import com.ibm.icu.util.ULocale;
+import com.ibm.icu.util.VersionInfo;
+
+/**
+ * @author srl
+ *
+ */
+public class ScanICU extends CapScan{
+
+ protected ScanICU() {
+ super(ScanICU.class.getName());
+ }
+
+ /**
+ * @param args
+ * @throws ParserConfigurationException
+ * @throws IOException
+ * @throws IOException
+ * @throws ParserConfigurationException
+ * @throws IOException
+ */
+ public static void main(String[] args) throws IOException, ParserConfigurationException {
+ new ScanICU().runMain(args);
+ }
+
+ protected String getProduct() {
+ return "icu4j";
+ }
+
+ protected String getRelease() {
+ /*
+ * try {
+ } catch(NoClassDefFoundError ncdf) {
+ System.err.println(prog+": Can't get ICU version: " + ncdf.toString());
+ System.exit(1);
+ } catch(NoSuchFieldError nsme) {
+ System.err.println(prog+": Can't get ICU version: " + nsme.toString());
+ System.exit(1);
+ }
+ */
+ return IcuInfo.versionInfoToShortString(VersionInfo.ICU_VERSION);
+ }
+
+ protected void addCapabilitiesTo(Element capabilities) {
+
+ addCapability(out, capabilities, "unicode", UCharacter.getUnicodeVersion());
+ try {
+ addCapability(out, capabilities, "uca", Collator.getInstance().getUCAVersion());
+ } catch(NoSuchMethodError nsme) {
+ System.err.println(prog+": Note: "+nsme.toString());
+ }
+ try {
+ addCapability(out, capabilities, "tz", TimeZone.getTZDataVersion());
+ } catch(NoSuchMethodError nsme) {
+ System.err.println(prog+": Note: "+nsme.toString());
+ }
+ addFormatting(capabilities);
+ addCollation(capabilities);
+ }
+
+ void addFormatting(Element capabilities) {
+ Element locs = addCapability(out, capabilities, CapScan.FORMATTING);
+
+ try {
+ ULocale available[] = ULocale.getAvailableLocales();
+ locs.setAttribute("total", new Integer(available.length).toString());
+
+ String locinfo = "";
+
+ Spinner sp = new Spinner(locs.getNodeName(),available.length);
+ for(int i=0;i<available.length;i++) {
+ ULocale loc = available[i];
+ if(loc.toString().equals("root")) continue;
+ try {
+ DateFormat fmt = null;
+ try {
+ fmt = DateFormat.getTimeInstance(DateFormat.FULL, loc);
+ }catch (Throwable t) {
+ fmt = DateFormat.getTimeInstance(DateFormat.FULL, loc.toLocale());
+ }
+ fmt.format(new Date(1234));
+ locinfo = locinfo + " " + loc.toString();
+ sp.spin(loc.getBaseName());
+ } catch (Throwable t) {
+ System.err.println(prog+": loc fail: " + loc + " - " + t.toString());
+ }
+ }
+
+ Node tt = out.createTextNode(locinfo.trim());
+ locs.appendChild(tt);
+ } catch(NoClassDefFoundError ncdf) {
+ System.err.println(prog+": locales: " + ncdf.toString());
+ } catch(NoSuchMethodError ncdf) {
+ System.err.println(prog+": locales: " + ncdf.toString());
+ }
+ }
+ void addCollation(Element capabilities) {
+ {
+ Element locs = addCapability(out, capabilities, CapScan.COLLATION);
+
+ try {
+ ULocale available[] = Collator.getAvailableULocales();
+ Spinner sp = new Spinner(locs.getNodeName(),available.length);
+ locs.setAttribute("total", new Integer(available.length).toString());
+
+ String locinfo = "";
+
+ for(int i=0;i<available.length;i++) {
+ ULocale loc = available[i];
+ if(loc.toString().equals("root")) continue;
+ try {
+ // Collator.getInstance(loc);
+ locinfo = locinfo + " " + loc.toString();
+ sp.spin(loc.getBaseName());
+ } catch (Throwable t) {
+ System.err.println("loc fail: " + loc + " - " + t.toString());
+ }
+ }
+
+ Node tt = out.createTextNode(locinfo.trim());
+ locs.appendChild(tt);
+ } catch(NoClassDefFoundError ncdf) {
+ System.err.println("locales: " + ncdf.toString());
+ } catch(NoSuchMethodError ncdf) {
+ System.err.println("locales: " + ncdf.toString());
+ }
+ }
+ }
+}
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+
+package com.ibm.icu.dev.scan;
+
+import java.io.IOException;
+import java.text.Collator;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+
+import com.ibm.icu.util.ULocale;
+
+/**
+ * @author srl
+ *
+ */
+public class ScanJava extends SimpleScan {
+
+ /**
+ * @param prog
+ */
+ public ScanJava() {
+ super(ScanJava.class.getName());
+ }
+
+ /* (non-Javadoc)
+ * @see com.ibm.icu.dev.scan.CapScan#addCapabilitiesTo(org.w3c.dom.CapElement)
+ */
+ protected void addCapabilitiesTo(CapElement capabilities) {
+ addFormatting(capabilities);
+ addCollation(capabilities);
+ }
+
+ private void addCollation(CapElement capabilities) {
+ CapElement locs = addCapability(out, capabilities, CapScan.COLLATION);
+
+ try {
+ Locale available[] = Collator.getAvailableLocales();
+ locs.setAttribute("total", new Integer(available.length).toString());
+ System.err.println("Begin coll!");
+ String locinfo = "";
+
+ Spinner sp = new Spinner(locs.getNodeName(),available.length);
+ for(int i=0;i<available.length;i++) {
+ Locale loc = available[i];
+ if(loc.toString().equals("root")) continue;
+ try {
+ Collator c = Collator.getInstance(loc);
+ DateFormat fmt = DateFormat.getTimeInstance(DateFormat.FULL, loc);
+ fmt.format(new Date(1234));
+ locinfo = locinfo + " " + loc.toString();
+ sp.spin(loc.toString());
+ } catch (Throwable t) {
+ System.err.println(prog+": loc fail: " + loc + " - " + t.toString());
+ }
+ }
+
+ CapNode tt = out.createTextNode(locinfo.trim());
+ locs.appendChild(tt);
+ } catch(NoClassDefFoundError ncdf) {
+ System.err.println(prog+": collation: " + ncdf.toString());
+ } catch(NoSuchMethodError ncdf) {
+ System.err.println(prog+": collation: " + ncdf.toString());
+ }
+
+ locs.appendChild(out.createComment("Note: Java locales have different conventions than ICU."));
+
+ }
+
+ private void addFormatting(CapElement capabilities) {
+ CapElement locs = addCapability(out, capabilities, CapScan.FORMATTING);
+
+ try {
+ Locale available[] = Locale.getAvailableLocales();
+ locs.setAttribute("total", new Integer(available.length).toString());
+
+ String locinfo = "";
+
+ Spinner sp = new Spinner(locs.getNodeName(),available.length);
+ for(int i=0;i<available.length;i++) {
+ Locale loc = available[i];
+ if(loc.toString().equals("root")) continue;
+ try {
+ DateFormat fmt = DateFormat.getTimeInstance(DateFormat.FULL, loc);
+ fmt.format(new Date(1234));
+ locinfo = locinfo + " " + loc.toString();
+ sp.spin(loc.toString());
+ } catch (Throwable t) {
+ System.err.println(prog+": loc fail: " + loc + " - " + t.toString());
+ }
+ }
+
+ CapNode tt = out.createTextNode(locinfo.trim());
+ locs.appendChild(tt);
+ } catch(NoClassDefFoundError ncdf) {
+ System.err.println(prog+": locales: " + ncdf.toString());
+ } catch(NoSuchMethodError ncdf) {
+ System.err.println(prog+": locales: " + ncdf.toString());
+ }
+
+ locs.appendChild(out.createComment("Note: Java locales have different conventions than ICU."));
+
+ }
+
+ /* (non-Javadoc)
+ * @see com.ibm.icu.dev.scan.CapScan#getProduct()
+ */
+ protected String getProduct() {
+ return "java";
+ }
+
+ /* (non-Javadoc)
+ * @see com.ibm.icu.dev.scan.CapScan#getRelease()
+ */
+ protected String getRelease() {
+ String ver = System.getProperty("java.version");
+ int u = ver.indexOf('_');
+ if(u>0) {
+ ver = ver.substring(0,u);
+ }
+ return ver;
+ }
+
+ /**
+ * @param args
+ * @throws ParserConfigurationException
+ * @throws IOException
+ */
+ public static void main(String[] args) throws IOException {
+ new ScanJava().runMain(args);
+ }
+
+}
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+package com.ibm.icu.dev.scan;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Calendar;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.unicode.cldr.util.LDMLUtilities;
+
+import com.ibm.icu.dev.meta.IcuInfo;
+import com.ibm.icu.dev.meta.XMLUtil;
+import com.ibm.icu.util.VersionInfo;
+
+public abstract class SimpleScan {
+
+ /** Capabilities string **/
+ public static final String FORMATTING = "formatting";
+ public static final String COLLATION = "collation";
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) throws IOException, ParserConfigurationException {
+
+ System.err.println("# "+SimpleScan.class.getSimpleName()+": This is just the base class. Use a subclass.");
+ System.exit(1);
+ }
+
+ protected String prog;
+
+ protected CapElement addCapability(CapDocument out, CapElement capabilities, String name) {
+ return addCapability(out, capabilities, name, (String)null);
+ }
+ protected CapElement addCapability(CapDocument out, CapElement capabilities, String name,
+ String version) {
+
+ CapElement e = out.createCapElement(IcuInfo.FEATURE);
+ e.setAttribute(IcuInfo.TYPE,name.trim());
+ if(version!=null) {
+ e.setAttribute(IcuInfo.VERSION,version.trim());
+ }
+ capabilities.appendChild(e);
+ return e;
+ }
+
+ protected CapElement addCapability(CapDocument out, CapElement capabilities, String name,
+ VersionInfo version) {
+ return addCapability(out, capabilities, name, IcuInfo.versionInfoToShortString(version));
+ }
+
+ protected SimpleScan(String prog) {
+ this.prog = prog;
+ }
+
+ CapDocument out;
+
+ protected CapElement createProduct(String productName) {
+ CapElement base = out.createCapElement(IcuInfo.ICU_INFO);
+ out.appendChild(base);
+
+ CapElement products = out.createCapElement(IcuInfo.ICU_PRODUCTS);
+ base.appendChild(products);
+
+ CapElement product = out.createCapElement(IcuInfo.ICU_PRODUCT);
+ product.setAttribute(IcuInfo.TYPE, productName);
+ products.appendChild(product);
+ return product;
+ }
+
+ protected CapElement createRelease(CapElement product, String version) {
+ CapElement releases = out.createCapElement(IcuInfo.RELEASES);
+ product.appendChild(releases);
+
+ CapElement release = out.createCapElement(IcuInfo.RELEASE);
+ release.setAttribute(IcuInfo.VERSION, version);
+ releases.appendChild(release);
+ return release;
+ }
+
+ protected void runMain(String args[]) throws IOException {
+
+
+ System.err.println("# "+prog+": startup.");
+ out = CapDocument.newCapDocument();
+
+ CapElement product = createProduct(getProduct());
+
+ CapElement release = createRelease(product, getRelease());
+
+
+ CapElement capabilities = out.createCapElement(IcuInfo.CAPABILITIES);
+ release.appendChild(capabilities);
+
+ addCapabilitiesTo(capabilities);
+
+
+ // write out
+ OutputStream outstr = null;
+ outstr = System.out;
+// java.io.FileOutputStream fos = null;
+// if(outfile!=null) {
+// fos = new FileOutputStream(outfile);
+// out = fos;
+// if(verbose) System.err.println("# Write <"+outfile+">");
+// } else {
+// out = System.out;
+// if(verbose) System.err.println("# Write <stdout>");
+// }
+// try {
+ java.io.OutputStreamWriter writer = new java.io.OutputStreamWriter(
+ outstr);
+ String copy = "";
+ if(true) copy = ("<!-- Copyright (c) "+Calendar.getInstance().get(Calendar.YEAR)+" IBM Corporation and Others, All Rights Reserved. -->\n");
+ CapDocument.printDOMTree(out, new PrintWriter(writer),copy+"\n<!DOCTYPE icuInfo SYSTEM \"http://icu-project.org/dtd/icumeta.dtd\">\n",null); //
+ writer.flush();
+ }
+ protected abstract String getProduct();
+
+ protected abstract String getRelease();
+
+ protected abstract void addCapabilitiesTo(CapElement capabilities);
+}
--- /dev/null
+/* Copyright (C) 2008-2012 IBM Corporation and Others. All Rights Reserved. */
+
+package com.ibm.icu.dev.scan;
+
+class Spinner {
+ String str = "";
+ int n = 0;
+ int max = -1;
+ Spinner() {
+ }
+ Spinner(String str) {
+ this.str = str;
+ }
+ Spinner(String str, int max) {
+ this.str = str;
+ this.max = max;
+ }
+ void spin() {
+ spin(null);
+ }
+ void spin(String what) {
+ // TODO: time based.
+ n++;
+ if((n%25)==0) {
+ String nstr="";
+ if(max>0) {
+ nstr="/"+max;
+ }
+ System.err.println("#"+str+".."+n+nstr+" "+(what!=null?what:""));
+ }
+ }
+}
\ No newline at end of file