Skip to content

Commit 0cf5653

Browse files
committed
Pass Definition to writeCodeLink
for semantic syntax highlighting
1 parent 53f2a06 commit 0cf5653

22 files changed

+78
-41
lines changed

addon/doxyapp/doxyapp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class XRefDummyCodeGenerator : public CodeOutputInterface
4848
// these are just null functions, they can be used to produce a syntax highlighted
4949
// and cross-linked version of the source code, but who needs that anyway ;-)
5050
void codify(const QCString &) override {}
51-
void writeCodeLink(const QCString &,const QCString &,const QCString &,const QCString &,const QCString &) override {}
51+
void writeCodeLink(const Definition *,const QCString &,const QCString &,const QCString &,const QCString &,const QCString &) override {}
5252
void writeLineNumber(const QCString &,const QCString &,const QCString &,int) override {}
5353
virtual void writeTooltip(const QCString &,const DocLinkInfo &,
5454
const QCString &,const QCString &,const SourceLinkInfo &,

addon/doxyparse/doxyparse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class Doxyparse : public CodeOutputInterface
5454
// these are just null functions, they can be used to produce a syntax highlighted
5555
// and cross-linked version of the source code, but who needs that anyway ;-)
5656
void codify(const QCString &) override {}
57-
void writeCodeLink(const QCString &,const QCString &,const QCString &,const QCString &,const QCString &) override {}
57+
void writeCodeLink(const Definition *,const QCString &,const QCString &,const QCString &,const QCString &,const QCString &) override {}
5858
void startCodeLine(bool) override {}
5959
void endCodeLine() override {}
6060
void writeCodeAnchor(const QCString &) override {}

src/clangparser.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -595,15 +595,15 @@ void ClangTUParser::writeMultiLineCodeLink(CodeOutputInterface &ol,
595595
line++;
596596
*(p-1)='\0';
597597
//printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
598-
ol.writeCodeLink(ref,file,anchor,sp,tooltip);
598+
ol.writeCodeLink(d,ref,file,anchor,sp,tooltip);
599599
ol.endCodeLine();
600600
ol.startCodeLine(TRUE);
601601
writeLineNumber(ol,fd,line);
602602
}
603603
else
604604
{
605605
//printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
606-
ol.writeCodeLink(ref,file,anchor,sp,tooltip);
606+
ol.writeCodeLink(d,ref,file,anchor,sp,tooltip);
607607
done=TRUE;
608608
}
609609
}
@@ -635,7 +635,7 @@ void ClangTUParser::linkInclude(CodeOutputInterface &ol,const FileDef *fd,
635635
}
636636
if (ifd)
637637
{
638-
ol.writeCodeLink(ifd->getReference(),ifd->getOutputFileBase(),QCString(),text,ifd->briefDescriptionAsTooltip());
638+
ol.writeCodeLink(ifd,ifd->getReference(),ifd->getOutputFileBase(),QCString(),text,ifd->briefDescriptionAsTooltip());
639639
}
640640
else
641641
{

src/code.l

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2501,13 +2501,13 @@ static void writeMultiLineCodeLink(yyscan_t yyscanner,CodeOutputInterface &ol,
25012501
{
25022502
yyextra->yyLineNr++;
25032503
DBG_CTX((stderr,"writeCodeLink(%s,%s,%s,%s)\n",qPrint(ref),qPrint(file),qPrint(anchor),qPrint(QCString(sp,p-sp-1))));
2504-
ol.writeCodeLink(ref,file,anchor,QCString(sp,p-sp-1),tooltip);
2504+
ol.writeCodeLink(d,ref,file,anchor,QCString(sp,p-sp-1),tooltip);
25052505
nextCodeLine(yyscanner);
25062506
}
25072507
else
25082508
{
25092509
DBG_CTX((stderr,"writeCodeLink(%s,%s,%s,%s)\n",qPrint(ref),qPrint(file),qPrint(anchor),sp));
2510-
ol.writeCodeLink(ref,file,anchor,QCString(sp),tooltip);
2510+
ol.writeCodeLink(d,ref,file,anchor,QCString(sp),tooltip);
25112511
done=TRUE;
25122512
}
25132513
}

src/docbookgen.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ void DocbookCodeGenerator::codify(const QCString &text)
156156
writeDocbookCodeString(m_t,text,m_col);
157157
}
158158

159-
void DocbookCodeGenerator::writeCodeLink(const QCString &ref,const QCString &file,
159+
void DocbookCodeGenerator::writeCodeLink(const Definition *,
160+
const QCString &ref,const QCString &file,
160161
const QCString &anchor,const QCString &name,
161162
const QCString &tooltip)
162163
{
@@ -165,7 +166,8 @@ void DocbookCodeGenerator::writeCodeLink(const QCString &ref,const QCString &fil
165166
m_col+=name.length();
166167
}
167168

168-
void DocbookCodeGenerator::writeCodeLinkLine(const QCString &,const QCString &file,
169+
void DocbookCodeGenerator::writeCodeLinkLine(const Definition *,
170+
const QCString &,const QCString &file,
169171
const QCString &,const QCString &name,
170172
const QCString &)
171173
{
@@ -232,8 +234,8 @@ void DocbookCodeGenerator::writeLineNumber(const QCString &ref,const QCString &f
232234

233235
if (!fileName.isEmpty() && !m_sourceFileName.isEmpty())
234236
{
235-
writeCodeLinkLine(ref,m_sourceFileName,anchor,lineNumber,QCString());
236-
writeCodeLink(ref,fileName,anchor,lineNumber,QCString());
237+
writeCodeLinkLine(nullptr,ref,m_sourceFileName,anchor,lineNumber,QCString());
238+
writeCodeLink(nullptr,ref,fileName,anchor,lineNumber,QCString());
237239
}
238240
else
239241
{

src/docbookgen.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ class DocbookCodeGenerator : public CodeOutputInterface
3030
QCString sourceFileName() { return m_sourceFileName; }
3131

3232
void codify(const QCString &text);
33-
void writeCodeLink(const QCString &ref,const QCString &file,
33+
void writeCodeLink(const Definition *,
34+
const QCString &ref,const QCString &file,
3435
const QCString &anchor,const QCString &name,
3536
const QCString &tooltip);
36-
void writeCodeLinkLine(const QCString &ref,const QCString &file,
37+
void writeCodeLinkLine(const Definition *,
38+
const QCString &ref,const QCString &file,
3739
const QCString &anchor,const QCString &name,
3840
const QCString &tooltip);
3941
void writeTooltip(const QCString &, const DocLinkInfo &, const QCString &,
@@ -106,10 +108,11 @@ class DocbookGenerator : public OutputGenerator
106108
// --- CodeOutputInterface
107109
void codify(const QCString &text)
108110
{ m_codeGen.codify(text); }
109-
void writeCodeLink(const QCString &ref, const QCString &file,
111+
void writeCodeLink(const Definition *def,
112+
const QCString &ref, const QCString &file,
110113
const QCString &anchor,const QCString &name,
111114
const QCString &tooltip)
112-
{ m_codeGen.writeCodeLink(ref,file,anchor,name,tooltip); }
115+
{ m_codeGen.writeCodeLink(def,ref,file,anchor,name,tooltip); }
113116
void writeLineNumber(const QCString &ref,const QCString &file,const QCString &anchor,int lineNumber)
114117
{ m_codeGen.writeLineNumber(ref,file,anchor,lineNumber); }
115118
void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl,

src/filedef.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,8 @@ class DevNullCodeDocInterface : public CodeOutputInterface
199199
{
200200
public:
201201
virtual void codify(const QCString &) override {}
202-
virtual void writeCodeLink(const QCString &,const QCString &,
202+
virtual void writeCodeLink(const Definition *,
203+
const QCString &,const QCString &,
203204
const QCString &,const QCString &,
204205
const QCString &) override {}
205206
virtual void writeTooltip(const QCString &, const DocLinkInfo &, const QCString &,

src/fortrancode.l

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,13 +1035,13 @@ static void writeMultiLineCodeLink(yyscan_t yyscanner,CodeOutputInterface &ol,
10351035
{
10361036
yyextra->yyLineNr++;
10371037
//printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
1038-
ol.writeCodeLink(ref,file,anchor,QCString(sp,p-sp-1),tooltip);
1038+
ol.writeCodeLink(d,ref,file,anchor,QCString(sp,p-sp-1),tooltip);
10391039
nextCodeLine(yyscanner);
10401040
}
10411041
else
10421042
{
10431043
//printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
1044-
ol.writeCodeLink(ref,file,anchor,sp,tooltip);
1044+
ol.writeCodeLink(d,ref,file,anchor,sp,tooltip);
10451045
done=TRUE;
10461046
}
10471047
}

src/htmlgen.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,12 +720,28 @@ void HtmlCodeGenerator::writeLineNumber(const QCString &ref,const QCString &file
720720
m_col=0;
721721
}
722722

723-
void HtmlCodeGenerator::writeCodeLink(const QCString &ref,const QCString &f,
723+
void HtmlCodeGenerator::writeCodeLink(const Definition *def,
724+
const QCString &ref,const QCString &f,
724725
const QCString &anchor, const QCString &name,
725726
const QCString &tooltip)
726727
{
727728
//printf("writeCodeLink(ref=%s,f=%s,anchor=%s,name=%s,tooltip=%s)\n",ref,f,anchor,name,tooltip);
728-
_writeCodeLink("code",ref,f,anchor,name,tooltip);
729+
auto getClassNames = [](Definition::DefType tp) {
730+
switch (tp) {
731+
case Definition::DefType::TypeClass: return "highlightclass code";
732+
case Definition::DefType::TypeFile: return "highlightfile code";
733+
case Definition::DefType::TypeNamespace: return "highlightnamespace code";
734+
case Definition::DefType::TypeMember: return "highlightmember code";
735+
case Definition::DefType::TypeGroup: return "highlightgroup code";
736+
case Definition::DefType::TypePackage: return "highlightpackage code";
737+
case Definition::DefType::TypePage: return "highlightpage code";
738+
case Definition::DefType::TypeDir: return "highlightdir code";
739+
case Definition::DefType::TypeConcept: return "highlightconcept code";
740+
default: return "code";
741+
}
742+
};
743+
const auto classes = def ? getClassNames(def->definitionType()) : "code";
744+
_writeCodeLink(classes,ref,f,anchor,name,tooltip);
729745
}
730746

731747
void HtmlCodeGenerator::_writeCodeLink(const QCString &className,

src/htmlgen.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ class HtmlCodeGenerator : public CodeOutputInterface
2727
void setId(int id) { m_id = id; }
2828
void setRelativePath(const QCString &path);
2929
void codify(const QCString &text);
30-
void writeCodeLink(const QCString &ref,const QCString &file,
30+
void writeCodeLink(const Definition *def,
31+
const QCString &ref,const QCString &file,
3132
const QCString &anchor,const QCString &name,
3233
const QCString &tooltip);
3334
void writeTooltip(const QCString &id,
@@ -89,10 +90,11 @@ class HtmlGenerator : public OutputGenerator
8990
// ---- CodeOutputInterface
9091
void codify(const QCString &text)
9192
{ m_codeGen.codify(text); }
92-
void writeCodeLink(const QCString &ref,const QCString &file,
93+
void writeCodeLink(const Definition *def,
94+
const QCString &ref,const QCString &file,
9395
const QCString &anchor,const QCString &name,
9496
const QCString &tooltip)
95-
{ m_codeGen.writeCodeLink(ref,file,anchor,name,tooltip); }
97+
{ m_codeGen.writeCodeLink(def,ref,file,anchor,name,tooltip); }
9698
void writeLineNumber(const QCString &ref,const QCString &file,const QCString &anchor,int lineNumber)
9799
{ m_codeGen.writeLineNumber(ref,file,anchor,lineNumber); }
98100
void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl,

0 commit comments

Comments
 (0)