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
159#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
162static 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.
173LETTER [A-Za-z\x80-\xFF]
174NONEMPTY [A-Za-z0-9_\x80-\xFF]
175EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
176PARAMNONEMPTY [^ \t\n():]
177IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")*
178SCOPE {IDENTIFIER}("."{IDENTIFIER})*
184TRIDOUBLEQUOTE "\"\"\""
185LONGSTRINGCHAR [^\\"']
187LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ})
188SMALLQUOTE ("\"\""|"\""|"'"|"''")
189LONGSTRINGBLOCK ({LONGSTRINGITEM}|{SMALLQUOTE})
191STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
192KEYWORD ("lambda"|"import"|"class"|"assert"|"with"|"as"|"from"|"global"|"async"|"def"|"True"|"False")
193FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
223 BEGIN( FunctionDec );
225 "async"{BB}"def"{BB} {
229 BEGIN( FunctionDec );
243 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
244 codify(yyscanner,
"self.");
247 "self."{IDENTIFIER}/"(" {
248 codify(yyscanner,
"self.");
251 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
252 codify(yyscanner,
"self.");
255 "self."{IDENTIFIER} {
256 codify(yyscanner,
"self.");
259 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
263 "cls."{IDENTIFIER}/"(" {
267 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
275 "@"{SCOPE}{CALLANY}? {
282<ClassDec>{IDENTIFIER} {
285 yyextra->curClassName = yytext;
286 yyextra->curClassBases.clear();
287 BEGIN( ClassInheritance );
295 ({IDENTIFIER}".")*{IDENTIFIER} {
309 yyextra->curClassBases.emplace_back(yytext);
310 yyextra->insideBody =
true;
312 yyextra->insideBody =
false;
326 for (
const auto &s : yyextra->curClassBases)
328 const ClassDef *baseDefToAdd =
nullptr;
330 auto it = yyextra->codeClassMap.find(s);
331 if (it != yyextra->codeClassMap.end())
333 baseDefToAdd =
toClassDef(it->second.globalDef());
336 if (baseDefToAdd==
nullptr)
338 baseDefToAdd=yyextra->symbolResolver.resolveClass(yyextra->currentDefinition,s,
true);
341 if (baseDefToAdd && baseDefToAdd->
name()!=yyextra->curClassName)
343 var.localDef()->insertBaseClass(baseDefToAdd->
name());
346 yyextra->codeClassMap.emplace(yyextra->curClassName.str(),std::move(var));
349 yyextra->curClassName.clear();
350 yyextra->curClassBases.clear();
352 yyextra->noSuiteFound =
TRUE;
virtual const QCString & name() const =0
ClassDef * toClassDef(Definition *d)
365 BEGIN( FunctionParams );
375 ({IDENTIFIER}|{PARAMNONEMPTY}+) {
394 yyextra->noSuiteFound =
TRUE;
418 ({IDENTIFIER}".")*{IDENTIFIER}/"(" {
419 yyextra->insideBody =
true;
421 yyextra->insideBody =
false;
423 ({IDENTIFIER}".")+{IDENTIFIER} {
424 yyextra->insideBody =
true;
426 yyextra->insideBody =
false;
428 {IDENTIFIER} {
codify(yyscanner,yytext); }
451 yyextra->noSuiteFound =
FALSE;
461 yyextra->noSuiteFound =
FALSE;
469 if (YY_START==SingleQuoteString ||
470 YY_START==DoubleQuoteString ||
471 YY_START==TripleString
476 yy_push_state(YY_START,yyscanner);
478 yyextra->docBlock=yytext;
483 if ( yyextra->noSuiteFound )
486 BEGIN ( SuiteCaptureIndent );
503 yyextra->indents.push(yyleng);
511 {BB}/({NONEMPTY}|{EXPCHAR}) {
528 ""/({NONEMPTY}|{EXPCHAR}) {
540 BEGIN( SuiteMaintain );
556 {STRINGPREFIX}?{TRIDOUBLEQUOTE} {
562 BEGIN(yyextra->stringContext);
579 {STRINGPREFIX}?{TRISINGLEQUOTE} {
585 BEGIN(yyextra->stringContext);
599 if (yyextra->doubleQuote==(yytext[0]==
'"'))
602 BEGIN(yyextra->stringContext);
620<*>{STRINGPREFIX}?{TRISINGLEQUOTE} {
621 if (YY_START==SingleQuoteString) REJECT;
623 yyextra->stringContext=YY_START;
624 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
628<*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} {
629 if (YY_START==DoubleQuoteString) REJECT;
631 yyextra->stringContext=YY_START;
632 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
636<*>{STRINGPREFIX}?"'" {
637 if (YY_START==SingleQuoteString ||
638 YY_START==DoubleQuoteString ||
639 YY_START==TripleString)
644 yyextra->stringContext=YY_START;
646 BEGIN(SingleQuoteString);
648<*>{STRINGPREFIX}?"\"" {
649 if (YY_START==SingleQuoteString ||
650 YY_START==DoubleQuoteString ||
651 YY_START==TripleString)
656 yyextra->stringContext=YY_START;
658 BEGIN(DoubleQuoteString);
661 yyextra->docBlock+=yytext;
663<DocBlock>"\n"{B}("#") {
664 yyextra->docBlock+=yytext;
675 if (YY_START==SingleQuoteString ||
676 YY_START==DoubleQuoteString ||
677 YY_START==TripleString)
681 yy_push_state(YY_START,yyscanner);
683 yyextra->docBlock=yytext;
686 if (YY_START==SingleQuoteString ||
687 YY_START==DoubleQuoteString ||
688 YY_START==TripleString)
697 if (yyextra->endComment)
699 yyextra->endComment=
FALSE;
724 if (YY_START==DocBlock)
740 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
745 auto it = yyextra->codeClassMap.
find(ltype.
str());
746 if (it!=yyextra->codeClassMap.end())
748 yyextra->theVarContext.addVariable(lname,std::move(it->second));
752 const ClassDef *varType = getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,ltype);
759 if (!yyextra->theVarContext.atGlobalScope())
772 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
773 int inputPosition = yyextra->inputPosition;
774 const char *s = yyextra->inputString + inputPosition;
776 while( c < max_size && *s )
781 yyextra->inputPosition += c;
793 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
795 if (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
797 while (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
800 yyextra->indents.pop();
802 yyextra->currentMemberDef=
nullptr;
803 if (yyextra->currentDefinition)
804 yyextra->currentDefinition=yyextra->currentDefinition->getOuterScope();
809 if (!yyextra->indents.empty())
824 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
825 const char *p=yyextra->inputString;
831 if (c==
'\n') count++;
833 if (p>yyextra->inputString && *(p-1)!=
'\n')
845 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
848 if (yyextra->searchCtx)
873 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
880 QCString clName=className+templSpec;
882 if (!yyextra->classScope.isEmpty())
884 cd=yyextra->symbolResolver.resolveClass(d,yyextra->classScope+
"::"+clName,
true);
888 cd=yyextra->symbolResolver.resolveClass(d,clName,
true);
904 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
905 while (!yyextra->foldStack.empty())
907 const Definition *dd = yyextra->foldStack.back();
910 yyextra->code->endFold();
912 yyextra->foldStack.pop_back();
923 if (endLine!=-1 && startLine!=endLine &&
931 (yyextra->foldStack.empty() || yyextra->foldStack.back()->getEndBodyLine()!=startLine))
934 yyextra->code->startFold(yyextra->yyLineNr,
"",
"");
935 yyextra->foldStack.push_back(d);
949 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
951 if (yyextra->sourceFileDef && yyextra->lineNumbers)
957 const Definition *d = yyextra->sourceFileDef->getSourceDefinition(yyextra->yyLineNr);
963 yyextra->currentDefinition = d;
964 yyextra->currentMemberDef = yyextra->sourceFileDef->getSourceMember(yyextra->yyLineNr);
965 yyextra->insideBody =
false;
966 yyextra->endComment =
FALSE;
967 yyextra->searchingForBody =
TRUE;
968 yyextra->realScope = d->
name();
969 yyextra->classScope = d->
name();
971 yyextra->bodyCurlyCount = 0;
973 lineAnchor.
sprintf(
"l%05d",yyextra->yyLineNr);
974 if (yyextra->currentMemberDef)
977 yyextra->code->writeLineNumber(yyextra->currentMemberDef->getReference(),
978 yyextra->currentMemberDef->getOutputFileBase(),
979 yyextra->currentMemberDef->anchor(),yyextra->yyLineNr,
980 !yyextra->includeCodeFragment);
989 !yyextra->includeCodeFragment);
1001 !yyextra->includeCodeFragment);
1004 yyextra->code->startCodeLine(yyextra->yyLineNr);
1005 yyextra->insideCodeLine=
true;
1007 if (yyextra->currentFontClass)
1009 yyextra->code->startFontClass(yyextra->currentFontClass);
1017 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1018 yyextra->code->codify(text);
1025 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1027 yyextra->code->endCodeLine();
1028 yyextra->insideCodeLine=
false;
1035 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1036 const char *fc = yyextra->currentFontClass;
1037 if (yyextra->insideCodeLine)
1041 if (yyextra->yyLineNr<yyextra->inputLines)
1043 yyextra->currentFontClass = fc;
1059 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1062 yyextra->tooltipManager.addTooltip(d);
1067 if (!sourceTooltips)
1072 const char *p=text.
data();
1077 while ((c=*p++) && c!=
'\n') { }
1080 yyextra->yyLineNr++;
1098 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1101 yyextra->code->startSpecialComment();
1102 yyextra->insideSpecialComment =
true;
1105 if (
qstrcmp(yyextra->currentFontClass,s)!=0)
1108 yyextra->code->startFontClass(s);
1109 yyextra->currentFontClass=s;
1117 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1118 if (yyextra->currentFontClass)
1120 yyextra->code->endFontClass();
1121 yyextra->currentFontClass=
nullptr;
1123 if (specialComment && yyextra->insideSpecialComment)
1125 yyextra->code->endSpecialComment();
1126 yyextra->insideSpecialComment=
false;
1134 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1137 const char *p=text.
data(),*sp=p;
1143 while ((c=*p++) && c!=
'\n') { }
1146 yyextra->yyLineNr++;
1147 size_t l =
static_cast<size_t>(p-sp-1);
1148 yyextra->code->codify(
QCString(sp,l));
1153 yyextra->code->codify(sp);
1169 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1187 if (yyextra->currentDefinition && yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1209 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1214 if (!yyextra->curClassName.isEmpty())
1217 c.
prepend(yyextra->curClassName);
1236 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1240 if (className.
isEmpty())
return;
1242 DBG_CTX((stderr,
"generateClassOrGlobalLink(className=%s)\n",
qPrint(className)));
1249 if ((lcd=yyextra->theVarContext.findVariable(className))==
nullptr)
1251 const Definition *d = yyextra->currentDefinition;
1254 cd = yyextra->symbolResolver.resolveClass(d,
substitute(className,
".",
"::"),
true);
1255 md = yyextra->symbolResolver.getTypedef();
1257 DBG_CTX((stderr,
"d=%s yyextra->sourceFileDef=%s\n",
1259 yyextra->currentDefinition?
qPrint(yyextra->currentDefinition->displayName()):
"<null>"));
1262 if (cd==
nullptr && md==
nullptr)
1271 else if (
getLink(yyscanner,yyextra->classScope,clName,ol,clName))
1281 yyextra->theCallContext.setScope(*lcd);
1284 DBG_CTX((stderr,
"is a local variable cd=%p!\n",cd));
1297 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1305 int scopeEnd = className.
findRev(
".");
1306 if (scopeEnd!=-1 && !typeOnly)
1324 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1347 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1376 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1377 QCString locScope=yyextra->classScope;
1383 locScope=locFunc.
left(i);
1389 auto it = yyextra->codeClassMap.find(locScope.
str());
1390 if (it!=yyextra->codeClassMap.end())
1398 if (
getLink(yyscanner,bcName,locFunc,ol,funcName))
1406 if (!
getLink(yyscanner,locScope,locFunc,ol,funcName))
1420 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1433 if (yyextra->currentMemberDef && yyextra->collectXRefs)
1457 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1463 if (yyextra->currentDefinition)
1466 for (
const auto &p : v)
1472 codify(yyscanner,symName);
1478 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1479 if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
1500 pycodeYYlex_init_extra(&
p->state,&
p->yyscanner);
1509 pycodeYYlex_destroy(
p->yyscanner);
1514 struct yyguts_t *yyg = (
struct yyguts_t*)
p->yyscanner;
1515 yyextra->codeClassMap.clear();
1516 yyextra->currentDefinition =
nullptr;
1517 yyextra->currentMemberDef =
nullptr;
1518 yyextra->doubleStringIsDoc =
FALSE;
1519 yyextra->paramParens = 0;
1520 while (!yyextra->indents.empty()) yyextra->indents.pop();
1528 bool stripCodeComments,
1533 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1541 yyextra->code = &codeOutIntf;
1542 yyextra->inputString = input.
data();
1543 yyextra->inputPosition = 0;
1544 yyextra->currentFontClass =
nullptr;
1545 yyextra->insideCodeLine =
FALSE;
1546 yyextra->searchCtx = options.
searchCtx();
1550 yyextra->exampleBlock = options.
isExample();
1552 yyextra->sourceFileDef = options.
fileDef();
1554 yyextra->symbolResolver.setFileScope(options.
fileDef());
1555 yyextra->foldStack.clear();
1556 yyextra->insideSpecialComment =
false;
1558 if (yyextra->exampleBlock && options.
fileDef()==
nullptr)
1562 yyextra->sourceFileDef = yyextra->exampleFileDef.get();
1564 if (yyextra->sourceFileDef)
1573 pycodeYYrestart(
nullptr,yyscanner);
1575 pycodeYYlex(yyscanner);
1577 if (!yyextra->indents.empty())
1582 if (yyextra->insideCodeLine)
1588 while (!yyextra->foldStack.empty())
1590 yyextra->code->endFold();
1591 yyextra->foldStack.pop_back();
1594 if (yyextra->exampleFileDef)
1597 yyextra->exampleFileDef.reset();
1598 yyextra->sourceFileDef=
nullptr;
1601 yyextra->tooltipManager.writeTooltips(codeOutIntf);
1606 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1607 if ( yyg->yy_start_stack_ptr <= 0 )
1608 warn(yyextra->fileName,yyextra->yyLineNr,
"Unexpected statement '{}'",yytext );
1610 yy_pop_state(yyscanner);
1613#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 showLineNumbers() 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)