Exemplo n.º 1
0
        public override bool ParseToken(LinkedListStream <IBaseToken> stream)
        {
            IBaseToken token = stream.Peek();

            if (typeof(DoxygenToken).Equals(token.GetType()))
            {
                DoxygenToken doxyToken = (DoxygenToken)token;
                switch (doxyToken.Kind)
                {
                case DoxygenTokenKind.DoxyBlockStartSingle:
                    return(ParseSingleBlock(stream));

                case DoxygenTokenKind.DoxyBlockStartMulti:
                {
                    DoxygenEntity blockEntity = new DoxygenEntity(DoxygenEntityKind.BlockMulti, doxyToken);
                    PushEntity(blockEntity);
                    stream.Next();
                    return(true);
                }

                case DoxygenTokenKind.DoxyBlockEnd:
                {
                    CloseEverythingUntil(DoxygenEntityKind.BlockMulti);
                    Debug.Assert(Top != null);
                    DoxygenEntity rootEntity = (DoxygenEntity)Top.Entity;
                    Debug.Assert(rootEntity.Kind == DoxygenEntityKind.BlockMulti);
                    Pop();
                    rootEntity.EndRange = doxyToken.Range;
                    stream.Next();
                    return(true);
                }

                default:
                {
                    ParseBlockContent(stream, Top);
                    return(true);
                }
                }
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        public void ParseTokens(IEnumerable <IBaseToken> tokens)
        {
            LinkedListStream <IBaseToken> tokenStream = new LinkedListStream <IBaseToken>(tokens);

            while (!tokenStream.IsEOF)
            {
                IBaseToken old = tokenStream.CurrentValue;
                if (!typeof(TToken).Equals(old.GetType()))
                {
                    tokenStream.Next();
                    continue;
                }
                if (!ParseToken(tokenStream))
                {
                    tokenStream.Next();
                }
                Debug.Assert(old != tokenStream.CurrentValue);
            }
        }
Exemplo n.º 3
0
        private bool ParseBlockContent(LinkedListStream <IBaseToken> stream, IBaseNode contentRoot)
        {
            IBaseToken token = stream.Peek();

            if (typeof(DoxygenToken).Equals(token.GetType()))
            {
                DoxygenToken doxyToken = (DoxygenToken)token;
                switch (doxyToken.Kind)
                {
                case DoxygenTokenKind.EmptyLine:
                    CloseParagraphOrSection(contentRoot);
                    return(true);

                case DoxygenTokenKind.Command:
                    return(ParseCommand(stream, contentRoot));

                case DoxygenTokenKind.InvalidCommand:
                    string commandName = doxyToken.Value.Substring(1);
                    AddError(doxyToken.Position, $"Unknown doxygen command '{commandName}'", "Command", commandName);
                    stream.Next();
                    return(true);

                case DoxygenTokenKind.TextStart:
                    ParseText(stream, contentRoot);
                    return(true);

                default:
                    stream.Next();
                    return(true);
                }
            }
            else
            {
                return(false);
            }
        }