22%option never-interactive
23%option prefix="pycodeYY"
25%option extra-type="struct pycodeYY_state *"
30#define YY_TYPEDEF_YY_SCANNER_T
38#include <unordered_map>
65#define DBG_CTX(x) do { } while(0)
68#define YY_NO_UNISTD_H 1
161#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
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 addVariable(yyscan_t yyscanner, QCString type, QCString name)
std::vector< std::string > StringVector
static void generateClassOrGlobalLink(yyscan_t yyscanner, OutputCodeList &ol, const QCString &clName, bool typeOnly=FALSE)
static void writeMultiLineCodeLink(yyscan_t yyscanner, OutputCodeList &ol, const Definition *d, const QCString &text)
static void endCodeLine(yyscan_t yyscanner)
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 void codify(yyscan_t yyscanner, const QCString &text)
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 findMemberLink(yyscan_t yyscanner, OutputCodeList &ol, const Definition *sym, const QCString &symName)
static void pop_state(yyscan_t yyscanner)
static bool getLinkInScope(yyscan_t yyscanner, const QCString &c, const QCString &m, const QCString &memberText, OutputCodeList &ol, const QCString &text)
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 adjustScopesAndSuites(yyscan_t yyscanner, unsigned indentLength)
static const ClassDef * stripClassName(yyscan_t yyscanner, const QCString &s, Definition *d)
static const char * getLexerFILE()
static void setCurrentDoc(yyscan_t yyscanner, const QCString &anchor)
static bool getLink(yyscan_t yyscanner, const QCString &className, const QCString &memberName, OutputCodeList &ol, const QCString &text=QCString())
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.
175LETTER [A-Za-z\x80-\xFF]
176NONEMPTY [A-Za-z0-9_\x80-\xFF]
177EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
178PARAMNONEMPTY [^ \t\n():]
179IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")*
180SCOPE {IDENTIFIER}("."{IDENTIFIER})*
186TRIDOUBLEQUOTE "\"\"\""
187LONGSTRINGCHAR [^\\"']
189LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ})
190SMALLQUOTE ("\"\""|"\""|"'"|"''")
191LONGSTRINGBLOCK ({LONGSTRINGITEM}|{SMALLQUOTE})
193STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
194KEYWORD ("lambda"|"import"|"class"|"assert"|"with"|"as"|"from"|"global"|"async"|"def"|"True"|"False")
195FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
225 BEGIN( FunctionDec );
static void startFontClass(yyscan_t yyscanner, const char *s, bool specialComment=false)
static void endFontClass(yyscan_t yyscanner, bool specialComment=false)
227 "async"{BB}"def"{BB} {
231 BEGIN( FunctionDec );
245 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
246 codify(yyscanner,
"self.");
249 "self."{IDENTIFIER}/"(" {
250 codify(yyscanner,
"self.");
253 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
254 codify(yyscanner,
"self.");
257 "self."{IDENTIFIER} {
258 codify(yyscanner,
"self.");
261 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
265 "cls."{IDENTIFIER}/"(" {
269 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
277 "@"{SCOPE}{CALLANY}? {
284<ClassDec>{IDENTIFIER} {
287 yyextra->curClassName = yytext;
288 yyextra->curClassBases.clear();
289 BEGIN( ClassInheritance );
static void generateClassOrGlobalLink(yyscan_t yyscanner, OutputCodeList &ol, const QCString &clName, bool typeOnly=FALSE, bool varOnly=FALSE)
297 ({IDENTIFIER}".")*{IDENTIFIER} {
311 yyextra->curClassBases.emplace_back(yytext);
312 yyextra->insideBody =
true;
314 yyextra->insideBody =
false;
328 for (
const auto &s : yyextra->curClassBases)
330 const ClassDef *baseDefToAdd =
nullptr;
332 auto it = yyextra->codeClassMap.find(s);
333 if (it != yyextra->codeClassMap.end())
335 baseDefToAdd =
toClassDef(it->second.globalDef());
338 if (baseDefToAdd==
nullptr)
340 baseDefToAdd=yyextra->symbolResolver.resolveClass(yyextra->currentDefinition,s,
true);
343 if (baseDefToAdd && baseDefToAdd->
name()!=yyextra->curClassName)
345 var.localDef()->insertBaseClass(baseDefToAdd->
name());
348 yyextra->codeClassMap.emplace(yyextra->curClassName.str(),std::move(var));
351 yyextra->curClassName.clear();
352 yyextra->curClassBases.clear();
354 yyextra->noSuiteFound =
TRUE;
virtual const QCString & name() const =0
ClassDef * toClassDef(Definition *d)
static void generateFunctionLink(yyscan_t yyscanner, OutputCodeList &ol, const QCString &funcName)
367 BEGIN( FunctionParams );
377 ({IDENTIFIER}|{PARAMNONEMPTY}+) {
static void codifyLines(yyscan_t yyscanner, const QCString &text)
396 yyextra->noSuiteFound =
TRUE;
static void incrementFlowKeyWordCount(yyscan_t yyscanner)
420 ({IDENTIFIER}".")*{IDENTIFIER}/"(" {
421 yyextra->insideBody =
true;
423 yyextra->insideBody =
false;
425 ({IDENTIFIER}".")+{IDENTIFIER} {
426 yyextra->insideBody =
true;
428 yyextra->insideBody =
false;
430 {IDENTIFIER} {
codify(yyscanner,yytext); }
453 yyextra->noSuiteFound =
FALSE;
463 yyextra->noSuiteFound =
FALSE;
471 if (YY_START==SingleQuoteString ||
472 YY_START==DoubleQuoteString ||
473 YY_START==TripleString
478 yy_push_state(YY_START,yyscanner);
480 yyextra->docBlock=yytext;
485 if ( yyextra->noSuiteFound )
488 BEGIN ( SuiteCaptureIndent );
505 yyextra->indents.push(yyleng);
513 {BB}/({NONEMPTY}|{EXPCHAR}) {
530 ""/({NONEMPTY}|{EXPCHAR}) {
542 BEGIN( SuiteMaintain );
558 {STRINGPREFIX}?{TRIDOUBLEQUOTE} {
564 BEGIN(yyextra->stringContext);
581 {STRINGPREFIX}?{TRISINGLEQUOTE} {
587 BEGIN(yyextra->stringContext);
601 if (yyextra->doubleQuote==(yytext[0]==
'"'))
604 BEGIN(yyextra->stringContext);
622<*>{STRINGPREFIX}?{TRISINGLEQUOTE} {
623 if (YY_START==SingleQuoteString) REJECT;
625 yyextra->stringContext=YY_START;
626 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
630<*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} {
631 if (YY_START==DoubleQuoteString) REJECT;
633 yyextra->stringContext=YY_START;
634 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
638<*>{STRINGPREFIX}?"'" {
639 if (YY_START==SingleQuoteString ||
640 YY_START==DoubleQuoteString ||
641 YY_START==TripleString)
646 yyextra->stringContext=YY_START;
648 BEGIN(SingleQuoteString);
650<*>{STRINGPREFIX}?"\"" {
651 if (YY_START==SingleQuoteString ||
652 YY_START==DoubleQuoteString ||
653 YY_START==TripleString)
658 yyextra->stringContext=YY_START;
660 BEGIN(DoubleQuoteString);
663 yyextra->docBlock+=yytext;
665<DocBlock>"\n"{B}("#") {
666 yyextra->docBlock+=yytext;
static void pop_state(yyscan_t yyscanner)
677 if (YY_START==SingleQuoteString ||
678 YY_START==DoubleQuoteString ||
679 YY_START==TripleString)
683 yy_push_state(YY_START,yyscanner);
685 yyextra->docBlock=yytext;
688 if (YY_START==SingleQuoteString ||
689 YY_START==DoubleQuoteString ||
690 YY_START==TripleString)
699 if (yyextra->endComment)
701 yyextra->endComment=
FALSE;
726 if (YY_START==DocBlock)
742 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
747 auto it = yyextra->codeClassMap.
find(ltype.
str());
748 if (it!=yyextra->codeClassMap.end())
750 yyextra->theVarContext.addVariable(lname,std::move(it->second));
754 const ClassDef *varType = getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,ltype);
761 if (!yyextra->theVarContext.atGlobalScope())
774 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
775 int inputPosition = yyextra->inputPosition;
776 const char *s = yyextra->inputString + inputPosition;
778 while( c < max_size && *s )
783 yyextra->inputPosition += c;
795 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
797 if (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
799 while (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
802 yyextra->indents.pop();
804 yyextra->currentMemberDef=
nullptr;
805 if (yyextra->currentDefinition)
806 yyextra->currentDefinition=yyextra->currentDefinition->getOuterScope();
811 if (!yyextra->indents.empty())
826 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
827 const char *p=yyextra->inputString;
833 if (c==
'\n') count++;
835 if (p>yyextra->inputString && *(p-1)!=
'\n')
847 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
850 if (yyextra->searchCtx)
875 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
882 QCString clName=className+templSpec;
884 if (!yyextra->classScope.isEmpty())
886 cd=yyextra->symbolResolver.resolveClass(d,yyextra->classScope+
"::"+clName,
true);
890 cd=yyextra->symbolResolver.resolveClass(d,clName,
true);
906 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
907 while (!yyextra->foldStack.empty())
909 const Definition *dd = yyextra->foldStack.back();
912 yyextra->code->endFold();
914 yyextra->foldStack.pop_back();
925 if (endLine!=-1 && startLine!=endLine &&
933 (yyextra->foldStack.empty() || yyextra->foldStack.back()->getEndBodyLine()!=startLine))
936 yyextra->code->startFold(yyextra->yyLineNr,
"",
"");
937 yyextra->foldStack.push_back(d);
951 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
953 if (yyextra->sourceFileDef && yyextra->lineNumbers)
959 const Definition *d = yyextra->sourceFileDef->getSourceDefinition(yyextra->yyLineNr);
965 yyextra->currentDefinition = d;
966 yyextra->currentMemberDef = yyextra->sourceFileDef->getSourceMember(yyextra->yyLineNr);
967 yyextra->insideBody =
false;
968 yyextra->endComment =
FALSE;
969 yyextra->searchingForBody =
TRUE;
970 yyextra->realScope = d->
name();
971 yyextra->classScope = d->
name();
973 yyextra->bodyCurlyCount = 0;
975 lineAnchor.
sprintf(
"l%05d",yyextra->yyLineNr);
976 if (yyextra->currentMemberDef)
979 yyextra->code->writeLineNumber(yyextra->currentMemberDef->getReference(),
980 yyextra->currentMemberDef->getOutputFileBase(),
981 yyextra->currentMemberDef->anchor(),yyextra->yyLineNr,
982 !yyextra->includeCodeFragment);
991 !yyextra->includeCodeFragment);
1003 !yyextra->includeCodeFragment);
1006 yyextra->code->startCodeLine(yyextra->yyLineNr);
1007 yyextra->insideCodeLine=
true;
1009 if (yyextra->currentFontClass)
1011 yyextra->code->startFontClass(yyextra->currentFontClass);
1019 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1020 yyextra->code->codify(text);
1027 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1029 yyextra->code->endCodeLine();
1030 yyextra->insideCodeLine=
false;
1037 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1038 const char *fc = yyextra->currentFontClass;
1039 if (yyextra->insideCodeLine)
1043 if (yyextra->yyLineNr<yyextra->inputLines)
1045 yyextra->currentFontClass = fc;
1061 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1064 yyextra->tooltipManager.addTooltip(d);
1069 if (!sourceTooltips)
1074 const char *p=text.
data();
1079 while ((c=*p++) && c!=
'\n') { }
1082 yyextra->yyLineNr++;
1100 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1103 yyextra->code->startSpecialComment();
1104 yyextra->insideSpecialComment =
true;
1107 if (
qstrcmp(yyextra->currentFontClass,s)!=0)
1110 yyextra->code->startFontClass(s);
1111 yyextra->currentFontClass=s;
1119 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1120 if (yyextra->currentFontClass)
1122 yyextra->code->endFontClass();
1123 yyextra->currentFontClass=
nullptr;
1125 if (specialComment && yyextra->insideSpecialComment)
1127 yyextra->code->endSpecialComment();
1128 yyextra->insideSpecialComment=
false;
1136 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1139 const char *p=text.
data(),*sp=p;
1145 while ((c=*p++) && c!=
'\n') { }
1148 yyextra->yyLineNr++;
1149 size_t l =
static_cast<size_t>(p-sp-1);
1150 yyextra->code->codify(
QCString(sp,l));
1155 yyextra->code->codify(sp);
1171 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1189 if (yyextra->currentDefinition && yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1211 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1216 if (!yyextra->curClassName.isEmpty())
1219 c.
prepend(yyextra->curClassName);
1238 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1242 if (className.
isEmpty())
return;
1244 DBG_CTX((stderr,
"generateClassOrGlobalLink(className=%s)\n",
qPrint(className)));
1251 if ((lcd=yyextra->theVarContext.findVariable(className))==
nullptr)
1253 const Definition *d = yyextra->currentDefinition;
1256 cd = yyextra->symbolResolver.resolveClass(d,
substitute(className,
".",
"::"),
true);
1257 md = yyextra->symbolResolver.getTypedef();
1259 DBG_CTX((stderr,
"d=%s yyextra->sourceFileDef=%s\n",
1261 yyextra->currentDefinition?
qPrint(yyextra->currentDefinition->displayName()):
"<null>"));
1264 if (cd==
nullptr && md==
nullptr)
1273 else if (
getLink(yyscanner,yyextra->classScope,clName,ol,clName))
1283 yyextra->theCallContext.setScope(*lcd);
1286 DBG_CTX((stderr,
"is a local variable cd=%p!\n",cd));
1299 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1307 int scopeEnd = className.
findRev(
".");
1308 if (scopeEnd!=-1 && !typeOnly)
1326 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1349 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1378 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1379 QCString locScope=yyextra->classScope;
1385 locScope=locFunc.
left(i);
1391 auto it = yyextra->codeClassMap.find(locScope.
str());
1392 if (it!=yyextra->codeClassMap.end())
1400 if (
getLink(yyscanner,bcName,locFunc,ol,funcName))
1408 if (!
getLink(yyscanner,locScope,locFunc,ol,funcName))
1422 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1435 if (yyextra->currentMemberDef && yyextra->collectXRefs)
1459 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1465 if (yyextra->currentDefinition)
1468 for (
const auto &p : v)
1474 codify(yyscanner,symName);
1480 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1481 if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
1502 pycodeYYlex_init_extra(&
p->state,&
p->yyscanner);
1511 pycodeYYlex_destroy(
p->yyscanner);
1516 struct yyguts_t *yyg = (
struct yyguts_t*)
p->yyscanner;
1517 yyextra->codeClassMap.clear();
1518 yyextra->currentDefinition =
nullptr;
1519 yyextra->currentMemberDef =
nullptr;
1520 yyextra->doubleStringIsDoc =
FALSE;
1521 yyextra->paramParens = 0;
1522 while (!yyextra->indents.empty()) yyextra->indents.pop();
1530 bool stripCodeComments,
1535 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1543 yyextra->code = &codeOutIntf;
1544 yyextra->inputString = input.
data();
1545 yyextra->inputPosition = 0;
1546 yyextra->currentFontClass =
nullptr;
1547 yyextra->insideCodeLine =
FALSE;
1548 yyextra->searchCtx = options.
searchCtx();
1552 yyextra->exampleBlock = options.
isExample();
1554 yyextra->sourceFileDef = options.
fileDef();
1556 yyextra->symbolResolver.setFileScope(options.
fileDef());
1557 yyextra->foldStack.clear();
1558 yyextra->insideSpecialComment =
false;
1560 if (yyextra->exampleBlock && options.
fileDef()==
nullptr)
1564 yyextra->sourceFileDef = yyextra->exampleFileDef.get();
1566 if (yyextra->sourceFileDef)
1575 pycodeYYrestart(
nullptr,yyscanner);
1577 pycodeYYlex(yyscanner);
1579 if (!yyextra->indents.empty())
1584 if (yyextra->insideCodeLine)
1590 while (!yyextra->foldStack.empty())
1592 yyextra->code->endFold();
1593 yyextra->foldStack.pop_back();
1596 if (yyextra->exampleFileDef)
1599 yyextra->exampleFileDef.reset();
1600 yyextra->sourceFileDef=
nullptr;
1603 yyextra->tooltipManager.writeTooltips(codeOutIntf);
1608 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1609 if ( yyg->yy_start_stack_ptr <= 0 )
1610 warn(yyextra->fileName,yyextra->yyLineNr,
"Unexpected statement '{}'",yytext );
1612 yy_pop_state(yyscanner);
1615#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 writeMultiLineCodeLink(yyscan_t yyscanner, OutputCodeList &ol, const Definition *d, const QCString &text)
static void endCodeLine(yyscan_t yyscanner)
static void nextCodeLine(yyscan_t yyscanner)
static void startCodeLine(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 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 setCurrentDoc(yyscan_t yyscanner, const QCString &anchor)
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)