Exemplo n.º 1
0
        private string ReadString(int index, char quot, MiniBuffer buff)
        {
            do
            {
                if (Current == '\\')//是否是转义符
                {
                    if ((_WordChars[Current] & 16) == 0)
                    {
                        ThrowException();
                    }
                    buff.AddString(_p, index, _position - index);
                    MoveNext();
                    switch (Current)
                    {
                    case 't':
                        buff.AddChar('\t');
                        index = _position + 1;
                        break;

                    case 'n':
                        buff.AddChar('\n');
                        index = _position + 1;
                        break;

                    case 'r':
                        buff.AddChar('\r');
                        index = _position + 1;
                        break;

                    case '0':
                        buff.AddChar('\0');
                        index = _position + 1;
                        break;

                    case 'f':
                        buff.AddChar('\f');
                        index = _position + 1;
                        break;

                    case 'u':
                        index = _position + ReadUnicode(buff);
                        break;

                    default:
                        index = _position;
                        break;
                    }
                }
                MoveNext();
            } while (Current != quot);//是否是结束字符
            string str;

            buff.AddString(_p, index, _position - index);
            str = buff.ToString();
            buff.Dispose();
            MoveNext();
            return(str);
        }
Exemplo n.º 2
0
        private int ReadUnicode(MiniBuffer buff) {
            MoveNext();
            var c1 = Current;
            var n1 = UnicodeNumber(Current);
            if (n1 == -1) {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                return 2;
            }

            MoveNext();
            var c2 = Current;
            var n2 = UnicodeNumber(Current);
            if (n2 == -1) {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                buff.AddChar(c2);
                return 3;
            }

            MoveNext();
            var c3 = Current;
            var n3 = UnicodeNumber(Current);
            if (n3 == -1) {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                buff.AddChar(c2);
                buff.AddChar(c3);
                return 4;
            }

            MoveNext();
            var c4 = Current;
            var n4 = UnicodeNumber(Current);
            if (n4 == -1) {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                buff.AddChar(c2);
                buff.AddChar(c3);
                buff.AddChar(c4);
                return 5;
            }
            buff.AddChar((char)(n1 * 0x1000 + n2 * 0x100 + n3 * 0x10 + n4));
            return 5;
        }
Exemplo n.º 3
0
 private string ReadString(int index, char quot, MiniBuffer buff) {
     do {
         if (Current == '\\')//是否是转义符
         {
             if ((_WordChars[Current] & 16) == 0) {
                 ThrowException();
             }
             buff.AddString(_p, index, _position - index);
             MoveNext();
             switch (Current) {
                 case 't':
                     buff.AddChar('\t');
                     index = _position + 1;
                     break;
                 case 'n':
                     buff.AddChar('\n');
                     index = _position + 1;
                     break;
                 case 'r':
                     buff.AddChar('\r');
                     index = _position + 1;
                     break;
                 case '0':
                     buff.AddChar('\0');
                     index = _position + 1;
                     break;
                 case 'f':
                     buff.AddChar('\f');
                     index = _position + 1;
                     break;
                 case 'u':
                     index = _position + ReadUnicode(buff);
                     break;
                 default:
                     index = _position;
                     break;
             }
         }
         MoveNext();
     } while (Current != quot);//是否是结束字符
     string str;
     buff.AddString(_p, index, _position - index);
     str = buff.ToString();
     buff.Dispose();
     MoveNext();
     return str;
 }
Exemplo n.º 4
0
        private int ReadUnicode(MiniBuffer buff)
        {
            MoveNext();
            var c1 = Current;
            var n1 = UnicodeNumber(Current);

            if (n1 == -1)
            {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                return(2);
            }

            MoveNext();
            var c2 = Current;
            var n2 = UnicodeNumber(Current);

            if (n2 == -1)
            {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                buff.AddChar(c2);
                return(3);
            }

            MoveNext();
            var c3 = Current;
            var n3 = UnicodeNumber(Current);

            if (n3 == -1)
            {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                buff.AddChar(c2);
                buff.AddChar(c3);
                return(4);
            }

            MoveNext();
            var c4 = Current;
            var n4 = UnicodeNumber(Current);

            if (n4 == -1)
            {
                buff.AddChar('\\');
                buff.AddChar('u');
                buff.AddChar(c1);
                buff.AddChar(c2);
                buff.AddChar(c3);
                buff.AddChar(c4);
                return(5);
            }
            buff.AddChar((char)(n1 * 0x1000 + n2 * 0x100 + n3 * 0x10 + n4));
            return(5);
        }