20%option never-interactive
21%option prefix="pycodeYY"
23%option extra-type="struct pycodeYY_state *"
28#define YY_TYPEDEF_YY_SCANNER_T
36#include <unordered_map>
63#define DBG_CTX(x) do { } while(0)
66#define YY_NO_UNISTD_H 1
158#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
161static inline const char *
getLexerFILE() {
return __FILE__;}
Represents the call context.
A abstract class representing of a compound symbol.
The common base class of all entity definitions found in the sources.
A model of a file symbol.
A model of a class/file/namespace member symbol.
Class representing a list of different code generators.
This is an alternative implementation of QCString.
static void writeMultiLineCodeLink(yyscan_t yyscanner, OutputCodeList &ol, const Definition *d, const QCString &text)
static void endCodeLine(yyscan_t yyscanner)
static void generateClassOrGlobalLink(yyscan_t yyscanner, OutputCodeList &ol, const QCString &clName, bool typeOnly=FALSE, bool varOnly=FALSE)
static void nextCodeLine(yyscan_t yyscanner)
static void startCodeLine(yyscan_t yyscanner)
static void codifyLines(yyscan_t yyscanner, const QCString &text)
static void incrementFlowKeyWordCount(yyscan_t yyscanner)
static int yyread(yyscan_t yyscanner, char *buf, int max_size)
static int countLines(yyscan_t yyscanner)
static void addToSearchIndex(yyscan_t yyscanner, const QCString &text)
static const char * stateToString(int state)
static bool getLinkInScope(yyscan_t yyscanner, const QCString &c, const QCString &m, const QCString &memberText, OutputCodeList &ol, const QCString &text, bool varOnly=FALSE)
static const ClassDef * stripClassName(yyscan_t yyscanner, const QCString &s, const Definition *d)
static bool getLink(yyscan_t yyscanner, const QCString &className, const QCString &memberName, OutputCodeList &ol, const QCString &text=QCString(), bool varOnly=FALSE)
static void startFontClass(yyscan_t yyscanner, const char *s, bool specialComment=false)
static void endFontClass(yyscan_t yyscanner, bool specialComment=false)
static void generateFunctionLink(yyscan_t yyscanner, OutputCodeList &ol, const QCString &funcName)
static void addVariable(yyscan_t yyscanner, QCString type, QCString name)
static const char * getLexerFILE()
static void setCurrentDoc(yyscan_t yyscanner, const QCString &anchor)
std::vector< std::string > StringVector
static void pop_state(yyscan_t yyscanner)
static void codify(yyscan_t yyscanner, const QCString &text)
static bool findMemberLink(yyscan_t yyscanner, OutputCodeList &ol, const Definition *sym, const QCString &symName)
static void adjustScopesAndSuites(yyscan_t yyscanner, unsigned indentLength)
Web server based search engine.
const FileDef * sourceFileDef
const Definition * currentDefinition
VariableContext theVarContext
int yyLineNr
current line number
QCString docBlock
contents of all lines of a documentation block
std::unordered_map< std::string, ScopedTypeVariant > codeClassMap
std::stack< yy_size_t > indents
Tracks indentation levels for scoping in python.
std::vector< const Definition * > foldStack
TooltipManager tooltipManager
StringVector curClassBases
int inputLines
number of line in the code fragment
const Definition * searchCtx
const MemberDef * currentMemberDef
bool insideSpecialComment
SymbolResolver symbolResolver
const char * inputString
the code fragment as text
std::unique_ptr< FileDef > exampleFileDef
CallContext theCallContext
int inputPosition
read offset during parsing
const char * currentFontClass
A bunch of utility functions.
172LETTER [A-Za-z\x80-\xFF]
173NONEMPTY [A-Za-z0-9_\x80-\xFF]
174EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
175PARAMNONEMPTY [^ \t\n():]
176IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")*
177SCOPE {IDENTIFIER}("."{IDENTIFIER})*
183TRIDOUBLEQUOTE "\"\"\""
184LONGSTRINGCHAR [^\\"']
186LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ})
187SMALLQUOTE ("\"\""|"\""|"'"|"''")
188LONGSTRINGBLOCK ({LONGSTRINGITEM}|{SMALLQUOTE})
190STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
191KEYWORD ("lambda"|"import"|"class"|"assert"|"with"|"as"|"from"|"global"|"async"|"def"|"True"|"False")
192FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
222 BEGIN( FunctionDec );
224 "async"{BB}"def"{BB} {
228 BEGIN( FunctionDec );
242 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
243 codify(yyscanner,
"self.");
246 "self."{IDENTIFIER}/"(" {
247 codify(yyscanner,
"self.");
250 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
251 codify(yyscanner,
"self.");
254 "self."{IDENTIFIER} {
255 codify(yyscanner,
"self.");
258 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
262 "cls."{IDENTIFIER}/"(" {
266 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
274 "@"{SCOPE}{CALLANY}? {
281<ClassDec>{IDENTIFIER} {
284 yyextra->curClassName = yytext;
285 yyextra->curClassBases.clear();
286 BEGIN( ClassInheritance );
294 ({IDENTIFIER}".")*{IDENTIFIER} {
308 yyextra->curClassBases.emplace_back(yytext);
309 yyextra->insideBody =
true;
311 yyextra->insideBody =
false;
325 for (
const auto &s : yyextra->curClassBases)
327 const ClassDef *baseDefToAdd =
nullptr;
329 auto it = yyextra->codeClassMap.find(s);
330 if (it != yyextra->codeClassMap.end())
332 baseDefToAdd =
toClassDef(it->second.globalDef());
335 if (baseDefToAdd==
nullptr)
337 baseDefToAdd=yyextra->symbolResolver.resolveClass(yyextra->currentDefinition,s,
true);
340 if (baseDefToAdd && baseDefToAdd->
name()!=yyextra->curClassName)
342 var.localDef()->insertBaseClass(baseDefToAdd->
name());
345 yyextra->codeClassMap.emplace(yyextra->curClassName.str(),std::move(var));
348 yyextra->curClassName.clear();
349 yyextra->curClassBases.clear();
351 yyextra->noSuiteFound =
TRUE;
virtual const QCString & name() const =0
ClassDef * toClassDef(Definition *d)
364 BEGIN( FunctionParams );
374 ({IDENTIFIER}|{PARAMNONEMPTY}+) {
393 yyextra->noSuiteFound =
TRUE;
417 ({IDENTIFIER}".")*{IDENTIFIER}/"(" {
418 yyextra->insideBody =
true;
420 yyextra->insideBody =
false;
422 ({IDENTIFIER}".")+{IDENTIFIER} {
423 yyextra->insideBody =
true;
425 yyextra->insideBody =
false;
427 {IDENTIFIER} {
codify(yyscanner,yytext); }
450 yyextra->noSuiteFound =
FALSE;
460 yyextra->noSuiteFound =
FALSE;
468 if (YY_START==SingleQuoteString ||
469 YY_START==DoubleQuoteString ||
470 YY_START==TripleString
475 yy_push_state(YY_START,yyscanner);
477 yyextra->docBlock=yytext;
482 if ( yyextra->noSuiteFound )
485 BEGIN ( SuiteCaptureIndent );
502 yyextra->indents.push(yyleng);
510 {BB}/({NONEMPTY}|{EXPCHAR}) {
527 ""/({NONEMPTY}|{EXPCHAR}) {
539 BEGIN( SuiteMaintain );
555 {STRINGPREFIX}?{TRIDOUBLEQUOTE} {
561 BEGIN(yyextra->stringContext);
578 {STRINGPREFIX}?{TRISINGLEQUOTE} {
584 BEGIN(yyextra->stringContext);
598 if (yyextra->doubleQuote==(yytext[0]==
'"'))
601 BEGIN(yyextra->stringContext);
619<*>{STRINGPREFIX}?{TRISINGLEQUOTE} {
620 if (YY_START==SingleQuoteString) REJECT;
622 yyextra->stringContext=YY_START;
623 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
627<*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} {
628 if (YY_START==DoubleQuoteString) REJECT;
630 yyextra->stringContext=YY_START;
631 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
635<*>{STRINGPREFIX}?"'" {
636 if (YY_START==SingleQuoteString ||
637 YY_START==DoubleQuoteString ||
638 YY_START==TripleString)
643 yyextra->stringContext=YY_START;
645 BEGIN(SingleQuoteString);
647<*>{STRINGPREFIX}?"\"" {
648 if (YY_START==SingleQuoteString ||
649 YY_START==DoubleQuoteString ||
650 YY_START==TripleString)
655 yyextra->stringContext=YY_START;
657 BEGIN(DoubleQuoteString);
660 yyextra->docBlock+=yytext;
662<DocBlock>"\n"{B}("#") {
663 yyextra->docBlock+=yytext;
674 if (YY_START==SingleQuoteString ||
675 YY_START==DoubleQuoteString ||
676 YY_START==TripleString)
680 yy_push_state(YY_START,yyscanner);
682 yyextra->docBlock=yytext;
685 if (YY_START==SingleQuoteString ||
686 YY_START==DoubleQuoteString ||
687 YY_START==TripleString)
696 if (yyextra->endComment)
698 yyextra->endComment=
FALSE;
723 if (YY_START==DocBlock)
739 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
744 auto it = yyextra->codeClassMap.
find(ltype.
str());
745 if (it!=yyextra->codeClassMap.end())
747 yyextra->theVarContext.addVariable(lname,std::move(it->second));
751 const ClassDef *varType = getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,ltype);
758 if (!yyextra->theVarContext.atGlobalScope())
771 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
772 int inputPosition = yyextra->inputPosition;
773 const char *s = yyextra->inputString + inputPosition;
775 while( c < max_size && *s )
780 yyextra->inputPosition += c;
792 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
794 if (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
796 while (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
799 yyextra->indents.pop();
801 yyextra->currentMemberDef=
nullptr;
802 if (yyextra->currentDefinition)
803 yyextra->currentDefinition=yyextra->currentDefinition->getOuterScope();
808 if (!yyextra->indents.empty())
823 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
824 const char *p=yyextra->inputString;
830 if (c==
'\n') count++;
832 if (p>yyextra->inputString && *(p-1)!=
'\n')
844 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
847 if (yyextra->searchCtx)
872 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
879 QCString clName=className+templSpec;
881 if (!yyextra->classScope.isEmpty())
883 cd=yyextra->symbolResolver.resolveClass(d,yyextra->classScope+
"::"+clName,
true);
887 cd=yyextra->symbolResolver.resolveClass(d,clName,
true);
903 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
904 while (!yyextra->foldStack.empty())
906 const Definition *dd = yyextra->foldStack.back();
909 yyextra->code->endFold();
911 yyextra->foldStack.pop_back();
922 if (endLine!=-1 && startLine!=endLine &&
930 (yyextra->foldStack.empty() || yyextra->foldStack.back()->getEndBodyLine()!=startLine))
933 yyextra->code->startFold(yyextra->yyLineNr,
"",
"");
934 yyextra->foldStack.push_back(d);
948 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
950 if (yyextra->sourceFileDef)
956 const Definition *d = yyextra->sourceFileDef->getSourceDefinition(yyextra->yyLineNr);
962 yyextra->currentDefinition = d;
963 yyextra->currentMemberDef = yyextra->sourceFileDef->getSourceMember(yyextra->yyLineNr);
964 yyextra->insideBody =
false;
965 yyextra->endComment =
FALSE;
966 yyextra->searchingForBody =
TRUE;
967 yyextra->realScope = d->
name();
968 yyextra->classScope = d->
name();
970 yyextra->bodyCurlyCount = 0;
972 lineAnchor.
sprintf(
"l%05d",yyextra->yyLineNr);
973 if (yyextra->currentMemberDef)
976 yyextra->code->writeLineNumber(yyextra->currentMemberDef->getReference(),
977 yyextra->currentMemberDef->getOutputFileBase(),
978 yyextra->currentMemberDef->anchor(),yyextra->yyLineNr,
979 !yyextra->includeCodeFragment);
988 !yyextra->includeCodeFragment);
1000 !yyextra->includeCodeFragment);
1003 yyextra->code->startCodeLine(yyextra->yyLineNr);
1004 yyextra->insideCodeLine=
true;
1006 if (yyextra->currentFontClass)
1008 yyextra->code->startFontClass(yyextra->currentFontClass);
1016 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1017 yyextra->code->codify(text);
1024 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1026 yyextra->code->endCodeLine();
1027 yyextra->insideCodeLine=
false;
1034 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1035 const char *fc = yyextra->currentFontClass;
1036 if (yyextra->insideCodeLine)
1040 if (yyextra->yyLineNr<yyextra->inputLines)
1042 yyextra->currentFontClass = fc;
1058 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1061 yyextra->tooltipManager.addTooltip(d);
1066 if (!sourceTooltips)
1071 const char *p=text.
data();
1076 while ((c=*p++) && c!=
'\n') { }
1079 yyextra->yyLineNr++;
1097 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1100 yyextra->code->startSpecialComment();
1101 yyextra->insideSpecialComment =
true;
1104 if (
qstrcmp(yyextra->currentFontClass,s)!=0)
1107 yyextra->code->startFontClass(s);
1108 yyextra->currentFontClass=s;
1116 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1117 if (yyextra->currentFontClass)
1119 yyextra->code->endFontClass();
1120 yyextra->currentFontClass=
nullptr;
1122 if (specialComment && yyextra->insideSpecialComment)
1124 yyextra->code->endSpecialComment();
1125 yyextra->insideSpecialComment=
false;
1133 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1136 const char *p=text.
data(),*sp=p;
1142 while ((c=*p++) && c!=
'\n') { }
1145 yyextra->yyLineNr++;
1146 size_t l =
static_cast<size_t>(p-sp-1);
1147 yyextra->code->codify(
QCString(sp,l));
1152 yyextra->code->codify(sp);
1168 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1186 if (yyextra->currentDefinition && yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1208 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1213 if (!yyextra->curClassName.isEmpty())
1216 c.
prepend(yyextra->curClassName);
1235 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1239 if (className.
isEmpty())
return;
1241 DBG_CTX((stderr,
"generateClassOrGlobalLink(className=%s)\n",
qPrint(className)));
1248 if ((lcd=yyextra->theVarContext.findVariable(className))==
nullptr)
1250 const Definition *d = yyextra->currentDefinition;
1253 cd = yyextra->symbolResolver.resolveClass(d,
substitute(className,
".",
"::"),
true);
1254 md = yyextra->symbolResolver.getTypedef();
1256 DBG_CTX((stderr,
"d=%s yyextra->sourceFileDef=%s\n",
1258 yyextra->currentDefinition?
qPrint(yyextra->currentDefinition->displayName()):
"<null>"));
1261 if (cd==
nullptr && md==
nullptr)
1270 else if (
getLink(yyscanner,yyextra->classScope,clName,ol,clName))
1280 yyextra->theCallContext.setScope(*lcd);
1283 DBG_CTX((stderr,
"is a local variable cd=%p!\n",cd));
1296 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1304 int scopeEnd = className.
findRev(
".");
1305 if (scopeEnd!=-1 && !typeOnly)
1323 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1346 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1375 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1376 QCString locScope=yyextra->classScope;
1382 locScope=locFunc.
left(i);
1388 auto it = yyextra->codeClassMap.find(locScope.
str());
1389 if (it!=yyextra->codeClassMap.end())
1397 if (
getLink(yyscanner,bcName,locFunc,ol,funcName))
1405 if (!
getLink(yyscanner,locScope,locFunc,ol,funcName))
1419 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1432 if (yyextra->currentMemberDef && yyextra->collectXRefs)
1456 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1462 if (yyextra->currentDefinition)
1465 for (
const auto &p : v)
1471 codify(yyscanner,symName);
1477 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1478 if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
1499 pycodeYYlex_init_extra(&
p->state,&
p->yyscanner);
1508 pycodeYYlex_destroy(
p->yyscanner);
1513 struct yyguts_t *yyg = (
struct yyguts_t*)
p->yyscanner;
1514 yyextra->codeClassMap.clear();
1515 yyextra->currentDefinition =
nullptr;
1516 yyextra->currentMemberDef =
nullptr;
1517 yyextra->doubleStringIsDoc =
FALSE;
1518 yyextra->paramParens = 0;
1519 while (!yyextra->indents.empty()) yyextra->indents.pop();
1527 bool stripCodeComments,
1532 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1540 yyextra->code = &codeOutIntf;
1541 yyextra->inputString = input.
data();
1542 yyextra->inputPosition = 0;
1543 yyextra->currentFontClass =
nullptr;
1544 yyextra->insideCodeLine =
FALSE;
1545 yyextra->searchCtx = options.
searchCtx();
1549 yyextra->exampleBlock = options.
isExample();
1551 yyextra->sourceFileDef = options.
fileDef();
1552 yyextra->symbolResolver.setFileScope(options.
fileDef());
1553 yyextra->foldStack.clear();
1554 yyextra->insideSpecialComment =
false;
1556 if (yyextra->exampleBlock && options.
fileDef()==
nullptr)
1560 yyextra->sourceFileDef = yyextra->exampleFileDef.get();
1562 if (yyextra->sourceFileDef)
1571 pycodeYYrestart(
nullptr,yyscanner);
1573 pycodeYYlex(yyscanner);
1575 if (!yyextra->indents.empty())
1580 if (yyextra->insideCodeLine)
1586 while (!yyextra->foldStack.empty())
1588 yyextra->code->endFold();
1589 yyextra->foldStack.pop_back();
1592 if (yyextra->exampleFileDef)
1595 yyextra->exampleFileDef.reset();
1596 yyextra->sourceFileDef=
nullptr;
1599 yyextra->tooltipManager.writeTooltips(codeOutIntf);
1604 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1605 if ( yyg->yy_start_stack_ptr <= 0 )
1606 warn(yyextra->fileName,yyextra->yyLineNr,
"Unexpected statement '{}'",yytext );
1608 yy_pop_state(yyscanner);
1611#include "pycode.l.h"
virtual const MemberDef * getMemberByName(const QCString &) const =0
Returns the member with the given name.
virtual int isBaseClass(const ClassDef *bcd, bool followInstances, const QCString &templSpec=QCString()) const =0
Returns TRUE iff bcd is a direct or indirect base class of this class.
static bool isFlagSet(const DebugMask mask)
virtual int getEndBodyLine() const =0
virtual bool isLinkable() const =0
virtual DefType definitionType() const =0
virtual QCString anchor() const =0
virtual QCString briefDescriptionAsTooltip() const =0
virtual const FileDef * getBodyDef() const =0
virtual bool isLinkableInProject() const =0
virtual int getStartDefLine() const =0
virtual QCString getReference() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual CodeSymbolType codeSymbolType() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
static NamespaceDefMutable * globalScope
static std::mutex countFlowKeywordsMutex
static SymbolMap< Definition > * symbolMap
static SearchIndexIntf searchIndex
virtual QCString fileName() const =0
std::vector< QCString > baseClasses() const
virtual QCString typeString() const =0
virtual GroupDef * getGroupDef()=0
virtual void incrementFlowKeyWordCount()=0
An abstract interface of a namespace symbol.
virtual const MemberDef * getMemberByName(const QCString &) const =0
void writeCodeLink(CodeSymbolType type, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip)
void stripCodeComments(bool b)
void resetCodeParserState() override
Resets the state of the code parser.
~PythonCodeParser() override
void parseCode(OutputCodeList &codeOutIntf, const QCString &scopeName, const QCString &input, SrcLangExt lang, bool stripCodeComments, const CodeParserOptions &options) override
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
std::unique_ptr< Private > p
int find(char c, int index=0, bool cs=TRUE) const
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool isEmpty() const
Returns TRUE iff the string is empty.
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
const std::string & str() const
QCString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
QCString right(size_t len) const
QCString & sprintf(const char *format,...)
int findRev(char c, int index=-1, bool cs=TRUE) const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
ClassDef * getClass(const QCString &n)
static void codeFolding(yyscan_t yyscanner, const Definition *d)
#define Config_getBool(name)
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
void addDocCrossReference(const MemberDef *s, const MemberDef *d)
MemberDefMutable * toMemberDefMutable(Definition *d)
MemberDef * toMemberDef(Definition *d)
#define warn(file, line, fmt,...)
NamespaceDef * getResolvedNamespace(const QCString &name)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
const char * qPrint(const char *s)
int qstrcmp(const char *str1, const char *str2)
Options to configure the code parser.
const Definition * searchCtx() const
const FileDef * fileDef() const
bool inlineFragment() const
QCString exampleName() const
bool collectXRefs() const
QCString removeRedundantWhiteSpace(const QCString &s)
int extractClassNameFromType(const QCString &type, int &pos, QCString &name, QCString &templSpec, SrcLangExt lang)
GetDefResult getDefs(const GetDefInput &input)