22%option never-interactive
23%option prefix="pycodeYY"
25%option extra-type="struct pycodeYY_state *"
30#define YY_TYPEDEF_YY_SCANNER_T
43#include <unordered_map>
64#define DBG_CTX(x) do { } while(0)
67#define YY_NO_UNISTD_H 1
141 const DString &clName,
bool typeOnly=
false);
160#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.
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
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.
std::vector< std::string > StringVector
static const ClassDef * stripClassName(yyscan_t yyscanner, const DString &s, Definition *d)
static void endCodeLine(yyscan_t yyscanner)
static void nextCodeLine(yyscan_t yyscanner)
static void startCodeLine(yyscan_t yyscanner)
static void setCurrentDoc(yyscan_t yyscanner, const DString &anchor)
static void incrementFlowKeyWordCount(yyscan_t yyscanner)
static int yyread(yyscan_t yyscanner, char *buf, int max_size)
static bool findMemberLink(yyscan_t yyscanner, OutputCodeList &ol, const Definition *sym, const DString &symName)
static int countLines(yyscan_t yyscanner)
static const char * stateToString(int state)
static void codify(yyscan_t yyscanner, const DString &text)
static void generateClassOrGlobalLink(yyscan_t yyscanner, OutputCodeList &ol, const DString &clName, bool typeOnly=false)
static void pop_state(yyscan_t yyscanner)
static void generateFunctionLink(yyscan_t yyscanner, OutputCodeList &ol, const DString &funcName)
static void addToSearchIndex(yyscan_t yyscanner, const DString &text)
static bool getLinkInScope(yyscan_t yyscanner, const DString &c, const DString &m, const DString &memberText, OutputCodeList &ol, const DString &text)
static void codifyLines(yyscan_t yyscanner, const DString &text)
static void startFontClass(yyscan_t yyscanner, const char *s, bool specialComment=false)
static void endFontClass(yyscan_t yyscanner, bool specialComment=false)
static bool getLink(yyscan_t yyscanner, const DString &className, const DString &memberName, OutputCodeList &ol, const DString &text=DString())
static void writeMultiLineCodeLink(yyscan_t yyscanner, OutputCodeList &ol, const Definition *d, const DString &text)
static void adjustScopesAndSuites(yyscan_t yyscanner, unsigned indentLength)
static const char * getLexerFILE()
Web server based search engine.
const FileDef * sourceFileDef
const Definition * currentDefinition
VariableContext theVarContext
int yyLineNr
current line number
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
DString docBlock
contents of all lines of a documentation block
CallContext theCallContext
int inputPosition
read offset during parsing
const char * currentFontClass
A bunch of utility functions.
174LETTER [A-Za-z\x80-\xFF]
175NONEMPTY [A-Za-z0-9_\x80-\xFF]
176EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
177PARAMNONEMPTY [^ \t\n():]
178IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")*
179SCOPE {IDENTIFIER}("."{IDENTIFIER})*
185TRIDOUBLEQUOTE "\"\"\""
186LONGSTRINGCHAR [^\\"']
188LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ})
189SMALLQUOTE ("\"\""|"\""|"'"|"''")
190LONGSTRINGBLOCK ({LONGSTRINGITEM}|{SMALLQUOTE})
192STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
193KEYWORD ("lambda"|"import"|"class"|"assert"|"with"|"as"|"from"|"global"|"async"|"def"|"True"|"False")
194FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
224 BEGIN( FunctionDec );
static void startFontClass(yyscan_t yyscanner, const char *s, bool specialComment=false)
static void endFontClass(yyscan_t yyscanner, bool specialComment=false)
226 "async"{BB}"def"{BB} {
230 BEGIN( FunctionDec );
244 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
245 codify(yyscanner,
"self.");
248 "self."{IDENTIFIER}/"(" {
249 codify(yyscanner,
"self.");
252 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
253 codify(yyscanner,
"self.");
256 "self."{IDENTIFIER} {
257 codify(yyscanner,
"self.");
260 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
264 "cls."{IDENTIFIER}/"(" {
268 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
276 "@"{SCOPE}{CALLANY}? {
283<ClassDec>{IDENTIFIER} {
286 yyextra->curClassName = yytext;
287 yyextra->curClassBases.clear();
288 BEGIN( ClassInheritance );
296 ({IDENTIFIER}".")*{IDENTIFIER} {
310 yyextra->curClassBases.emplace_back(yytext);
311 yyextra->insideBody =
true;
313 yyextra->insideBody =
false;
327 for (
const auto &s : yyextra->curClassBases)
329 const ClassDef *baseDefToAdd =
nullptr;
331 auto it = yyextra->codeClassMap.find(s);
332 if (it != yyextra->codeClassMap.end())
334 baseDefToAdd =
toClassDef(it->second.globalDef());
337 if (baseDefToAdd==
nullptr)
339 baseDefToAdd=yyextra->symbolResolver.resolveClass(yyextra->currentDefinition,s,
true);
342 if (baseDefToAdd && baseDefToAdd->
name()!=yyextra->curClassName)
344 var.localDef()->insertBaseClass(baseDefToAdd->
name());
347 yyextra->codeClassMap.emplace(yyextra->curClassName.str(),std::move(var));
350 yyextra->curClassName.clear();
351 yyextra->curClassBases.clear();
353 yyextra->noSuiteFound =
true;
virtual const DString & name() const =0
ClassDef * toClassDef(Definition *d)
366 BEGIN( FunctionParams );
376 ({IDENTIFIER}|{PARAMNONEMPTY}+) {
static void codifyLines(yyscan_t yyscanner, const DString &text)
395 yyextra->noSuiteFound =
true;
419 ({IDENTIFIER}".")*{IDENTIFIER}/"(" {
420 yyextra->insideBody =
true;
422 yyextra->insideBody =
false;
424 ({IDENTIFIER}".")+{IDENTIFIER} {
425 yyextra->insideBody =
true;
427 yyextra->insideBody =
false;
429 {IDENTIFIER} {
codify(yyscanner,yytext); }
452 yyextra->noSuiteFound =
false;
462 yyextra->noSuiteFound =
false;
470 if (YY_START==SingleQuoteString ||
471 YY_START==DoubleQuoteString ||
472 YY_START==TripleString
477 yy_push_state(YY_START,yyscanner);
479 yyextra->docBlock=yytext;
484 if ( yyextra->noSuiteFound )
487 BEGIN ( SuiteCaptureIndent );
504 yyextra->indents.push(yyleng);
512 {BB}/({NONEMPTY}|{EXPCHAR}) {
529 ""/({NONEMPTY}|{EXPCHAR}) {
541 BEGIN( SuiteMaintain );
557 {STRINGPREFIX}?{TRIDOUBLEQUOTE} {
563 BEGIN(yyextra->stringContext);
580 {STRINGPREFIX}?{TRISINGLEQUOTE} {
586 BEGIN(yyextra->stringContext);
600 if (yyextra->doubleQuote==(yytext[0]==
'"'))
603 BEGIN(yyextra->stringContext);
621<*>{STRINGPREFIX}?{TRISINGLEQUOTE} {
622 if (YY_START==SingleQuoteString) REJECT;
624 yyextra->stringContext=YY_START;
625 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
629<*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} {
630 if (YY_START==DoubleQuoteString) REJECT;
632 yyextra->stringContext=YY_START;
633 yyextra->doubleQuote=yytext[yyleng-1]==
'"';
637<*>{STRINGPREFIX}?"'" {
638 if (YY_START==SingleQuoteString ||
639 YY_START==DoubleQuoteString ||
640 YY_START==TripleString)
645 yyextra->stringContext=YY_START;
647 BEGIN(SingleQuoteString);
649<*>{STRINGPREFIX}?"\"" {
650 if (YY_START==SingleQuoteString ||
651 YY_START==DoubleQuoteString ||
652 YY_START==TripleString)
657 yyextra->stringContext=YY_START;
659 BEGIN(DoubleQuoteString);
662 yyextra->docBlock+=yytext;
664<DocBlock>"\n"{B}("#") {
665 yyextra->docBlock+=yytext;
static void pop_state(yyscan_t yyscanner)
676 if (YY_START==SingleQuoteString ||
677 YY_START==DoubleQuoteString ||
678 YY_START==TripleString)
682 yy_push_state(YY_START,yyscanner);
684 yyextra->docBlock=yytext;
687 if (YY_START==SingleQuoteString ||
688 YY_START==DoubleQuoteString ||
689 YY_START==TripleString)
698 if (yyextra->endComment)
700 yyextra->endComment=
false;
725 if (YY_START==DocBlock)
741 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
746 auto it = yyextra->codeClassMap.
find(ltype.
str());
747 if (it!=yyextra->codeClassMap.end())
749 yyextra->theVarContext.addVariable(lname,std::move(it->second));
753 const ClassDef *varType = getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,ltype);
760 if (!yyextra->theVarContext.atGlobalScope())
773 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
774 int inputPosition = yyextra->inputPosition;
775 const char *s = yyextra->inputString + inputPosition;
777 while( c < max_size && *s )
782 yyextra->inputPosition += c;
794 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
796 if (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
798 while (!yyextra->indents.empty() && indentLength < yyextra->indents.top())
801 yyextra->indents.pop();
803 yyextra->currentMemberDef=
nullptr;
804 if (yyextra->currentDefinition)
805 yyextra->currentDefinition=yyextra->currentDefinition->getOuterScope();
810 if (!yyextra->indents.empty())
825 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
826 const char *p=yyextra->inputString;
832 if (c==
'\n') count++;
834 if (p>yyextra->inputString && *(p-1)!=
'\n')
846 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
849 if (yyextra->searchCtx)
874 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
881 DString clName=className+templSpec;
883 if (!yyextra->classScope.empty())
885 cd=yyextra->symbolResolver.resolveClass(d,yyextra->classScope+
"::"+clName,
true);
889 cd=yyextra->symbolResolver.resolveClass(d,clName,
true);
905 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
906 while (!yyextra->foldStack.empty())
908 const Definition *dd = yyextra->foldStack.back();
911 yyextra->code->endFold();
913 yyextra->foldStack.pop_back();
924 if (endLine!=-1 && startLine!=endLine &&
932 (yyextra->foldStack.empty() || yyextra->foldStack.back()->getEndBodyLine()!=startLine))
935 yyextra->code->startFold(yyextra->yyLineNr,
"",
"");
936 yyextra->foldStack.push_back(d);
950 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
952 if (yyextra->sourceFileDef && yyextra->lineNumbers)
958 const Definition *d = yyextra->sourceFileDef->getSourceDefinition(yyextra->yyLineNr);
964 yyextra->currentDefinition = d;
965 yyextra->currentMemberDef = yyextra->sourceFileDef->getSourceMember(yyextra->yyLineNr);
966 yyextra->insideBody =
false;
967 yyextra->endComment =
false;
968 yyextra->searchingForBody =
true;
969 yyextra->realScope = d->
name();
970 yyextra->classScope = d->
name();
972 yyextra->bodyCurlyCount = 0;
974 lineAnchor.
sprintf(
"l%05d",yyextra->yyLineNr);
975 if (yyextra->currentMemberDef)
978 yyextra->code->writeLineNumber(yyextra->currentMemberDef->getReference(),
979 yyextra->currentMemberDef->getOutputFileBase(),
980 yyextra->currentMemberDef->anchor(),yyextra->yyLineNr,
981 !yyextra->includeCodeFragment);
990 !yyextra->includeCodeFragment);
1002 !yyextra->includeCodeFragment);
1005 yyextra->code->startCodeLine(yyextra->yyLineNr);
1006 yyextra->insideCodeLine=
true;
1008 if (yyextra->currentFontClass)
1010 yyextra->code->startFontClass(yyextra->currentFontClass);
1018 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1019 yyextra->code->codify(text);
1026 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1028 yyextra->code->endCodeLine();
1029 yyextra->insideCodeLine=
false;
1036 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1037 const char *fc = yyextra->currentFontClass;
1038 if (yyextra->insideCodeLine)
1042 if (yyextra->yyLineNr<yyextra->inputLines)
1044 yyextra->currentFontClass = fc;
1060 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1061 if (text.
empty())
return;
1063 yyextra->tooltipManager.addTooltip(d);
1068 if (!sourceTooltips)
1073 const char *p=text.
data();
1078 while ((c=*p++) && c!=
'\n') { }
1081 yyextra->yyLineNr++;
1099 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1102 yyextra->code->startSpecialComment();
1103 yyextra->insideSpecialComment =
true;
1106 if (
dstrcmp(yyextra->currentFontClass,s)!=0)
1109 yyextra->code->startFontClass(s);
1110 yyextra->currentFontClass=s;
1118 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1119 if (yyextra->currentFontClass)
1121 yyextra->code->endFontClass();
1122 yyextra->currentFontClass=
nullptr;
1124 if (specialComment && yyextra->insideSpecialComment)
1126 yyextra->code->endSpecialComment();
1127 yyextra->insideSpecialComment=
false;
1135 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1136 if (text.
empty())
return;
1138 const char *p=text.
data(),*sp=p;
1144 while ((c=*p++) && c!=
'\n') { }
1147 yyextra->yyLineNr++;
1148 size_t l =
static_cast<size_t>(p-sp-1);
1149 yyextra->code->codify(
DString(sp,l));
1154 yyextra->code->codify(sp);
1170 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1188 if (yyextra->currentDefinition && yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1210 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1215 if (!yyextra->curClassName.empty())
1218 c.
prepend(yyextra->curClassName);
1237 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1241 if (className.
empty())
return;
1243 DBG_CTX((stderr,
"generateClassOrGlobalLink(className=%s)\n",
qPrint(className)));
1250 if ((lcd=yyextra->theVarContext.findVariable(className))==
nullptr)
1252 const Definition *d = yyextra->currentDefinition;
1255 cd = yyextra->symbolResolver.resolveClass(d,
substitute(className,
".",
"::"),
true);
1256 md = yyextra->symbolResolver.getTypedef();
1258 DBG_CTX((stderr,
"d=%s yyextra->sourceFileDef=%s\n",
1260 yyextra->currentDefinition?
qPrint(yyextra->currentDefinition->displayName()):
"<null>"));
1263 if (cd==
nullptr && md==
nullptr)
1272 else if (
getLink(yyscanner,yyextra->classScope,clName,ol,clName))
1282 yyextra->theCallContext.setScope(*lcd);
1285 DBG_CTX((stderr,
"is a local variable cd=%p!\n",cd));
1298 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1306 size_t scopeEnd = className.
rfind(
".");
1325 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1348 yyextra->currentMemberDef && yyextra->collectXRefs && yyextra->insideBody)
1377 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1378 DString locScope=yyextra->classScope;
1381 size_t i=locFunc.
rfind(
"::");
1384 locScope=locFunc.
left(i);
1388 if (!locScope.
empty())
1390 auto it = yyextra->codeClassMap.find(locScope.
str());
1391 if (it!=yyextra->codeClassMap.end())
1399 if (
getLink(yyscanner,bcName,locFunc,ol,funcName))
1407 if (!
getLink(yyscanner,locScope,locFunc,ol,funcName))
1421 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1434 if (yyextra->currentMemberDef && yyextra->collectXRefs)
1443 if (cd==thisCd || (thisCd && thisCd->
isBaseClass(cd,
true)))
1458 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1464 if (yyextra->currentDefinition)
1467 for (
const auto &p : v)
1473 codify(yyscanner,symName);
1479 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1480 if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
1501 pycodeYYlex_init_extra(&
p->state,&
p->yyscanner);
1510 pycodeYYlex_destroy(
p->yyscanner);
1515 struct yyguts_t *yyg = (
struct yyguts_t*)
p->yyscanner;
1516 yyextra->codeClassMap.clear();
1517 yyextra->currentDefinition =
nullptr;
1518 yyextra->currentMemberDef =
nullptr;
1519 yyextra->doubleStringIsDoc =
false;
1520 yyextra->paramParens = 0;
1521 while (!yyextra->indents.empty()) yyextra->indents.pop();
1529 bool stripCodeComments,
1534 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1539 if (input.
empty())
return;
1542 yyextra->code = &codeOutIntf;
1543 yyextra->inputString = input.
data();
1544 yyextra->inputPosition = 0;
1545 yyextra->currentFontClass =
nullptr;
1546 yyextra->insideCodeLine =
false;
1547 yyextra->searchCtx = options.
searchCtx();
1551 yyextra->exampleBlock = options.
isExample();
1553 yyextra->sourceFileDef = options.
fileDef();
1555 yyextra->symbolResolver.setFileScope(options.
fileDef());
1556 yyextra->foldStack.clear();
1557 yyextra->insideSpecialComment =
false;
1559 if (yyextra->exampleBlock && options.
fileDef()==
nullptr)
1563 yyextra->sourceFileDef = yyextra->exampleFileDef.get();
1565 if (yyextra->sourceFileDef)
1574 pycodeYYrestart(
nullptr,yyscanner);
1576 pycodeYYlex(yyscanner);
1578 if (!yyextra->indents.empty())
1583 if (yyextra->insideCodeLine)
1589 while (!yyextra->foldStack.empty())
1591 yyextra->code->endFold();
1592 yyextra->foldStack.pop_back();
1595 if (yyextra->exampleFileDef)
1598 yyextra->exampleFileDef.reset();
1599 yyextra->sourceFileDef=
nullptr;
1602 yyextra->tooltipManager.writeTooltips(codeOutIntf);
1607 struct yyguts_t *yyg = (
struct yyguts_t*)yyscanner;
1608 if ( yyg->yy_start_stack_ptr <= 0 )
1609 warn(yyextra->fileName,yyextra->yyLineNr,
"Unexpected statement '{}'",yytext );
1611 yy_pop_state(yyscanner);
1614#include "pycode.l.h"
virtual const MemberDef * getMemberByName(const DString &) const =0
Returns the member with the given name.
virtual int isBaseClass(const ClassDef *bcd, bool followInstances, const DString &templSpec=DString()) const =0
Returns true iff bcd is a direct or indirect base class of this class.
size_t rfind(char c, size_t pos=npos) const
DString mid(size_t index, size_t len=npos) const
DString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple internal white...
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
DString & prepend(const char *s)
size_t find(char c, size_t pos=0) const
DString & sprintf(const char *format,...)
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
DString left(size_t len) const
const std::string & str() const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
static bool isFlagSet(const DebugMask mask)
virtual int getEndBodyLine() const =0
virtual bool isLinkable() const =0
virtual DefType definitionType() const =0
virtual DString briefDescriptionAsTooltip() const =0
virtual const FileDef * getBodyDef() const =0
virtual bool isLinkableInProject() const =0
virtual DString displayName(bool includeScope=true) const =0
virtual DString anchor() const =0
virtual int getStartDefLine() const =0
virtual DString getReference() const =0
virtual CodeSymbolType codeSymbolType() const =0
virtual Definition * getOuterScope() const =0
virtual DString getOutputFileBase() const =0
static NamespaceDefMutable * globalScope
static std::mutex countFlowKeywordsMutex
static SymbolMap< Definition > * symbolMap
static SearchIndexIntf searchIndex
virtual DString fileName() const =0
std::vector< DString > baseClasses() const
virtual GroupDef * getGroupDef()=0
virtual DString typeString() const =0
virtual void incrementFlowKeyWordCount()=0
An abstract interface of a namespace symbol.
virtual const MemberDef * getMemberByName(const DString &) const =0
void writeCodeLink(CodeSymbolType type, const DString &ref, const DString &file, const DString &anchor, const DString &name, const DString &tooltip)
void stripCodeComments(bool b)
void resetCodeParserState() override
Resets the state of the code parser.
void parseCode(OutputCodeList &codeOutIntf, const DString &scopeName, const DString &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.
~PythonCodeParser() override
std::unique_ptr< Private > p
void addWord(const DString &word, bool hiPriority)
void setCurrentDoc(const Definition *ctx, const DString &anchor, bool isSourceFile)
const VectorPtr & find(const DString &name)
ClassDef * getClass(const DString &n)
#define Config_getBool(name)
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
int dstrcmp(const char *str1, const char *str2)
const char * qPrint(const char *s)
std::unique_ptr< FileDef > createFileDef(const DString &p, const DString &n, const DString &ref, const DString &dn)
static void writeMultiLineCodeLink(yyscan_t yyscanner, OutputCodeList &ol, Definition *d, const DString &text)
static void endCodeLine(yyscan_t yyscanner)
static bool getLink(yyscan_t yyscanner, const UseMap &useMap, const DString &memberText, OutputCodeList &ol, const DString &text)
static void nextCodeLine(yyscan_t yyscanner)
static void startCodeLine(yyscan_t yyscanner)
static void setCurrentDoc(yyscan_t yyscanner, const DString &anchor)
static int countLines(yyscan_t yyscanner)
static void addToSearchIndex(yyscan_t yyscanner, const DString &text)
static void codeFolding(yyscan_t yyscanner, const Definition *d)
void addDocCrossReference(const MemberDef *s, const MemberDef *d)
MemberDefMutable * toMemberDefMutable(Definition *d)
MemberDef * toMemberDef(Definition *d)
#define warn(file, line, fmt,...)
NamespaceDef * getResolvedNamespace(const DString &name)
Options to configure the code parser.
const Definition * searchCtx() const
DString exampleName() const
const FileDef * fileDef() const
bool showLineNumbers() const
bool inlineFragment() const
bool collectXRefs() const
DString removeRedundantWhiteSpace(const DString &s)
GetDefResult getDefs(const GetDefInput &input)
int extractClassNameFromType(const DString &type, int &pos, DString &name, DString &templSpec, SrcLangExt lang)