예제 #1
0
 private static char ParseHex(BufferedCharReader input, char[] hexDigits)
 {
     hexDigits[0] = input.Next();
     hexDigits[1] = input.Next();
     hexDigits[2] = input.Next();
     hexDigits[3] = input.Next();
     return (char) ushort.Parse(new string(hexDigits), NumberStyles.HexNumber);
 }
예제 #2
0
        internal static StringBuilder Dequote(BufferedCharReader input, char quote, StringBuilder output)
        {
            char ch;
            if (output == null)
            {
                output = new StringBuilder();
            }
            char[] hexDigits = null;
        Label_000C:
            ch = input.Next();
            switch (ch)
            {
                case '\0':
                case '\n':
                case '\r':
                    throw new FormatException("Unterminated string.");

                default:
                    if (ch != '\\')
                    {
                        if (ch == quote)
                        {
                            return output;
                        }
                        output.Append(ch);
                        goto Label_000C;
                    }
                    ch = input.Next();
                    switch (ch)
                    {
                        case 'r':
                            output.Append('\r');
                            goto Label_000C;

                        case 't':
                            output.Append('\t');
                            goto Label_000C;

                        case 'u':
                            if (hexDigits == null)
                            {
                                hexDigits = new char[4];
                            }
                            output.Append(ParseHex(input, hexDigits));
                            goto Label_000C;

                        case 'n':
                            output.Append('\n');
                            goto Label_000C;

                        case 'b':
                            output.Append('\b');
                            goto Label_000C;

                        case 'f':
                            output.Append('\f');
                            goto Label_000C;
                    }
                    break;
            }
            output.Append(ch);
            goto Label_000C;
        }