12d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//===--- CommentBriefParser.h - Dumb comment parser -------------*- C++ -*-===//
22d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//
32d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//                     The LLVM Compiler Infrastructure
42d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//
52d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// This file is distributed under the University of Illinois Open Source
62d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// License. See LICENSE.TXT for details.
72d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//
82d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//===----------------------------------------------------------------------===//
92d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//
102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//  This file defines a very simple Doxygen comment parser.
112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//
122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//===----------------------------------------------------------------------===//
132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
152d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko#ifndef LLVM_CLANG_AST_BRIEF_COMMENT_PARSER_H
162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko#define LLVM_CLANG_AST_BRIEF_COMMENT_PARSER_H
172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko#include "clang/AST/CommentLexer.h"
192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkonamespace clang {
212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkonamespace comments {
222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
2372021ff4038cbc48b09a3acb743e319809f086dbDmitri Gribenko/// A very simple comment parser that extracts "a brief description".
2472021ff4038cbc48b09a3acb743e319809f086dbDmitri Gribenko///
2572021ff4038cbc48b09a3acb743e319809f086dbDmitri Gribenko/// Due to a variety of comment styles, it considers the following as "a brief
2672021ff4038cbc48b09a3acb743e319809f086dbDmitri Gribenko/// description", in order of priority:
2772021ff4038cbc48b09a3acb743e319809f086dbDmitri Gribenko/// \li a \\brief or \\short command,
2872021ff4038cbc48b09a3acb743e319809f086dbDmitri Gribenko/// \li the first paragraph,
2972021ff4038cbc48b09a3acb743e319809f086dbDmitri Gribenko/// \li a \\result or \\return or \\returns paragraph.
302d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkoclass BriefParser {
312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko  Lexer &L;
322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
33aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko  const CommandTraits &Traits;
34aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko
352d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko  /// Current lookahead token.
362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko  Token Tok;
372d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko  SourceLocation ConsumeToken() {
392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko    SourceLocation Loc = Tok.getLocation();
402d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko    L.lex(Tok);
412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko    return Loc;
422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko  }
432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkopublic:
45aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko  BriefParser(Lexer &L, const CommandTraits &Traits);
462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
4759c91c8d0000af8f8a1022ee0f0eec46c397b347Dmitri Gribenko  /// Return the best "brief description" we can find.
482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko  std::string Parse();
492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko};
502d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
512d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} // end namespace comments
522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} // end namespace clang
532d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
542d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko#endif
552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko
56