Exemple #1
0
        /// <summary>
        /// Read the GEDCOM Tag identifier
        /// </summary>
        private void ScanTag()
        {
            _reader.MarkLexemeStart();

            for (; ; _reader.ReadChar())
            {
                // switch on the acceptable characters to find
                switch (_reader.CurrChar())
                {
                case ' ':
                case '\r':
                case '\n':
                case '\0':
                    // End of tag
                    _reader.MarkLexemeEnd();
                    return;

                default:
                    if (GedcomCharType.IsTagChar(_reader.CurrChar()) == false)
                    {
                        throw new GedcomException("BAD TAG CHAR", _reader.CurrChar(), _reader.CurrColumn(), _lineNum);
                    }
                    break;
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Read a GEDCOM XREF - a string delineated by '@' symbols
        /// </summary>
        private void ScanXref()
        {
            // Advance past the first @
            _reader.ReadChar();

            _reader.MarkLexemeStart();

            for (; ; _reader.ReadChar())
            {
                switch (_reader.CurrChar())
                {
                case ' ':
                case '\r':
                case '\n':
                case '\0':
                    return;

                case '@':
                    _reader.MarkLexemeEnd();

                    _reader.ReadChar();
                    // End of tag

                    return;

                default:
                    if (!GedcomCharType.IsXrefChar(_reader.CurrChar()))
                    {
                        throw new GedcomException("BAD XREF CHAR", _reader.CurrChar(), _reader.CurrColumn(), _lineNum);
                    }
                    break;
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// Read the GEDCOM Level identifier
        /// </summary>
        private void ScanLevel()
        {
            _reader.MarkLexemeStart();

            while (true)
            {
                switch (_reader.CurrChar())
                {
                case ' ':
                    // Maximum of 2 digits allowed
                    if (_reader.MarkedLength() > 2)
                    {
                        throw new GedcomException("BAD LEVEL", _reader.CurrChar(), _reader.CurrColumn(), _lineNum);
                    }

                    _reader.MarkLexemeEnd();
                    return;

                default:
                    if (!GedcomCharType.IsLevelChar(_reader.CurrChar()))
                    {
                        throw new GedcomException("BAD LEVEL CHAR", _reader.CurrChar(), _reader.CurrColumn(), _lineNum);
                    }

                    _reader.ReadChar();
                    break;
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Read the 'Value' of the GEDCOM line
        /// </summary>
        private void ScanText()
        {
            // Good candidate for performance improvements
            _reader.MarkLexemeStart();

            for (; ; _reader.ReadChar())
            {
                switch (_reader.CurrChar())
                {
                case '\r':
                case '\n':
                case '\0':
                    // End of tag
                    _reader.MarkLexemeEnd();

                    return;

                case '@':
                    _reader.ReadChar();
                    switch (_reader.CurrChar())
                    {
                    case '#':
                        // found an escape
                        return;

                    case '@':
                        // OK
                        break;

                    default:
                        if (_strict)
                        {
                            throw new GedcomException("BAD ESCAPE CHAR", _reader.CurrChar(), _reader.CurrColumn() - 1, _lineNum);
                        }
                        break;
                    }
                    break;

                default:
                    if (!GedcomCharType.IsLineValueChar(_reader.CurrChar()))
                    {
                        throw new GedcomException("BAD LINE VALUE CHAR", _reader.CurrChar(), _reader.CurrColumn(), _lineNum);
                    }

                    break;
                }
            }
        }