CommentCommandTraits.cpp revision 62290ae569016345b79d4e11dd93abc300e5a681
1aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko//===--- CommentCommandTraits.cpp - Comment command properties --*- C++ -*-===// 2aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko// 3aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko// The LLVM Compiler Infrastructure 4aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko// 5aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko// This file is distributed under the University of Illinois Open Source 6aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko// License. See LICENSE.TXT for details. 7aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko// 8aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko//===----------------------------------------------------------------------===// 9aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 10aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko#include "clang/AST/CommentCommandTraits.h" 11aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko#include "llvm/ADT/StringSwitch.h" 12aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 13aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkonamespace clang { 14aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkonamespace comments { 15aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 16aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko// TODO: tablegen 17aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 18aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkobool CommandTraits::isVerbatimBlockCommand(StringRef BeginName, 19aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko StringRef &EndName) const { 20aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko const char *Result = llvm::StringSwitch<const char *>(BeginName) 21aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("code", "endcode") 22aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("verbatim", "endverbatim") 23aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("htmlonly", "endhtmlonly") 24aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("latexonly", "endlatexonly") 25aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("xmlonly", "endxmlonly") 26aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("manonly", "endmanonly") 27aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("rtfonly", "endrtfonly") 28aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 29aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("dot", "enddot") 30aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("msc", "endmsc") 31aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 32aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("f$", "f$") // Inline LaTeX formula 33aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("f[", "f]") // Displayed LaTeX formula 34aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("f{", "f}") // LaTeX environment 35aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 36aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Default(NULL); 37aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 38aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko if (Result) { 39aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko EndName = Result; 40aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko return true; 41aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko } 42aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 43aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko for (VerbatimBlockCommandVector::const_iterator 44aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko I = VerbatimBlockCommands.begin(), 45aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko E = VerbatimBlockCommands.end(); 46aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko I != E; ++I) 47aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko if (I->BeginName == BeginName) { 48aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko EndName = I->EndName; 49aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko return true; 50aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko } 51aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 52aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko return false; 53aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko} 54aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 55aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkobool CommandTraits::isVerbatimLineCommand(StringRef Name) const { 5662290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko bool Result = isDeclarationCommand(Name) || llvm::StringSwitch<bool>(Name) 57aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("defgroup", true) 58aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("ingroup", true) 59aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("addtogroup", true) 60aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("weakgroup", true) 61aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("name", true) 62aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 63aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("section", true) 64aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("subsection", true) 65aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("subsubsection", true) 66aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("paragraph", true) 67aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 68aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("mainpage", true) 69aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("subpage", true) 70aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Case("ref", true) 71aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 72aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko .Default(false); 73aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 74aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko if (Result) 75aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko return true; 76aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 77aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko for (VerbatimLineCommandVector::const_iterator 78aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko I = VerbatimLineCommands.begin(), 79aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko E = VerbatimLineCommands.end(); 80aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko I != E; ++I) 81aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko if (I->Name == Name) 82aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko return true; 83aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 84aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko return false; 85aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko} 86aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 8762290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenkobool CommandTraits::isDeclarationCommand(StringRef Name) const { 8862290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko return llvm::StringSwitch<bool>(Name) 8962290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko // Doxygen commands. 9062290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("fn", true) 9162290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("var", true) 9262290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("property", true) 9362290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("typedef", true) 9462290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko 9562290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("overload", true) 9662290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko 9762290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko // HeaderDoc commands. 9862290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("class", true) 9962290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("interface", true) 10062290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("protocol", true) 10162290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("category", true) 10262290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("template", true) 10362290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("function", true) 10462290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("method", true) 10562290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("callback", true) 10662290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("var", true) 10762290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("const", true) 10862290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("constant", true) 10962290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("property", true) 11062290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("struct", true) 11162290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("union", true) 11262290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("typedef", true) 11362290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Case("enum", true) 11462290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko 11562290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko .Default(false); 11662290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko} 11762290ae569016345b79d4e11dd93abc300e5a681Dmitri Gribenko 118aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkovoid CommandTraits::addVerbatimBlockCommand(StringRef BeginName, 119aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko StringRef EndName) { 120aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko VerbatimBlockCommand VBC; 121aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko VBC.BeginName = BeginName; 122aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko VBC.EndName = EndName; 123aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko VerbatimBlockCommands.push_back(VBC); 124aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko} 125aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 126aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkovoid CommandTraits::addVerbatimLineCommand(StringRef Name) { 127aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko VerbatimLineCommand VLC; 128aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko VLC.Name = Name; 129aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko VerbatimLineCommands.push_back(VLC); 130aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko} 131aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 132aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko} // end namespace comments 133aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko} // end namespace clang 134aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 135