OSDN Git Service

Merge branch 'Branch_release-'
[jindolf/Jindolf.git] / src / main / java / jp / sourceforge / jindolf / json / JsString.java
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsString.java b/src/main/java/jp/sourceforge/jindolf/json/JsString.java
deleted file mode 100644 (file)
index 07dfc57..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/*\r
- * JSON string value\r
- *\r
- * Copyright(c) 2009 olyutorskii\r
- * $Id: JsString.java 917 2009-11-24 13:17:07Z olyutorskii $\r
- */\r
-\r
-package jp.sourceforge.jindolf.json;\r
-\r
-import java.io.IOException;\r
-\r
-/**\r
- * JSON 文字列Value。\r
- */\r
-public class JsString\r
-        extends AbstractJsValue\r
-        implements CharSequence, Comparable<JsString> {\r
-\r
-    /**\r
-     * FFFF形式4桁で16進エスケープされた文字列を読み、\r
-     * 1文字にデコードする。\r
-     * @param reader 文字入力\r
-     * @return 文字\r
-     * @throws IOException 入力エラー\r
-     * @throws JsParseException パースエラーもしくは入力終了\r
-     */\r
-    static char parseHexChar(JsonReader reader)\r
-            throws IOException, JsParseException{\r
-        int hex1 = reader.read();\r
-        int hex2 = reader.read();\r
-        int hex3 = reader.read();\r
-        int hex4 = reader.read();\r
-        if(hex4 < '\u0000') throw new JsParseException();\r
-\r
-        char hex1Ch = (char) hex1;\r
-        char hex2Ch = (char) hex2;\r
-        char hex3Ch = (char) hex3;\r
-        char hex4Ch = (char) hex4;\r
-\r
-        int digit1 = Character.digit(hex1Ch, 16);\r
-        int digit2 = Character.digit(hex2Ch, 16);\r
-        int digit3 = Character.digit(hex3Ch, 16);\r
-        int digit4 = Character.digit(hex4Ch, 16);\r
-\r
-        if(digit1 < 0) throw new JsParseException();\r
-        if(digit2 < 0) throw new JsParseException();\r
-        if(digit3 < 0) throw new JsParseException();\r
-        if(digit4 < 0) throw new JsParseException();\r
-\r
-        int digit = 0;\r
-        digit += digit1;\r
-        digit <<= 4;\r
-        digit += digit2;\r
-        digit <<= 4;\r
-        digit += digit3;\r
-        digit <<= 4;\r
-        digit += digit4;\r
-\r
-        char result = (char) digit;\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * ダブルクォーテーションで囲まれた文字列を読み込む。\r
-     * @param reader 文字入力\r
-     * @return 文字列Value\r
-     * @throws IOException 入力エラー\r
-     * @throws JsParseException パースエラーもしくは入力終了\r
-     */\r
-    static JsString parseString(JsonReader reader)\r
-            throws IOException, JsParseException{\r
-        int chData;\r
-\r
-        Json.skipWhiteSpace(reader);\r
-        chData = reader.read();\r
-        if(chData < '\u0000') return null;\r
-        if(chData != '"') throw new JsParseException();\r
-\r
-        StringBuilder text = new StringBuilder();\r
-\r
-        for(;;){\r
-            chData = reader.read();\r
-            if(chData < '\u0000') throw new JsParseException();\r
-            if(chData == '"') break;\r
-\r
-            if(chData == '\\'){\r
-                chData = reader.read();\r
-                if(chData < '\u0000') throw new JsParseException();\r
-                if     (chData == '"' ) text.append('"');\r
-                else if(chData == '\\') text.append('\\');\r
-                else if(chData == '/' ) text.append('/');\r
-                else if(chData == 'b' ) text.append('\b');\r
-                else if(chData == 'f' ) text.append('\f');\r
-                else if(chData == 'n' ) text.append('\n');\r
-                else if(chData == 'r' ) text.append('\r');\r
-                else if(chData == 't' ) text.append('\t');\r
-                else if(chData == 'u')  text.append(parseHexChar(reader));\r
-                else                    throw new JsParseException();\r
-            }else{\r
-                text.append((char)chData);\r
-            }\r
-        }\r
-\r
-        JsString result = new JsString(text);\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * JSON 文字列Value形式で文字列を出力する。\r
-     * @param appout 文字出力\r
-     * @param seq 文字列\r
-     * @throws IOException 出力エラー\r
-     */\r
-    public static void writeText(Appendable appout, CharSequence seq)\r
-            throws IOException{\r
-        appout.append('"');\r
-\r
-        int length = seq.length();\r
-        for(int pos = 0; pos < length; pos++){\r
-            char ch = seq.charAt(pos);\r
-\r
-            switch(ch){\r
-            case '"' : appout.append('\\').append('"');  break;\r
-            case '\\': appout.append('\\').append('\\'); break;\r
-            case '/' : appout.append('\\').append('/');  break;\r
-            case '\b': appout.append('\\').append('b');  break;\r
-            case '\f': appout.append('\\').append('f');  break;\r
-            case '\n': appout.append('\\').append('n');  break;\r
-            case '\r': appout.append('\\').append('r');  break;\r
-            case '\t': appout.append('\\').append('t');  break;\r
-            default:\r
-                if(Character.isISOControl(ch)){\r
-                    String hex = "0000" + Integer.toHexString(ch);\r
-                    hex = hex.substring(hex.length() - 4);\r
-                    appout.append("\\u").append(hex);\r
-                }else{\r
-                    appout.append(ch);\r
-                }\r
-                break;\r
-            }\r
-        }\r
-\r
-        appout.append('"');\r
-\r
-        return;\r
-    }\r
-\r
-    private final String text;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * 空文字が設定される。\r
-     */\r
-    public JsString(){\r
-        this(null);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * 引数はJSON書式ではない。\r
-     * @param seq 文字列。nullなら空文字が設定される。\r
-     */\r
-    public JsString(CharSequence seq){\r
-        super();\r
-        if(seq == null){\r
-            this.text = "";\r
-        }else{\r
-            this.text = seq.toString();\r
-        }\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param index {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     * @throws IndexOutOfBoundsException {@inheritDoc}\r
-     */\r
-    public char charAt(int index)\r
-            throws IndexOutOfBoundsException{\r
-        return this.text.charAt(index);\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     */\r
-    public int length(){\r
-        return this.text.length();\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param start {@inheritDoc}\r
-     * @param end {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     * @throws IndexOutOfBoundsException {@inheritDoc}\r
-     */\r
-    public CharSequence subSequence(int start, int end)\r
-            throws IndexOutOfBoundsException{\r
-        return this.text.subSequence(start, end);\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     */\r
-    @Override\r
-    public int hashCode(){\r
-        return this.text.hashCode();\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param obj {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     */\r
-    @Override\r
-    public boolean equals(Object obj){\r
-        if(obj == null) return false;\r
-        if(this == obj) return true;\r
-\r
-        if( ! (obj instanceof JsString) ) return false;\r
-        JsString string = (JsString) obj;\r
-\r
-        return this.text.equals(string.text);\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param value {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     */\r
-    public int compareTo(JsString value){\r
-        if(this == value) return 0;\r
-        if(value == null) return +1;\r
-        return this.text.compareTo(value.text);\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @return {@inheritDoc}\r
-     */\r
-    @Override\r
-    public String toString(){\r
-        StringBuilder string = new StringBuilder();\r
-        try{\r
-            writeText(string, this.text);\r
-        }catch(IOException e){\r
-            assert false;\r
-        }\r
-        return string.toString();\r
-    }\r
-\r
-    /**\r
-     * クォーテーションされていない生の文字列を返す。\r
-     * @return 生の文字列\r
-     */\r
-    public String toRawString(){\r
-        return this.text;\r
-    }\r
-\r
-}\r