You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2007/11/05 21:15:12 UTC

svn commit: r592138 - in /incubator/abdera/java/trunk: client/src/main/java/org/apache/abdera/protocol/client/ core/src/main/java/org/apache/abdera/ dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/ dependencies/i18n/src/main/java/org/apache/a...

Author: jmsnell
Date: Mon Nov  5 12:15:09 2007
New Revision: 592138

URL: http://svn.apache.org/viewvc?rev=592138&view=rev
Log:
Updates to the IRI implementation that improve overall performance. Most of the initialization overhead has been moved into the creation of the Abdera object.

Removed:
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Constants.java
Modified:
    incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java
    incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/Abdera.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/CharUtils.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InvalidCharacterException.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/RestrictedCodepointIterator.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/AbstractScheme.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/DefaultScheme.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Escaping.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/FtpScheme.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpScheme.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpsScheme.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IDNA.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IRI.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Nameprep.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/NameprepCodepointIterator.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Scheme.java
    incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/lang/Lang.java
    incubator/abdera/java/trunk/dependencies/i18n/src/test/java/org/apache/abdera/i18n/test/iri/TestIRI.java
    incubator/abdera/java/trunk/extensions/json/src/main/java/org/apache/abdera/ext/json/JSONUtil.java
    incubator/abdera/java/trunk/protocol/src/main/java/org/apache/abdera/protocol/util/EncodingUtil.java
    incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractResponseContext.java
    incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractWorkspaceProvider.java

Modified: incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java (original)
+++ incubator/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/RequestOptions.java Mon Nov  5 12:15:09 2007
@@ -26,7 +26,7 @@
 
 import javax.activation.MimeType;
 
-import org.apache.abdera.i18n.iri.Constants;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 import org.apache.abdera.i18n.iri.Escaping;
 import org.apache.abdera.protocol.Request;
 import org.apache.abdera.protocol.util.AbstractRequest;
@@ -419,7 +419,7 @@
         slug.indexOf((char)13) > -1)
       throw new IllegalArgumentException(
         Messages.get("SLUG.BAD.CHARACTERS"));
-    setHeader("Slug", Escaping.encode(slug,Constants.ASCIISANSCRLF));
+    setHeader("Slug", Escaping.encode(slug,Profile.ASCIISANSCRLF));
   }
   
   /**

Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/Abdera.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/Abdera.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/Abdera.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/Abdera.java Mon Nov  5 12:15:09 2007
@@ -18,6 +18,7 @@
 package org.apache.abdera;
 
 import org.apache.abdera.factory.Factory;
+import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.model.Categories;
 import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Feed;
@@ -93,6 +94,7 @@
     parserFactory = newParserFactory();
     writerFactory = newWriterFactory();
     writer = newWriter();
+    IRI.preinit();  // initializes the IRI stuff to improve performance later
   }
   
   /**

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/CharUtils.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/CharUtils.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/CharUtils.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/CharUtils.java Mon Nov  5 12:15:09 2007
@@ -17,11 +17,7 @@
 */
 package org.apache.abdera.i18n.io;
 
-import java.util.BitSet;
-
-import org.apache.abdera.i18n.io.CodepointIterator;
-import org.apache.abdera.i18n.io.InvalidCharacterException;
-import org.apache.abdera.i18n.io.RestrictedCodepointIterator;
+import java.util.Arrays;
 
 /**
  * General utilities for dealing with Unicode characters
@@ -34,65 +30,65 @@
     return d >= 0x000000 && d <= 0x10ffff;
   }
   
-  public static int scanNot(CodepointIterator ci, BitSet set) throws InvalidCharacterException {
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,true,true);
+  public static int scanNot(CodepointIterator ci, Profile profile) throws InvalidCharacterException {
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,true,true);
     while (rci.hasNext()) rci.next();
     return rci.position;
   }
   
-  public static int scanNot(char[] array, BitSet set) throws InvalidCharacterException {
+  public static int scanNot(char[] array, Profile profile) throws InvalidCharacterException {
     CodepointIterator ci = CodepointIterator.forCharArray(array);
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,true,true);
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,true,true);
     while (rci.hasNext()) rci.next();
     return rci.position;
   }
   
-  public static int scan(CodepointIterator ci, BitSet set) throws InvalidCharacterException {
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,true);
+  public static int scan(CodepointIterator ci, Profile profile) throws InvalidCharacterException {
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,true);
     while (rci.hasNext()) rci.next();
     return rci.position();
   }
   
-  public static int scan(char[] array, BitSet set) throws InvalidCharacterException {
+  public static int scan(char[] array, Profile profile) throws InvalidCharacterException {
     CodepointIterator ci = CodepointIterator.forCharArray(array);
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,true);
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,true);
     while (rci.hasNext()) rci.next();
     return rci.position();
   }
   
-  public static int scan(String s, BitSet set) throws InvalidCharacterException {
+  public static int scan(String s, Profile profile) throws InvalidCharacterException {
     CodepointIterator ci = CodepointIterator.forCharSequence(s);
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,true);
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,true);
     while (rci.hasNext()) rci.next();
     return rci.position;
   }
   
-  public static void verifyNot(CodepointIterator ci, BitSet set) throws InvalidCharacterException {
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,false,true);
+  public static void verifyNot(CodepointIterator ci, Profile profile) throws InvalidCharacterException {
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,false,true);
     while (rci.hasNext()) rci.next();
   }
   
-  public static void verifyNot(char[] array, BitSet set) throws InvalidCharacterException {
+  public static void verifyNot(char[] array, Profile profile) throws InvalidCharacterException {
     CodepointIterator ci = CodepointIterator.forCharArray(array);
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,false,true);
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,false,true);
     while (rci.hasNext()) rci.next();
   }
   
-  public static void verify(CodepointIterator ci, BitSet set) throws InvalidCharacterException {
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,false);
+  public static void verify(CodepointIterator ci, Profile profile) throws InvalidCharacterException {
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,false);
     while (rci.hasNext()) rci.next();
   }
   
-  public static void verify(char[] array, BitSet set) throws InvalidCharacterException {
+  public static void verify(char[] array, Profile profile) throws InvalidCharacterException {
     CodepointIterator ci = CodepointIterator.forCharArray(array);
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,false);
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,false);
     while (rci.hasNext()) rci.next();
   }
   
-  public static void verify(String s, BitSet set) throws InvalidCharacterException {
+  public static void verify(String s, Profile profile) throws InvalidCharacterException {
     if (s == null) return;
     CodepointIterator ci = CodepointIterator.forCharSequence(s);
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,false);
+    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,profile,false);
     while (rci.hasNext()) rci.next();
   }
   
@@ -113,11 +109,13 @@
     return true;
   }
   
-  public static boolean isSet(int n, BitSet... sets) {
+  public static boolean inRange(int codepoint, int low, int high) {
+    return codepoint >= low && codepoint <= high;
+  }
+  
+  public static boolean isSet(int n, int[]... sets) {
     if (n == -1) return false;
-    BitSet set = new BitSet();
-    for (BitSet s : sets) set.or(s);
-    return set.get(n);
+    return contains(n,sets);
   }
   
   public static void append(StringBuffer buf, int c) {
@@ -327,4 +325,458 @@
   public static String bidiLRM(String s) {
     return wrap(s,LRM,LRM);
   }
+  
+  public static boolean contains(int v, int[]... ranges) {
+    for (int[] range : ranges) 
+      if (Arrays.binarySearch(range, v) > -1) return true;
+    return false;
+  }
+  
+  public static interface Check {
+    boolean escape(int codepoint);
+  }
+  
+  public static enum Profile {
+    NONE(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return true;
+        }
+      }
+    ),
+    ALPHA(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isAlpha(codepoint);
+        }
+      }
+    ),
+    ALPHANUM(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isAlphaNum(codepoint);
+        }
+      }
+    ),
+    FRAGMENT(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isFragment(codepoint);
+        }
+      }
+    ),
+    IFRAGMENT(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_ifragment(codepoint);
+        }
+      }
+    ),
+    PATH(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isPath(codepoint);
+        }
+      }
+    ),
+    IPATH(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_ipath(codepoint);
+        }
+      }
+    ),
+    IUSERINFO(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_iuserinfo(codepoint);
+        }
+      }
+    ),
+    USERINFO(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isUserInfo(codepoint);
+        }
+      }
+    ),
+    QUERY(
+        new Check() {
+        public boolean escape(int codepoint) {
+          return !isQuery(codepoint);
+        }
+      }
+    ),
+    IQUERY(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_iquery(codepoint);
+        }
+      }
+    ),
+    SCHEME(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isScheme(codepoint);
+        }
+      }
+    ),
+    PATHNODELIMS(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isPathNoDelims(codepoint);
+        }
+      }
+    ),
+    IPATHNODELIMS(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_ipathnodelims(codepoint);
+        }
+      }
+    ),
+    IREGNAME(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_iregname(codepoint);
+        }
+      }
+    ),
+    IPRIVATE(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_iprivate(codepoint);
+        }
+      }
+    ),
+    RESERVED(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !isReserved(codepoint);
+        }
+      }
+    ),
+    IUNRESERVED(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_iunreserved(codepoint);
+        }
+      }
+    ),
+    SCHEMESPECIFICPART(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_iunreserved(codepoint) && 
+                 !isReserved(codepoint) && 
+                 !is_iprivate(codepoint) && 
+                 !isPctEnc(codepoint) && 
+                 codepoint != '#';
+        }
+      }
+    ),
+    AUTHORITY(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !is_regname(codepoint) &&
+                 !isUserInfo(codepoint) && 
+                 !isGenDelim(codepoint);
+        }
+      }
+    ),
+    ASCIISANSCRLF(
+      new Check() {
+        public boolean escape(int codepoint) {  
+          return !CharUtils.inRange(codepoint,1,9) &&   
+                 !CharUtils.inRange(codepoint,14,127);
+        }        
+      }
+    ),
+    STD3ASCIIRULES(
+      new Check() {
+        public boolean escape(int codepoint) {
+          return !CharUtils.inRange(codepoint,0x0000,0x002C) &&
+                 !CharUtils.inRange(codepoint,0x002E,0x002F) &&
+                 !CharUtils.inRange(codepoint,0x003A,0x0040) &&
+                 !CharUtils.inRange(codepoint,0x005B,0x0060) &&
+                 !CharUtils.inRange(codepoint,0x007B,0x007F);          
+        }
+      }
+    )
+    ;
+    private final Check check;
+    Profile(Check check) {
+      this.check = check;
+    }
+    public boolean check(int codepoint) {
+      return check.escape(codepoint);
+    }
+  }
+  
+  public static boolean isDigit(int codepoint) {
+    return CharUtils.inRange(codepoint, '0', '9');
+  }
+  
+  public static boolean isAlpha(int codepoint) {
+    return CharUtils.inRange(codepoint, 'A', 'Z') ||
+           CharUtils.inRange(codepoint, 'a', 'z');
+  }
+
+  public static boolean isAlphaNum(int codepoint) {
+    return isDigit(codepoint) || isAlpha(codepoint);
+  }
+
+  public static boolean isPctEnc(int codepoint) {
+    return codepoint == '%' ||
+           isDigit(codepoint) ||
+           CharUtils.inRange(codepoint,'A','F') ||
+           CharUtils.inRange(codepoint,'a','f');
+  }
+  
+  public static boolean isMark(int codepoint) {
+    return codepoint == '-'  ||
+           codepoint == '_'  ||
+           codepoint == '.'  ||
+           codepoint == '!'  ||
+           codepoint == '~'  ||
+           codepoint == '*'  ||
+           codepoint == '\\' ||
+           codepoint == '\'' ||
+           codepoint == '('  ||
+           codepoint == ')';
+  }
+  
+  public static boolean isUnreserved(int codepoint) {
+    return isAlphaNum(codepoint) || isMark(codepoint);
+  }
+
+  public static boolean isReserved(int codepoint) {
+    return codepoint == '$' ||
+           codepoint == '&' ||
+           codepoint == '+' ||
+           codepoint == ',' ||
+           codepoint == '/' ||
+           codepoint == ':' ||
+           codepoint == ';' ||
+           codepoint == '=' ||
+           codepoint == '?' ||
+           codepoint == '@' ||
+           codepoint == '[' ||
+           codepoint == ']';
+  }
+  
+  public static boolean isGenDelim(int codepoint) {
+    return codepoint == '#' ||
+           codepoint == '/' ||
+           codepoint == ':' ||
+           codepoint == '?' ||
+           codepoint == '@' ||
+           codepoint == '[' ||
+           codepoint == ']';
+  }
+  
+  public static boolean isSubDelim(int codepoint) {
+    return codepoint == '!' || 
+           codepoint == '$' || 
+           codepoint == '&' || 
+           codepoint == '\'' || 
+           codepoint == '(' || 
+           codepoint == ')' || 
+           codepoint == '*' || 
+           codepoint == '+' || 
+           codepoint == ',' || 
+           codepoint == ';' || 
+           codepoint == '=' || 
+           codepoint == '\\';
+  }
+  
+  public static boolean isPchar(int codepoint) {
+    return isUnreserved(codepoint) ||  
+           codepoint == ':' || 
+           codepoint == '@' || 
+           codepoint == '&' || 
+           codepoint == '=' || 
+           codepoint == '+' || 
+           codepoint == '$' || 
+           codepoint == ',';
+  }
+
+  public static boolean isPath(int codepoint) {
+    return isPchar(codepoint) || 
+           codepoint == ';' ||
+           codepoint == '/' ||
+           codepoint == '%' || 
+           codepoint == ',';
+  }
+  
+  public static boolean isPathNoDelims(int codepoint) {
+    return isPath(codepoint) && !isGenDelim(codepoint);
+  }
+
+  public static boolean isScheme(int codepoint) {
+    return isAlphaNum(codepoint) || 
+           codepoint == '+' || 
+           codepoint == '-' ||
+           codepoint == '.';
+  }
+  
+
+  public static boolean isUserInfo(int codepoint) {
+    return isUnreserved(codepoint) || 
+           isSubDelim(codepoint) ||
+           isPctEnc(codepoint);
+  }
+  
+  public static boolean isQuery(int codepoint) {
+    return isPchar(codepoint) ||
+           codepoint == ';' || 
+           codepoint == '/' ||
+           codepoint == '?' ||
+           codepoint == '%';
+  }
+
+  public static boolean isFragment(int codepoint) {
+    return isPchar(codepoint) ||
+           codepoint == '/' ||
+           codepoint == '?' ||
+           codepoint == '%';
+  }
+  
+  public static boolean isBidi(int codepoint) {
+    return  codepoint == '\u200E' || // Left-to-right mark
+            codepoint == '\u200F' || // Right-to-left mark
+            codepoint == '\u202A' || // Left-to-right embedding
+            codepoint == '\u202B' || // Right-to-left embedding
+            codepoint == '\u202D' || // Left-to-right override
+            codepoint == '\u202E' || // Right-to-left override
+            codepoint == '\u202C';   // Pop directional formatting
+  }
+  
+  public static boolean is_ucschar(int codepoint) {    
+    return 
+        CharUtils.inRange(codepoint,'\u00A0', '\uD7FF') ||
+        CharUtils.inRange(codepoint,'\uF900','\uFDCF') ||
+        CharUtils.inRange(codepoint,'\uFDF0','\uFFEF') ||
+        CharUtils.inRange(codepoint,0x10000,0x1FFFD) ||
+        CharUtils.inRange(codepoint,0x20000,0x2FFFD) ||
+        CharUtils.inRange(codepoint,0x30000,0x3FFFD) ||
+        CharUtils.inRange(codepoint,0x40000,0x4FFFD) ||
+        CharUtils.inRange(codepoint,0x50000,0x5FFFD) ||
+        CharUtils.inRange(codepoint,0x60000,0x6FFFD) ||
+        CharUtils.inRange(codepoint,0x70000,0x7FFFD) ||
+        CharUtils.inRange(codepoint,0x80000,0x8FFFD) ||
+        CharUtils.inRange(codepoint,0x90000,0x9FFFD) ||
+        CharUtils.inRange(codepoint,0xA0000,0xAFFFD) ||
+        CharUtils.inRange(codepoint,0xB0000,0xBFFFD) ||
+        CharUtils.inRange(codepoint,0xC0000,0xCFFFD) ||
+        CharUtils.inRange(codepoint,0xD0000,0xDFFFD) ||
+        CharUtils.inRange(codepoint,0xE1000,0xEFFFD);
+  }
+
+  public static boolean is_iprivate(int codepoint) {
+    return
+      CharUtils.inRange(codepoint,'\uE000', '\uF8FF') ||
+      CharUtils.inRange(codepoint, 0xF0000,0xFFFFD) ||
+      CharUtils.inRange(codepoint, 0x100000,0x10FFFD);
+  }
+  
+  public static boolean is_iunreserved(int codepoint) {
+    return isAlphaNum(codepoint) || isMark(codepoint) || is_ucschar(codepoint);
+  }
+
+  public static boolean is_ipchar(int codepoint) {
+    return is_iunreserved(codepoint) || 
+           codepoint == ':' || 
+           codepoint == '@' || 
+           codepoint == '&' || 
+           codepoint == '=' || 
+           codepoint == '+' || 
+           codepoint == '$';
+  }
+
+  public static boolean is_ipath(int codepoint) {
+    return is_ipchar(codepoint) || 
+           codepoint == ';' ||
+           codepoint == '/' ||
+           codepoint == '%' || 
+           codepoint == ',';
+  }
+  
+  public static boolean is_ipathnodelims(int codepoint) {
+    return is_ipath(codepoint) && !isGenDelim(codepoint);
+  }
+
+  public static boolean is_iquery(int codepoint) {
+    return is_ipchar(codepoint) || 
+           is_iprivate(codepoint) || 
+           codepoint == ';' ||
+           codepoint == '/' ||
+           codepoint == '?' ||
+           codepoint == '%';
+  }
+
+  public static boolean is_ifragment(int codepoint) {
+    return is_ipchar(codepoint) || 
+           is_iprivate(codepoint) || 
+           codepoint == '/' ||
+           codepoint == '?' ||
+           codepoint == '%';
+  }  
+  
+  public static boolean is_iregname(int codepoint) {
+    return is_iunreserved(codepoint) || 
+           codepoint == '!'  || 
+           codepoint == '$'  || 
+           codepoint == '&'  || 
+           codepoint == '\'' || 
+           codepoint == '('  || 
+           codepoint == ')'  || 
+           codepoint == '*'  || 
+           codepoint == '+'  || 
+           codepoint == ','  || 
+           codepoint == ';'  || 
+           codepoint == '='  || 
+           codepoint == '"';
+  }
+  
+  public static boolean is_regname(int codepoint) {
+    return isUnreserved(codepoint) || 
+           codepoint == '!'  || 
+           codepoint == '$'  || 
+           codepoint == '&'  || 
+           codepoint == '\'' || 
+           codepoint == '('  || 
+           codepoint == ')'  || 
+           codepoint == '*'  || 
+           codepoint == '+'  || 
+           codepoint == ','  || 
+           codepoint == ';'  || 
+           codepoint == '='  || 
+           codepoint == '"';
+  }
+  
+  public static boolean is_iuserinfo(int codepoint) {
+    return is_iunreserved(codepoint) || 
+           codepoint == ';' || 
+           codepoint == ':' || 
+           codepoint == '&' || 
+           codepoint == '=' || 
+           codepoint == '+' || 
+           codepoint == '$' || 
+           codepoint == ',';
+  }
+  
+  public static boolean is_iserver(int codepoint) {
+    return is_iuserinfo(codepoint) || 
+           is_iregname(codepoint) || 
+           isAlphaNum(codepoint) || 
+           codepoint == '.' || 
+           codepoint == ':' || 
+           codepoint == '@' || 
+           codepoint == '[' || 
+           codepoint == ']' || 
+           codepoint == '%' || 
+           codepoint == '-';
+  }
+
 }
+

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InvalidCharacterException.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InvalidCharacterException.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InvalidCharacterException.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/InvalidCharacterException.java Mon Nov  5 12:15:09 2007
@@ -31,7 +31,7 @@
 
   @Override
   public String getMessage() {
-    return "Invalid Character 0x" + Integer.toHexString(input);
+    return "Invalid Character 0x" + Integer.toHexString(input) + "(" + (char)input + ")";
   }
 
   

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/RestrictedCodepointIterator.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/RestrictedCodepointIterator.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/RestrictedCodepointIterator.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/io/RestrictedCodepointIterator.java Mon Nov  5 12:15:09 2007
@@ -17,14 +17,8 @@
 */
 package org.apache.abdera.i18n.io;
 
-import java.util.BitSet;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 
-import org.apache.abdera.i18n.ChainableBitSet;
-import org.apache.abdera.i18n.io.CharUtils;
-import org.apache.abdera.i18n.io.CodepointIterator;
-import org.apache.abdera.i18n.io.FilterCodepointIterator;
-import org.apache.abdera.i18n.io.InvalidCharacterException;
-import org.apache.abdera.i18n.io.RestrictedCodepointIterator;
 
 
 /**
@@ -36,33 +30,33 @@
 public class RestrictedCodepointIterator 
   extends FilterCodepointIterator {
 
-  private BitSet bitset;
+  private final Profile profile;
   private boolean scanningOnly = false;
   private boolean notset = false;
 
   protected RestrictedCodepointIterator(
     CodepointIterator internal, 
-    BitSet bitset) {
-      this(internal,bitset,false);
+    Profile profile) {
+      this(internal,profile,false);
   }
 
   protected RestrictedCodepointIterator(
     CodepointIterator internal, 
-    BitSet bitset,
+    Profile profile,
     boolean scanningOnly) {
-      this(internal, bitset, scanningOnly, false);
+      this(internal, profile, scanningOnly, false);
   }
   
   protected RestrictedCodepointIterator(
-      CodepointIterator internal, 
-      BitSet bitset,
-      boolean scanningOnly,
-      boolean notset) {
+    CodepointIterator internal, 
+    Profile profile,
+    boolean scanningOnly,
+    boolean notset) {
       super(internal);
-      this.bitset = bitset;
+      this.profile = profile;
       this.scanningOnly = scanningOnly;
       this.notset = notset;
-    }
+  }
 
   public boolean hasNext() {
     boolean b = super.hasNext();
@@ -89,7 +83,8 @@
   }
 
   private boolean check(int cp) {
-    return (!notset) ? !bitset.get(cp) : bitset.get(cp);
+    boolean answer = !profile.check(cp);
+    return (!notset) ? !answer : answer;
   }
   
   @Override
@@ -116,13 +111,4 @@
     return chars;
   }
  
-  public static void main(String... args) throws Exception {
-    
-    ChainableBitSet set = new ChainableBitSet().set2('a','b','c');
-    char[] c = {'a','b','c',CharUtils.getHighSurrogate(0x10000),CharUtils.getLowSurrogate(0x10000)};
-    
-    CodepointIterator ci = CodepointIterator.forCharArray(c);
-    RestrictedCodepointIterator rci = new RestrictedCodepointIterator(ci,set,false,true);
-    while(rci.hasNext()) System.out.println(rci.next());
-  }
 }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/AbstractScheme.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/AbstractScheme.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/AbstractScheme.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/AbstractScheme.java Mon Nov  5 12:15:09 2007
@@ -17,8 +17,6 @@
 */
 package org.apache.abdera.i18n.iri;
 
-import org.apache.abdera.i18n.iri.IRI;
-import org.apache.abdera.i18n.iri.Scheme;
 
 /**
  * Base implementation for IRI scheme providers
@@ -27,24 +25,21 @@
   implements Scheme {
 
   protected final String name;
+  protected final int port;
   
-  protected AbstractScheme(String name) {
+  protected AbstractScheme(String name, int port) {
     this.name = name;
+    this.port = port;
+  }
+  
+  public int getDefaultPort() {
+    return port;
   }
   
   public String getName() {
     return name;
   }
 
-  /**
-   * Default to use normalization-based comparison
-   */
-  public boolean equivalent(IRI iri1, IRI iri2) {
-    String s2 = iri2.normalize().toASCIIString();
-    String s1 = iri1.normalize().toASCIIString();
-    return s1.compareTo(s2) == 0;
-  }
-  
   /**
    * Default return unmodified
    */

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/DefaultScheme.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/DefaultScheme.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/DefaultScheme.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/DefaultScheme.java Mon Nov  5 12:15:09 2007
@@ -17,12 +17,14 @@
 */
 package org.apache.abdera.i18n.iri;
 
-import org.apache.abdera.i18n.iri.AbstractScheme;
-
 public class DefaultScheme extends AbstractScheme {
 
   public DefaultScheme(String name) {
-    super(name);
+    super(name,-1);
+  }
+  
+  public DefaultScheme(String name, int port) {
+    super(name,port);
   }
 
 }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Escaping.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Escaping.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Escaping.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Escaping.java Mon Nov  5 12:15:09 2007
@@ -20,9 +20,9 @@
 import java.io.ByteArrayInputStream;
 import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
-import java.util.BitSet;
 
 import org.apache.abdera.i18n.io.CharUtils;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 
 
 /**
@@ -46,32 +46,43 @@
   }
   
   public static String encode(String s) {
-    return encode(s,(BitSet)null);
+    return encode(s,Profile.NONE);
   }
   
-  public static String encode(String s, BitSet... maps) {
+  public static String encode(String s, Profile profile) {
+    return encode(s, new Profile[] {profile});
+  }
+  
+  public static String encode(String s, Profile... profiles) {
     try {
       if (s == null) return null;
-      return encode(s,"utf-8",maps);
+      return encode(s,"utf-8",profiles);
     } catch (UnsupportedEncodingException e) {
       return null; // shouldn't happen
     }
   }
   
+  private static boolean check(int codepoint, Profile... profiles) {
+    for (Profile profile : profiles) {
+      if (profile.check(codepoint)) return true;
+    }
+    return false;
+  }
+  
   public static String encode(
     String s, 
     String enc, 
-    BitSet... maps) 
+    Profile... profiles) 
       throws UnsupportedEncodingException {
     if (s == null) return s;
     StringBuffer sb = new StringBuffer();
     char[] chars = s.toCharArray();
     for (int n = 0; n < chars.length; n++) {
       char c = (char) chars[n];
-      if (!CharUtils.isSet(c,maps) && !CharUtils.isHighSurrogate(c)) {
+      if (!CharUtils.isHighSurrogate(c) && check(c,profiles)) {
         encode(sb,String.valueOf(c).getBytes(enc));
       } else if (CharUtils.isHighSurrogate(c)) {
-        if (!CharUtils.isSet(c,maps)) {
+        if (check(c,profiles)) {
           StringBuffer buf = new StringBuffer();
           buf.append(c);
           buf.append(chars[++n]);

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/FtpScheme.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/FtpScheme.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/FtpScheme.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/FtpScheme.java Mon Nov  5 12:15:09 2007
@@ -25,10 +25,7 @@
   static final int DEFAULT_PORT = 21;
   
   public FtpScheme() {
-    super(NAME);
+    super(NAME,DEFAULT_PORT);
   }
   
-  protected int getDefaultPort() {
-    return FtpScheme.DEFAULT_PORT;
-  }
 }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpScheme.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpScheme.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpScheme.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpScheme.java Mon Nov  5 12:15:09 2007
@@ -17,9 +17,8 @@
 */
 package org.apache.abdera.i18n.iri;
 
-import org.apache.abdera.i18n.iri.AbstractScheme;
-import org.apache.abdera.i18n.iri.HttpScheme;
-import org.apache.abdera.i18n.iri.IRI;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
+
 
 class HttpScheme extends AbstractScheme {
 
@@ -27,41 +26,11 @@
   static final int DEFAULT_PORT = 80;
   
   public HttpScheme() {
-    super(NAME);
-  }
-  
-  protected HttpScheme(String name) {
-    super(name);
-  }
-
-  protected int getDefaultPort() {
-    return HttpScheme.DEFAULT_PORT;
-  }
-
-  private boolean equal(String s1, String s2) {
-    return ((s1 != null && s1.equals(s2)) ||
-           ((s2 != null && s2.equals(s1)) ||
-             s1 == null && s2 == null));
+    super(NAME,DEFAULT_PORT);
   }
   
-  @Override
-  public boolean equivalent(IRI iri1, IRI iri2) {
-    if (super.equivalent(iri1, iri2)) 
-      return true;
-    if (!iri1.getScheme().equals(iri2.getScheme()))
-      return false;
-    iri1 = iri1.normalize();
-    iri2 = iri2.normalize();
-    int port1 = (iri1.getPort() != -1) ? iri1.getPort() : getDefaultPort();
-    int port2 = (iri2.getPort() != -1) ? iri2.getPort() : getDefaultPort();
-    return
-        equal(iri1.getUserInfo(),iri2.getUserInfo()) &&
-        equal(iri1.getASCIIHost(),iri2.getASCIIHost()) &&
-        port1 == port2 &&
-        equal(iri1.getASCIIPath(),iri2.getASCIIPath()) &&
-        equal(iri1.getQuery(),iri2.getQuery()) &&
-        equal(iri1.getFragment(),iri2.getFragment());
-    
+  protected HttpScheme(String name, int port) {
+    super(name,port);
   }
 
   @Override
@@ -84,9 +53,9 @@
         ui,
         host,
         port,
-        IRI.normalize(this,iri.getPath()),
-        iri.getQuery(),
-        iri.getFragment()
+        IRI.normalize(iri.getPath()),
+        Escaping.encode(Escaping.decode(iri.getQuery()),Profile.IQUERY),
+        Escaping.encode(Escaping.decode(iri.getFragment()),Profile.IFRAGMENT)
       );
   }
   

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpsScheme.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpsScheme.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpsScheme.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/HttpsScheme.java Mon Nov  5 12:15:09 2007
@@ -17,8 +17,6 @@
 */
 package org.apache.abdera.i18n.iri;
 
-import org.apache.abdera.i18n.iri.HttpScheme;
-import org.apache.abdera.i18n.iri.HttpsScheme;
 
 class HttpsScheme 
   extends HttpScheme {
@@ -27,10 +25,7 @@
   static final int DEFAULT_PORT = 443;
   
   public HttpsScheme() {
-    super(NAME);
+    super(NAME, DEFAULT_PORT);
   }
   
-  protected int getDefaultPort() {
-    return HttpsScheme.DEFAULT_PORT;
-  }
 }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IDNA.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IDNA.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IDNA.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IDNA.java Mon Nov  5 12:15:09 2007
@@ -22,10 +22,7 @@
 import java.net.UnknownHostException;
 
 import org.apache.abdera.i18n.io.CharUtils;
-import org.apache.abdera.i18n.iri.Constants;
-import org.apache.abdera.i18n.iri.IDNA;
-import org.apache.abdera.i18n.iri.Nameprep;
-import org.apache.abdera.i18n.iri.Punycode;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 
 
 /**
@@ -37,7 +34,7 @@
 
   private static final long serialVersionUID = -617056657751424334L;
   private final String regname;
-  
+    
   public IDNA(java.net.InetAddress addr) {
     this(addr.getHostName());
   }
@@ -102,10 +99,10 @@
       if (regname.length() == 0) return regname;
       String[] labels = regname.split("\\\u002E");
       StringBuffer buf = new StringBuffer();
-      for (String label : labels) {
+      for (String label : labels) {        
         label = Nameprep.prep(label);
         char[] chars = label.toCharArray();
-        CharUtils.verifyNot(chars, Constants.STD3ASCIIRULES);
+        CharUtils.verifyNot(chars, Profile.STD3ASCIIRULES);
         if (chars[0] == '\u002D' || 
             chars[chars.length-1] == '\u002D')
               throw new IOException("ToASCII violation");

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IRI.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IRI.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IRI.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/IRI.java Mon Nov  5 12:15:09 2007
@@ -19,7 +19,6 @@
 
 import java.io.IOException;
 import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.net.URISyntaxException;
 import java.util.regex.Matcher;
@@ -27,19 +26,21 @@
 
 import org.apache.abdera.i18n.io.CharUtils;
 import org.apache.abdera.i18n.io.InvalidCharacterException;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 import org.apache.abdera.i18n.unicode.Normalizer;
+import org.apache.abdera.i18n.unicode.UnicodeCharacterDatabase;
 
-public class IRI 
+public final class IRI 
   implements Serializable, 
              Cloneable {
   
   private static final long serialVersionUID = -4530530782760282284L;
-  Scheme _scheme;
+  protected Scheme _scheme;
   private String scheme;
   private String authority;
   private String userinfo;
   private String host;
-  private int port;
+  private int port = -1;
   private String path;
   private String query;
   private String fragment;
@@ -51,51 +52,17 @@
   private String a_userinfo;
   private String a_authority;
   
-  private String d_authority;
-  private String d_userinfo;
-  private String d_host;
-  private String d_path;
-  private String d_query;
-  private String d_fragment;
-  
   public IRI(java.net.URL url) {
-    this(Escaping.encode(
-        Escaping.decode(url.toString()), 
-        Constants.IUNRESERVED, 
-        Constants.RESERVED, 
-        Constants.PCTENC));
+    this(url.toString());
   }
   
   public IRI(java.net.URI uri) {
-    this(Escaping.encode(
-      Escaping.decode(uri.toString()), 
-      Constants.IUNRESERVED, 
-      Constants.RESERVED, 
-      Constants.PCTENC,
-      Constants.GENDELIMS));
-  }
-  
-  public IRI(java.net.URI uri, String enc) throws UnsupportedEncodingException {
-    this(Escaping.encode(
-        Escaping.decode(uri.toString(),enc), enc,
-        Constants.IUNRESERVED, 
-        Constants.RESERVED, 
-        Constants.PCTENC,
-        Constants.GENDELIMS));
+    this(uri.toString());
   }
   
   public IRI(String iri) {
-    Builder b = parse(CharUtils.stripBidi(iri));
-    init(
-      b.schemeobj,
-      b.scheme,
-      b.authority,
-      b.userinfo,
-      b.host,
-      b.port,
-      b.path,
-      b.query,
-      b.fragment);
+    parse(CharUtils.stripBidi(iri));
+    init();
   }
   
   public IRI(String iri, Normalizer.Form nf) throws IOException {
@@ -110,13 +77,18 @@
     String path, 
     String query, 
     String fragment) {
-      SchemeRegistry reg = SchemeRegistry.getInstance();
-      Scheme _scheme = reg.getScheme(scheme);
+      this.scheme = scheme;
+      this._scheme = SchemeRegistry.getInstance().getScheme(scheme);
+      this.userinfo = userinfo;
+      this.host = host;
+      this.port = port;
+      this.path = path;
+      this.query = query;
+      this.fragment = fragment;
       StringBuffer buf = new StringBuffer();
       buildAuthority(buf,userinfo, host, port);
-      String authority = (buf.length()!=0)?buf.toString():null;
-      init(_scheme,scheme,authority,userinfo,
-        host,port,path,query,fragment);
+      this.authority = (buf.length()!=0)?buf.toString():null;
+      init();
   }
   
   public IRI(
@@ -125,14 +97,14 @@
     String path,
     String query,
     String fragment) {
-    Builder builder = new Builder();
-    builder.authority = authority;
-    Parser.parseAuthority(builder);
-    SchemeRegistry reg = SchemeRegistry.getInstance();
-    Scheme _scheme = reg.getScheme(scheme);
-    init(_scheme,scheme,authority,builder.userinfo,
-      builder.host,builder.port,path,query,
-      fragment);
+      this.scheme = scheme;
+      this._scheme = SchemeRegistry.getInstance().getScheme(scheme);
+      this.authority = authority;
+      this.path = path;
+      this.query = query;
+      this.fragment = fragment;
+      parseAuthority();
+      init();
   }
   
   public IRI(
@@ -153,42 +125,24 @@
     String path,
     String query,
     String fragment) {
-      init(_scheme,scheme,authority,userinfo,
-         host,port,path,query,fragment);
-  }
-  
-  private void init(
-      Scheme _scheme,
-      String scheme,
-      String authority,
-      String userinfo,
-      String host,
-      int port,
-      String path,
-      String query,
-      String fragment) {
-    this._scheme = _scheme;
-    this.scheme = scheme;
-    this.authority = authority;
-    this.userinfo = userinfo;
-    this.host = host; 
-    this.port = port;
-    this.path = (path != null) ? path : "";
-    this.query = query;
-    this.fragment = fragment;
-
-    d_authority = Escaping.decode(this.authority);
-    d_userinfo = Escaping.decode(userinfo);
-    d_path = Escaping.decode(path);
-    d_query = query; //Escaping.decode(query);
-    d_fragment = Escaping.decode(fragment);
-    d_host = IDNA.toUnicode(Escaping.decode(this.host));
-
-    a_host = IDNA.toASCII(d_host);
-    a_fragment = Escaping.encode(getFragment(),Constants.FRAGMENT);
-    a_path = Escaping.encode(getPath(), Constants.PATH);
-    a_query = Escaping.encode(getQuery(),Constants.QUERY, Constants.PATH);
-    a_userinfo = Escaping.encode(getUserInfo(),Constants.USERINFO,Constants.COLON);
+      this._scheme = _scheme;
+      this.scheme = scheme;
+      this.authority = authority;
+      this.userinfo = userinfo;
+      this.host = host;
+      this.port = port;
+      this.path = path;
+      this.query = query;
+      this.fragment = fragment;
+      init();
+  }
+  
+  private void init() {    
+    a_host = IDNA.toASCII(host);
+    a_fragment = Escaping.encode(fragment,Profile.FRAGMENT);
+    a_path = Escaping.encode(path, Profile.PATH);
+    a_query = Escaping.encode(query,Profile.QUERY, Profile.PATH);
+    a_userinfo = Escaping.encode(userinfo,Profile.USERINFO);
     a_authority = buildASCIIAuthority();
   }
     
@@ -255,30 +209,21 @@
       return false;
     return true;
   }
-
-  public boolean equivalent(IRI uri) {
-    if (_scheme != null) return _scheme.equivalent(this, uri);
-    else {
-      String s2 = uri.normalize().toASCIIString();
-      String s1 = this.normalize().toASCIIString();
-      return s1.compareTo(s2) == 0;
-    }
-  }
   
   public String getAuthority() {
-    return (d_authority != null && d_authority.length() > 0) ? d_authority : null;
+    return (authority != null && authority.length() > 0) ? authority : null;
   }
   
   public String getFragment() {
-    return d_fragment;
+    return fragment;
   }
   
   public String getHost() {
-    return (d_host != null && d_host.length() > 0) ? d_host : null;
+    return (host != null && host.length() > 0) ? host : null;
   }
   
   public IDNA getIDN() {
-    return new IDNA(d_host);
+    return new IDNA(host);
   }
   
   public String getASCIIHost() {
@@ -286,7 +231,7 @@
   }
   
   public String getPath() {
-    return d_path;
+    return path;
   }
   
   public int getPort() {
@@ -294,7 +239,7 @@
   }
   
   public String getQuery() {
-    return d_query;
+    return query;
   }
   
   public String getScheme() {
@@ -310,38 +255,6 @@
   }
   
   public String getUserInfo() {
-    return d_userinfo;
-  }
-  
-  public String getRawHost() {
-    return (host != null && host.length() > 0) ? host : null;
-  }
-  
-  public String getRawAuthority() {
-    return (authority != null && authority.length() > 0) ? authority : null;
-  }
-  
-  public String getRawFragment() {
-    return fragment;
-  }
-  
-  public String getRawPath() {
-    return path;
-  }
-  
-  public String getRawQuery() {
-    return query;
-  }
-  
-  public String getRawSchemeSpecificPart() {
-    return buildSchemeSpecificPart(
-      authority,
-      path, 
-      query, 
-      fragment);
-  }
-  
-  public String getRawUserInfo() {
     return userinfo;
   }
   
@@ -374,9 +287,7 @@
     } else {
       return Escaping.encode(
         authority, 
-        Constants.USERINFO, 
-        Constants.REGNAME, 
-        Constants.GENDELIMS);
+        Profile.AUTHORITY);
     }
   }
   
@@ -432,8 +343,12 @@
       return buf.toString();
   }
   
-  public Object clone() throws CloneNotSupportedException {
-    return super.clone();
+  public Object clone() {
+    try {
+      return super.clone();
+    } catch (CloneNotSupportedException e) {
+      return new IRI(toString());  // not going to happen, but we have to catch it
+    }
   }
   
   public boolean isAbsolute() {
@@ -450,8 +365,8 @@
         (b.scheme != null && c.scheme == null) ||
         (b.scheme != null && c.scheme != null && 
           !b.scheme.equalsIgnoreCase(c.scheme))) return c;
-    String bpath = normalize(b._scheme,b.getPath());
-    String cpath = normalize(c._scheme,c.getPath());
+    String bpath = normalize(b.getPath());
+    String cpath = normalize(c.getPath());
     bpath = (bpath != null) ? bpath : "/";
     cpath = (cpath != null) ? cpath : "/";
     if (!bpath.equals(cpath)) {
@@ -461,7 +376,7 @@
     IRI iri = new IRI(
       null,
       null,null,null,null,-1,
-      normalize(b._scheme,cpath.substring(bpath.length())), 
+      normalize(cpath.substring(bpath.length())), 
       c.getQuery(), 
       c.getFragment());
     return iri;
@@ -489,7 +404,7 @@
     IRI b, 
     String c) 
       throws IOException {
-    return resolve(b, IRI.create(c));
+    return resolve(b, new IRI(c));
   }
   
   public static IRI resolve(IRI b, IRI c) {
@@ -499,11 +414,7 @@
       String bfragment = b.getFragment();
       if ((cfragment == null && bfragment == null) ||
           (cfragment != null && cfragment.equals(bfragment))) {
-          try {
-            return (IRI) b.clone();
-          } catch (Exception e) {
-            return null; // Not going to happen
-          } 
+          return (IRI) b.clone(); 
       } else {
         return new IRI(
           b._scheme,
@@ -512,7 +423,7 @@
           b.getUserInfo(),
           b.getHost(),
           b.getPort(),
-          normalize(b._scheme,b.getPath()),
+          normalize(b.getPath()),
           b.getQuery(),
           cfragment
         );
@@ -535,14 +446,14 @@
       host = b.getHost();
       port = b.getPort();
       path = c.isPathAbsolute() ? 
-          normalize(b._scheme,c.getPath()) : 
+          normalize(c.getPath()) : 
           resolve(b.getPath(),c.getPath());
     } else {
       authority = c.getAuthority();
       userinfo = c.getUserInfo();
       host = c.getHost();
       port = c.getPort();
-      path = normalize(b._scheme,c.getPath());
+      path = normalize(c.getPath());
     }
     return new IRI(
       _scheme,
@@ -573,17 +484,13 @@
         iri.getUserInfo(),
         iri.getHost(),
         iri.getPort(),
-        normalize(iri._scheme,iri.getPath()),
-        iri.getQuery(),
-        iri.getFragment()
+        normalize(iri.getPath()),
+        Escaping.encode(Escaping.decode(iri.getQuery()),Profile.IQUERY),
+        Escaping.encode(Escaping.decode(iri.getFragment()),Profile.IFRAGMENT)
       );
   }
 
-  static String normalize(Scheme scheme, String path) {
-    if (scheme != null) {
-      String n = scheme.normalizePath(path);
-      if (n != null) return n;
-    }
+  protected static String normalize(String path) {
     if (path == null || path.length() == 0) return "/";
     String[] segments = path.split("/");
     if (segments.length < 2) return path;
@@ -604,7 +511,11 @@
     for (int n = 0; n < segments.length; n++) {
       if (segments[n] != null) {
         if (buf.length() > 1) buf.append('/');
-        buf.append(segments[n]);
+        buf.append(
+          Escaping.encode(
+            Escaping.decode(
+              segments[n]),
+              Profile.IPATHNODELIMS));
       }
     }
     if (path.endsWith("/") || path.endsWith("/.")) 
@@ -622,7 +533,7 @@
     int n = bpath.lastIndexOf('/');
     if (n > -1) buf.append(bpath.substring(0,n+1));
     if (cpath.length() != 0) buf.append(cpath);
-    return normalize(new HttpScheme(),buf.toString());
+    return normalize(buf.toString());
   }
   
   public IRI resolve(IRI iri) {
@@ -630,7 +541,7 @@
   }
   
   public IRI resolve(String iri) {
-    return resolve(this,IRI.create(iri));
+    return resolve(this,new IRI(iri));
   }
   
   public String toString() {
@@ -641,7 +552,8 @@
       buf.append(':');
     }
     buf.append(getSchemeSpecificPart());
-    return Escaping.encode(buf.toString(),Constants.IUNRESERVED,Constants.RESERVED,Constants.IPRIVATE,Constants.PCTENC,Constants.HASH);
+    return Escaping.encode(buf.toString(),
+      Profile.SCHEMESPECIFICPART);
   }
   
   public String toASCIIString() {
@@ -670,93 +582,66 @@
     return toURI().toURL();
   }
   
-  ////////// parse implementation
-  
-  private static Builder parse(
-    String uri) {
-    try {
-      return Parser.parse(uri, SchemeRegistry.getInstance());
-    } catch (IOException e) {
-      throw new IRISyntaxException(e);
-    }
-  }
-  
-  public static IRI create(
-    String iri) {
-    return new IRI(iri);
-  }
   
-  public static IRI create(
-    String iri, 
-    Normalizer.Form nf) 
-      throws IOException {
-    return new IRI(iri,nf);
-  }
   
-  static class Builder {
-    private Scheme schemeobj;
-    private String scheme;
-    private String authority;
-    private String userinfo;
-    private String host;
-    private int port = -1;
-    private String path;
-    private String query;
-    private String fragment;
-  }
-  
-  static class Parser {
-    
-    static final Pattern p = 
-      Pattern.compile(
-        "^(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?");
-    
-    static final Pattern a =
-      Pattern.compile("^(?:(.*)?@)?((?:\\[.*\\])|(?:[^:]*))?(?::(\\d*))?");
-    
-    static void parseAuthority(Builder builder) {
-      if (builder.authority != null) {
-        Matcher auth = a.matcher(builder.authority);
-        if (auth.find()) {
-          builder.userinfo = auth.group(1);
-          builder.host = auth.group(2);
-          if (auth.group(3) != null)
-            builder.port = Integer.parseInt(auth.group(3));
-        }
-        try {
-          CharUtils.verify(builder.userinfo, Constants.IUSERINFO);
-          CharUtils.verify(builder.host, Constants.IREGNAME);
-        } catch (InvalidCharacterException e) {
-          throw new IRISyntaxException(e);
-        }
+  private void parseAuthority() {
+    if (authority != null) {
+      Matcher auth = AUTHORITYPATTERN.matcher(authority);
+      if (auth.find()) {
+        userinfo = auth.group(1);
+        host = auth.group(2);
+        if (auth.group(3) != null)
+          port = Integer.parseInt(auth.group(3));
+        else port = -1;
+      }
+      try {
+        CharUtils.verify(userinfo, Profile.IUSERINFO);
+        CharUtils.verify(host, Profile.IREGNAME);
+      } catch (InvalidCharacterException e) {
+        throw new IRISyntaxException(e);
       }
     }
-    
-    static Builder parse(String iri, SchemeRegistry reg) 
-      throws IOException {
-      Matcher irim = p.matcher(iri);
-      Builder builder = new Builder();
+  }
+  
+  private void parse(String iri) {
+    try {
+      SchemeRegistry reg = SchemeRegistry.getInstance();
+      Matcher irim = IRIPATTERN.matcher(iri);
       if (irim.find()) {
-        builder.scheme = irim.group(1);
-        builder.schemeobj = reg.getScheme(builder.scheme);
-        builder.authority = irim.group(2);
-        builder.path = irim.group(3);
-        builder.query = irim.group(4);
-        builder.fragment = irim.group(5);
-        parseAuthority(builder);        
+        scheme = irim.group(1);
+        _scheme= reg.getScheme(scheme);
+        authority = irim.group(2);
+        path = irim.group(3);
+        query = irim.group(4);
+        fragment = irim.group(5);
+        parseAuthority();        
         try {
-          CharUtils.verify(builder.scheme, Constants.SCHEME);
-          CharUtils.verify(builder.path, Constants.IPATH);
-          CharUtils.verify(builder.query, Constants.IQUERY);
-          CharUtils.verify(builder.fragment, Constants.IFRAGMENT);
-        } catch (InvalidCharacterException e) {
+          CharUtils.verify(scheme, Profile.SCHEME);
+          CharUtils.verify(path, Profile.IPATH);
+          CharUtils.verify(query, Profile.IQUERY);
+          CharUtils.verify(fragment, Profile.IFRAGMENT);
+        } catch (InvalidCharacterException e) {     
           throw new IRISyntaxException(e);
         }
-        return builder;
       } else {
         throw new IRISyntaxException("Invalid Syntax");
       }
+    } catch (IRISyntaxException e) {
+      throw e;
+    } catch (Exception e) {
+      throw new IRISyntaxException(e);
     }
   }
   
+  private static final Pattern IRIPATTERN = 
+    Pattern.compile(
+      "^(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?");
+  
+  private static final Pattern AUTHORITYPATTERN =
+    Pattern.compile("^(?:(.*)?@)?((?:\\[.*\\])|(?:[^:]*))?(?::(\\d*))?");
+  
+  public static void preinit() {
+    UnicodeCharacterDatabase.getCanonicalClass(1);
+    Nameprep.prep("");
+  }
 }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Nameprep.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Nameprep.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Nameprep.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Nameprep.java Mon Nov  5 12:15:09 2007
@@ -25,8 +25,6 @@
 
 import org.apache.abdera.i18n.ChainableBitSet;
 import org.apache.abdera.i18n.io.CodepointIterator;
-import org.apache.abdera.i18n.iri.Nameprep;
-import org.apache.abdera.i18n.iri.NameprepCodepointIterator;
 import org.apache.abdera.i18n.unicode.Normalizer;
 
 
@@ -99,7 +97,7 @@
     }
     return map;
   }
-  
+    
   public static final BitSet UNASSIGNED = new ChainableBitSet()  
   .set2('\u0221')
   .set2('\u0234','\u024F')
@@ -921,4 +919,6 @@
     .set2(0x2F800,0x2FA1D)
     .set2(0xF0000,0xFFFFD)
     .set2(0x100000,0x10FFFD);
+  
+  public static final ChainableBitSet PROHIBITED_ALLOWUNASSIGNED = new ChainableBitSet().set2(PROHIBITED).addNot2(UNASSIGNED);
 }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/NameprepCodepointIterator.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/NameprepCodepointIterator.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/NameprepCodepointIterator.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/NameprepCodepointIterator.java Mon Nov  5 12:15:09 2007
@@ -21,7 +21,6 @@
 import org.apache.abdera.i18n.io.CodepointIterator;
 import org.apache.abdera.i18n.io.FilterCodepointIterator;
 import org.apache.abdera.i18n.io.InvalidCharacterException;
-import org.apache.abdera.i18n.iri.Nameprep;
 
 
 /**
@@ -61,8 +60,7 @@
     super(internal);
     PROHIBITED = (!allowunassigned) ? 
         Nameprep.PROHIBITED : 
-        ((ChainableBitSet)Nameprep.PROHIBITED.clone()).set2(
-            Nameprep.UNASSIGNED,false);
+        Nameprep.PROHIBITED_ALLOWUNASSIGNED;
   }
 
   @Override

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Scheme.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Scheme.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Scheme.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/iri/Scheme.java Mon Nov  5 12:15:09 2007
@@ -17,7 +17,6 @@
 */
 package org.apache.abdera.i18n.iri;
 
-import org.apache.abdera.i18n.iri.IRI;
 
 /**
  * Interface implemented by custom IRI scheme parsers
@@ -26,10 +25,9 @@
 
   String getName();
   
-  boolean equivalent(IRI iri1, IRI iri2);
-  
   IRI normalize(IRI iri); 
   
   String normalizePath(String path);
-  
+ 
+  int getDefaultPort();
 }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/lang/Lang.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/lang/Lang.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/lang/Lang.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/main/java/org/apache/abdera/i18n/lang/Lang.java Mon Nov  5 12:15:09 2007
@@ -23,9 +23,7 @@
 
 import org.apache.abdera.i18n.io.CharUtils;
 import org.apache.abdera.i18n.io.InvalidCharacterException;
-import org.apache.abdera.i18n.iri.Constants;
-import org.apache.abdera.i18n.lang.InvalidLangTagSyntax;
-import org.apache.abdera.i18n.lang.Lang;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 
 
 /**
@@ -162,13 +160,13 @@
     if (tags.length == 0) throw new InvalidLangTagSyntax();
     String primary = tags[0];
     try {
-      CharUtils.verify(primary,Constants.ALPHA);
+      CharUtils.verify(primary,Profile.ALPHA);
     } catch (InvalidCharacterException e) {
       throw new InvalidLangTagSyntax();
     }
     for (int n = 1; n < tags.length; n++) {
       try {
-        CharUtils.verify(tags[n],Constants.ALPHANUM);
+        CharUtils.verify(tags[n],Profile.ALPHANUM);
       } catch (InvalidCharacterException e) {
         throw new InvalidLangTagSyntax();
       }

Modified: incubator/abdera/java/trunk/dependencies/i18n/src/test/java/org/apache/abdera/i18n/test/iri/TestIRI.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/i18n/src/test/java/org/apache/abdera/i18n/test/iri/TestIRI.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/dependencies/i18n/src/test/java/org/apache/abdera/i18n/test/iri/TestIRI.java (original)
+++ incubator/abdera/java/trunk/dependencies/i18n/src/test/java/org/apache/abdera/i18n/test/iri/TestIRI.java Mon Nov  5 12:15:09 2007
@@ -19,12 +19,11 @@
 
 import java.net.URI;
 
+import junit.framework.TestCase;
+
 import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.i18n.unicode.Normalizer;
 
-
-import junit.framework.TestCase;
-
 public class TestIRI extends TestCase {
 
   public static void testSimple() throws Exception {
@@ -49,24 +48,6 @@
     assertEquals(iri.toURI().toString(),"http://example.com/%F0%90%8C%80%F0%90%8C%81%F0%90%8C%82");
   }
     
-  public static void testURItoIRI() throws Exception {
-    URI uri = new URI("http://www.example.org/D%C3%BCrst");
-    IRI iri = new IRI(uri);
-    assertEquals(iri.toString(),"http://www.example.org/D\u00FCrst");
-  }
-  
-  public static void testURItoIRI2() throws Exception {
-    URI uri = new URI("http://www.example.org/D%FCrst");
-    IRI iri = new IRI(uri, "windows-1252");
-    assertEquals(iri.toString(),"http://www.example.org/D\u00FCrst");
-  }
-
-  public static void testURItoIRI3() throws Exception {
-    URI uri = new URI("http://xn--99zt52a.example.org/%e2%80%ae");
-    IRI iri = new IRI(uri);
-    assertEquals(iri.toString(),"http://xn--99zt52a.example.org/%E2%80%AE");
-  }
-
   public static void testIRItoURI() throws Exception {
     IRI iri = new IRI("http://\u7D0D\u8C46.example.org/%E2%80%AE");
     URI uri = iri.toURI();
@@ -94,12 +75,6 @@
     assertTrue(iri3.normalize().equals(iri1.normalize()));
     assertTrue(iri3.normalize().equals(iri2.normalize()));
     
-    assertTrue(iri1.equivalent(iri2));
-    assertTrue(iri1.equivalent(iri3));
-    assertTrue(iri2.equivalent(iri1));
-    assertTrue(iri2.equivalent(iri3));
-    assertTrue(iri3.equivalent(iri1));
-    assertTrue(iri3.equivalent(iri2));
   }
   
   
@@ -110,17 +85,14 @@
   }
   
   public static void testPercent() throws Exception {
-      IRI iri1 = new IRI("http://example.org/~user");
-      IRI iri2 = new IRI("http://example.org/%7euser");
-      IRI iri3 = new IRI("http://example.org/%7Euser");
+      IRI iri1 = new IRI("http://example.org/%7e%2Fuser?%2f");
+      IRI iri2 = new IRI("http://example.org/%7E%2fuser?/");
       assertTrue(iri1.normalize().equals(iri2.normalize()));
-      assertTrue(iri1.normalize().equals(iri3.normalize()));
   }
   
   public static void testIDN() throws Exception {
     IRI iri1 = new IRI("http://r\u00E9sum\u00E9.example.org");
-    IRI iri2 = new IRI("http://xn--rsum-bpad.example.org");
-    assertTrue(iri1.equivalent(iri2));
+    assertEquals(iri1.getASCIIHost(),"xn--rsum-bpad.example.org");
   }
   
   public static void testRelative() throws Exception{

Modified: incubator/abdera/java/trunk/extensions/json/src/main/java/org/apache/abdera/ext/json/JSONUtil.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/extensions/json/src/main/java/org/apache/abdera/ext/json/JSONUtil.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/extensions/json/src/main/java/org/apache/abdera/ext/json/JSONUtil.java (original)
+++ incubator/abdera/java/trunk/extensions/json/src/main/java/org/apache/abdera/ext/json/JSONUtil.java Mon Nov  5 12:15:09 2007
@@ -28,7 +28,7 @@
 import org.apache.abdera.ext.html.HtmlHelper;
 import org.apache.abdera.ext.thread.InReplyTo;
 import org.apache.abdera.ext.thread.ThreadHelper;
-import org.apache.abdera.i18n.iri.Constants;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 import org.apache.abdera.i18n.iri.Escaping;
 import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.model.Base;
@@ -396,7 +396,7 @@
              "src".equalsIgnoreCase(name) || 
              "action".equalsIgnoreCase(name))) {
          IRI base = child.getResolvedBaseUri();
-         val = Escaping.encode(val.trim(),Constants.IUNRESERVED,Constants.RESERVED,Constants.IPRIVATE);
+         val = Escaping.encode(val.trim(),Profile.IUNRESERVED,Profile.RESERVED,Profile.IPRIVATE);
          if (base != null) val = base.resolve(val).toASCIIString();
         }
         jstream.writeQuoted(val);

Modified: incubator/abdera/java/trunk/protocol/src/main/java/org/apache/abdera/protocol/util/EncodingUtil.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/protocol/src/main/java/org/apache/abdera/protocol/util/EncodingUtil.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/protocol/src/main/java/org/apache/abdera/protocol/util/EncodingUtil.java (original)
+++ incubator/abdera/java/trunk/protocol/src/main/java/org/apache/abdera/protocol/util/EncodingUtil.java Mon Nov  5 12:15:09 2007
@@ -20,7 +20,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.abdera.i18n.iri.Constants;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 import org.apache.abdera.i18n.iri.Escaping;
 import org.apache.abdera.i18n.unicode.Normalizer;
 import org.apache.abdera.util.CompressionUtil;
@@ -89,7 +89,7 @@
       if (filler != null) {
         slug = slug.replaceAll(pattern,filler);
       } else { 
-        slug = Escaping.encode(slug, Constants.PATHNODELIMS);
+        slug = Escaping.encode(slug, Profile.PATHNODELIMS);
       }
       return slug;
   }

Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractResponseContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractResponseContext.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractResponseContext.java (original)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractResponseContext.java Mon Nov  5 12:15:09 2007
@@ -19,7 +19,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.BitSet;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -27,7 +26,7 @@
 
 import javax.activation.MimeType;
 
-import org.apache.abdera.i18n.iri.Constants;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 import org.apache.abdera.i18n.iri.Escaping;
 import org.apache.abdera.protocol.server.ResponseContext;
 import org.apache.abdera.protocol.util.AbstractResponse;
@@ -65,8 +64,8 @@
     setHeader(name, evals);
   }
   
-  public void setEscapedHeader(String name, BitSet mask, String value) {
-    setHeader(name,Escaping.encode(value, mask));
+  public void setEscapedHeader(String name, Profile profile, String value) {
+    setHeader(name,Escaping.encode(value, profile));
   }
   
   public void setHeader(String name, Object value) {
@@ -220,7 +219,7 @@
         slug.indexOf((char)13) > -1)
       throw new IllegalArgumentException(
         Messages.get("SLUG.BAD.CHARACTERS"));
-    setEscapedHeader("Slug", Constants.ASCIISANSCRLF, slug);
+    setEscapedHeader("Slug", Profile.ASCIISANSCRLF, slug);
   }
   
   public void setContentType(String type) {

Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractWorkspaceProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractWorkspaceProvider.java?rev=592138&r1=592137&r2=592138&view=diff
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractWorkspaceProvider.java (original)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractWorkspaceProvider.java Mon Nov  5 12:15:09 2007
@@ -23,7 +23,7 @@
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.factory.Factory;
-import org.apache.abdera.i18n.iri.Constants;
+import org.apache.abdera.i18n.io.CharUtils.Profile;
 import org.apache.abdera.i18n.iri.Escaping;
 import org.apache.abdera.i18n.iri.IRI;
 import org.apache.abdera.model.Collection;
@@ -77,8 +77,8 @@
           String id;
           String workspaceKey;
           try {
-            id = Escaping.encode(wp.getId(), enc, Constants.PATH);
-            workspaceKey = Escaping.encode(entry.getKey(), enc, Constants.PATH);
+            id = Escaping.encode(wp.getId(), enc, Profile.PATH);
+            workspaceKey = Escaping.encode(entry.getKey(), enc, Profile.PATH);
           } catch (UnsupportedEncodingException e) {
             throw new RuntimeException(e);
           }