ICU-5801 Merging fixes required for ICU4J 3.8 d02 from trunk to 3.8 release stream.

X-SVN-Rev: 22596
diff --git a/build.xml b/build.xml
index 273cab0..bf1886a 100644
--- a/build.xml
+++ b/build.xml
@@ -947,7 +947,7 @@
     </javac>
   </target>
 
-  <target name="calendarTests" depends="calendar" description="test calendar modular build target">
+  <target name="calendarTests" depends="calendar,testdata" description="test calendar modular build target">
     <javac srcdir="${src.dir}"
            destdir="${build.dir}"
            classpathref="build.classpath"
@@ -960,6 +960,7 @@
     </javac>
   </target>
 
+  <!-- Module: Collator -->
   <target name="copyCollatorData" depends="initBase">
     <unjar src="${icudatajar.file}" dest="${build.dir}">
       <patternset>
@@ -971,7 +972,6 @@
     <touch file="${build.dir}/${icu4j.data.path}/uprops.icu" />
   </target>
 
-  <!-- Module: Collator -->
   <target name="collator" depends="init,copyCollatorData" description="modular build of collator services">
     <javac srcdir="${src.dir}"
            destdir="${build.dir}"
@@ -1064,7 +1064,7 @@
       <include name="com/ibm/icu/util/CalendarServiceShim.java"/>    </javac>
   </target>
 
-  <target name="formatTests" depends="format" description="test format modular build target">
+  <target name="formatTests" depends="format,testdata" description="test format modular build target">
     <javac srcdir="${src.dir}"
            destdir="${build.dir}"
            classpathref="build.classpath"
diff --git a/readme.html b/readme.html
index b5b42a0..0973dbf 100644
--- a/readme.html
+++ b/readme.html
@@ -1714,18 +1714,10 @@
 one of the following:
 </p>
 <ul>
-  <li><tt>java -classpath classes
-com.ibm.icu.dev.demo.calendar.CalendarApp</tt> </li>
-  <li><tt>java -classpath classes
-com.ibm.icu.dev.demo.holiday.HolidayCalendarDemo</tt> </li>
-  <li><tt>java -classpath classes
-com.ibm.icu.dev.demo.rbbi.TextBoundDemo</tt><br>
-(Click in the text, then use <tt>ctrl-N</tt> and <tt>ctrl-P</tt> to
-select the next or previous block of text.) </li>
-  <li><tt>java -classpath classes com.ibm.icu.dev.demo.rbnf.RbnfDemo</tt>
-  </li>
-  <li><tt>java -classpath classes com.ibm.icu.dev.demo.translit.Demo</tt>
-  </li>
+  <li><tt>java -classpath classes com.ibm.icu.dev.demo.calendar.CalendarApp</tt></li>
+  <li><tt>java -classpath classes com.ibm.icu.dev.demo.holiday.HolidayCalendarDemo</tt></li>
+  <li><tt>java -classpath classes com.ibm.icu.dev.demo.rbnf.RbnfDemo</tt></li>
+  <li><tt>java -classpath classes com.ibm.icu.dev.demo.translit.Demo</tt></li>
 </ul>
 <h3 class="doc"><a name="resources">ICU4J Resource Information</a></h3>
 Starting with release 2.1, ICU4J includes its own
diff --git a/src/com/ibm/icu/dev/demo/rbbi/BreakIteratorRules_en_US_DEMO.java b/src/com/ibm/icu/dev/demo/rbbi/BreakIteratorRules_en_US_DEMO.java
deleted file mode 100755
index 1a74f65..0000000
--- a/src/com/ibm/icu/dev/demo/rbbi/BreakIteratorRules_en_US_DEMO.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 1996-2004, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.dev.demo.rbbi;
-
-import java.util.ListResourceBundle;
-
-import com.ibm.icu.impl.ICUData;
-
-/**
- * This resource bundle is included for testing and demonstration purposes only.
- * It applies the dictionary-based algorithm to English text that has had all the
- * spaces removed.  Once we have good test cases for Thai, we will replace this
- * with good resource data (and a good dictionary file) for Thai
- */
-public class BreakIteratorRules_en_US_DEMO extends ListResourceBundle {
-    private static final String DATA_NAME = "/com/ibm/data/misc/english.dict";
-
-    public Object[][] getContents() {
-        final boolean exists = ICUData.exists(DATA_NAME);
-
-        if (!exists) {
-            return new Object[0][0];
-        }
-
-        return new Object[][] {
-            // names of classes to instantiate for the different kinds of break
-            // iterator.  Notice we're now using DictionaryBasedBreakIterator
-            // for word and line breaking.
-            {   "BreakIteratorClasses",
-                new String[] {
-                    "RuleBasedBreakIterator",
-                    // character-break iterator class
-                    "DictionaryBasedBreakIterator",
-                    // word-break iterator class
-                    "DictionaryBasedBreakIterator",
-                    // line-break iterator class
-                    "RuleBasedBreakIterator" } // sentence-break iterator class
-            },
-
-            // These are the same word-breaking rules as are specified in the default
-            // resource, except that the Latin letters, apostrophe, and hyphen are
-            // specified as dictionary characters
-            {
-                "WordBreakRules",
-                // ignore non-spacing marks, enclosing marks, and format characters,
-                // all of which should not influence the algorithm
-                "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
-
-                // lower and upper case Roman letters, apostrophy and dash are
-                // in the English dictionary
-                +"$_dictionary_=[a-zA-Z\\'\\-];"
-
-                // Hindi phrase separator, kanji, katakana, hiragana, CJK diacriticals,
-                // other letters, and digits
-                +"$danda=[\u0964\u0965];"
-                    + "$kanji=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
-                    + "$kata=[\u3099-\u309c\u30a1-\u30fe];"
-                    + "$hira=[\u3041-\u309e\u30fc];"
-                    + "$let=[[[:L:][:Mc:]]-[$kanji$kata$hira]];"
-                    + "$dgt=[:N:];"
-
-                // punctuation that can occur in the middle of a word: currently
-                // dashes, apostrophes, and quotation marks
-                +"$mid_word=[[:Pd:]\u00ad\u2027\\\"\\\'];"
-
-                // punctuation that can occur in the middle of a number: currently
-                // apostrophes, qoutation marks, periods, commas, and the Arabic
-                // decimal point
-                +"$mid_num=[\\\"\\\'\\,\u066b\\.];"
-
-                // punctuation that can occur at the beginning of a number: currently
-                // the period, the number sign, and all currency symbols except the cents sign
-                +"$pre_num=[[[:Sc:]-[\u00a2]]\\#\\.];"
-
-                // punctuation that can occur at the end of a number: currently
-                // the percent, per-thousand, per-ten-thousand, and Arabic percent
-                // signs, the cents sign, and the ampersand
-                +"$post_num=[\\%\\&\u00a2\u066a\u2030\u2031];"
-
-                // line separators: currently LF, FF, PS, and LS
-                +"$ls=[\n\u000c\u2028\u2029];"
-
-                // whitespace: all space separators and the tab character
-                +"$ws=[[:Zs:]\t];"
-
-                // a word is a sequence of letters that may contain internal
-                // punctuation, as long as it begins and ends with a letter and
-                // never contains two punctuation marks in a row
-                +"$word=($let+($mid_word$let+)*$danda?);"
-
-                // a number is a sequence of digits that may contain internal
-                // punctuation, as long as it begins and ends with a digit and
-                // never contains two punctuation marks in a row.
-                +"$number=($dgt+($mid_num$dgt+)*);"
-
-                // break after every character, with the following exceptions
-                // (this will cause punctuation marks that aren't considered
-                // part of words or numbers to be treated as words unto themselves)
-                +".;"
-
-                // keep together any sequence of contiguous words and numbers
-                // (including just one of either), plus an optional trailing
-                // number-suffix character
-                +"$word?($number$word)*($number$post_num?)?;"
-
-                // keep together and sequence of contiguous words and numbers
-                // that starts with a number-prefix character and a number,
-                // and may end with a number-suffix character
-                +"$pre_num($number$word)*($number$post_num?)?;"
-
-                // keep together runs of whitespace (optionally with a single trailing
-                // line separator or CRLF sequence)
-                +"$ws*\r?$ls?;"
-
-                // keep together runs of Katakana
-                +"$kata*;"
-
-                // keep together runs of Hiragana
-                +"$hira*;"
-
-                // keep together runs of Kanji
-                +"$kanji*;" },
-
-            // These are the same line-breaking rules as are specified in the default
-            // resource, except that the Latin letters, apostrophe, and hyphen are
-            // specified as dictionary characters
-            {   "LineBreakRules",
-                // ignore non-spacing marks, enclosing marks, and format characters
-                "$_ignore_=[[:Mn:][:Me:][:Cf:]];"
-
-                // lower and upper case Roman letters, apostrophy and dash
-                // are in the English dictionary
-                +"$_dictionary_=[a-zA-Z\\'\\-];"
-
-                // Hindi phrase separators
-                +"$danda=[\u0964\u0965];"
-
-                // characters that always cause a break: ETX, tab, LF, FF, LS, and PS
-                +"$break=[\u0003\t\n\f\u2028\u2029];"
-
-                // characters that always prevent a break: the non-breaking space
-                // and similar characters
-                +"$nbsp=[\u00a0\u2007\u2011\ufeff];"
-
-                // whitespace: space separators and control characters, except for
-                // CR and the other characters mentioned above
-                +"$space=[[[:Zs:][:Cc:]]-[$nbsp$break\r]];"
-
-                // dashes: dash punctuation and the discretionary hyphen, except for
-                // non-breaking hyphens
-                +"$dash=[[[:Pd:]\u00ad]-[$nbsp]];"
-
-                // characters that stick to a word if they precede it: currency symbols
-                // (except the cents sign) and starting punctuation
-                +"$pre_word=[[[:Sc:]-[\u00a2]][:Ps:]\\\"\\\'];"
-
-                // characters that stick to a word if they follow it: ending punctuation,
-                // other punctuation that usually occurs at the end of a sentence,
-                // small Kana characters, some CJK diacritics, etc.
-                +"$post_word=[[:Pe:]\\!\\\"\\\'\\%\\.\\,\\:\\;\\?\u00a2\u00b0\u066a\u2030-\u2034"
-                    + "\u2103\u2105\u2109\u3001\u3002\u3005\u3041\u3043\u3045\u3047\u3049\u3063"
-                    + "\u3083\u3085\u3087\u308e\u3099-\u309e\u30a1\u30a3\u30a5\u30a7\u30a9"
-                    + "\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u30fc-\u30fe\uff01\uff0c"
-                    + "\uff0e\uff1f];"
-
-                // Kanji: actually includes both Kanji and Kana, except for small Kana and
-                // CJK diacritics
-                +"$kanji=[[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa]-[$post_word$_ignore_]];"
-
-                // digits
-                +"$digit=[[:Nd:][:No:]];"
-
-                // punctuation that can occur in the middle of a number: periods and commas
-                +"$mid_num=[\\.\\,];"
-
-                // everything not mentioned above, plus the quote marks (which are both
-                // <pre-word>, <post-word>, and <char>)
-                +"$char=[^$break$space$dash$kanji$nbsp$_ignore_$pre_word$post_word$mid_num$danda\r\\\"\\\'];"
-
-                // a "number" is a run of prefix characters and dashes, followed by one or
-                // more digits with isolated number-punctuation characters interspersed
-                +"$number=([$pre_word$dash]*$digit+($mid_num$digit+)*);"
-
-                // the basic core of a word can be either a "number" as defined above, a single
-                // "Kanji" character, or a run of any number of not-explicitly-mentioned
-                // characters (this includes Latin letters)
-                +"$word_core=([$pre_word$char]*|$kanji|$number);"
-
-                // a word may end with an optional suffix that be either a run of one or
-                // more dashes or a run of word-suffix characters, followed by an optional
-                // run of whitespace
-                +"$word_suffix=(($dash+|$post_word*)$space*);"
-
-                // a word, thus, is an optional run of word-prefix characters, followed by
-                // a word core and a word suffix (the syntax of <word-core> and <word-suffix>
-                // actually allows either of them to match the empty string, putting a break
-                // between things like ")(" or "aaa(aaa"
-                +"$word=($pre_word*$word_core$word_suffix);"
-
-                // finally, the rule that does the work: Keep together any run of words that
-                // are joined by runs of one of more non-spacing mark.  Also keep a trailing
-                // line-break character or CRLF combination with the word.  (line separators
-                // "win" over nbsp's)
-                +"$word($nbsp+$word)*\r?$break?;" },
-
-            // these two resources specify the pathnames of the dictionary files to
-            // use for word breaking and line breaking.  Both currently refer to 
-            // a file called english.dict placed in com.ibm.icu.impl.data
-            // somewhere in the class path.  It's important to note that
-            // english.dict was created for testing purposes only, and doesn't
-            // come anywhere close to being an exhaustive dictionary of English
-            // words (basically, it contains all the words in the Declaration of
-            // Independence, and the Revised Standard Version of the book of Genesis,
-            // plus a few other words thrown in to show more interesting cases).
-            // { "WordBreakDictionary", "com\\ibm\\text\\resources\\english.dict" },
-            // { "LineBreakDictionary", "com\\ibm\\text\\resources\\english.dict" }
-            {   "WordBreakDictionary", DATA_NAME }, 
-            {   "LineBreakDictionary", DATA_NAME }
-        };
-    }
-}
diff --git a/src/com/ibm/icu/dev/demo/rbbi/DBBIDemo.java b/src/com/ibm/icu/dev/demo/rbbi/DBBIDemo.java
deleted file mode 100755
index 29ea548..0000000
--- a/src/com/ibm/icu/dev/demo/rbbi/DBBIDemo.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 1996-2007, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.dev.demo.rbbi;
-
-import java.awt.*;
-import java.awt.event.WindowEvent;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.ItemEvent;
-import javax.swing.JTextArea;
-import javax.swing.JScrollPane;
-import javax.swing.BorderFactory;
-import java.util.*;
-import com.ibm.icu.dev.demo.impl.*;
-import com.ibm.icu.text.BreakIterator;
-
-public class DBBIDemo extends DemoApplet
-{
-    /**
-     * For serialization
-     */
-    private static final long serialVersionUID = 7175919574190623523L;
-
-    public static void main(String argv[]) {
-        Locale.setDefault(new Locale("en", "US", "DEMO"));
-        new DBBIDemo().showDemo();
-    }
-
-    public Frame createDemoFrame(DemoApplet applet) {
-        return new DBBIFrame(applet);
-    }
-}
-
-
-
-class DBBIFrame extends Frame implements ItemListener
-{
-
-    /**
-     * For serialization
-     */
-    private static final long serialVersionUID = -5905807460776050144L;
-    private static final Font choiceFont = null;
-    private static final boolean DEBUG = false;
-    private DemoApplet applet;
-
-    final String right = "-->";
-    final String left = "<--";
-
-    private BreakIterator iter;
-    private static boolean isctrldown_ = false;
-
-JTextArea text;
-//    TextArea text;
-    Choice bound;
-
-    public DBBIFrame(DemoApplet applet)
-    {
-        this.applet = applet;
-        init();
-        start();
-    }
-
-
-
-    public void run()
-    {
-        /*
-        while (true) {
-            try {
-                checkChange();
-                Thread.sleep(250);
-            }
-            catch (InterruptedException e) {
-            }
-            catch (Exception e) {
-            }
-            catch (Throwable e) {
-            }
-        }
-        */
-    }
-
-    int start, end;
-    int ts, te;
-
-    public void checkChange()
-    {
-//        System.out.println("checkChange...");
-        if ((text.getSelectionStart() & 0x7FFF) != ts ||
-            (text.getSelectionEnd() & 0x7FFF) != te) {
-
-            // not used int tempS = text.getSelectionStart() & 0x7FFF;
-            // not used int tempE = text.getSelectionEnd() & 0x7FFF;
-
-//          System.out.println(">");
-//          select(0, 0);
-//          select(tempS, tempE);
-            //select(tempS - (ts - s), tempE - (te - e));
-//          System.out.println("<");
-
-
-//          if (s != ts || e != te) System.out.println("     s("+s+") ts("+ts+") e("+e+") te("+te+")");
-//          if (tempS != ts || tempE != te) System.out.println(">s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
-//          select(s - (ts - s), e - (te - e));
-//          if (tempS != ts || tempE != te) System.out.println("s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
-
-//          System.out.println("lkdslksj");
-        }
-    }
-
-    public void select(int sIn, int eIn)
-    {
-        start = sIn;
-        end = eIn;
-        text.select(start, end);
-        ts = text.getSelectionStart() & 0x7FFF;
-        te = text.getSelectionEnd() & 0x7FFF;
-//        if (s != ts || e != te) {
-//            System.out.println(">s("+s+") ts("+ts+") e("+e+") te("+te+")");
-//            System.out.println("   "+(ts-s)+","+(te-e));
-//        }
-    }
-
-    public int getSelectionStart()
-    {
-        checkChange();
-//      return s;
-        return text.getSelectionStart() & 0x7FFF;
-    }
-
-
-    public int getSelectionEnd()
-    {
-        checkChange();
-//      return e;
-        return text.getSelectionEnd() & 0x7FFF;
-    }
-
-    public final synchronized void selectRange(int s, int e)
-    {
-        try {
-            //if (getSelectionStart() != s || getSelectionEnd() != e) {
-                //text.select(s, e);
-                select(s,e);
-            //}
-//          if (getSelectionStart() != s || getSelectionEnd() != e) {
-//              System.out.println("AGH! select("+s+","+e+") -> ("+
-//              getSelectionStart()+","+getSelectionEnd()+")");
-//              text.select(s - (getSelectionStart() - s), e - (getSelectionEnd() - e));
-//          }
-        } catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-
-
-    public void init()
-    {
-        buildGUI();
-    }
-
-
-    public void start()
-    {
-    }
-
-
-    void addWithFont(Container container, Component foo, Font font) {
-        if (font != null)
-            foo.setFont(font);
-        container.add(foo);
-    }
-
-
-
-   public void buildGUI()
-    {
-        setBackground(DemoUtility.bgColor);
-        setLayout(new BorderLayout());
-
-       Panel topPanel = new Panel();
-
-            Label titleLabel =
-                new Label("Text Boundary Demo", Label.CENTER);
-            titleLabel.setFont(DemoUtility.titleFont);
-            topPanel.add(titleLabel);
-
-            //Label demo=new Label(creditString, Label.CENTER);
-            //demo.setFont(DemoUtility.creditFont);
-            //topPanel.add(demo);
-
-            Panel choicePanel = new Panel();
-
-            Label demo1=new Label("Boundaries", Label.LEFT);
-            demo1.setFont(DemoUtility.labelFont);
-            choicePanel.add(demo1);
-
-            bound = new Choice();
-                bound.setBackground(DemoUtility.choiceColor);
-            bound.addItem("Sentence");
-            bound.addItem("Line Break");
-            bound.addItem("Word");
-            bound.addItem("Char");
-            
-            bound.addItemListener(this);
-            if (choiceFont != null)
-                bound.setFont(choiceFont);
-
-            choicePanel.add(bound);
-            topPanel.add(choicePanel);
-
-            DemoUtility.fixGrid(topPanel,1);
-
-
-        add("North", topPanel);
-
-
-            int ROWS = 15;
-            int COLUMNS = 50;
-//            text = new TextArea(getInitialText(), ROWS, COLUMNS);
-text = new JTextArea(getInitialText(), ROWS, COLUMNS);
-text.setLineWrap(true);
-text.setWrapStyleWord(true);
-            text.setEditable(true);
-            text.selectAll();
-            text.setFont(DemoUtility.editFont);
-            text.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-
-        add("Center", new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
-                        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
-
-        Panel copyrightPanel = new Panel();
-        addWithFont (copyrightPanel,
-            new Label(DemoUtility.copyright1, Label.LEFT),DemoUtility.creditFont);
-        DemoUtility.fixGrid(copyrightPanel,1);
-        add("South", copyrightPanel);
-
-        //layout();
-        handleEnumChanged();
-        
-        enableEvents(WindowEvent.WINDOW_CLOSING);
-        enableEvents(KeyEvent.KEY_PRESSED);
-        enableEvents(KeyEvent.KEY_RELEASED);
-
-    text.addKeyListener(new KeyAdapter() {
-        public void keyPressed(KeyEvent e) {
-            if (e.isControlDown()) {
-            int kc = e.getKeyCode();
-            switch (kc) {
-            case KeyEvent.VK_N:
-            case KeyEvent.VK_RIGHT:
-                handleForward();
-                break;
-            case KeyEvent.VK_P:
-            case KeyEvent.VK_LEFT:
-                handleBackward();
-                break;
-            default:
-                break;
-            }
-            e.consume();
-            }
-        }
-        public void keyReleased(KeyEvent e) {
-            if (e.isControlDown()) {
-            e.consume();
-            }
-        }
-        public void keyTyped(KeyEvent e) {
-            if (e.isControlDown()) {
-            e.consume();
-            }
-        }
-        });
-
-        // (new Thread(this)).start();
-    }
-
-
-
-    public String getInitialText()
-    {
-        return
-"When,inthecourseofhumanevents,itbecomesnecessaryforonepeopletodissolvethepoliticalbondswhichhave"
-+ "connectedthemwithanother,andtoassumeamongthepowersoftheearth,theseparateandequalstationtowhichthelaws"
-+ "ofnatureandofnature'sGodentitlethem,adecentrespecttotheopinionsofmankindrequiresthattheyshoulddeclarethe"
-+ "causeswhichimpelthemtotheseparation.\n"
-+ "Weholdthesetruthstobeself-evident,thatallmenarecreatedequal,thattheyareendowedbytheirCreatorwithcertain"
-+ "unalienablerights,thatamongthesearelife,libertyandthepursuitofhappiness.Thattosecuretheserights,governmentsare"
-+ "institutedamongmen,derivingtheirjustpowersfromtheconsentofthegoverned.Thatwheneveranyformofgovernment"
-+ "becomesdestructivetotheseends,itistherightofthepeopletoalterortoabolishit,andtoinstitutenewgovernment,laying"
-+ "itsfoundationonsuchprinciplesandorganizingitspowersinsuchform,astothemshallseemmostlikelytoeffecttheirsafety"
-+ "andhappiness.Prudence,indeed,willdictatethatgovernmentslongestablishedshouldnotbechangedforlightandtransient"
-+ "causes;andaccordinglyallexperiencehathshownthatmankindaremoredisposedtosuffer,whileevilsaresufferable,than"
-+ "torightthemselvesbyabolishingtheformstowhichtheyareaccustomed.Butwhenalongtrainofabusesandusurpations,"
-+ "pursuinginvariablythesameobjectevincesadesigntoreducethemunderabsolutedespotism,itistheirright,itistheirduty,"
-+ "tothrowoffsuchgovernment,andtoprovidenewguardsfortheirfuturesecurity.--Suchhasbeenthepatientsufferanceof"
-+ "thesecolonies;andsuchisnowthenecessitywhichconstrainsthemtoaltertheirformersystemsofgovernment.Thehistory"
-+ "ofthepresentKingofGreatBritainisahistoryofrepeatedinjuriesandusurpations,allhavingindirectobjectthe"
-+ "establishmentofanabsolutetyrannyoverthesestates.Toprovethis,letfactsbesubmittedtoacandidworld.\n"
-+ "Hehasrefusedhisassenttolaws,themostwholesomeandnecessaryforthepublicgood.\n"
-+ "Hehasforbiddenhisgovernorstopasslawsofimmediateandpressingimportance,unlesssuspendedintheiroperationtill"
-+ "hisassentshouldbeobtained;andwhensosuspended,hehasutterlyneglectedtoattendtothem.\n"
-+ "Hehasrefusedtopassotherlawsfortheaccommodationoflargedistrictsofpeople,unlessthosepeoplewouldrelinquish"
-+ "therightofrepresentationinthelegislature,arightinestimabletothemandformidabletotyrantsonly.\n"
-+ "Hehascalledtogetherlegislativebodiesatplacesunusual,uncomfortable,anddistantfromthedepositoryoftheirpublic"
-+ "records,forthesolepurposeoffatiguingthemintocompliancewithhismeasures.\n"
-+ "Hehasdissolvedrepresentativehousesrepeatedly,foropposingwithmanlyfirmnesshisinvasionsontherightsofthepeople.\n"
-+ "Hehasrefusedforalongtime,aftersuchdissolutions,tocauseotherstobeelected;wherebythelegislativepowers,"
-+ "incapableofannihilation,havereturnedtothepeopleatlargefortheirexercise;thestateremaininginthemeantimeexposed"
-+ "toallthedangersofinvasionfromwithout,andconvulsionswithin.\n"
-+ "Hehasendeavoredtopreventthepopulationofthesestates;forthatpurposeobstructingthelawsfornaturalizationof"
-+ "foreigners;refusingtopassotherstoencouragetheirmigrationhither,andraisingtheconditionsofnewappropriationsof"
-+ "lands.\n"
-+ "Hehasobstructedtheadministrationofjustice,byrefusinghisassenttolawsforestablishingjudiciarypowers.\n"
-+ "Hehasmadejudgesdependentonhiswillalone,forthetenureoftheiroffices,andtheamountandpaymentoftheirsalaries.\n"
-+ "Hehaserectedamultitudeofnewoffices,andsenthitherswarmsofofficerstoharassourpeople,andeatouttheir"
-+ "substance.\n"
-+ "Hehaskeptamongus,intimesofpeace,standingarmieswithouttheconsentofourlegislature.\n"
-+ "Hehasaffectedtorenderthemilitaryindependentofandsuperiortocivilpower.\n"
-+ "Hehascombinedwithotherstosubjectustoajurisdictionforeigntoourconstitution,andunacknowledgedbyourlaws;"
-+ "givinghisassenttotheiractsofpretendedlegislation:\n"
-+ "Forquarteringlargebodiesofarmedtroopsamongus:\n"
-+ "Forprotectingthem,bymocktrial,frompunishmentforanymurderswhichtheyshouldcommitontheinhabitantsofthese"
-+ "states:\n"
-+ "Forcuttingoffourtradewithallpartsoftheworld:\n"
-+ "Forimposingtaxesonuswithoutourconsent:\n"
-+ "Fordeprivingusinmanycases,ofthebenefitsoftrialbyjury:\n"
-+ "Fortransportingusbeyondseastobetriedforpretendedoffenses:\n"
-+ "ForabolishingthefreesystemofEnglishlawsinaneighboringprovince,establishingthereinanarbitrarygovernment,and"
-+ "enlargingitsboundariessoastorenderitatonceanexampleandfitinstrumentforintroducingthesameabsoluteruleinthese"
-+ "colonies:\n"
-+ "Fortakingawayourcharters,abolishingourmostvaluablelaws,andalteringfundamentallytheformsofourgovernments:\n"
-+ "Forsuspendingourownlegislatures,anddeclaringthemselvesinvestedwithpowertolegislateforusinallcaseswhatsoever.\n"
-+ "Hehasabdicatedgovernmenthere,bydeclaringusoutofhisprotectionandwagingwaragainstus.\n"
-+ "Hehasplunderedourseas,ravagedourcoasts,burnedourtowns,anddestroyedthelivesofourpeople.\n"
-+ "Heisatthistimetransportinglargearmiesofforeignmercenariestocompletetheworksofdeath,desolationandtyranny,"
-+ "alreadybegunwithcircumstancesofcrueltyandperfidyscarcelyparalleledinthemostbarbarousages,andtotallyunworthy"
-+ "theheadofacivilizednation.\n"
-+ "Hehasconstrainedourfellowcitizenstakencaptiveonthehighseastobeararmsagainsttheircountry,tobecomethe"
-+ "executionersoftheirfriendsandbrethren,ortofallthemselvesbytheirhands.\n"
-+ "Hehasexciteddomesticinsurrectionsamongstus,andhasendeavoredtobringontheinhabitantsofourfrontiers,the"
-+ "mercilessIndiansavages,whoseknownruleofwarfare,isundistinguisheddestructionofallages,sexesandconditions.\n"
-+ "Ineverystageoftheseoppressionswehavepetitionedforredressinthemosthumbleterms:ourrepeatedpetitionshave"
-+ "beenansweredonlybyrepeatedinjury.Aprince,whosecharacteristhusmarkedbyeveryactwhichmaydefineatyrant,is"
-+ "unfittobetherulerofafreepeople.\n"
-+ "NorhavewebeenwantinginattentiontoourBritishbrethren.Wehavewarnedthemfromtimetotimeofattemptsbytheir"
-+ "legislaturetoextendanunwarrantablejurisdictionoverus.Wehaveremindedthemofthecircumstancesofouremigration"
-+ "andsettlementhere.Wehaveappealedtotheirnativejusticeandmagnanimity,andwehaveconjuredthembythetiesofour"
-+ "commonkindredtodisavowtheseusurpations,which,wouldinevitablyinterruptourconnectionsandcorrespondence.We"
-+ "must,therefore,acquiesceinthenecessity,whichdenouncesourseparation,andholdthem,asweholdtherestofmankind,"
-+ "enemiesinwar,inpeacefriends.\n"
-+ "We,therefore,therepresentativesoftheUnitedStatesofAmerica,inGeneralCongress,assembled,appealingtothe"
-+ "SupremeJudgeoftheworldfortherectitudeofourintentions,do,inthename,andbytheauthorityofthegoodpeopleof"
-+ "thesecolonies,solemnlypublishanddeclare,thattheseunitedcoloniesare,andofrightoughttobefreeandindependent"
-+ "states;thattheyareabsolvedfromallallegiancetotheBritishCrown,andthatallpoliticalconnectionbetweenthemandthe"
-+ "stateofGreatBritain,isandoughttobetotallydissolved;andthatasfreeandindependentstates,theyhavefullpowerto"
-+ "leveywar,concludepeace,contractalliances,establishcommerce,andtodoallotheractsandthingswhichindependent"
-+ "statesmayofrightdo.Andforthesupportofthisdeclaration,withafirmrelianceontheprotectionofDivineProvidence,we"
-+ "mutuallypledgetoeachotherourlives,ourfortunesandoursacredhonor.\n";
-    }
-
-
-    public void handleEnumChanged()
-    {
-        String s = bound.getSelectedItem();
-        if (s.equals("Char")) {
-            errorText("getCharacterInstance");
-            iter = BreakIterator.getCharacterInstance();
-        }
-        else if (s.equals("Word")) {
-            errorText("getWordInstance");
-            iter = BreakIterator.getWordInstance();
-        }
-        else if (s.equals("Line Break")) {
-            errorText("getLineInstance");
-            iter = BreakIterator.getLineInstance();
-        }
-        else /* if (s.equals("Sentence")) */ {
-            errorText("getSentenceInstance");
-            iter = BreakIterator.getSentenceInstance();
-        }
-        iter.setText(text.getText());
-        selectRange(0, 0);
-        //text.select(0,0);
-    }
-
-    public void handleForward()
-    {
-        try {
-//          System.out.println("entering handleForward");
-            iter.setText(text.getText());
-            int oldStart = getSelectionStart();
-            int oldEnd = getSelectionEnd();
-
-//          System.out.println("handleForward: oldStart=" + oldStart + ", oldEnd=" + oldEnd);
-
-            if (oldEnd < 1) {
-                selectRange(0, iter.following(0));
-            }
-            else {
-                int s = iter.following(oldEnd-1);
-                int e = iter.next();
-                if (e == -1) {
-                    e = s;
-                }
-                selectRange(s, e);
-            }
-            //text.select(s, e);
-            errorText("<" + oldStart + "," + oldEnd + "> -> <" +
-                start + "," + end + ">");
-        }
-        catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-    public void handleBackward()
-    {
-        try {
-            iter.setText(text.getText());
-            int oldStart = getSelectionStart();
-            int oldEnd = getSelectionEnd();
-            if (oldStart < 1) {
-                selectRange(0, 0);
-            }
-            else {
-                int e = iter.following(oldStart-1);
-                int s = iter.previous();
-                selectRange(s, e);
-            }
-            //text.select(s, e);
-            errorText("<" + oldStart + "," + oldEnd + "> -> <" + start + "," + end + ">");
-        }
-        catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-    public void itemStateChanged(ItemEvent evt)
-    {
-        if (evt.getSource() instanceof Choice) {
-            handleEnumChanged();
-        }
-    }
-
-    public void errorText(String s)
-    {
-       if (DEBUG)
-           System.out.println(s);
-    }
-    
-    protected void processWindowEvent(WindowEvent evt)
-    {
-        if (evt.getID() == WindowEvent.WINDOW_CLOSING && 
-            evt.getWindow() == this) {
-            hide();
-            dispose();
-            if (applet != null) {
-                applet.demoClosed();
-            } else System.exit(0);
-        }
-    }
-    
-    protected void processKeyEvent(KeyEvent evt)
-    {
-        switch (evt.getID()) {
-            case KeyEvent.KEY_PRESSED :
-                if (evt.getKeyCode() == KeyEvent.VK_CONTROL) {
-                    isctrldown_ = true;
-                }
-                break;
-            case KeyEvent.KEY_RELEASED :
-                // key detection for left and right buttons are removed
-                // to emulate the old release behaviour
-                int key = evt.getKeyCode();
-                if (key == KeyEvent.VK_N && isctrldown_) {
-                    handleForward();
-                }
-                else 
-                if (key == KeyEvent.VK_P && isctrldown_) {
-                    handleBackward();
-                }
-                else 
-                if (key == KeyEvent.VK_CONTROL) {
-                    isctrldown_ = false;
-                }
-                break;
-        }
-    }
-}
diff --git a/src/com/ibm/icu/dev/demo/rbbi/RBBIDemo.java b/src/com/ibm/icu/dev/demo/rbbi/RBBIDemo.java
deleted file mode 100755
index ace92a4..0000000
--- a/src/com/ibm/icu/dev/demo/rbbi/RBBIDemo.java
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 1996-2007, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.dev.demo.rbbi;
-
-import java.awt.*;
-import java.awt.event.WindowEvent;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.ItemEvent;
-import javax.swing.JTextArea;
-import javax.swing.JScrollPane;
-import javax.swing.BorderFactory;
-import java.util.*;
-import com.ibm.icu.dev.demo.impl.*;
-import com.ibm.icu.text.BreakIterator;
-
-public class RBBIDemo extends DemoApplet
-{
-    /**
-     * For serialization
-     */
-    private static final long serialVersionUID = 728543547366617131L;
-
-    public static void main(String argv[]) {
-        Locale.setDefault(new Locale("en", "US"));
-        new RBBIDemo().showDemo();
-    }
-
-    public Frame createDemoFrame(DemoApplet applet) {
-        return new RBBIFrame(applet);
-    }
-}
-
-
-
-class RBBIFrame extends Frame implements ItemListener
-{
-    /**
-     * For serialization
-     */
-    private static final long serialVersionUID = 5986183892855142947L;
-    //private static final String creditString = "v1.1a9, Demo";
-
-    //private static final int FIELD_COLUMNS = 45;
-    private static final Font choiceFont = null;
-    private static final boolean DEBUG = false;
-    private DemoApplet applet;
-
-    final String right = "-->";
-    final String left = "<--";
-
-    private BreakIterator iter;
-    private boolean       isctrldown_ = false;
-
-    JTextArea text;
-//    TextArea text;
-    Choice bound;
-
-    public RBBIFrame(DemoApplet applet)
-    {
-        this.applet = applet;
-        init();
-        start();
-    }
-
-
-
-    public void run()
-    {
-        /*
-        while (true) {
-            try {
-                checkChange();
-                Thread.sleep(250);
-            }
-            catch (InterruptedException e) {
-            }
-            catch (Exception e) {
-            }
-            catch (Throwable e) {
-            }
-        }
-        */
-    }
-
-    int start, end;
-    int ts, te;
-
-    public void checkChange()
-    {
-//        System.out.println("checkChange...");
-        if ((text.getSelectionStart() & 0x7FFF) != ts ||
-            (text.getSelectionEnd() & 0x7FFF) != te) {
-
-            // not used int tempS = text.getSelectionStart() & 0x7FFF;
-            // not used int tempE = text.getSelectionEnd() & 0x7FFF;
-
-//          System.out.println(">");
-//          select(0, 0);
-//          select(tempS, tempE);
-            //select(tempS - (ts - s), tempE - (te - e));
-//          System.out.println("<");
-
-
-//          if (s != ts || e != te) System.out.println("     s("+s+") ts("+ts+") e("+e+") te("+te+")");
-//          if (tempS != ts || tempE != te) System.out.println(">s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
-//          select(s - (ts - s), e - (te - e));
-//          if (tempS != ts || tempE != te) System.out.println("s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
-
-//          System.out.println("lkdslksj");
-        }
-    }
-
-    public void select(int sIn, int eIn)
-    {
-        start = sIn;
-        end = eIn;
-        text.select(start, end);
-        ts = text.getSelectionStart() & 0x7FFF;
-        te = text.getSelectionEnd() & 0x7FFF;
-//        if (s != ts || e != te) {
-//            System.out.println(">s("+s+") ts("+ts+") e("+e+") te("+te+")");
-//            System.out.println("   "+(ts-s)+","+(te-e));
-//        }
-    }
-
-    public int getSelectionStart()
-    {
-        checkChange();
-//      return s;
-        return text.getSelectionStart() & 0x7FFF;
-    }
-
-
-    public int getSelectionEnd()
-    {
-        checkChange();
-//      return e;
-        return text.getSelectionEnd() & 0x7FFF;
-    }
-
-    public final synchronized void selectRange(int s, int e)
-    {
-        try {
-            //if (getSelectionStart() != s || getSelectionEnd() != e) {
-                //text.select(s, e);
-                select(s,e);
-            //}
-//          if (getSelectionStart() != s || getSelectionEnd() != e) {
-//              System.out.println("AGH! select("+s+","+e+") -> ("+
-//              getSelectionStart()+","+getSelectionEnd()+")");
-//              text.select(s - (getSelectionStart() - s), e - (getSelectionEnd() - e));
-//          }
-        } catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-
-
-    public void init()
-    {
-        buildGUI();
-    }
-
-
-    public void start()
-    {
-    }
-
-
-    void addWithFont(Container container, Component foo, Font font) {
-        if (font != null)
-            foo.setFont(font);
-        container.add(foo);
-    }
-
-
-
-   public void buildGUI()
-    {
-        setBackground(DemoUtility.bgColor);
-        setLayout(new BorderLayout());
-
-       Panel topPanel = new Panel();
-
-            Label titleLabel =
-                new Label("Deva Text Boundary Demo", Label.CENTER);
-            titleLabel.setFont(DemoUtility.titleFont);
-            topPanel.add(titleLabel);
-
-            //Label demo=new Label(creditString, Label.CENTER);
-            //demo.setFont(DemoUtility.creditFont);
-            //topPanel.add(demo);
-
-            Panel choicePanel = new Panel();
-
-            Label demo1=new Label("Boundaries", Label.LEFT);
-            demo1.setFont(DemoUtility.labelFont);
-            choicePanel.add(demo1);
-
-            bound = new Choice();
-                bound.setBackground(DemoUtility.choiceColor);
-            bound.addItem("Sentence");
-            bound.addItem("Line Break");
-            bound.addItem("Word");
-            bound.addItem("Char");
-            bound.addItemListener(this);
-            if (choiceFont != null)
-                bound.setFont(choiceFont);
-
-            choicePanel.add(bound);
-            topPanel.add(choicePanel);
-
-            DemoUtility.fixGrid(topPanel,1);
-
-
-        add("North", topPanel);
-
-
-            int ROWS = 15;
-            int COLUMNS = 50;
-//            text = new TextArea(getInitialText(), ROWS, COLUMNS);
-            text = new JTextArea(getInitialText(), ROWS, COLUMNS);
-            text.setLineWrap(true);
-            text.setWrapStyleWord(true);
-            text.setEditable(true);
-            text.selectAll();
-            text.setFont(new Font("Devanagari MT for IBM", Font.PLAIN, 48));
-            text.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-
-        add("Center", new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
-                        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
-
-        Panel copyrightPanel = new Panel();
-        addWithFont (copyrightPanel,
-            new Label(DemoUtility.copyright1, Label.LEFT),DemoUtility.creditFont);
-        DemoUtility.fixGrid(copyrightPanel,1);
-        add("South", copyrightPanel);
-
-        //layout();
-        handleEnumChanged();
-        
-        enableEvents(WindowEvent.WINDOW_CLOSING);
-        enableEvents(KeyEvent.KEY_PRESSED);
-        enableEvents(KeyEvent.KEY_RELEASED);
-
-    text.addKeyListener(new KeyAdapter() {
-        public void keyPressed(KeyEvent e) {
-            if (e.isControlDown()) {
-            int kc = e.getKeyCode();
-            switch (kc) {
-            case KeyEvent.VK_N:
-            case KeyEvent.VK_RIGHT:
-                handleForward();
-                break;
-            case KeyEvent.VK_P:
-            case KeyEvent.VK_LEFT:
-                handleBackward();
-                break;
-            default:
-                break;
-            }
-            e.consume();
-            }
-        }
-        public void keyReleased(KeyEvent e) {
-            if (e.isControlDown()) {
-            e.consume();
-            }
-        }
-        public void keyTyped(KeyEvent e) {
-            if (e.isControlDown()) {
-            e.consume();
-            }
-        }
-        });
-
-        // (new Thread(this)).start();
-    }
-
-
-
-    public String getInitialText()
-    {
-        return
-            "\u0936\u094d\u0930\u0940\u092e\u0926\u094d " +
-            "\u092d\u0917\u0935\u0926\u094d\u0917\u0940\u0924\u093e " +
-            "\u0905\u0927\u094d\u092f\u093e\u092f " +
-            "\u0905\u0930\u094d\u091c\u0941\u0928 " +
-            "\u0935\u093f\u0937\u093e\u0926 " +
-            "\u092f\u094b\u0917 " +
-            "\u0927\u0943\u0924\u0930\u093e\u0937\u094d\u091f\u094d\u0930 " +
-            "\u0909\u0935\u093E\u091A\u0964 " +
-            "\u0927\u0930\u094d\u092e\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947 " +
-            "\u0915\u0941\u0930\u0941\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947 " +
-            "\u0938\u092e\u0935\u0947\u0924\u093e " +
-            "\u092f\u0941\u092f\u0941\u0924\u094d\u0938\u0935\u0903 " +
-            "\u092e\u093e\u092e\u0915\u093e\u0903 " +
-            "\u092a\u093e\u0923\u094d\u0921\u0935\u093e\u0936\u094d\u091a\u0948\u0935 " +
-            "\u0915\u093f\u092e\u0915\u0941\u0930\u094d\u0935\u0924 " +
-            "\u0938\u0902\u091c\u092F";
-    }
-
-
-    public void handleEnumChanged()
-    {
-        String s = bound.getSelectedItem();
-        if (s.equals("Char")) {
-            errorText("getCharacterInstance");
-            iter = BreakIterator.getCharacterInstance();
-        }
-        else if (s.equals("Word")) {
-            errorText("tWordBreak");
-            iter = BreakIterator.getWordInstance();
-        }
-        else if (s.equals("Line Break")) {
-            errorText("getLineInstance");
-            iter = BreakIterator.getLineInstance();
-        }
-        else /* if (s.equals("Sentence")) */ {
-            errorText("getSentenceInstance");
-            iter = BreakIterator.getSentenceInstance();
-        }
-        iter.setText(text.getText());
-        selectRange(0, 0);
-        //text.select(0,0);
-    }
-
-    public void handleForward()
-    {
-        try {
-//          System.out.println("entering handleForward");
-            iter.setText(text.getText());
-            int oldStart = getSelectionStart();
-            int oldEnd = getSelectionEnd();
-
-//          System.out.println("handleForward: oldStart=" + oldStart + ", oldEnd=" + oldEnd);
-
-            if (oldEnd < 1) {
-                selectRange(0, iter.following(0));
-            }
-            else {
-                int s = iter.following(oldEnd-1);
-                int e = iter.next();
-                if (e == -1) {
-                    e = s;
-                }
-                selectRange(s, e);
-            }
-            //text.select(s, e);
-            errorText("<" + oldStart + "," + oldEnd + "> -> <" +
-                start + "," + end + ">");
-        }
-        catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-    public void handleBackward()
-    {
-        try {
-            iter.setText(text.getText());
-            int oldStart = getSelectionStart();
-            int oldEnd = getSelectionEnd();
-            if (oldStart < 1) {
-                selectRange(0, 0);
-            }
-            else {
-                int e = iter.following(oldStart-1);
-                int s = iter.previous();
-                selectRange(s, e);
-            }
-            //text.select(s, e);
-            errorText("<" + oldStart + "," + oldEnd + "> -> <" + start + "," + end + ">");
-        }
-        catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-    /*
-    public boolean action(Event evt, Object obj)
-    {
-
-        if(evt.target instanceof Button && left.equals(obj))
-        {
-            handleBackward();
-            return true;
-        }
-        else if(evt.target instanceof Button && right.equals(obj))
-        {
-            handleForward();
-            return true;
-        }
-        else if(evt.target instanceof Choice)
-        {
-            handleEnumChanged();
-            return true;
-        }
-        return false;
-    }
-
-    public boolean handleEvent(Event evt)
-    {
-        if (evt.id == Event.KEY_PRESS || evt.id == Event.KEY_ACTION) {
-            if (evt.key == Event.RIGHT || (evt.key == 0x0E && evt.controlDown())) {
-                handleForward();
-                return true;
-            }
-            else if (evt.key == Event.LEFT || (evt.key == 0x10 && evt.controlDown())) {
-                handleBackward();
-                return true;
-            }
-        }
-        else
-        if (evt.id == Event.WINDOW_DESTROY && evt.target == this) {
-            this.hide();
-            this.dispose();
-                if (applet != null) {
-                  applet.demoClosed();
-               } else System.exit(0);
-            return true;
-        }
-        return super.handleEvent(evt);
-    }*/
-
-    public void itemStateChanged(ItemEvent evt)
-    {
-        if (evt.getSource() instanceof Choice) {
-            handleEnumChanged();
-        }
-    }
-
-    public void errorText(String s)
-    {
-       if (DEBUG)
-           System.out.println(s);
-    }
-    
-    protected void processWindowEvent(WindowEvent evt)
-    {
-        if (evt.getID() == WindowEvent.WINDOW_CLOSING && 
-            evt.getWindow() == this) {
-            hide();
-            dispose();
-            if (applet != null) {
-                applet.demoClosed();
-            } else System.exit(0);
-        }
-    }
-    
-    protected void processKeyEvent(KeyEvent evt)
-    {
-        switch (evt.getID()) {
-            case KeyEvent.KEY_PRESSED :
-                if (evt.getKeyCode() == KeyEvent.VK_CONTROL) {
-                    isctrldown_ = true;
-                }
-                break;
-            case KeyEvent.KEY_RELEASED :
-                // key detection for left and right buttons are removed
-                // to emulate the old release behaviour
-                int key = evt.getKeyCode();
-                if (key == KeyEvent.VK_N && isctrldown_) {
-                    handleForward();
-                }
-                else 
-                if (key == KeyEvent.VK_P && isctrldown_) {
-                    handleBackward();
-                }
-                else 
-                if (key == KeyEvent.VK_CONTROL) {
-                    isctrldown_ = false;
-                }
-                break;
-        }
-    }
-}
diff --git a/src/com/ibm/icu/dev/demo/rbbi/TextBoundDemo.java b/src/com/ibm/icu/dev/demo/rbbi/TextBoundDemo.java
deleted file mode 100755
index 9a847aa..0000000
--- a/src/com/ibm/icu/dev/demo/rbbi/TextBoundDemo.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- *******************************************************************************
- * Copyright (C) 1996-2007, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.dev.demo.rbbi;
-
-import java.awt.*;
-import java.awt.event.ItemListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.WindowEvent;
-import javax.swing.JTextArea;
-import javax.swing.JScrollPane;
-import javax.swing.BorderFactory;
-import com.ibm.icu.dev.demo.impl.*;
-import com.ibm.icu.text.BreakIterator;
-
-public class TextBoundDemo extends DemoApplet
-{
-    /**
-     * For serialization
-     */
-    private static final long serialVersionUID = 8123658019297481938L;
-
-    public static void main(String argv[]) {
-        new TextBoundDemo().showDemo();
-    }
-
-    public Frame createDemoFrame(DemoApplet applet) {
-        return new TextBoundFrame(applet);
-    }
-}
-
-
-
-class TextBoundFrame extends Frame implements ItemListener
-{
-    /**
-     * For serialization
-     */
-    private static final long serialVersionUID = 4829041307280329194L;
-//    private static final String creditString =
-//        "v1.1a9, Demo";
-
-//    private static final int FIELD_COLUMNS = 45;
-    private static final Font choiceFont = null;
-    private static final boolean DEBUG = false;
-    private DemoApplet applet;
-
-    final String right = "-->";
-    final String left = "<--";
-
-    private BreakIterator iter;
-    private boolean isctrldown_ = false;
-
-JTextArea text;
-//    TextArea text;
-    Choice bound;
-
-    public TextBoundFrame(DemoApplet applet)
-    {
-        this.applet = applet;
-        init();
-        start();
-    }
-
-
-
-    public void run()
-    {
-        /*
-        while (true) {
-            try {
-                checkChange();
-                Thread.sleep(250);
-            }
-            catch (InterruptedException e) {
-            }
-            catch (Exception e) {
-            }
-            catch (Throwable e) {
-            }
-        }
-        */
-    }
-
-    int start, end;
-    int ts, te;
-
-    public void checkChange()
-    {
-//        System.out.println("checkChange...");
-        if ((text.getSelectionStart() & 0x7FFF) != ts ||
-            (text.getSelectionEnd() & 0x7FFF) != te) {
-
-            // not used int tempS = text.getSelectionStart() & 0x7FFF;
-            // not used int tempE = text.getSelectionEnd() & 0x7FFF;
-
-//          System.out.println(">");
-//          select(0, 0);
-//          select(tempS, tempE);
-            //select(tempS - (ts - s), tempE - (te - e));
-//          System.out.println("<");
-
-
-//          if (s != ts || e != te) System.out.println("     s("+s+") ts("+ts+") e("+e+") te("+te+")");
-//          if (tempS != ts || tempE != te) System.out.println(">s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
-//          select(s - (ts - s), e - (te - e));
-//          if (tempS != ts || tempE != te) System.out.println("s("+s+") tempS("+tempS+") e("+e+") tempE("+tempE+")");
-
-//          System.out.println("lkdslksj");
-        }
-    }
-
-    public void select(int sIn, int eIn)
-    {
-        start = sIn;
-        end = eIn;
-        text.select(start, end);
-        ts = text.getSelectionStart() & 0x7FFF;
-        te = text.getSelectionEnd() & 0x7FFF;
-//        if (s != ts || e != te) {
-//            System.out.println(">s("+s+") ts("+ts+") e("+e+") te("+te+")");
-//            System.out.println("   "+(ts-s)+","+(te-e));
-//        }
-    }
-
-    public int getSelectionStart()
-    {
-        checkChange();
-//      return s;
-        return text.getSelectionStart() & 0x7FFF;
-    }
-
-
-    public int getSelectionEnd()
-    {
-        checkChange();
-//      return e;
-        return text.getSelectionEnd() & 0x7FFF;
-    }
-
-    public final synchronized void selectRange(int s, int e)
-    {
-        try {
-            //if (getSelectionStart() != s || getSelectionEnd() != e) {
-                //text.select(s, e);
-                select(s,e);
-            //}
-//          if (getSelectionStart() != s || getSelectionEnd() != e) {
-//              System.out.println("AGH! select("+s+","+e+") -> ("+
-//              getSelectionStart()+","+getSelectionEnd()+")");
-//              text.select(s - (getSelectionStart() - s), e - (getSelectionEnd() - e));
-//          }
-        } catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-
-
-    public void init()
-    {
-        buildGUI();
-    }
-
-
-    public void start()
-    {
-    }
-
-
-    void addWithFont(Container container, Component foo, Font font) {
-        if (font != null)
-            foo.setFont(font);
-        container.add(foo);
-    }
-
-
-
-   public void buildGUI()
-    {
-        setBackground(DemoUtility.bgColor);
-        setLayout(new BorderLayout());
-
-       Panel topPanel = new Panel();
-
-            Label titleLabel =
-                new Label("Text Boundary Demo", Label.CENTER);
-            titleLabel.setFont(DemoUtility.titleFont);
-            topPanel.add(titleLabel);
-
-            //Label demo=new Label(creditString, Label.CENTER);
-            //demo.setFont(DemoUtility.creditFont);
-            //topPanel.add(demo);
-
-            Panel choicePanel = new Panel();
-
-            Label demo1=new Label("Boundaries", Label.LEFT);
-            demo1.setFont(DemoUtility.labelFont);
-            choicePanel.add(demo1);
-
-            bound = new Choice();
-                bound.setBackground(DemoUtility.choiceColor);
-            bound.addItem("Sentence");
-            bound.addItem("Line Break");
-            bound.addItem("Word");
-            bound.addItem("Char");
-            bound.addItemListener(this);
-            if (choiceFont != null)
-                bound.setFont(choiceFont);
-
-            choicePanel.add(bound);
-            topPanel.add(choicePanel);
-
-            DemoUtility.fixGrid(topPanel,1);
-
-
-        add("North", topPanel);
-
-
-            int ROWS = 15;
-            int COLUMNS = 50;
-//            text = new TextArea(getInitialText(), ROWS, COLUMNS);
-text = new JTextArea(getInitialText(), ROWS, COLUMNS);
-text.setLineWrap(true);
-text.setWrapStyleWord(true);
-            text.setEditable(true);
-            text.selectAll();
-            text.setFont(DemoUtility.editFont);
-            text.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
-
-        add("Center", new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
-                        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
-
-        Panel copyrightPanel = new Panel();
-        addWithFont (copyrightPanel,
-            new Label(DemoUtility.copyright1, Label.LEFT),DemoUtility.creditFont);
-        DemoUtility.fixGrid(copyrightPanel,1);
-        add("South", copyrightPanel);
-
-        //layout();
-        handleEnumChanged();
-        
-        enableEvents(WindowEvent.WINDOW_CLOSING);
-        enableEvents(KeyEvent.KEY_PRESSED);
-        enableEvents(KeyEvent.KEY_RELEASED);
-
-    text.addKeyListener(new KeyAdapter() {
-        public void keyPressed(KeyEvent e) {
-            if (e.isControlDown()) {
-            int kc = e.getKeyCode();
-            switch (kc) {
-            case KeyEvent.VK_N:
-            case KeyEvent.VK_RIGHT:
-                handleForward();
-                break;
-            case KeyEvent.VK_P:
-            case KeyEvent.VK_LEFT:
-                handleBackward();
-                break;
-            default:
-                break;
-            }
-            e.consume();
-            }
-        }
-        public void keyReleased(KeyEvent e) {
-            if (e.isControlDown()) {
-            e.consume();
-            }
-        }
-        public void keyTyped(KeyEvent e) {
-            if (e.isControlDown()) {
-            e.consume();
-            }
-        }
-        });
-
-        // (new Thread(this)).start();
-    }
-
-
-
-    public String getInitialText()
-    {
-        return
-    /*
-            "\"This is a sentence.\" This is not.\" \"because. And go. " +
-            "This is a simple 012.566,5 sample sentence. \n"+
-            "It does not have to make any sense as you can see. \n"+
-            "Nel mezzo del cammin di nostra vita, mi ritrovai in "+
-                "una selva oscura. \n"+
-            "Che la dritta via aveo smarrita. \n"+
-            "He said, that I said, that you said!! \n"+
-            "Don't rock the boat.\n\n"+
-            "Because I am the daddy, that is why. \n"+
-            "Not on my time (el timo.)! \n"+
-            "Tab\tTab\rTab\tWow."+
-            "So what!!\n\n"+
-            "Is this a question???  " +
-            "I wonder...Hmm.\n" +
-            "Harris thumbed down several, including \"Away We Go\" "+
-                "(which became the huge success Oklahoma!). \n"+
-            "One species, B. anthracis, is highly virulent.\n"+
-            "Wolf said about Sounder: \"Beautifully thought-out and "+
-                "directed.\"\n"+
-            "Have you ever said, \"This is where I shall live\"? \n"+
-            "He 1000,233,456.000 answered, \"You may not!\" \n"+
-            "Another popular saying is: \"How do you do?\". \n"+
-            "What is the proper use of the abbreviation pp.? \n"+
-            "Yes, I am 1,23.322% definatelly 12\" tall!!";
-    */
-            "(\"This is a complete sentence.\") This is (\"not.\") also.  "
-            +"An abbreviation in the middle, etc. and one at the end, etc. "+
-                "This "
-            +"is a simple sample 012.566,5 sentence. It doesn't "
-            +"have to make any sense, as you can see. Nel mezzo del  c"
-            +"ammin di nostra vita, mi ritrovai in una selva oscura. Che "
-            +"la dritta via aveo smarrita. Not on my time (el timo.)! And "
-            +"tabulated columns: \tCol1\tCol2\t3,456%.\t "
-            +"Is this a question???  I wonder... Hmm. Harris thumbed "
-            +"down several, including \"Away We Go\" (which became the  "
-            +"huge success Oklahoma!). One species, B. anthracis, is  "
-            +"highly virulent. Wolf said about Sounder: \"Beautifully  "
-            +"thought-out and directed.\" Have you ever said, \"This is "+
-                "where I "
-            +"shall live\"? He said 1000,233,456.000 and answered, \"You "+
-                "may not!\"  "
-            +"Another popular saying is: \"How do you do?\". What is the  "
-            +"proper use of the abbreviation pp.? Yes, I am 12\' 3\" tall!!";
-    }
-
-
-    public void handleEnumChanged()
-    {
-        String s = bound.getSelectedItem();
-        if (s.equals("Char")) {
-            errorText("getCharacterInstance");
-            iter = BreakIterator.getCharacterInstance();
-        }
-        else if (s.equals("Word")) {
-            errorText("tWordBreak");
-            iter = BreakIterator.getWordInstance();
-        }
-        else if (s.equals("Line Break")) {
-            errorText("getLineInstance");
-            iter = BreakIterator.getLineInstance();
-        }
-        else /* if (s.equals("Sentence")) */ {
-            errorText("getSentenceInstance");
-            iter = BreakIterator.getSentenceInstance();
-        }
-        iter.setText(text.getText());
-        selectRange(0, 0);
-        //text.select(0,0);
-    }
-
-    public void handleForward()
-    {
-        try {
-//          System.out.println("entering handleForward");
-            iter.setText(text.getText());
-            int oldStart = getSelectionStart();
-            int oldEnd = getSelectionEnd();
-
-//          System.out.println("handleForward: oldStart=" + oldStart + ", oldEnd=" + oldEnd);
-
-            if (oldEnd < 1) {
-                selectRange(0, iter.following(0));
-            }
-            else {
-                int s = iter.following(oldEnd-1);
-                int e = iter.next();
-                if (e == -1) {
-                    e = s;
-                }
-                selectRange(s, e);
-            }
-            //text.select(s, e);
-            errorText("<" + oldStart + "," + oldEnd + "> -> <" +
-                start + "," + end + ">");
-        }
-        catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-    public void handleBackward()
-    {
-        try {
-            iter.setText(text.getText());
-            int oldStart = getSelectionStart();
-            int oldEnd = getSelectionEnd();
-            if (oldStart < 1) {
-                selectRange(0, 0);
-            }
-            else {
-                int e = iter.following(oldStart-1);
-                int s = iter.previous();
-                selectRange(s, e);
-            }
-            //text.select(s, e);
-            errorText("<" + oldStart + "," + oldEnd + "> -> <" + start + "," + end + ">");
-        }
-        catch (Exception exp) {
-            errorText(exp.toString());
-        }
-    }
-
-    public void itemStateChanged(ItemEvent evt)
-    {
-        if (evt.getSource() instanceof Choice) {
-            handleEnumChanged();
-        }
-    }
-
-    public void errorText(String s)
-    {
-       if (DEBUG)
-           System.out.println(s);
-    }
-    
-    protected void processWindowEvent(WindowEvent evt)
-    {
-        if (evt.getID() == WindowEvent.WINDOW_CLOSING && 
-            evt.getWindow() == this) {
-            hide();
-            dispose();
-            if (applet != null) {
-                applet.demoClosed();
-            } else System.exit(0);
-        }
-    }
-    
-    protected void processKeyEvent(KeyEvent evt)
-    {
-        switch (evt.getID()) {
-            case KeyEvent.KEY_PRESSED :
-                if (evt.getKeyCode() == KeyEvent.VK_CONTROL) {
-                    isctrldown_ = true;
-                }
-                break;
-            case KeyEvent.KEY_RELEASED :
-                // key detection for left and right buttons are removed
-                // to emulate the old release behaviour
-                int key = evt.getKeyCode();
-                if (key == KeyEvent.VK_N && isctrldown_) {
-                    handleForward();
-                }
-                else 
-                if (key == KeyEvent.VK_P && isctrldown_) {
-                    handleBackward();
-                }
-                else
-                if (key == KeyEvent.VK_CONTROL) {
-                    isctrldown_ = false;
-                }
-                break;
-        }
-    }
-}
diff --git a/src/com/ibm/icu/dev/demo/rbbi/package.html b/src/com/ibm/icu/dev/demo/rbbi/package.html
deleted file mode 100755
index 13f0c2c..0000000
--- a/src/com/ibm/icu/dev/demo/rbbi/package.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--  Copyright (C) 2000-2004, International Business Machines Corporation and
-  others. All Rights Reserved.
-
--->
-</head>
-<body bgcolor="white">
-RuleBasedBreakIterator and DictionaryBasedBreakIterator demo applications.
-</body>
-</html>
\ No newline at end of file
diff --git a/src/com/ibm/icu/dev/test/calendar/IBMCalendarTest.java b/src/com/ibm/icu/dev/test/calendar/IBMCalendarTest.java
index 374d14c..0088daf 100755
--- a/src/com/ibm/icu/dev/test/calendar/IBMCalendarTest.java
+++ b/src/com/ibm/icu/dev/test/calendar/IBMCalendarTest.java
@@ -296,7 +296,9 @@
         Calendar cal = Calendar.getInstance();
         cal.set(2007, Calendar.JANUARY, 1);
         BuddhistCalendar buddhist = new BuddhistCalendar();
-        doLimitsTest(buddhist, null, cal.getTime());
+        if (!skipIfBeforeICU(3,8,0)) {
+            doLimitsTest(buddhist, null, cal.getTime());
+        }
         doTheoreticalLimitsTest(buddhist, false);
     }
 
@@ -323,7 +325,9 @@
         Calendar cal = Calendar.getInstance();
         cal.set(2007, Calendar.JANUARY, 1);
         TaiwanCalendar taiwan = new TaiwanCalendar();
-        doLimitsTest(taiwan, null, cal.getTime());
+        if (!skipIfBeforeICU(3,8,0)) {
+            doLimitsTest(taiwan, null, cal.getTime());
+        }
         doTheoreticalLimitsTest(taiwan, false);
     }
 
diff --git a/src/com/ibm/icu/impl/duration/impl/ResourceBasedPeriodFormatterDataService.java b/src/com/ibm/icu/impl/duration/impl/ResourceBasedPeriodFormatterDataService.java
index c6d5944..a711259 100644
--- a/src/com/ibm/icu/impl/duration/impl/ResourceBasedPeriodFormatterDataService.java
+++ b/src/com/ibm/icu/impl/duration/impl/ResourceBasedPeriodFormatterDataService.java
@@ -7,14 +7,21 @@
 
 package com.ibm.icu.impl.duration.impl;
 
-import java.util.*;
-
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.zip.DataFormatException;
 
-import java.io.OutputStreamWriter;
+import com.ibm.icu.impl.ICUData;
 
 /**
  * A PeriodFormatterDataService that serves PeriodFormatterData
@@ -49,11 +56,8 @@
    */
   private ResourceBasedPeriodFormatterDataService() {
     List localeNames = new ArrayList(); // of String
+    InputStream is = ICUData.getRequiredStream(getClass(), PATH + "index.txt");
     try {
-      InputStream is = getClass().getResourceAsStream(PATH + "index.txt");
-      if (is == null) {
-        System.err.println("could not load index.txt");
-      } else {
         BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
         String string = null;
         while (null != (string = br.readLine())) {
@@ -63,10 +67,9 @@
           }
           localeNames.add(string);
         }
-      }
     }
-    catch (Exception e) {
-      System.err.println(e.getMessage());
+    catch (IOException e) {
+        throw new IllegalStateException("IO Error reading "+PATH + "index.txt: " + e.toString());
     }
     availableLocales = Collections.unmodifiableList(localeNames);
   }
@@ -94,7 +97,7 @@
         if (ln != null) {
           String name = PATH + "pfd_" + ln + ".xml";
           try {
-            InputStream is = getClass().getResourceAsStream(name);
+            InputStream is = ICUData.getStream(getClass(), name);
             if (is == null) {
                throw new MissingResourceException("no resource named " + name,name,"");
             } else {
diff --git a/src/com/ibm/icu/text/RuleBasedCollator.java b/src/com/ibm/icu/text/RuleBasedCollator.java
index 53c0a14..c898b1b 100755
--- a/src/com/ibm/icu/text/RuleBasedCollator.java
+++ b/src/com/ibm/icu/text/RuleBasedCollator.java
@@ -144,7 +144,7 @@
  * // Create a new Collator object with additional rules
  * String addRules = "&amp; C &lt; ch, cH, Ch, CH";
  * RuleBasedCollator myCollator =
- *     new RuleBasedCollator(en_USCollator + addRules);
+ *     new RuleBasedCollator(en_USCollator.getRules() + addRules);
  * // myCollator contains the new rules
  * </pre>
  * </blockquote>