public void Reset(char[] data, int startIndex, int length) { fData = data; fLength = length; fCurrentToken = GEDCOMToken.Unknown; fPos = startIndex; fValueReset = false; }
public bool RequireToken(GEDCOMToken tokenKind) { return(fCurrentToken == tokenKind); }
public GEDCOMToken Next() { while (true) { char ch = (fPos >= fLength) ? EOL : fData[fPos]; char ltr = (char)(ch | ' '); if ((ltr >= 'a' && ltr <= 'z') || ch == '_') { fSavePos = fPos; fPos++; while (true) { ch = (fPos >= fLength) ? EOL : fData[fPos]; ltr = (char)(ch | ' '); if ((ltr >= 'a' && ltr <= 'z') || (ch >= '0' && ch <= '9') || ch == '_') { fPos++; } else { break; } } fTokenEnd = fPos; fValueReset = true; fCurrentToken = GEDCOMToken.Word; return(fCurrentToken); } if (ch >= '0' && ch <= '9') { fSavePos = fPos; fPos++; fIntValue = ((int)ch - 48); while (true) { ch = (fPos >= fLength) ? EOL : fData[fPos]; if (ch >= '0' && ch <= '9') { fPos++; fIntValue = (fIntValue * 10 + ((int)ch - 48)); } else { break; } } fTokenEnd = fPos; fValueReset = true; fCurrentToken = GEDCOMToken.Number; return(fCurrentToken); } if (ch == ' ' || ch == '\t') { if (fIgnoreWhitespace) { fPos++; continue; } fSavePos = fPos; fPos++; while (true) { ch = (fPos >= fLength) ? EOL : fData[fPos]; if (ch == ' ' || ch == '\t') { fPos++; } else { break; } } fTokenEnd = fPos; fValueReset = true; fCurrentToken = GEDCOMToken.Whitespace; return(fCurrentToken); } if (ch == '@') { fSavePos = ++fPos; while (true) { ch = (fPos >= fLength) ? EOL : fData[fPos]; fPos++; if (ch == '@') { fTokenEnd = fPos - 1; break; } } fValueReset = true; fCurrentToken = GEDCOMToken.XRef; return(fCurrentToken); } if (ch == EOL) { fValueReset = true; fCurrentToken = GEDCOMToken.EOL; return(fCurrentToken); } else { fSavePos = fPos; fPos++; fTokenEnd = fPos; fValueReset = true; fCurrentToken = GEDCOMToken.Symbol; return(fCurrentToken); } } }