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); } }
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); } }
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); } }