summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron M. Renn <arenn@urbanophile.com>1999-04-02 02:31:34 +0000
committerAaron M. Renn <arenn@urbanophile.com>1999-04-02 02:31:34 +0000
commitd80fddc95d39795a33afedc7a59b54a4e201d50e (patch)
treef25b41a62175dc7dca81b7e58a9c9c3f71139d1c
parent4db808a2a6196db3500af6f48c6818fc20ce66db (diff)
downloadclasspath-d80fddc95d39795a33afedc7a59b54a4e201d50e.tar.gz
Misc fixes.
-rw-r--r--java/text/BreakIterator.java2
-rw-r--r--java/text/DefaultBreakIterator.java71
2 files changed, 57 insertions, 16 deletions
diff --git a/java/text/BreakIterator.java b/java/text/BreakIterator.java
index c845dd467..e00eef641 100644
--- a/java/text/BreakIterator.java
+++ b/java/text/BreakIterator.java
@@ -34,8 +34,6 @@ import java.util.MissingResourceException;
* type is created by calling one of the static factory methods, not
* by directly calling a constructor.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public abstract class BreakIterator implements Cloneable, Serializable
diff --git a/java/text/DefaultBreakIterator.java b/java/text/DefaultBreakIterator.java
index ce0a56a85..c1f57cd17 100644
--- a/java/text/DefaultBreakIterator.java
+++ b/java/text/DefaultBreakIterator.java
@@ -28,8 +28,6 @@ package java.text;
* English like locales. It also doesn't handle things like merging
* consecutive spaces into a single break character.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
class DefaultBreakIterator extends BreakIterator
@@ -58,6 +56,16 @@ private String[] breaks;
*/
private boolean before_and_after;
+/**
+ * Index of the break we broke before when doing a next().
+ */
+private int broke_before_next;
+
+/**
+ * Index of the break we broke before when doing a previous().
+ */
+private int broke_before_previous;
+
/*************************************************************************/
/*
@@ -70,7 +78,8 @@ private boolean before_and_after;
public
DefaultBreakIterator()
{
- ;
+ this.broke_before_next = -1;
+ this.broke_before_previous = -1;
}
/*************************************************************************/
@@ -82,6 +91,8 @@ DefaultBreakIterator()
public
DefaultBreakIterator(String[] breaks, boolean before_and_after)
{
+ this();
+
this.breaks = breaks;
this.before_and_after = before_and_after;
}
@@ -101,6 +112,9 @@ current()
public int
first()
{
+ broke_before_next = -1;
+ broke_before_previous = -1;
+
if (ci.first() == CharacterIterator.DONE)
return(DONE);
return(ci.getIndex());
@@ -109,6 +123,9 @@ first()
public int
last()
{
+ broke_before_next = -1;
+ broke_before_previous = -1;
+
if (ci.last() == CharacterIterator.DONE)
return(DONE);
return(ci.getIndex());
@@ -117,6 +134,8 @@ last()
public int
next()
{
+ broke_before_previous = -1;
+
// Handle character case
if (breaks == null)
{
@@ -125,6 +144,15 @@ next()
return(ci.getIndex());
}
+ // Handle case where we broke before a break last time and now we
+ // want to break after it.
+ if (broke_before_next != -1)
+ {
+ ci.setIndex(ci.getIndex() + breaks[broke_before_next].length());
+ broke_before_next = -1;
+ return(ci.getIndex());
+ }
+
// Handle all other cases
StringBuffer sb = new StringBuffer("");
int start_index = ci.getIndex();
@@ -144,14 +172,13 @@ next()
// Check to see if we already broke at beginning of break seq
if (before_and_after)
{
- if ((ci.getIndex() - start_index) == breaks[i].length())
- return(ci.getIndex());
-
- ci.setIndex(start_index);
- return(start_index);
+ broke_before_next = i;
+ ci.setIndex(ci.getIndex() - breaks[i].length() + 1);
+ return(ci.getIndex());
}
else
{
+ ci.next();
return(ci.getIndex());
}
}
@@ -178,6 +205,8 @@ next(int index)
public int
previous()
{
+ broke_before_next = -1;
+
// Handle character case
if (breaks == null)
{
@@ -186,6 +215,13 @@ previous()
return(ci.getIndex());
}
+ if (broke_before_previous != -1)
+ {
+ ci.setIndex(ci.getIndex() - breaks[broke_before_previous].length());
+ broke_before_previous = -1;
+ return(ci.getIndex());
+ }
+
// Handle all other cases
StringBuffer sb = new StringBuffer("");
int start_index = ci.getIndex();
@@ -205,15 +241,13 @@ previous()
// Check to see if we already broke at beginning of break seq
if (before_and_after)
{
- if ((start_index - ci.getIndex()) == breaks[i].length())
- return(ci.getIndex());
-
- ci.setIndex(start_index);
- return(start_index);
+ broke_before_previous = i;
+ ci.setIndex(ci.getIndex() + breaks[i].length());
+ return(ci.getIndex());
}
else
{
- return(ci.getIndex());
+ return(ci.getIndex()+breaks[i].length());
}
}
@@ -239,6 +273,9 @@ previous(int index)
public int
following(int index)
{
+ broke_before_next = -1;
+ broke_before_previous = -1;
+
ci.setIndex(index);
return(next());
}
@@ -246,6 +283,9 @@ following(int index)
public int
preceding(int index)
{
+ broke_before_next = -1;
+ broke_before_previous = -1;
+
ci.setIndex(index);
return(previous());
}
@@ -260,6 +300,9 @@ public void
setText(CharacterIterator ci)
{
this.ci = ci;
+
+ broke_before_next = -1;
+ broke_before_previous = -1;
}
public boolean