@@ -0,0 +1,2246 @@
+/*%0A * Copyright (c) 2007 Mozilla Foundation%0A *%0A * Permission is hereby granted, free of charge, to any person obtaining a %0A * copy of this software and associated documentation files (the %22Software%22), %0A * to deal in the Software without restriction, including without limitation %0A * the rights to use, copy, modify, merge, publish, distribute, sublicense, %0A * and/or sell copies of the Software, and to permit persons to whom the %0A * Software is furnished to do so, subject to the following conditions:%0A *%0A * The above copyright notice and this permission notice shall be included in %0A * all copies or substantial portions of the Software.%0A *%0A * THE SOFTWARE IS PROVIDED %22AS IS%22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR %0A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, %0A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL %0A * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER %0A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING %0A * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER %0A * DEALINGS IN THE SOFTWARE.%0A */%0A%0Apackage org.whattf.datatype;%0A%0Aimport org.relaxng.datatype.DatatypeException;%0A%0Apublic class CharsetList extends AbstractDatatype %7B%0A%0A    /**%0A     * The singleton instance.%0A     */%0A    public static final CharsetList THE_INSTANCE = new CharsetList();%0A    %0A    private enum State %7B%0A        WS_BEFORE_TOKEN%0A    %7D%0A%0A    private CharsetList() %7B%0A        super();%0A    %7D%0A%0A    @Override%0A    public void checkValid(CharSequence literal) throws DatatypeException %7B%0A        State state = State.WS_BEFORE_TOKEN;%0A        for (int i = 0; i %3C literal.length(); i++) %7B%0A            char c = literal.charAt(i);%0A            switch (state) %7B%0A            %7D%0A        %7D%0A        switch (state) %7B%0A        %7D%0A    %7D%0A%0A    private boolean isTokenChar(char c) %7B%0A        return (c %3E= 'a' && c %3C= 'z') %7C%7C (c %3E= '0' && c %3C= '9') %7C%7C c == '!'%0A                %7C%7C c == '#' %7C%7C c == '$' %7C%7C c == '%25' %7C%7C c == '&' %7C%7C c == '%5C''%0A                %7C%7C c == '+' %7C%7C c == '-' %7C%7C c == '%5E' %7C%7C c == '_' %7C%7C c == '%60'%0A                %7C%7C c == '%7B' %7C%7C c == '%7D' %7C%7C c == '~';%0A    %7D%0A%0A    @Override%0A    public String getName() %7B%0A        return %22character encoding list%22;%0A    %7D%0A%0A%7D%0A

Save charset list awaiting input from Hixie