You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2011/02/15 15:41:18 UTC
svn commit: r1070923 - in /incubator/wookie/trunk/parser/java:
src-test/org/apache/wookie/w3c/test/FormattingUtilsTest.java
src/org/apache/wookie/w3c/util/FormattingUtils.java
Author: scottbw
Date: Tue Feb 15 14:41:17 2011
New Revision: 1070923
URL: http://svn.apache.org/viewvc?rev=1070923&view=rev
Log:
Added methods for getting unicode encoded versions of strings for presentation models that don't use HTML <span> tags, using the algorithm presented in the current W3C Widgets Interface spec (see http://dev.w3.org/2006/waf/widgets-api/#getting-localizable-strings-). This contributes to both WOOKIE-20 and WOOKIE-128
Added:
incubator/wookie/trunk/parser/java/src-test/org/apache/wookie/w3c/test/FormattingUtilsTest.java
Modified:
incubator/wookie/trunk/parser/java/src/org/apache/wookie/w3c/util/FormattingUtils.java
Added: incubator/wookie/trunk/parser/java/src-test/org/apache/wookie/w3c/test/FormattingUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/parser/java/src-test/org/apache/wookie/w3c/test/FormattingUtilsTest.java?rev=1070923&view=auto
==============================================================================
--- incubator/wookie/trunk/parser/java/src-test/org/apache/wookie/w3c/test/FormattingUtilsTest.java (added)
+++ incubator/wookie/trunk/parser/java/src-test/org/apache/wookie/w3c/test/FormattingUtilsTest.java Tue Feb 15 14:41:17 2011
@@ -0,0 +1,70 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wookie.w3c.test;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.wookie.w3c.util.FormattingUtils;
+import org.junit.Test;
+
+/**
+ * Tests for some simple cases of encoding text containing direction instructions
+ *
+ * Some of these tests are derived from examples ones used in http://dev.w3.org/2006/waf/widgets-api/#getting-localizable-strings-
+ *
+ * @author scottbw@apache.org
+ *
+ */
+public class FormattingUtilsTest {
+
+ @Test
+ public void noDirection(){
+ assertEquals("Hello World", FormattingUtils.getEncoded(null, "Hello World"));
+ }
+
+ @Test
+ public void ltr(){
+ assertEquals("\u202aHello World\u202c", FormattingUtils.getEncoded("ltr", "Hello World"));
+ }
+
+ @Test
+ public void rtl(){
+ assertEquals("\u202bHello World\u202c", FormattingUtils.getEncoded("rtl", "Hello World"));
+ }
+
+ @Test
+ public void rlo(){
+ assertEquals("\u202eHello World\u202c", FormattingUtils.getEncoded("rlo", "Hello World"));
+ }
+
+ @Test
+ public void lro(){
+ assertEquals("\u202dHello World\u202c", FormattingUtils.getEncoded("lro", "Hello World"));
+ }
+
+ @Test
+ public void embeddedOnly(){
+ assertEquals("\u202aGoodbye \u202bleurc\u202c World\u202c", FormattingUtils.getEncoded(null, "Goodbye <span dir=\"rtl\">leurc</span> World"));
+ }
+
+ @Test
+ public void rtlembedded(){
+ assertEquals("\u202bGoodbye \u202bleurc\u202c World\u202c", FormattingUtils.getEncoded("rtl", "Goodbye <span dir=\"rtl\">leurc</span> World"));
+ }
+
+ @Test
+ public void ltrembedded(){
+ assertEquals("\u202A\u202EolleH\u202C\u202C", FormattingUtils.getEncoded("ltr", "<span dir=\"rlo\">olleH</span>"));
+ }
+}
Modified: incubator/wookie/trunk/parser/java/src/org/apache/wookie/w3c/util/FormattingUtils.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/parser/java/src/org/apache/wookie/w3c/util/FormattingUtils.java?rev=1070923&r1=1070922&r2=1070923&view=diff
==============================================================================
--- incubator/wookie/trunk/parser/java/src/org/apache/wookie/w3c/util/FormattingUtils.java (original)
+++ incubator/wookie/trunk/parser/java/src/org/apache/wookie/w3c/util/FormattingUtils.java Tue Feb 15 14:41:17 2011
@@ -22,13 +22,27 @@ import org.apache.wookie.w3c.W3CWidget;
/**
* i18n formatting utilities
*
- * The methods in this class can be used to generate i18n strings using
+ * <p>The methods in this class can be used to obtain strings
+ * that have been processed for i18n content to be presented
+ * in different ways, for example using CSS styling or unicode
+ * control characters</p>
+ *
+ * <p>The <em>getFormattedXYZ</em> methods generate i18n strings using
* CSS bidi properties for use in display. This involves inserting HTML
- * <span> tags containing CSS styling properties for text direction
+ * <span> tags containing CSS styling properties for text direction</p>
+ *
+ * <p>The <em>getEncodedXYZ</em> methods generate unicode Strings
+ * using unicode control characters, and remove any embedded <span> tags</p>
*
*/
public class FormattingUtils {
+ public final static String LTR = "\u202a";
+ public final static String RTL = "\u202b";
+ public final static String LRO = "\u202d";
+ public final static String RLO = "\u202e";
+ public final static String END = "\u202c";
+
/**
* Returns the CSS formatted i18n string for the widget name
* @param name the Widget's Name entity
@@ -114,6 +128,37 @@ public class FormattingUtils {
return "<span style=\"unicode-bidi:"+mode+"; direction:"+dir+"\">"+value+"</span>";
}
+ public static String getEncoded(String dir, String value){
+ // Encode any embedded SPAN tags into unicode control characters
+ String checkSpans = encodeSpan(value);
+ // If no changes, and no dir property, return original string unmodified
+ if (checkSpans.equals(value) && dir == null) return value;
+ value = checkSpans;
+ // Prepend direction control character
+ if (dir == null) dir = "ltr";
+ if (dir.equals("ltr")) dir = LTR;
+ if (dir.equals("lro")) dir = LRO;
+ if (dir.equals("rlo")) dir = RLO;
+ if (dir.equals("rtl")) dir = RTL;
+ // Append marker
+ return dir+value+END;
+ }
+
+ /**
+ * Replace any embedded <span> tags with
+ * control characters
+ * @param value
+ * @return
+ */
+ private static String encodeSpan(String value){
+ value = value.replace("<span dir=\"ltr\">", LTR);
+ value = value.replace("<span dir=\"rtl\">", RTL);
+ value = value.replace("<span dir=\"lro\">", LRO);
+ value = value.replace("<span dir=\"rlo\">", RLO);
+ value = value.replace("</span>", END);
+ return value;
+ }
+
/**
* Reformats any embedded <span dir="xyz"> tags to use
* CSS BIDI properties