From 320878afdf87d87745d9e36731ae70b8bc23063d Mon Sep 17 00:00:00 2001
From: albert-github <albert.tests@gmail.com>
Date: Wed, 10 Jun 2020 12:32:24 +0200
Subject: [PATCH] Incorrect label in map of dot files in xhtml

https://github.com/doxygen/doxygen/pull/7840/commits/320878afdf87d87745d9e36731ae70b8bc23063d

When a filename of a file starts with a digit the mapping of the resulting dot files results in message like:
```
Syntax of value for attribute id of map is not valid
```
an id cannot start with a digit, so an "a" is placed in front of it (unconditionally to overcome problems with a double label id i.e filename 087.cpp and a087.cpp).

---
 src/dotfilepatcher.cpp |  2 +-
 src/dotgraph.cpp       |  2 +-
 src/util.cpp           | 10 ++++++++++
 src/util.h             |  1 +
 4 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/dotfilepatcher.cpp b/src/dotfilepatcher.cpp
index e386af9..338be69 100644
--- a/src/dotfilepatcher.cpp
+++ b/src/dotfilepatcher.cpp
@@ -459,7 +459,7 @@ bool DotFilePatcher::run() const
         convertMapFile(tt,map->mapFile,map->relPath,map->urlOnly,map->context);
         if (!result.isEmpty())
         {
-          t << "<map name=\"" << map->label << "\" id=\"" << map->label << "\">" << endl;
+          t << "<map name=\"" << map->label << "\" id=\"" << correctId(map->label) << "\">" << endl;
           t << result;
           t << "</map>" << endl;
         }
diff --git a/src/dotgraph.cpp b/src/dotgraph.cpp
index e622dd4..55ea5ab 100644
--- a/src/dotgraph.cpp
+++ b/src/dotgraph.cpp
@@ -246,7 +246,7 @@ void DotGraph::generateCode(FTextStream &t)
     else // add link to bitmap file with image map
     {
       if (!m_noDivTag) t << "<div class=\"center\">";
-      t << "<img src=\"" << relImgName() << "\" border=\"0\" usemap=\"#" << getMapLabel() << "\" alt=\"" << getImgAltText() << "\"/>";
+      t << "<img src=\"" << relImgName() << "\" border=\"0\" usemap=\"#" << correctId(getMapLabel()) << "\" alt=\"" << getImgAltText() << "\"/>";
       if (!m_noDivTag) t << "</div>";
       t << endl;
       if (m_regenerate || !insertMapFile(t, absMapName(), m_relPath, getMapLabel()))
diff --git a/src/util.cpp b/src/util.cpp
index 6d6112e..e8cf778 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -5382,6 +5382,16 @@ QCString convertToId(const char *s)
   return growBuf.get();
 }
 
+/*! Some strings have been corrected but the requirement regarding the fact
+ *  that an id cannot have a digit at the first position. To overcome problems
+ *  with double labels we always place an "a" in front
+ */
+QCString correctId(QCString s)
+{
+  if (s.isEmpty()) return s;
+  return "a" + s;
+}
+
 /*! Converts a string to an XML-encoded string */
 QCString convertToXML(const char *s, bool keepEntities)
 {
diff --git a/src/util.h b/src/util.h
index 98223b1..54421b2 100644
--- a/src/util.h
+++ b/src/util.h
@@ -278,6 +278,7 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te
 QCString stripScope(const char *name);
 
 QCString convertToId(const char *s);
+QCString correctId(QCString s);
 
 QCString convertToHtml(const char *s,bool keepEntities=TRUE);
 
-- 
2.23.0

