From 48739839e4e260a7d3024e2de406c6656e75360a Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 20 Feb 2009 14:55:28 +0100
Subject: [PATCH] Improved qdoc support.

---
 src/plugins/cpptools/cppdoxygen.cpp | 1499 +++++++++++++++++++++++++--
 src/plugins/cpptools/cppdoxygen.h   |  349 ++++---
 2 files changed, 1645 insertions(+), 203 deletions(-)

diff --git a/src/plugins/cpptools/cppdoxygen.cpp b/src/plugins/cpptools/cppdoxygen.cpp
index c98441a2492..886889c7c7f 100644
--- a/src/plugins/cpptools/cppdoxygen.cpp
+++ b/src/plugins/cpptools/cppdoxygen.cpp
@@ -50,7 +50,6 @@ using namespace CppTools;
 
 static const char *doxy_token_spell[] = {
     "identifier",
-
     "arg",
     "attention",
     "author",
@@ -94,7 +93,6 @@ static const char *doxy_token_spell[] = {
     "verbatim",
     "warning",
     "xmlonly",
-
     "a",
     "addtogroup",
     "anchor",
@@ -131,11 +129,8 @@ static const char *doxy_token_spell[] = {
     "verbinclude",
     "version",
     "xrefitem",
-
     "param",
-
     "image",
-
     "defgroup",
     "page",
     "paragraph",
@@ -145,7 +140,6 @@ static const char *doxy_token_spell[] = {
     "subsubsection",
     "union",
     "weakgroup",
-
     "addindex",
     "brief",
     "bug",
@@ -164,22 +158,111 @@ static const char *doxy_token_spell[] = {
     "typedef",
     "until",
     "var",
-
-    // qdoc
+    "abstract",
+    "badcode",
+    "basename",
+    "bold",
+    "caption",
+    "chapter",
+    "codeline",
+    "dots",
+    "endabstract",
+    "endchapter",
+    "endfootnote",
+    "endlegalese",
     "endlist",
+    "endomit",
+    "endpart",
+    "endquotation",
+    "endraw",
+    "endsection1",
+    "endsection2",
+    "endsection3",
+    "endsection4",
+    "endsidebar",
     "endtable",
+    "expire",
+    "footnote",
+    "generatelist",
+    "granularity",
     "header",
     "i",
+    "index",
+    "inlineimage",
+    "keyword",
     "l",
+    "legalese",
     "list",
-    "mainclass",
+    "meta",
     "newcode",
     "o",
     "oldcode",
-    "property",
+    "omit",
+    "omitvalue",
+    "part",
+    "printline",
+    "printto",
+    "printuntil",
+    "quotation",
+    "quotefile",
+    "quotefromfile",
+    "quotefunction",
+    "raw",
     "row",
     "section1",
-    "table"
+    "section2",
+    "section3",
+    "section4",
+    "sidebar",
+    "skipto",
+    "skipuntil",
+    "snippet",
+    "sub",
+    "sup",
+    "table",
+    "tableofcontents",
+    "target",
+    "tt",
+    "underline",
+    "unicode",
+    "value",
+    "contentspage",
+    "externalpage",
+    "group",
+    "headerfile",
+    "indexpage",
+    "inheaderfile",
+    "macro",
+    "module",
+    "nextpage",
+    "previouspage",
+    "property",
+    "reimp",
+    "service",
+    "startpage",
+    "variable",
+    "compat",
+    "inmodule",
+    "mainclass",
+    "nonreentrant",
+    "obsolete",
+    "preliminary",
+    "inpublicgroup",
+    "reentrant",
+    "subtitle",
+    "threadsafe",
+    "title",
+    "corelib",
+    "uitools",
+    "gui",
+    "network",
+    "opengl",
+    "qt3support",
+    "svg",
+    "sql",
+    "qtestlib",
+    "webkit",
+    "xml"
 };
 
 const char *CppTools::doxygenTagSpell(int index)
@@ -242,6 +325,11 @@ static inline int classify2(const QChar *s) {
       return T_DOXY_SA;
     }
   }
+  else if (s[0].unicode() == 't') {
+    if (s[1].unicode() == 't') {
+      return T_DOXY_TT;
+    }
+  }
   return T_DOXY_IDENTIFIER;
 }
 
@@ -272,6 +360,13 @@ static inline int classify3(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'g') {
+    if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'i') {
+        return T_DOXY_GUI;
+      }
+    }
+  }
   else if (s[0].unicode() == 'p') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'r') {
@@ -285,7 +380,12 @@ static inline int classify3(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'r') {
-    if (s[1].unicode() == 'e') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'w') {
+        return T_DOXY_RAW;
+      }
+    }
+    else if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 'f') {
         return T_DOXY_REF;
       }
@@ -302,6 +402,24 @@ static inline int classify3(const QChar *s) {
         return T_DOXY_SEE;
       }
     }
+    else if (s[1].unicode() == 'q') {
+      if (s[2].unicode() == 'l') {
+        return T_DOXY_SQL;
+      }
+    }
+    else if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'b') {
+        return T_DOXY_SUB;
+      }
+      else if (s[2].unicode() == 'p') {
+        return T_DOXY_SUP;
+      }
+    }
+    else if (s[1].unicode() == 'v') {
+      if (s[2].unicode() == 'g') {
+        return T_DOXY_SVG;
+      }
+    }
   }
   else if (s[0].unicode() == 'v') {
     if (s[1].unicode() == 'a') {
@@ -310,11 +428,27 @@ static inline int classify3(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'x') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'l') {
+        return T_DOXY_XML;
+      }
+    }
+  }
   return T_DOXY_IDENTIFIER;
 }
 
 static inline int classify4(const QChar *s) {
-  if (s[0].unicode() == 'c') {
+  if (s[0].unicode() == 'b') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'd') {
+          return T_DOXY_BOLD;
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'c') {
     if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'e') {
@@ -336,6 +470,13 @@ static inline int classify4(const QChar *s) {
         }
       }
     }
+    else if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 's') {
+          return T_DOXY_DOTS;
+        }
+      }
+    }
   }
   else if (s[0].unicode() == 'e') {
     if (s[1].unicode() == 'l') {
@@ -379,6 +520,15 @@ static inline int classify4(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'm') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'a') {
+          return T_DOXY_META;
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'n') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'm') {
@@ -396,7 +546,14 @@ static inline int classify4(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 'o') {
-    if (s[1].unicode() == 'n') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 't') {
+          return T_DOXY_OMIT;
+        }
+      }
+    }
+    else if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'l') {
         if (s[3].unicode() == 'y') {
           return T_DOXY_ONLY;
@@ -411,6 +568,11 @@ static inline int classify4(const QChar *s) {
           return T_DOXY_PAGE;
         }
       }
+      else if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 't') {
+          return T_DOXY_PART;
+        }
+      }
     }
     else if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 's') {
@@ -482,6 +644,17 @@ static inline int classify5(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'g') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'o') {
+        if (s[3].unicode() == 'u') {
+          if (s[4].unicode() == 'p') {
+            return T_DOXY_GROUP;
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'i') {
     if (s[1].unicode() == 'f') {
       if (s[2].unicode() == 'n') {
@@ -501,6 +674,26 @@ static inline int classify5(const QChar *s) {
         }
       }
     }
+    else if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'x') {
+            return T_DOXY_INDEX;
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'm') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'c') {
+        if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 'o') {
+            return T_DOXY_MACRO;
+          }
+        }
+      }
+    }
   }
   else if (s[0].unicode() == 'p') {
     if (s[1].unicode() == 'a') {
@@ -513,6 +706,17 @@ static inline int classify5(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'r') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'm') {
+          if (s[4].unicode() == 'p') {
+            return T_DOXY_REIMP;
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 's') {
     if (s[1].unicode() == 'h') {
       if (s[2].unicode() == 'o') {
@@ -552,6 +756,15 @@ static inline int classify5(const QChar *s) {
         }
       }
     }
+    else if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'e') {
+            return T_DOXY_TITLE;
+          }
+        }
+      }
+    }
   }
   else if (s[0].unicode() == 'u') {
     if (s[1].unicode() == 'n') {
@@ -571,6 +784,17 @@ static inline int classify5(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'v') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'u') {
+          if (s[4].unicode() == 'e') {
+            return T_DOXY_VALUE;
+          }
+        }
+      }
+    }
+  }
   return T_DOXY_IDENTIFIER;
 }
 
@@ -599,6 +823,19 @@ static inline int classify6(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'c') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'm') {
+        if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 't') {
+              return T_DOXY_COMPAT;
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'e') {
     if (s[1].unicode() == 'l') {
       if (s[2].unicode() == 's') {
@@ -620,6 +857,24 @@ static inline int classify6(const QChar *s) {
             }
           }
         }
+        else if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'w') {
+              return T_DOXY_ENDRAW;
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'x') {
+      if (s[2].unicode() == 'p') {
+        if (s[3].unicode() == 'i') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'e') {
+              return T_DOXY_EXPIRE;
+            }
+          }
+        }
       }
     }
   }
@@ -636,6 +891,32 @@ static inline int classify6(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'm') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'u') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'e') {
+              return T_DOXY_MODULE;
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'o') {
+    if (s[1].unicode() == 'p') {
+      if (s[2].unicode() == 'e') {
+        if (s[3].unicode() == 'n') {
+          if (s[4].unicode() == 'g') {
+            if (s[5].unicode() == 'l') {
+              return T_DOXY_OPENGL;
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'r') {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 't') {
@@ -657,7 +938,18 @@ static inline int classify6(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 's') {
-    if (s[1].unicode() == 't') {
+    if (s[1].unicode() == 'k') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'o') {
+              return T_DOXY_SKIPTO;
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 't') {
       if (s[2].unicode() == 'r') {
         if (s[3].unicode() == 'u') {
           if (s[4].unicode() == 'c') {
@@ -670,70 +962,146 @@ static inline int classify6(const QChar *s) {
     }
   }
   else if (s[0].unicode() == 't') {
-    if (s[1].unicode() == 'h') {
+    if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'r') {
-        if (s[3].unicode() == 'o') {
-          if (s[4].unicode() == 'w') {
-            if (s[5].unicode() == 's') {
-              return T_DOXY_THROWS;
+        if (s[3].unicode() == 'g') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 't') {
+              return T_DOXY_TARGET;
             }
           }
         }
       }
     }
-  }
-  return T_DOXY_IDENTIFIER;
-}
-
-static inline int classify7(const QChar *s) {
-  if (s[0].unicode() == 'c') {
-    if (s[1].unicode() == 'o') {
-      if (s[2].unicode() == 'p') {
-        if (s[3].unicode() == 'y') {
-          if (s[4].unicode() == 'd') {
-            if (s[5].unicode() == 'o') {
-              if (s[6].unicode() == 'c') {
-                return T_DOXY_COPYDOC;
-              }
+    else if (s[1].unicode() == 'h') {
+      if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 'w') {
+            if (s[5].unicode() == 's') {
+              return T_DOXY_THROWS;
             }
           }
         }
       }
     }
   }
-  else if (s[0].unicode() == 'd') {
-    if (s[1].unicode() == 'o') {
-      if (s[2].unicode() == 't') {
-        if (s[3].unicode() == 'f') {
+  else if (s[0].unicode() == 'w') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'b') {
+        if (s[3].unicode() == 'k') {
           if (s[4].unicode() == 'i') {
-            if (s[5].unicode() == 'l') {
-              if (s[6].unicode() == 'e') {
-                return T_DOXY_DOTFILE;
-              }
+            if (s[5].unicode() == 't') {
+              return T_DOXY_WEBKIT;
             }
           }
         }
       }
     }
   }
-  else if (s[0].unicode() == 'e') {
-    if (s[1].unicode() == 'n') {
+  return T_DOXY_IDENTIFIER;
+}
+
+static inline int classify7(const QChar *s) {
+  if (s[0].unicode() == 'b') {
+    if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'c') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'd') {
               if (s[6].unicode() == 'e') {
-                return T_DOXY_ENDCODE;
-              }
-            }
-            else if (s[5].unicode() == 'n') {
-              if (s[6].unicode() == 'd') {
-                return T_DOXY_ENDCOND;
+                return T_DOXY_BADCODE;
               }
             }
           }
         }
-        else if (s[3].unicode() == 'l') {
+      }
+    }
+  }
+  else if (s[0].unicode() == 'c') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'p') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'n') {
+                return T_DOXY_CAPTION;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'h') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 'r') {
+                return T_DOXY_CHAPTER;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'p') {
+        if (s[3].unicode() == 'y') {
+          if (s[4].unicode() == 'd') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'c') {
+                return T_DOXY_COPYDOC;
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'i') {
+              if (s[6].unicode() == 'b') {
+                return T_DOXY_CORELIB;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'd') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'f') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_DOTFILE;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'e') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'c') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_ENDCODE;
+              }
+            }
+            else if (s[5].unicode() == 'n') {
+              if (s[6].unicode() == 'd') {
+                return T_DOXY_ENDCOND;
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'l') {
           if (s[4].unicode() == 'i') {
             if (s[5].unicode() == 'n') {
               if (s[6].unicode() == 'k') {
@@ -747,6 +1115,24 @@ static inline int classify7(const QChar *s) {
             }
           }
         }
+        else if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 'm') {
+            if (s[5].unicode() == 'i') {
+              if (s[6].unicode() == 't') {
+                return T_DOXY_ENDOMIT;
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 't') {
+                return T_DOXY_ENDPART;
+              }
+            }
+          }
+        }
       }
     }
     else if (s[1].unicode() == 'x') {
@@ -789,6 +1175,21 @@ static inline int classify7(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'k') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'y') {
+        if (s[3].unicode() == 'w') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'd') {
+                return T_DOXY_KEYWORD;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'm') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'n') {
@@ -806,7 +1207,18 @@ static inline int classify7(const QChar *s) {
   }
   else if (s[0].unicode() == 'n') {
     if (s[1].unicode() == 'e') {
-      if (s[2].unicode() == 'w') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'w') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'k') {
+                return T_DOXY_NETWORK;
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 'w') {
         if (s[3].unicode() == 'c') {
           if (s[4].unicode() == 'o') {
             if (s[5].unicode() == 'd') {
@@ -848,6 +1260,19 @@ static inline int classify7(const QChar *s) {
         }
       }
     }
+    else if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'n') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'o') {
+                return T_DOXY_PRINTTO;
+              }
+            }
+          }
+        }
+      }
+    }
   }
   else if (s[0].unicode() == 'r') {
     if (s[1].unicode() == 'e') {
@@ -899,6 +1324,43 @@ static inline int classify7(const QChar *s) {
           }
         }
       }
+      else if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 'v') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_SERVICE;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'b') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'r') {
+                return T_DOXY_SIDEBAR;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 'p') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 't') {
+                return T_DOXY_SNIPPET;
+              }
+            }
+          }
+        }
+      }
     }
   }
   else if (s[0].unicode() == 't') {
@@ -916,6 +1378,34 @@ static inline int classify7(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'u') {
+    if (s[1].unicode() == 'i') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 's') {
+                return T_DOXY_UITOOLS;
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'c') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 'e') {
+                return T_DOXY_UNICODE;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'v') {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 'r') {
@@ -966,7 +1456,22 @@ static inline int classify7(const QChar *s) {
 
 static inline int classify8(const QChar *s) {
   if (s[0].unicode() == 'a') {
-    if (s[1].unicode() == 'd') {
+    if (s[1].unicode() == 'b') {
+      if (s[2].unicode() == 's') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'c') {
+                if (s[7].unicode() == 't') {
+                  return T_DOXY_ABSTRACT;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'd') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'i') {
           if (s[4].unicode() == 'n') {
@@ -982,6 +1487,40 @@ static inline int classify8(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'b') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 's') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'n') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'm') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_BASENAME;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'c') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'i') {
+              if (s[6].unicode() == 'n') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_CODELINE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'd') {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 'f') {
@@ -1016,6 +1555,23 @@ static inline int classify8(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'f') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'o') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'n') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_FOOTNOTE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'h') {
     if (s[1].unicode() == 't') {
       if (s[2].unicode() == 'm') {
@@ -1035,17 +1591,47 @@ static inline int classify8(const QChar *s) {
   }
   else if (s[0].unicode() == 'i') {
     if (s[1].unicode() == 'n') {
-      if (s[2].unicode() == 't') {
-        if (s[3].unicode() == 'e') {
-          if (s[4].unicode() == 'r') {
-            if (s[5].unicode() == 'n') {
-              if (s[6].unicode() == 'a') {
-                if (s[7].unicode() == 'l') {
-                  return T_DOXY_INTERNAL;
-                }
-              }
-            }
-          }
+      if (s[2].unicode() == 'm') {
+        if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 'd') {
+            if (s[5].unicode() == 'u') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_INMODULE;
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'n') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'l') {
+                  return T_DOXY_INTERNAL;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'l') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'g') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 's') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_LEGALESE;
+                }
+              }
+            }
+          }
         }
       }
     }
@@ -1067,8 +1653,40 @@ static inline int classify8(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'n') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'x') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'p') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'g') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_NEXTPAGE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'o') {
-    if (s[1].unicode() == 'v') {
+    if (s[1].unicode() == 'b') {
+      if (s[2].unicode() == 's') {
+        if (s[3].unicode() == 'o') {
+          if (s[4].unicode() == 'l') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_OBSOLETE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'v') {
       if (s[2].unicode() == 'e') {
         if (s[3].unicode() == 'r') {
           if (s[4].unicode() == 'l') {
@@ -1101,6 +1719,23 @@ static inline int classify8(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 't') {
+      if (s[2].unicode() == 'e') {
+        if (s[3].unicode() == 's') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'b') {
+                  return T_DOXY_QTESTLIB;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 's') {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 'c') {
@@ -1111,6 +1746,15 @@ static inline int classify8(const QChar *s) {
                 if (s[7].unicode() == '1') {
                   return T_DOXY_SECTION1;
                 }
+                else if (s[7].unicode() == '2') {
+                  return T_DOXY_SECTION2;
+                }
+                else if (s[7].unicode() == '3') {
+                  return T_DOXY_SECTION3;
+                }
+                else if (s[7].unicode() == '4') {
+                  return T_DOXY_SECTION4;
+                }
               }
             }
           }
@@ -1132,9 +1776,39 @@ static inline int classify8(const QChar *s) {
         }
       }
     }
+    else if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'b') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_SUBTITLE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
   }
   else if (s[0].unicode() == 'v') {
-    if (s[1].unicode() == 'e') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 'i') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'b') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'e') {
+                  return T_DOXY_VARIABLE;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 'r') {
         if (s[3].unicode() == 'b') {
           if (s[4].unicode() == 'a') {
@@ -1230,7 +1904,22 @@ static inline int classify9(const QChar *s) {
   }
   else if (s[0].unicode() == 'i') {
     if (s[1].unicode() == 'n') {
-      if (s[2].unicode() == 't') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'x') {
+            if (s[5].unicode() == 'p') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'g') {
+                  if (s[8].unicode() == 'e') {
+                    return T_DOXY_INDEXPAGE;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      else if (s[2].unicode() == 't') {
         if (s[3].unicode() == 'e') {
           if (s[4].unicode() == 'r') {
             if (s[5].unicode() == 'f') {
@@ -1319,6 +2008,25 @@ static inline int classify9(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'o') {
+    if (s[1].unicode() == 'm') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'v') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'l') {
+                if (s[7].unicode() == 'u') {
+                  if (s[8].unicode() == 'e') {
+                    return T_DOXY_OMITVALUE;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'p') {
     if (s[1].unicode() == 'a') {
       if (s[2].unicode() == 'r') {
@@ -1337,6 +2045,127 @@ static inline int classify9(const QChar *s) {
         }
       }
     }
+    else if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'n') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 'e') {
+                    return T_DOXY_PRINTLINE;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'o') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 't') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'o') {
+                  if (s[8].unicode() == 'n') {
+                    return T_DOXY_QUOTATION;
+                  }
+                }
+              }
+            }
+          }
+          else if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'f') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'e') {
+                    return T_DOXY_QUOTEFILE;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'r') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'e') {
+        if (s[3].unicode() == 'n') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 't') {
+                    return T_DOXY_REENTRANT;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 's') {
+    if (s[1].unicode() == 'k') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'p') {
+          if (s[4].unicode() == 'u') {
+            if (s[5].unicode() == 'n') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'i') {
+                  if (s[8].unicode() == 'l') {
+                    return T_DOXY_SKIPUNTIL;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 't') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'p') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'g') {
+                  if (s[8].unicode() == 'e') {
+                    return T_DOXY_STARTPAGE;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'u') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'd') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 'e') {
+                    return T_DOXY_UNDERLINE;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
   }
   else if (s[0].unicode() == 'w') {
     if (s[1].unicode() == 'e') {
@@ -1406,7 +2235,22 @@ static inline int classify10(const QChar *s) {
   else if (s[0].unicode() == 'e') {
     if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'd') {
-        if (s[3].unicode() == 'm') {
+        if (s[3].unicode() == 'c') {
+          if (s[4].unicode() == 'h') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 'p') {
+                if (s[7].unicode() == 't') {
+                  if (s[8].unicode() == 'e') {
+                    if (s[9].unicode() == 'r') {
+                      return T_DOXY_ENDCHAPTER;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'm') {
           if (s[4].unicode() == 'a') {
             if (s[5].unicode() == 'n') {
               if (s[6].unicode() == 'o') {
@@ -1421,6 +2265,21 @@ static inline int classify10(const QChar *s) {
             }
           }
         }
+        else if (s[3].unicode() == 's') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 'e') {
+                if (s[7].unicode() == 'b') {
+                  if (s[8].unicode() == 'a') {
+                    if (s[9].unicode() == 'r') {
+                      return T_DOXY_ENDSIDEBAR;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
         else if (s[3].unicode() == 'x') {
           if (s[4].unicode() == 'm') {
             if (s[5].unicode() == 'l') {
@@ -1458,6 +2317,69 @@ static inline int classify10(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'h') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'd') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'r') {
+              if (s[6].unicode() == 'f') {
+                if (s[7].unicode() == 'i') {
+                  if (s[8].unicode() == 'l') {
+                    if (s[9].unicode() == 'e') {
+                      return T_DOXY_HEADERFILE;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'i') {
+        if (s[3].unicode() == 'n') {
+          if (s[4].unicode() == 't') {
+            if (s[5].unicode() == 'u') {
+              if (s[6].unicode() == 'n') {
+                if (s[7].unicode() == 't') {
+                  if (s[8].unicode() == 'i') {
+                    if (s[9].unicode() == 'l') {
+                      return T_DOXY_PRINTUNTIL;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 't') {
+      if (s[2].unicode() == '3') {
+        if (s[3].unicode() == 's') {
+          if (s[4].unicode() == 'u') {
+            if (s[5].unicode() == 'p') {
+              if (s[6].unicode() == 'p') {
+                if (s[7].unicode() == 'o') {
+                  if (s[8].unicode() == 'r') {
+                    if (s[9].unicode() == 't') {
+                      return T_DOXY_QT3SUPPORT;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 's') {
     if (s[1].unicode() == 'u') {
       if (s[2].unicode() == 'b') {
@@ -1479,6 +2401,27 @@ static inline int classify10(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 't') {
+    if (s[1].unicode() == 'h') {
+      if (s[2].unicode() == 'r') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 's') {
+                if (s[7].unicode() == 'a') {
+                  if (s[8].unicode() == 'f') {
+                    if (s[9].unicode() == 'e') {
+                      return T_DOXY_THREADSAFE;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   return T_DOXY_IDENTIFIER;
 }
 
@@ -1509,7 +2452,41 @@ static inline int classify11(const QChar *s) {
   else if (s[0].unicode() == 'e') {
     if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'd') {
-        if (s[3].unicode() == 'h') {
+        if (s[3].unicode() == 'a') {
+          if (s[4].unicode() == 'b') {
+            if (s[5].unicode() == 's') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'r') {
+                  if (s[8].unicode() == 'a') {
+                    if (s[9].unicode() == 'c') {
+                      if (s[10].unicode() == 't') {
+                        return T_DOXY_ENDABSTRACT;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'f') {
+          if (s[4].unicode() == 'o') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 'o') {
+                    if (s[9].unicode() == 't') {
+                      if (s[10].unicode() == 'e') {
+                        return T_DOXY_ENDFOOTNOTE;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 'h') {
           if (s[4].unicode() == 't') {
             if (s[5].unicode() == 'm') {
               if (s[6].unicode() == 'l') {
@@ -1526,6 +2503,49 @@ static inline int classify11(const QChar *s) {
             }
           }
         }
+        else if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'g') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'e') {
+                    if (s[9].unicode() == 's') {
+                      if (s[10].unicode() == 'e') {
+                        return T_DOXY_ENDLEGALESE;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        else if (s[3].unicode() == 's') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'c') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'i') {
+                  if (s[8].unicode() == 'o') {
+                    if (s[9].unicode() == 'n') {
+                      if (s[10].unicode() == '1') {
+                        return T_DOXY_ENDSECTION1;
+                      }
+                      else if (s[10].unicode() == '2') {
+                        return T_DOXY_ENDSECTION2;
+                      }
+                      else if (s[10].unicode() == '3') {
+                        return T_DOXY_ENDSECTION3;
+                      }
+                      else if (s[10].unicode() == '4') {
+                        return T_DOXY_ENDSECTION4;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
         else if (s[3].unicode() == 'v') {
           if (s[4].unicode() == 'e') {
             if (s[5].unicode() == 'r') {
@@ -1546,6 +2566,29 @@ static inline int classify11(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'g') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'a') {
+        if (s[3].unicode() == 'n') {
+          if (s[4].unicode() == 'u') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'r') {
+                  if (s[8].unicode() == 'i') {
+                    if (s[9].unicode() == 't') {
+                      if (s[10].unicode() == 'y') {
+                        return T_DOXY_GRANULARITY;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'h') {
     if (s[1].unicode() == 't') {
       if (s[2].unicode() == 'm') {
@@ -1569,6 +2612,52 @@ static inline int classify11(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'i') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'l') {
+        if (s[3].unicode() == 'i') {
+          if (s[4].unicode() == 'n') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'm') {
+                  if (s[8].unicode() == 'a') {
+                    if (s[9].unicode() == 'g') {
+                      if (s[10].unicode() == 'e') {
+                        return T_DOXY_INLINEIMAGE;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'e') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'm') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 'a') {
+                    if (s[9].unicode() == 'r') {
+                      if (s[10].unicode() == 'y') {
+                        return T_DOXY_PRELIMINARY;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 'r') {
     if (s[1].unicode() == 'e') {
       if (s[2].unicode() == 'l') {
@@ -1619,7 +2708,32 @@ static inline int classify11(const QChar *s) {
 }
 
 static inline int classify12(const QChar *s) {
-  if (s[0].unicode() == 'e') {
+  if (s[0].unicode() == 'c') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'n') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'n') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 's') {
+                  if (s[8].unicode() == 'p') {
+                    if (s[9].unicode() == 'a') {
+                      if (s[10].unicode() == 'g') {
+                        if (s[11].unicode() == 'e') {
+                          return T_DOXY_CONTENTSPAGE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'e') {
     if (s[1].unicode() == 'n') {
       if (s[2].unicode() == 'd') {
         if (s[3].unicode() == 'l') {
@@ -1641,6 +2755,148 @@ static inline int classify12(const QChar *s) {
             }
           }
         }
+        else if (s[3].unicode() == 'q') {
+          if (s[4].unicode() == 'u') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'a') {
+                  if (s[8].unicode() == 't') {
+                    if (s[9].unicode() == 'i') {
+                      if (s[10].unicode() == 'o') {
+                        if (s[11].unicode() == 'n') {
+                          return T_DOXY_ENDQUOTATION;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else if (s[1].unicode() == 'x') {
+      if (s[2].unicode() == 't') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'n') {
+              if (s[6].unicode() == 'a') {
+                if (s[7].unicode() == 'l') {
+                  if (s[8].unicode() == 'p') {
+                    if (s[9].unicode() == 'a') {
+                      if (s[10].unicode() == 'g') {
+                        if (s[11].unicode() == 'e') {
+                          return T_DOXY_EXTERNALPAGE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'g') {
+    if (s[1].unicode() == 'e') {
+      if (s[2].unicode() == 'n') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'r') {
+            if (s[5].unicode() == 'a') {
+              if (s[6].unicode() == 't') {
+                if (s[7].unicode() == 'e') {
+                  if (s[8].unicode() == 'l') {
+                    if (s[9].unicode() == 'i') {
+                      if (s[10].unicode() == 's') {
+                        if (s[11].unicode() == 't') {
+                          return T_DOXY_GENERATELIST;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'i') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'h') {
+        if (s[3].unicode() == 'e') {
+          if (s[4].unicode() == 'a') {
+            if (s[5].unicode() == 'd') {
+              if (s[6].unicode() == 'e') {
+                if (s[7].unicode() == 'r') {
+                  if (s[8].unicode() == 'f') {
+                    if (s[9].unicode() == 'i') {
+                      if (s[10].unicode() == 'l') {
+                        if (s[11].unicode() == 'e') {
+                          return T_DOXY_INHEADERFILE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'n') {
+    if (s[1].unicode() == 'o') {
+      if (s[2].unicode() == 'n') {
+        if (s[3].unicode() == 'r') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'e') {
+              if (s[6].unicode() == 'n') {
+                if (s[7].unicode() == 't') {
+                  if (s[8].unicode() == 'r') {
+                    if (s[9].unicode() == 'a') {
+                      if (s[10].unicode() == 'n') {
+                        if (s[11].unicode() == 't') {
+                          return T_DOXY_NONREENTRANT;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'p') {
+    if (s[1].unicode() == 'r') {
+      if (s[2].unicode() == 'e') {
+        if (s[3].unicode() == 'v') {
+          if (s[4].unicode() == 'i') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'u') {
+                if (s[7].unicode() == 's') {
+                  if (s[8].unicode() == 'p') {
+                    if (s[9].unicode() == 'a') {
+                      if (s[10].unicode() == 'g') {
+                        if (s[11].unicode() == 'e') {
+                          return T_DOXY_PREVIOUSPAGE;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
       }
     }
   }
@@ -1648,7 +2904,34 @@ static inline int classify12(const QChar *s) {
 }
 
 static inline int classify13(const QChar *s) {
-  if (s[0].unicode() == 'n') {
+  if (s[0].unicode() == 'i') {
+    if (s[1].unicode() == 'n') {
+      if (s[2].unicode() == 'p') {
+        if (s[3].unicode() == 'u') {
+          if (s[4].unicode() == 'b') {
+            if (s[5].unicode() == 'l') {
+              if (s[6].unicode() == 'i') {
+                if (s[7].unicode() == 'c') {
+                  if (s[8].unicode() == 'g') {
+                    if (s[9].unicode() == 'r') {
+                      if (s[10].unicode() == 'o') {
+                        if (s[11].unicode() == 'u') {
+                          if (s[12].unicode() == 'p') {
+                            return T_DOXY_INPUBLICGROUP;
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  else if (s[0].unicode() == 'n') {
     if (s[1].unicode() == 'o') {
       if (s[2].unicode() == 's') {
         if (s[3].unicode() == 'u') {
@@ -1675,6 +2958,48 @@ static inline int classify13(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 'q') {
+    if (s[1].unicode() == 'u') {
+      if (s[2].unicode() == 'o') {
+        if (s[3].unicode() == 't') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'f') {
+              if (s[6].unicode() == 'r') {
+                if (s[7].unicode() == 'o') {
+                  if (s[8].unicode() == 'm') {
+                    if (s[9].unicode() == 'f') {
+                      if (s[10].unicode() == 'i') {
+                        if (s[11].unicode() == 'l') {
+                          if (s[12].unicode() == 'e') {
+                            return T_DOXY_QUOTEFROMFILE;
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+              else if (s[6].unicode() == 'u') {
+                if (s[7].unicode() == 'n') {
+                  if (s[8].unicode() == 'c') {
+                    if (s[9].unicode() == 't') {
+                      if (s[10].unicode() == 'i') {
+                        if (s[11].unicode() == 'o') {
+                          if (s[12].unicode() == 'n') {
+                            return T_DOXY_QUOTEFUNCTION;
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   else if (s[0].unicode() == 's') {
     if (s[1].unicode() == 'u') {
       if (s[2].unicode() == 'b') {
@@ -1768,6 +3093,37 @@ static inline int classify15(const QChar *s) {
       }
     }
   }
+  else if (s[0].unicode() == 't') {
+    if (s[1].unicode() == 'a') {
+      if (s[2].unicode() == 'b') {
+        if (s[3].unicode() == 'l') {
+          if (s[4].unicode() == 'e') {
+            if (s[5].unicode() == 'o') {
+              if (s[6].unicode() == 'f') {
+                if (s[7].unicode() == 'c') {
+                  if (s[8].unicode() == 'o') {
+                    if (s[9].unicode() == 'n') {
+                      if (s[10].unicode() == 't') {
+                        if (s[11].unicode() == 'e') {
+                          if (s[12].unicode() == 'n') {
+                            if (s[13].unicode() == 't') {
+                              if (s[14].unicode() == 's') {
+                                return T_DOXY_TABLEOFCONTENTS;
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
   return T_DOXY_IDENTIFIER;
 }
 
@@ -1790,3 +3146,4 @@ int CppTools::classifyDoxygenTag(const QChar *s, int n) {
     default: return T_DOXY_IDENTIFIER;
   } // switch
 }
+
diff --git a/src/plugins/cpptools/cppdoxygen.h b/src/plugins/cpptools/cppdoxygen.h
index 70eff7c3a85..841c0f9bf44 100644
--- a/src/plugins/cpptools/cppdoxygen.h
+++ b/src/plugins/cpptools/cppdoxygen.h
@@ -36,144 +36,229 @@
 namespace CppTools {
 
 enum DoxygenReservedWord {
-  T_DOXY_IDENTIFIER = 0,
+    T_DOXY_IDENTIFIER,
+    T_DOXY_ARG,
+    T_DOXY_ATTENTION,
+    T_DOXY_AUTHOR,
+    T_DOXY_CALLGRAPH,
+    T_DOXY_CODE,
+    T_DOXY_DOT,
+    T_DOXY_ELSE,
+    T_DOXY_ENDCODE,
+    T_DOXY_ENDCOND,
+    T_DOXY_ENDDOT,
+    T_DOXY_ENDHTMLONLY,
+    T_DOXY_ENDIF,
+    T_DOXY_ENDLATEXONLY,
+    T_DOXY_ENDLINK,
+    T_DOXY_ENDMANONLY,
+    T_DOXY_ENDVERBATIM,
+    T_DOXY_ENDXMLONLY,
+    T_DOXY_HIDEINITIALIZER,
+    T_DOXY_HTMLONLY,
+    T_DOXY_INTERFACE,
+    T_DOXY_INTERNAL,
+    T_DOXY_INVARIANT,
+    T_DOXY_LATEXONLY,
+    T_DOXY_LI,
+    T_DOXY_MANONLY,
+    T_DOXY_N,
+    T_DOXY_NOSUBGROUPING,
+    T_DOXY_NOTE,
+    T_DOXY_ONLY,
+    T_DOXY_POST,
+    T_DOXY_PRE,
+    T_DOXY_REMARKS,
+    T_DOXY_RETURN,
+    T_DOXY_RETURNS,
+    T_DOXY_SA,
+    T_DOXY_SEE,
+    T_DOXY_SHOWINITIALIZER,
+    T_DOXY_SINCE,
+    T_DOXY_TEST,
+    T_DOXY_TODO,
+    T_DOXY_VERBATIM,
+    T_DOXY_WARNING,
+    T_DOXY_XMLONLY,
+    T_DOXY_A,
+    T_DOXY_ADDTOGROUP,
+    T_DOXY_ANCHOR,
+    T_DOXY_B,
+    T_DOXY_C,
+    T_DOXY_CLASS,
+    T_DOXY_COND,
+    T_DOXY_COPYDOC,
+    T_DOXY_DEF,
+    T_DOXY_DONTINCLUDE,
+    T_DOXY_DOTFILE,
+    T_DOXY_E,
+    T_DOXY_ELSEIF,
+    T_DOXY_EM,
+    T_DOXY_ENUM,
+    T_DOXY_EXAMPLE,
+    T_DOXY_EXCEPTION,
+    T_DOXY_EXCEPTIONS,
+    T_DOXY_FILE,
+    T_DOXY_HTMLINCLUDE,
+    T_DOXY_IF,
+    T_DOXY_IFNOT,
+    T_DOXY_INCLUDE,
+    T_DOXY_LINK,
+    T_DOXY_NAMESPACE,
+    T_DOXY_P,
+    T_DOXY_PACKAGE,
+    T_DOXY_REF,
+    T_DOXY_RELATES,
+    T_DOXY_RELATESALSO,
+    T_DOXY_RETVAL,
+    T_DOXY_THROW,
+    T_DOXY_THROWS,
+    T_DOXY_VERBINCLUDE,
+    T_DOXY_VERSION,
+    T_DOXY_XREFITEM,
+    T_DOXY_PARAM,
+    T_DOXY_IMAGE,
+    T_DOXY_DEFGROUP,
+    T_DOXY_PAGE,
+    T_DOXY_PARAGRAPH,
+    T_DOXY_SECTION,
+    T_DOXY_STRUCT,
+    T_DOXY_SUBSECTION,
+    T_DOXY_SUBSUBSECTION,
+    T_DOXY_UNION,
+    T_DOXY_WEAKGROUP,
+    T_DOXY_ADDINDEX,
+    T_DOXY_BRIEF,
+    T_DOXY_BUG,
+    T_DOXY_DATE,
+    T_DOXY_DEPRECATED,
+    T_DOXY_FN,
+    T_DOXY_INGROUP,
+    T_DOXY_LINE,
+    T_DOXY_MAINPAGE,
+    T_DOXY_NAME,
+    T_DOXY_OVERLOAD,
+    T_DOXY_PAR,
+    T_DOXY_SHORT,
+    T_DOXY_SKIP,
+    T_DOXY_SKIPLINE,
+    T_DOXY_TYPEDEF,
+    T_DOXY_UNTIL,
+    T_DOXY_VAR,
 
-  T_DOXY_ARG,
-  T_DOXY_ATTENTION,
-  T_DOXY_AUTHOR,
-  T_DOXY_CALLGRAPH,
-  T_DOXY_CODE,
-  T_DOXY_DOT,
-  T_DOXY_ELSE,
-  T_DOXY_ENDCODE,
-  T_DOXY_ENDCOND,
-  T_DOXY_ENDDOT,
-  T_DOXY_ENDHTMLONLY,
-  T_DOXY_ENDIF,
-  T_DOXY_ENDLATEXONLY,
-  T_DOXY_ENDLINK,
-  T_DOXY_ENDMANONLY,
-  T_DOXY_ENDVERBATIM,
-  T_DOXY_ENDXMLONLY,
-  T_DOXY_HIDEINITIALIZER,
-  T_DOXY_HTMLONLY,
-  T_DOXY_INTERFACE,
-  T_DOXY_INTERNAL,
-  T_DOXY_INVARIANT,
-  T_DOXY_LATEXONLY,
-  T_DOXY_LI,
-  T_DOXY_MANONLY,
-  T_DOXY_N,
-  T_DOXY_NOSUBGROUPING,
-  T_DOXY_NOTE,
-  T_DOXY_ONLY,
-  T_DOXY_POST,
-  T_DOXY_PRE,
-  T_DOXY_REMARKS,
-  T_DOXY_RETURN,
-  T_DOXY_RETURNS,
-  T_DOXY_SA,
-  T_DOXY_SEE,
-  T_DOXY_SHOWINITIALIZER,
-  T_DOXY_SINCE,
-  T_DOXY_TEST,
-  T_DOXY_TODO,
-  T_DOXY_VERBATIM,
-  T_DOXY_WARNING,
-  T_DOXY_XMLONLY,
+    T_FIRST_QDOC_TAG,
 
-  T_DOXY_A,
-  T_DOXY_ADDTOGROUP,
-  T_DOXY_ANCHOR,
-  T_DOXY_B,
-  T_DOXY_C,
-  T_DOXY_CLASS,
-  T_DOXY_COND,
-  T_DOXY_COPYDOC,
-  T_DOXY_DEF,
-  T_DOXY_DONTINCLUDE,
-  T_DOXY_DOTFILE,
-  T_DOXY_E,
-  T_DOXY_ELSEIF,
-  T_DOXY_EM,
-  T_DOXY_ENUM,
-  T_DOXY_EXAMPLE,
-  T_DOXY_EXCEPTION,
-  T_DOXY_EXCEPTIONS,
-  T_DOXY_FILE,
-  T_DOXY_HTMLINCLUDE,
-  T_DOXY_IF,
-  T_DOXY_IFNOT,
-  T_DOXY_INCLUDE,
-  T_DOXY_LINK,
-  T_DOXY_NAMESPACE,
-  T_DOXY_P,
-  T_DOXY_PACKAGE,
-  T_DOXY_REF,
-  T_DOXY_RELATES,
-  T_DOXY_RELATESALSO,
-  T_DOXY_RETVAL,
-  T_DOXY_THROW,
-  T_DOXY_THROWS,
-  T_DOXY_VERBINCLUDE,
-  T_DOXY_VERSION,
-  T_DOXY_XREFITEM,
-
-  T_DOXY_PARAM,
-
-  T_DOXY_IMAGE,
-
-  T_DOXY_DEFGROUP,
-  T_DOXY_PAGE,
-  T_DOXY_PARAGRAPH,
-  T_DOXY_SECTION,
-  T_DOXY_STRUCT,
-  T_DOXY_SUBSECTION,
-  T_DOXY_SUBSUBSECTION,
-  T_DOXY_UNION,
-  T_DOXY_WEAKGROUP,
-
-  T_DOXY_ADDINDEX,
-  T_DOXY_BRIEF,
-  T_DOXY_BUG,
-  T_DOXY_DATE,
-  T_DOXY_DEPRECATED,
-  T_DOXY_FN,
-  T_DOXY_INGROUP,
-  T_DOXY_LINE,
-  T_DOXY_MAINPAGE,
-  T_DOXY_NAME,
-  T_DOXY_OVERLOAD,
-  T_DOXY_PAR,
-  T_DOXY_SHORT,
-  T_DOXY_SKIP,
-  T_DOXY_SKIPLINE,
-  T_DOXY_TYPEDEF,
-  T_DOXY_UNTIL,
-  T_DOXY_VAR,
-
-  // qdoc
-  T_DOXY_ENDLIST,
-  T_DOXY_ENDTABLE,
-  T_DOXY_HEADER,
-  T_DOXY_I,
-  T_DOXY_L,
-  T_DOXY_LIST,
-  T_DOXY_MAINCLASS,
-  T_DOXY_NEWCODE,
-  T_DOXY_O,
-  T_DOXY_OLDCODE,
-  T_DOXY_PROPERTY,
-  T_DOXY_ROW,
-  T_DOXY_SECTION1,
-  T_DOXY_TABLE,
-
-  T_DOXY_LAST_TAG
+    T_DOXY_ABSTRACT = T_FIRST_QDOC_TAG,
+    T_DOXY_BADCODE,
+    T_DOXY_BASENAME,
+    T_DOXY_BOLD,
+    T_DOXY_CAPTION,
+    T_DOXY_CHAPTER,
+    T_DOXY_CODELINE,
+    T_DOXY_DOTS,
+    T_DOXY_ENDABSTRACT,
+    T_DOXY_ENDCHAPTER,
+    T_DOXY_ENDFOOTNOTE,
+    T_DOXY_ENDLEGALESE,
+    T_DOXY_ENDLIST,
+    T_DOXY_ENDOMIT,
+    T_DOXY_ENDPART,
+    T_DOXY_ENDQUOTATION,
+    T_DOXY_ENDRAW,
+    T_DOXY_ENDSECTION1,
+    T_DOXY_ENDSECTION2,
+    T_DOXY_ENDSECTION3,
+    T_DOXY_ENDSECTION4,
+    T_DOXY_ENDSIDEBAR,
+    T_DOXY_ENDTABLE,
+    T_DOXY_EXPIRE,
+    T_DOXY_FOOTNOTE,
+    T_DOXY_GENERATELIST,
+    T_DOXY_GRANULARITY,
+    T_DOXY_HEADER,
+    T_DOXY_I,
+    T_DOXY_INDEX,
+    T_DOXY_INLINEIMAGE,
+    T_DOXY_KEYWORD,
+    T_DOXY_L,
+    T_DOXY_LEGALESE,
+    T_DOXY_LIST,
+    T_DOXY_META,
+    T_DOXY_NEWCODE,
+    T_DOXY_O,
+    T_DOXY_OLDCODE,
+    T_DOXY_OMIT,
+    T_DOXY_OMITVALUE,
+    T_DOXY_PART,
+    T_DOXY_PRINTLINE,
+    T_DOXY_PRINTTO,
+    T_DOXY_PRINTUNTIL,
+    T_DOXY_QUOTATION,
+    T_DOXY_QUOTEFILE,
+    T_DOXY_QUOTEFROMFILE,
+    T_DOXY_QUOTEFUNCTION,
+    T_DOXY_RAW,
+    T_DOXY_ROW,
+    T_DOXY_SECTION1,
+    T_DOXY_SECTION2,
+    T_DOXY_SECTION3,
+    T_DOXY_SECTION4,
+    T_DOXY_SIDEBAR,
+    T_DOXY_SKIPTO,
+    T_DOXY_SKIPUNTIL,
+    T_DOXY_SNIPPET,
+    T_DOXY_SUB,
+    T_DOXY_SUP,
+    T_DOXY_TABLE,
+    T_DOXY_TABLEOFCONTENTS,
+    T_DOXY_TARGET,
+    T_DOXY_TT,
+    T_DOXY_UNDERLINE,
+    T_DOXY_UNICODE,
+    T_DOXY_VALUE,
+    T_DOXY_CONTENTSPAGE,
+    T_DOXY_EXTERNALPAGE,
+    T_DOXY_GROUP,
+    T_DOXY_HEADERFILE,
+    T_DOXY_INDEXPAGE,
+    T_DOXY_INHEADERFILE,
+    T_DOXY_MACRO,
+    T_DOXY_MODULE,
+    T_DOXY_NEXTPAGE,
+    T_DOXY_PREVIOUSPAGE,
+    T_DOXY_PROPERTY,
+    T_DOXY_REIMP,
+    T_DOXY_SERVICE,
+    T_DOXY_STARTPAGE,
+    T_DOXY_VARIABLE,
+    T_DOXY_COMPAT,
+    T_DOXY_INMODULE,
+    T_DOXY_MAINCLASS,
+    T_DOXY_NONREENTRANT,
+    T_DOXY_OBSOLETE,
+    T_DOXY_PRELIMINARY,
+    T_DOXY_INPUBLICGROUP,
+    T_DOXY_REENTRANT,
+    T_DOXY_SUBTITLE,
+    T_DOXY_THREADSAFE,
+    T_DOXY_TITLE,
+    T_DOXY_CORELIB,
+    T_DOXY_UITOOLS,
+    T_DOXY_GUI,
+    T_DOXY_NETWORK,
+    T_DOXY_OPENGL,
+    T_DOXY_QT3SUPPORT,
+    T_DOXY_SVG,
+    T_DOXY_SQL,
+    T_DOXY_QTESTLIB,
+    T_DOXY_WEBKIT,
+    T_DOXY_XML,
 
+    T_DOXY_LAST_TAG
 };
 
 CPPTOOLS_EXPORT int classifyDoxygenTag(const QChar *s, int n);
 CPPTOOLS_EXPORT const char *doxygenTagSpell(int index);
 
-} // namespace CppEditor::Internal
+} // namespace ::CppTools
 
-- 
GitLab