001 package com.thaiopensource.datatype.xsd;
002
003 import org.relaxng.datatype.ValidationContext;
004 import com.thaiopensource.util.Utf16;
005
006 class TokenDatatype extends DatatypeBase implements Measure {
007
008 TokenDatatype() { }
009 TokenDatatype(int whiteSpace) {
010 super(whiteSpace);
011 }
012
013 public boolean lexicallyAllows(String str) {
014 return true;
015 }
016
017 public boolean alwaysValid() {
018 return true;
019 }
020
021 Object getValue(String str, ValidationContext vc) {
022 return str;
023 }
024
025 Measure getMeasure() {
026 return this;
027 }
028
029 public int getLength(Object obj) {
030 String str = (String)obj;
031 int len = str.length();
032 int nSurrogatePairs = 0;
033 for (int i = 0; i < len; i++)
034 if (Utf16.isSurrogate1(str.charAt(i)))
035 nSurrogatePairs++;
036 return len - nSurrogatePairs;
037 }
038 }