Exemplo n.º 1
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.º 2
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.º 3
0
 public static MiniBuffer Create(char *p)
 {
     if (_Instance == null)
     {
         _Instance = new MiniBuffer();
     }
     _Instance._p        = p;
     _Instance._index    = 0;
     _Instance._position = 0;
     return(_Instance);
 }
Exemplo n.º 4
0
        /// <summary>
        /// 读取字符串
        /// </summary>
        public string ReadString()
        {
            if (IsEnd()) //已到结尾
            {
                ThrowException();
            }

            var quot = Current;

            if (quot != '"' && quot != '\'')
            {
                ThrowException();
            }
            MoveNext();
            if (Current == quot)
            {
                MoveNext();
                return("");
            }

            var index = _position;

            do
            {
                if (Current == '\\') //是否是转义符
                {
                    char *p = stackalloc char[255];
                    return(ReadString(index, quot, MiniBuffer.Create(p)));
                }
                MoveNext();
            } while (Current != quot); //是否是结束字符
            var str = new string(_p, index, _position - index);

            MoveNext();
            return(str);
        }
Exemplo n.º 5
0
        /// <summary> 读取字符串
        /// </summary>
        public string ReadString()
        {
            if (IsEnd())//已到结尾
            {
                ThrowException();
            }

            Char quot = _Current;

            if (quot != '"' && quot != '\'')
            {
                ThrowException();
            }
            MoveNext();
            if (_Current == quot)
            {
                MoveNext();
                return("");
            }

            var        index = _Position;
            MiniBuffer buff  = null;

            do
            {
                if (_Current == '\\')//是否是转义符
                {
                    if ((WordChars[_Current] & 16) == 0)
                    {
                        ThrowException();
                    }
                    if (buff == null)
                    {
                        //锁定指针
                        char *p = stackalloc char[255];
                        buff = new MiniBuffer(p);
                    }
                    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;

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

            if (buff == null)
            {
                str = new string(_P, index, _Position - index);
            }
            else
            {
                buff.AddString(_P, index, _Position - index);
                str = buff.ToString();
            }
            MoveNext();
            return(str);
        }
Exemplo n.º 6
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.º 7
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;
 }