A few small changes to BidiFormatter. Mainly, it now uses DirectionEstimator that can be modified instead of the constant estimating function of BidiUtils.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9227 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/i18n/shared/BidiFormatter.java b/user/src/com/google/gwt/i18n/shared/BidiFormatter.java
index 12060e4..a043fe5 100644
--- a/user/src/com/google/gwt/i18n/shared/BidiFormatter.java
+++ b/user/src/com/google/gwt/i18n/shared/BidiFormatter.java
@@ -211,6 +211,8 @@
 
   private boolean alwaysSpan;
   private Direction contextDir;
+  private DirectionEstimator directionEstimator =
+      WordCountDirectionEstimator.get();
 
   /**
    * @param contextDir The context direction
@@ -240,14 +242,14 @@
    * Returns "dir=ltr" or "dir=rtl", depending on {@code str}'s estimated
    * direction, if it is not the same as the context direction. Otherwise,
    * returns the empty string.
-   *
+   * 
    * @param str String whose direction is to be estimated
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @return "dir=rtl" for RTL text in non-RTL context; "dir=ltr" for LTR text
    *         in non-LTR context; else, the empty string.
    */
   public String dirAttr(String str, boolean isHtml) {
-    return knownDirAttr(BidiUtils.get().estimateDirection(str, isHtml));
+    return knownDirAttr(directionEstimator.estimateDirection(str, isHtml));
   }
 
   /**
@@ -266,7 +268,7 @@
    * @return {@code str}'s estimated overall direction
    */
   public Direction estimateDirection(String str) {
-    return BidiUtils.get().estimateDirection(str);
+    return directionEstimator.estimateDirection(str);
   }
 
   /**
@@ -279,7 +281,7 @@
    * @return {@code str}'s estimated overall direction
    */
   public Direction estimateDirection(String str, boolean isHtml) {
-    return BidiUtils.get().estimateDirection(str, isHtml);
+    return directionEstimator.estimateDirection(str, isHtml);
   }
 
   /**
@@ -297,6 +299,10 @@
     return contextDir;
   }
 
+  public DirectionEstimator getDirectionEstimator() {
+    return directionEstimator;
+  }
+
   /**
    * Returns whether the context direction is RTL.
    */
@@ -354,8 +360,12 @@
    */
   public String markAfter(String str, boolean isHtml) {
     str = BidiUtils.get().stripHtmlIfNeeded(str, isHtml);
-    return dirResetIfNeeded(str, BidiUtils.get().estimateDirection(str), false,
-        true);
+    return dirResetIfNeeded(str, directionEstimator.estimateDirection(str),
+        false, true);
+  }
+
+  public void setDirectionEstimator(DirectionEstimator directionEstimator) {
+    this.directionEstimator = directionEstimator;
   }
 
   /**
@@ -407,12 +417,13 @@
    * @return Input string after applying the above processing.
    */
   public String spanWrap(String str, boolean isHtml, boolean dirReset) {
-    Direction dir = BidiUtils.get().estimateDirection(str, isHtml);
+    Direction dir = directionEstimator.estimateDirection(str, isHtml);
     return spanWrapWithKnownDir(dir, str, isHtml, dirReset);
   }
 
   /**
-   * Like {@link #spanWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
+   * Like
+   * {@link #spanWrapWithKnownDir(com.google.gwt.i18n.client.HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code isHtml} is false and {@code dirReset} is true.
    *
    * @param dir {@code str}'s direction
@@ -424,7 +435,8 @@
   }
 
   /**
-   * Like {@link #spanWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
+   * Like
+   * {@link #spanWrapWithKnownDir(com.google.gwt.i18n.client.HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code dirReset} is true.
    *
    * @param dir {@code str}'s direction
@@ -543,12 +555,13 @@
    * @return Input string after applying the above processing.
    */
   public String unicodeWrap(String str, boolean isHtml, boolean dirReset) {
-    Direction dir = BidiUtils.get().estimateDirection(str, isHtml);
+    Direction dir = directionEstimator.estimateDirection(str, isHtml);
     return unicodeWrapWithKnownDir(dir, str, isHtml, dirReset);
   }
 
   /**
-   * Like {@link #unicodeWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
+   * Like
+   * {@link #unicodeWrapWithKnownDir(com.google.gwt.i18n.client.HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code isHtml} is false and {@code dirReset} is true.
    *
    * @param dir {@code str}'s direction
@@ -560,7 +573,8 @@
   }
 
   /**
-   * Like {@link #unicodeWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
+   * Like
+   * {@link #unicodeWrapWithKnownDir(com.google.gwt.i18n.client.HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code dirReset} is true.
    *
    * @param dir {@code str}'s direction