1ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko//===- CXComment.cpp - libclang APIs for manipulating CXComments ----------===// 2ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// 3ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// The LLVM Compiler Infrastructure 4ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// 5ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// This file is distributed under the University of Illinois Open Source 6ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// License. See LICENSE.TXT for details. 7ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// 8ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko//===----------------------------------------------------------------------===// 9ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// 10ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// This file defines all libclang APIs related to walking comment AST. 11ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko// 12ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko//===----------------------------------------------------------------------===// 13ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 14ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko#include "clang-c/Index.h" 15ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko#include "CXComment.h" 16f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko#include "CXCursor.h" 17f59edb96b2d0bfe612b732f19519ab84bb995bd4Chandler Carruth#include "CXString.h" 180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#include "clang-c/Documentation.h" 19f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko#include "clang/AST/Decl.h" 2086cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko#include "clang/Index/CommentToXML.h" 2188b9521364735a6c9a7ccd23c5bd19d81a80cdd3Fariborz Jahanian#include "llvm/ADT/StringExtras.h" 22f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko#include "llvm/ADT/StringSwitch.h" 23ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko#include "llvm/Support/ErrorHandling.h" 24221a6d74d48fb3eaa73b68eb04f253080bedd5fdDmitri Gribenko#include <climits> 25221a6d74d48fb3eaa73b68eb04f253080bedd5fdDmitri Gribenko 26ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkousing namespace clang; 27ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkousing namespace clang::comments; 28ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkousing namespace clang::cxcomment; 29ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 30ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkoextern "C" { 31ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesCXComment clang_Cursor_getParsedComment(CXCursor C) { 336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines using namespace clang::cxcursor; 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines if (!clang_isDeclaration(C.kind)) 36c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return createCXComment(nullptr, nullptr); 376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const Decl *D = getCursorDecl(C); 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const ASTContext &Context = getCursorContext(C); 40c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines const FullComment *FC = Context.getCommentForDecl(D, /*PP=*/nullptr); 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return createCXComment(FC, getCursorTU(C)); 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 45ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkoenum CXCommentKind clang_Comment_getKind(CXComment CXC) { 46ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const Comment *C = getASTNode(CXC); 47ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!C) 48ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_Null; 49ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 50ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko switch (C->getCommentKind()) { 51ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::NoCommentKind: 52ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_Null; 53ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 54ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::TextCommentKind: 55ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_Text; 56ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 57ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::InlineCommandCommentKind: 58ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_InlineCommand; 59ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 60ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::HTMLStartTagCommentKind: 61ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_HTMLStartTag; 62ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 63ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::HTMLEndTagCommentKind: 64ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_HTMLEndTag; 65ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 66ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::ParagraphCommentKind: 67ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_Paragraph; 68ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 69ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::BlockCommandCommentKind: 70ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_BlockCommand; 71ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 72ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::ParamCommandCommentKind: 73ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_ParamCommand; 74ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 7596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko case Comment::TParamCommandCommentKind: 7696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return CXComment_TParamCommand; 7796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 78ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::VerbatimBlockCommentKind: 79ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_VerbatimBlockCommand; 80ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 81ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::VerbatimBlockLineCommentKind: 82ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_VerbatimBlockLine; 83ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 84ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::VerbatimLineCommentKind: 85ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_VerbatimLine; 86ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 87ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case Comment::FullCommentKind: 88ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXComment_FullComment; 89ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko } 90ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko llvm_unreachable("unknown CommentKind"); 91ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 92ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 93ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_Comment_getNumChildren(CXComment CXC) { 94ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const Comment *C = getASTNode(CXC); 95ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!C) 96ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return 0; 97ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 98ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return C->child_count(); 99ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 100ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 101ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXComment clang_Comment_getChild(CXComment CXC, unsigned ChildIdx) { 102ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const Comment *C = getASTNode(CXC); 103ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!C || ChildIdx >= C->child_count()) 104c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return createCXComment(nullptr, nullptr); 105ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 106e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko return createCXComment(*(C->child_begin() + ChildIdx), CXC.TranslationUnit); 107ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 108ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 109ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_Comment_isWhitespace(CXComment CXC) { 110ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const Comment *C = getASTNode(CXC); 111ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!C) 112ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return false; 113ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 114ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (const TextComment *TC = dyn_cast<TextComment>(C)) 115ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return TC->isWhitespace(); 116ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 117ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (const ParagraphComment *PC = dyn_cast<ParagraphComment>(C)) 118ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return PC->isWhitespace(); 119ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 120ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return false; 121ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 122ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 123ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_InlineContentComment_hasTrailingNewline(CXComment CXC) { 124ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const InlineContentComment *ICC = getASTNodeAs<InlineContentComment>(CXC); 125ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!ICC) 126ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return false; 127ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 128ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return ICC->hasTrailingNewline(); 129ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 130ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 131ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_TextComment_getText(CXComment CXC) { 132ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const TextComment *TC = getASTNodeAs<TextComment>(CXC); 133ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!TC) 134dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 135ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 1365595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(TC->getText()); 137ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 138ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 139ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_InlineCommandComment_getCommandName(CXComment CXC) { 140ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC); 141ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!ICC) 142dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 143ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 144e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko const CommandTraits &Traits = getCommandTraits(CXC); 1455595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(ICC->getCommandName(Traits)); 146ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 147ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 1482d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenkoenum CXCommentInlineCommandRenderKind 1492d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenkoclang_InlineCommandComment_getRenderKind(CXComment CXC) { 1502d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC); 1512d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko if (!ICC) 1522d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko return CXCommentInlineCommandRenderKind_Normal; 1532d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko 1542d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko switch (ICC->getRenderKind()) { 1552d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko case InlineCommandComment::RenderNormal: 1562d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko return CXCommentInlineCommandRenderKind_Normal; 1572d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko 1582d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko case InlineCommandComment::RenderBold: 1592d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko return CXCommentInlineCommandRenderKind_Bold; 1602d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko 1612d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko case InlineCommandComment::RenderMonospaced: 1622d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko return CXCommentInlineCommandRenderKind_Monospaced; 1632d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko 1642d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko case InlineCommandComment::RenderEmphasized: 1652d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko return CXCommentInlineCommandRenderKind_Emphasized; 1662d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko } 1672d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko llvm_unreachable("unknown InlineCommandComment::RenderKind"); 1682d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko} 1692d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko 170ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_InlineCommandComment_getNumArgs(CXComment CXC) { 171ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC); 172ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!ICC) 173ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return 0; 174ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 175ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return ICC->getNumArgs(); 176ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 177ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 178ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_InlineCommandComment_getArgText(CXComment CXC, 179ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko unsigned ArgIdx) { 180ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC); 181ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!ICC || ArgIdx >= ICC->getNumArgs()) 182dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 183ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 1845595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(ICC->getArgText(ArgIdx)); 185ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 186ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 187ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_HTMLTagComment_getTagName(CXComment CXC) { 188ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const HTMLTagComment *HTC = getASTNodeAs<HTMLTagComment>(CXC); 189ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!HTC) 190dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 191ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 1925595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(HTC->getTagName()); 193ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 194ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 195ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_HTMLStartTagComment_isSelfClosing(CXComment CXC) { 196ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC); 197ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!HST) 198ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return false; 199ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 200ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return HST->isSelfClosing(); 201ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 202ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 203ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_HTMLStartTag_getNumAttrs(CXComment CXC) { 204ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC); 205ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!HST) 206ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return 0; 207ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 208ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return HST->getNumAttrs(); 209ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 210ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 211ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_HTMLStartTag_getAttrName(CXComment CXC, unsigned AttrIdx) { 212ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC); 213ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!HST || AttrIdx >= HST->getNumAttrs()) 214dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 215ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 2165595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(HST->getAttr(AttrIdx).Name); 217ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 218ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 219ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_HTMLStartTag_getAttrValue(CXComment CXC, unsigned AttrIdx) { 220ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC); 221ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!HST || AttrIdx >= HST->getNumAttrs()) 222dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 223ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 2245595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(HST->getAttr(AttrIdx).Value); 225ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 226ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 227ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_BlockCommandComment_getCommandName(CXComment CXC) { 228ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC); 229ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!BCC) 230dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 231ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 232e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko const CommandTraits &Traits = getCommandTraits(CXC); 2335595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(BCC->getCommandName(Traits)); 234ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 235ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 236ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_BlockCommandComment_getNumArgs(CXComment CXC) { 237ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC); 238ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!BCC) 239ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return 0; 240ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 241ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return BCC->getNumArgs(); 242ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 243ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 244ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_BlockCommandComment_getArgText(CXComment CXC, 245ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko unsigned ArgIdx) { 246ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC); 247ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!BCC || ArgIdx >= BCC->getNumArgs()) 248dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 249ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 2505595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(BCC->getArgText(ArgIdx)); 251ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 252ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 253ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXComment clang_BlockCommandComment_getParagraph(CXComment CXC) { 254ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC); 255ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!BCC) 256c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return createCXComment(nullptr, nullptr); 257ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 258e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko return createCXComment(BCC->getParagraph(), CXC.TranslationUnit); 259ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 260ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 261ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_ParamCommandComment_getParamName(CXComment CXC) { 262ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const ParamCommandComment *PCC = getASTNodeAs<ParamCommandComment>(CXC); 2631f8c529a2a938a5055f440aa063ea0b49eafae98Dmitri Gribenko if (!PCC || !PCC->hasParamName()) 264dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 265ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 2665595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(PCC->getParamNameAsWritten()); 267ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 268ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 269ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_ParamCommandComment_isParamIndexValid(CXComment CXC) { 270ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const ParamCommandComment *PCC = getASTNodeAs<ParamCommandComment>(CXC); 271ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!PCC) 272ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return false; 273ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 274ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return PCC->isParamIndexValid(); 275ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 276ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 277ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_ParamCommandComment_getParamIndex(CXComment CXC) { 278ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const ParamCommandComment *PCC = getASTNodeAs<ParamCommandComment>(CXC); 279c5b0054693b3b3cafe6a13549358c22e07fcd4ffDmitri Gribenko if (!PCC || !PCC->isParamIndexValid() || PCC->isVarArgParam()) 280ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return ParamCommandComment::InvalidParamIndex; 281ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 282ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return PCC->getParamIndex(); 283ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 284ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 285ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkounsigned clang_ParamCommandComment_isDirectionExplicit(CXComment CXC) { 286ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const ParamCommandComment *PCC = getASTNodeAs<ParamCommandComment>(CXC); 287ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!PCC) 288ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return false; 289ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 290ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return PCC->isDirectionExplicit(); 291ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 292ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 293ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenkoenum CXCommentParamPassDirection clang_ParamCommandComment_getDirection( 294ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko CXComment CXC) { 295ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const ParamCommandComment *PCC = getASTNodeAs<ParamCommandComment>(CXC); 296ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!PCC) 297ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXCommentParamPassDirection_In; 298ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 299ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko switch (PCC->getDirection()) { 300ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case ParamCommandComment::In: 301ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXCommentParamPassDirection_In; 302ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 303ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case ParamCommandComment::Out: 304ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXCommentParamPassDirection_Out; 305ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 306ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko case ParamCommandComment::InOut: 307ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko return CXCommentParamPassDirection_InOut; 308ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko } 309ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko llvm_unreachable("unknown ParamCommandComment::PassDirection"); 310ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 311ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 31296b098674908eaa59a9128f3305cda6fbbdad563Dmitri GribenkoCXString clang_TParamCommandComment_getParamName(CXComment CXC) { 31396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TParamCommandComment *TPCC = getASTNodeAs<TParamCommandComment>(CXC); 31496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko if (!TPCC || !TPCC->hasParamName()) 315dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 31696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 3175595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(TPCC->getParamNameAsWritten()); 31896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko} 31996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 32096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenkounsigned clang_TParamCommandComment_isParamPositionValid(CXComment CXC) { 32196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TParamCommandComment *TPCC = getASTNodeAs<TParamCommandComment>(CXC); 32296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko if (!TPCC) 32396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return false; 32496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 32596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return TPCC->isPositionValid(); 32696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko} 32796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 32896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenkounsigned clang_TParamCommandComment_getDepth(CXComment CXC) { 32996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TParamCommandComment *TPCC = getASTNodeAs<TParamCommandComment>(CXC); 33096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko if (!TPCC || !TPCC->isPositionValid()) 33196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return 0; 33296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 33396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return TPCC->getDepth(); 33496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko} 33596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 33696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenkounsigned clang_TParamCommandComment_getIndex(CXComment CXC, unsigned Depth) { 33796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TParamCommandComment *TPCC = getASTNodeAs<TParamCommandComment>(CXC); 33896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko if (!TPCC || !TPCC->isPositionValid() || Depth >= TPCC->getDepth()) 33996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return 0; 34096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 34196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return TPCC->getIndex(Depth); 34296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko} 34396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 344ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_VerbatimBlockLineComment_getText(CXComment CXC) { 345ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const VerbatimBlockLineComment *VBL = 346ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko getASTNodeAs<VerbatimBlockLineComment>(CXC); 347ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!VBL) 348dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 349ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 3505595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(VBL->getText()); 351ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 352ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 353ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_VerbatimLineComment_getText(CXComment CXC) { 354ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const VerbatimLineComment *VLC = getASTNodeAs<VerbatimLineComment>(CXC); 355ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!VLC) 356dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 357ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 3585595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createRef(VLC->getText()); 359ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 360ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 361ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko//===----------------------------------------------------------------------===// 36286cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko// Converting comments to XML. 363ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko//===----------------------------------------------------------------------===// 364ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 365ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_HTMLTagComment_getAsString(CXComment CXC) { 366ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const HTMLTagComment *HTC = getASTNodeAs<HTMLTagComment>(CXC); 367ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!HTC) 368dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 369ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 37086cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko CXTranslationUnit TU = CXC.TranslationUnit; 37186cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko if (!TU->CommentToXML) 3724d0ddecbe7dbbfeb89e428ed6e19c3cf12325087Dmitri Gribenko TU->CommentToXML = new clang::index::CommentToXMLConverter(); 37386cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko 37486cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko SmallString<128> Text; 37586cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko TU->CommentToXML->convertHTMLTagNodeToText( 37686cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko HTC, Text, cxtu::getASTUnit(TU)->getASTContext()); 37786cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko return cxstring::createDup(Text.str()); 378ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 379ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 380ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri GribenkoCXString clang_FullComment_getAsHTML(CXComment CXC) { 381ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko const FullComment *FC = getASTNodeAs<FullComment>(CXC); 382ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko if (!FC) 383dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 384ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 38586cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko CXTranslationUnit TU = CXC.TranslationUnit; 38686cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko if (!TU->CommentToXML) 3874d0ddecbe7dbbfeb89e428ed6e19c3cf12325087Dmitri Gribenko TU->CommentToXML = new clang::index::CommentToXMLConverter(); 38886cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko 3893e63d332baf0d3b8a5c0b7c2dac2ae85615b1d47Dmitri Gribenko SmallString<1024> HTML; 39086cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko TU->CommentToXML 39186cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko ->convertCommentToHTML(FC, HTML, cxtu::getASTUnit(TU)->getASTContext()); 3925595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createDup(HTML.str()); 393ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko} 394ae99b75fbbac1deaccdcc1b326b8fb6b07a1e72dDmitri Gribenko 395e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri GribenkoCXString clang_FullComment_getAsXML(CXComment CXC) { 396f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko const FullComment *FC = getASTNodeAs<FullComment>(CXC); 397f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko if (!FC) 398dad4c1a9ac4ef1aa591ac2ef20dc4c30d96f9f2aDmitri Gribenko return cxstring::createNull(); 39986cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko 400e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko CXTranslationUnit TU = CXC.TranslationUnit; 40186cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko if (!TU->CommentToXML) 4024d0ddecbe7dbbfeb89e428ed6e19c3cf12325087Dmitri Gribenko TU->CommentToXML = new clang::index::CommentToXMLConverter(); 403f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko 404f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko SmallString<1024> XML; 40586cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko TU->CommentToXML 40686cfda2fcccc84e92fb7f27e85b58312440ca8deDmitri Gribenko ->convertCommentToXML(FC, XML, cxtu::getASTUnit(TU)->getASTContext()); 4075595ded882b22d77fdf535bd1a4c6c090110348aDmitri Gribenko return cxstring::createDup(XML.str()); 408f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko} 409f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko 410f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko} // end extern "C" 411f303d4cb10648ac9c2080ae7c9dd507ba615e3a7Dmitri Gribenko 412