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); }
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); }
public static MiniBuffer Create(char *p) { if (_Instance == null) { _Instance = new MiniBuffer(); } _Instance._p = p; _Instance._index = 0; _Instance._position = 0; return(_Instance); }
/// <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); }
/// <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); }
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; }
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; }