Esempio n. 1
0
        public void Reset(char[] data, int startIndex, int length)
        {
            fData   = data;
            fLength = length;

            fCurrentToken = GEDCOMToken.Unknown;
            fPos          = startIndex;
            fValueReset   = false;
        }
Esempio n. 2
0
 public bool RequireToken(GEDCOMToken tokenKind)
 {
     return(fCurrentToken == tokenKind);
 }
Esempio n. 3
0
        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);
                }
            }
        }