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