summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2021-05-02 09:26:43 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2021-05-02 09:26:43 (GMT)
commitc2e278d30d613de23f6ecb86be3a562d20e82fb1 (patch)
tree3b60d4d974b5a3059b56aa4ba5ea16375adb6aad
parent4784ecea4d15c34af41c1adaa188159b124a1ed0 (diff)
parent42790d151628fb9e0dd7974b29d6794b7ce98b38 (diff)
downloadDoxygen-c2e278d30d613de23f6ecb86be3a562d20e82fb1.zip
Doxygen-c2e278d30d613de23f6ecb86be3a562d20e82fb1.tar.gz
Doxygen-c2e278d30d613de23f6ecb86be3a562d20e82fb1.tar.bz2
Merge branch 'albert-github-feature/bug_code_lang'
-rw-r--r--src/docbookvisitor.cpp9
-rw-r--r--src/htmldocvisitor.cpp2
-rw-r--r--src/latexdocvisitor.cpp2
-rw-r--r--src/mandocvisitor.cpp4
-rw-r--r--src/rtfdocvisitor.cpp4
-rw-r--r--src/util.cpp77
-rw-r--r--src/util.h5
-rw-r--r--src/xmldocvisitor.cpp4
8 files changed, 72 insertions, 35 deletions
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index e25c178..aa74e47 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -309,10 +309,15 @@ void DocbookDocVisitor::visit(DocVerbatim *s)
{
DB_VIS_C
if (m_hide) return;
- SrcLangExt langExt = getLanguageFromFileName(m_langExt);
+ QCString lang = m_langExt;
+ if (!s->language().isEmpty()) // explicit language setting
+ {
+ lang = s->language();
+ }
+ SrcLangExt langExt = getLanguageFromCodeLang(lang);
switch(s->type())
{
- case DocVerbatim::Code: // fall though
+ case DocVerbatim::Code:
m_t << "<literallayout><computeroutput>";
getCodeParser(m_langExt).parseCode(m_ci,s->context(),
s->text(),
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index a8544e9..4bed69a 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -502,7 +502,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
{
lang = s->language();
}
- SrcLangExt langExt = getLanguageFromFileName(lang);
+ SrcLangExt langExt = getLanguageFromCodeLang(lang);
switch(s->type())
{
case DocVerbatim::Code:
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 304d6eb..3e48dc5 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -346,7 +346,7 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
lang = s->language();
}
- SrcLangExt langExt = getLanguageFromFileName(lang);
+ SrcLangExt langExt = getLanguageFromCodeLang(lang);
switch(s->type())
{
case DocVerbatim::Code:
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 93ae712..8d41d63 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -196,10 +196,10 @@ void ManDocVisitor::visit(DocVerbatim *s)
{
lang = s->language();
}
- SrcLangExt langExt = getLanguageFromFileName(lang);
+ SrcLangExt langExt = getLanguageFromCodeLang(lang);
switch (s->type())
{
- case DocVerbatim::Code: // fall though
+ case DocVerbatim::Code:
if (!m_firstCol) m_t << "\n";
m_t << ".PP\n";
m_t << ".nf\n";
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 1fb9bab..cec672e 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -292,10 +292,10 @@ void RTFDocVisitor::visit(DocVerbatim *s)
{
lang = s->language();
}
- SrcLangExt langExt = getLanguageFromFileName(lang);
+ SrcLangExt langExt = getLanguageFromCodeLang(lang);
switch(s->type())
{
- case DocVerbatim::Code: // fall though
+ case DocVerbatim::Code:
m_t << "{\n";
m_t << "\\par\n";
m_t << rtf_Style_Reset << getStyle("CodeExample");
diff --git a/src/util.cpp b/src/util.cpp
index f2d06ee..9941d09 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -5353,30 +5353,31 @@ static struct Lang2ExtMap
const char *langName;
const char *parserName;
SrcLangExt parserId;
+ const char *defExt;
}
g_lang2extMap[] =
{
// language parser parser option
- { "idl", "c", SrcLangExt_IDL },
- { "java", "c", SrcLangExt_Java },
- { "javascript", "c", SrcLangExt_JS },
- { "csharp", "c", SrcLangExt_CSharp },
- { "d", "c", SrcLangExt_D },
- { "php", "c", SrcLangExt_PHP },
- { "objective-c", "c", SrcLangExt_ObjC },
- { "c", "c", SrcLangExt_Cpp },
- { "c++", "c", SrcLangExt_Cpp },
- { "slice", "c", SrcLangExt_Slice },
- { "python", "python", SrcLangExt_Python },
- { "fortran", "fortran", SrcLangExt_Fortran },
- { "fortranfree", "fortranfree", SrcLangExt_Fortran },
- { "fortranfixed", "fortranfixed", SrcLangExt_Fortran },
- { "vhdl", "vhdl", SrcLangExt_VHDL },
- { "xml", "xml", SrcLangExt_XML },
- { "sql", "sql", SrcLangExt_SQL },
- { "md", "md", SrcLangExt_Markdown },
- { "lex", "lex", SrcLangExt_Lex },
- { 0, 0, (SrcLangExt)0 }
+ { "idl", "c", SrcLangExt_IDL, ".idl" },
+ { "java", "c", SrcLangExt_Java, ".java"},
+ { "javascript", "c", SrcLangExt_JS, ".js" },
+ { "csharp", "c", SrcLangExt_CSharp, ".cs" },
+ { "d", "c", SrcLangExt_D, ".d" },
+ { "php", "c", SrcLangExt_PHP, ".php" },
+ { "objective-c", "c", SrcLangExt_ObjC, ".m" },
+ { "c", "c", SrcLangExt_Cpp, ".c" },
+ { "c++", "c", SrcLangExt_Cpp, ".cpp" },
+ { "slice", "c", SrcLangExt_Slice, ".ice" },
+ { "python", "python", SrcLangExt_Python, ".py" },
+ { "fortran", "fortran", SrcLangExt_Fortran, ".f" },
+ { "fortranfree", "fortranfree", SrcLangExt_Fortran, ".f90" },
+ { "fortranfixed", "fortranfixed", SrcLangExt_Fortran, ".f" },
+ { "vhdl", "vhdl", SrcLangExt_VHDL, ".vhdl"},
+ { "xml", "xml", SrcLangExt_XML, ".xml" },
+ { "sql", "sql", SrcLangExt_SQL, ".sql" },
+ { "md", "md", SrcLangExt_Markdown, ".md" },
+ { "lex", "lex", SrcLangExt_Lex, ".l" },
+ { 0, 0, (SrcLangExt)0, 0 }
};
bool updateLanguageMapping(const QCString &extension,const QCString &language)
@@ -5484,7 +5485,7 @@ void addCodeOnlyMappings()
updateLanguageMapping(".sql", "sql");
}
-SrcLangExt getLanguageFromFileName(const QCString& fileName)
+SrcLangExt getLanguageFromFileName(const QCString& fileName, SrcLangExt defLang)
{
FileInfo fi(fileName.str());
// we need only the part after the last ".", newer implementations of FileInfo have 'suffix()' for this.
@@ -5498,10 +5499,40 @@ SrcLangExt getLanguageFromFileName(const QCString& fileName)
return (SrcLangExt)it->second;
}
//printf("getLanguageFromFileName(%s) not found!\n",qPrint(fileName));
- return SrcLangExt_Cpp; // not listed => assume C-ish language.
+ return defLang; // not listed => assume C-ish language.
}
-QCString getFileNameExtension(QCString fn)
+/// Routine to handle the language attribute of the `\code` command
+SrcLangExt getLanguageFromCodeLang(QCString &fileName)
+{
+ // try the extension
+ SrcLangExt lang = getLanguageFromFileName(fileName, SrcLangExt_Unknown);
+ if (lang == SrcLangExt_Unknown)
+ {
+ // try the language names
+ const Lang2ExtMap *p = g_lang2extMap;
+ QCString langName = fileName.lower();
+ if (langName.at(0)=='.') langName = langName.mid(1);
+ while (p->langName)
+ {
+ if (langName==p->langName)
+ {
+ // found the language
+ lang = p->parserId;
+ fileName = p->defExt;
+ break;
+ }
+ p++;
+ }
+ if (!p->langName)
+ {
+ return SrcLangExt_Cpp;
+ }
+ }
+ return lang;
+}
+
+QCString getFileNameExtension(const QCString &fn)
{
if (fn.isEmpty()) return "";
int lastDot = fn.findRev('.');
diff --git a/src/util.h b/src/util.h
index aaa240c..4dc02d0 100644
--- a/src/util.h
+++ b/src/util.h
@@ -331,8 +331,9 @@ bool findAndRemoveWord(QCString &s,const char *word);
QCString stripLeadingAndTrailingEmptyLines(const QCString &s,int &docLine);
bool updateLanguageMapping(const QCString &extension,const QCString &parser);
-SrcLangExt getLanguageFromFileName(const QCString& fileName);
-QCString getFileNameExtension(QCString fn);
+SrcLangExt getLanguageFromFileName(const QCString& fileName, SrcLangExt defLang=SrcLangExt_Cpp);
+SrcLangExt getLanguageFromCodeLang(QCString &fileName);
+QCString getFileNameExtension(const QCString &fn);
void initDefaultExtensionMapping();
void addCodeOnlyMappings();
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 757ae76..3a43306 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -245,10 +245,10 @@ void XmlDocVisitor::visit(DocVerbatim *s)
{
lang = s->language();
}
- SrcLangExt langExt = getLanguageFromFileName(lang);
+ SrcLangExt langExt = getLanguageFromCodeLang(lang);
switch(s->type())
{
- case DocVerbatim::Code: // fall though
+ case DocVerbatim::Code:
m_t << "<programlisting";
if (!s->language().isEmpty())
m_t << " filename=\"" << lang << "\">";