Commit 4c5ff047 authored by Roberto Raggi's avatar Roberto Raggi

Initial support for doxygen comments.

parent 4a259547
......@@ -54,6 +54,11 @@ bool SimpleToken::isKeyword() const
return _kind >= T_FIRST_KEYWORD && _kind < T_FIRST_QT_KEYWORD;
}
bool SimpleToken::isComment() const
{
return _kind == T_COMMENT || _kind == T_DOXY_COMMENT;
}
SimpleLexer::SimpleLexer()
: _lastState(0),
_skipComments(false),
......
......@@ -69,6 +69,7 @@ public:
bool isLiteral() const;
bool isOperator() const;
bool isKeyword() const;
bool isComment() const;
public:
int _kind;
......
/***************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Qt Software Information (qt-info@nokia.com)
**
**
** Non-Open Source Usage
**
** Licensees may use this file in accordance with the Qt Beta Version
** License Agreement, Agreement version 2.2 provided with the Software or,
** alternatively, in accordance with the terms contained in a written
** agreement between you and Nokia.
**
** GNU General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU General
** Public License versions 2.0 or 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the packaging
** of this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
**
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
** http://www.gnu.org/copyleft/gpl.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt GPL Exception
** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
**
***************************************************************************/
#include <QString>
#include "cppdoxygen.h"
using namespace CppEditor::Internal;
/*
~
@
$
\
#
f[
f]
f$
*/
static inline int classify1(const QChar *s) {
if (s[0].unicode() == 'a') {
return T_DOXY_A;
}
else if (s[0].unicode() == 'b') {
return T_DOXY_B;
}
else if (s[0].unicode() == 'c') {
return T_DOXY_C;
}
else if (s[0].unicode() == 'e') {
return T_DOXY_E;
}
else if (s[0].unicode() == 'n') {
return T_DOXY_N;
}
else if (s[0].unicode() == 'p') {
return T_DOXY_P;
}
return T_DOXY_IDENTIFIER;
}
static inline int classify2(const QChar *s) {
if (s[0].unicode() == 'e') {
if (s[1].unicode() == 'm') {
return T_DOXY_EM;
}
}
else if (s[0].unicode() == 'f') {
if (s[1].unicode() == 'n') {
return T_DOXY_FN;
}
}
else if (s[0].unicode() == 'i') {
if (s[1].unicode() == 'f') {
return T_DOXY_IF;
}
}
else if (s[0].unicode() == 'l') {
if (s[1].unicode() == 'i') {
return T_DOXY_LI;
}
}
else if (s[0].unicode() == 's') {
if (s[1].unicode() == 'a') {
return T_DOXY_SA;
}
}
return T_DOXY_IDENTIFIER;
}
static inline int classify3(const QChar *s) {
if (s[0].unicode() == 'a') {
if (s[1].unicode() == 'r') {
if (s[2].unicode() == 'g') {
return T_DOXY_ARG;
}
}
}
else if (s[0].unicode() == 'b') {
if (s[1].unicode() == 'u') {
if (s[2].unicode() == 'g') {
return T_DOXY_BUG;
}
}
}
else if (s[0].unicode() == 'd') {
if (s[1].unicode() == 'e') {
if (s[2].unicode() == 'f') {
return T_DOXY_DEF;
}
}
else if (s[1].unicode() == 'o') {
if (s[2].unicode() == 't') {
return T_DOXY_DOT;
}
}
}
else if (s[0].unicode() == 'p') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 'r') {
return T_DOXY_PAR;
}
}
else if (s[1].unicode() == 'r') {
if (s[2].unicode() == 'e') {
return T_DOXY_PRE;
}
}
}
else if (s[0].unicode() == 'r') {
if (s[1].unicode() == 'e') {
if (s[2].unicode() == 'f') {
return T_DOXY_REF;
}
}
}
else if (s[0].unicode() == 's') {
if (s[1].unicode() == 'e') {
if (s[2].unicode() == 'e') {
return T_DOXY_SEE;
}
}
}
else if (s[0].unicode() == 'v') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 'r') {
return T_DOXY_VAR;
}
}
}
return T_DOXY_IDENTIFIER;
}
static inline int classify4(const QChar *s) {
if (s[0].unicode() == 'c') {
if (s[1].unicode() == 'o') {
if (s[2].unicode() == 'd') {
if (s[3].unicode() == 'e') {
return T_DOXY_CODE;
}
}
else if (s[2].unicode() == 'n') {
if (s[3].unicode() == 'd') {
return T_DOXY_COND;
}
}
}
}
else if (s[0].unicode() == 'd') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 't') {
if (s[3].unicode() == 'e') {
return T_DOXY_DATE;
}
}
}
}
else if (s[0].unicode() == 'e') {
if (s[1].unicode() == 'l') {
if (s[2].unicode() == 's') {
if (s[3].unicode() == 'e') {
return T_DOXY_ELSE;
}
}
}
else if (s[1].unicode() == 'n') {
if (s[2].unicode() == 'u') {
if (s[3].unicode() == 'm') {
return T_DOXY_ENUM;
}
}
}
}
else if (s[0].unicode() == 'f') {
if (s[1].unicode() == 'i') {
if (s[2].unicode() == 'l') {
if (s[3].unicode() == 'e') {
return T_DOXY_FILE;
}
}
}
}
else if (s[0].unicode() == 'l') {
if (s[1].unicode() == 'i') {
if (s[2].unicode() == 'n') {
if (s[3].unicode() == 'e') {
return T_DOXY_LINE;
}
else if (s[3].unicode() == 'k') {
return T_DOXY_LINK;
}
}
}
}
else if (s[0].unicode() == 'n') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 'm') {
if (s[3].unicode() == 'e') {
return T_DOXY_NAME;
}
}
}
else if (s[1].unicode() == 'o') {
if (s[2].unicode() == 't') {
if (s[3].unicode() == 'e') {
return T_DOXY_NOTE;
}
}
}
}
else if (s[0].unicode() == 'o') {
if (s[1].unicode() == 'n') {
if (s[2].unicode() == 'l') {
if (s[3].unicode() == 'y') {
return T_DOXY_ONLY;
}
}
}
}
else if (s[0].unicode() == 'p') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 'g') {
if (s[3].unicode() == 'e') {
return T_DOXY_PAGE;
}
}
}
else if (s[1].unicode() == 'o') {
if (s[2].unicode() == 's') {
if (s[3].unicode() == 't') {
return T_DOXY_POST;
}
}
}
}
else if (s[0].unicode() == 's') {
if (s[1].unicode() == 'k') {
if (s[2].unicode() == 'i') {
if (s[3].unicode() == 'p') {
return T_DOXY_SKIP;
}
}
}
}
else if (s[0].unicode() == 't') {
if (s[1].unicode() == 'e') {
if (s[2].unicode() == 's') {
if (s[3].unicode() == 't') {
return T_DOXY_TEST;
}
}
}
else if (s[1].unicode() == 'o') {
if (s[2].unicode() == 'd') {
if (s[3].unicode() == 'o') {
return T_DOXY_TODO;
}
}
}
}
return T_DOXY_IDENTIFIER;
}
static inline int classify5(const QChar *s) {
if (s[0].unicode() == 'b') {
if (s[1].unicode() == 'r') {
if (s[2].unicode() == 'i') {
if (s[3].unicode() == 'e') {
if (s[4].unicode() == 'f') {
return T_DOXY_BRIEF;
}
}
}
}
}
else if (s[0].unicode() == 'c') {
if (s[1].unicode() == 'l') {
if (s[2].unicode() == 'a') {
if (s[3].unicode() == 's') {
if (s[4].unicode() == 's') {
return T_DOXY_CLASS;
}
}
}
}
}
else if (s[0].unicode() == 'e') {
if (s[1].unicode() == 'n') {
if (s[2].unicode() == 'd') {
if (s[3].unicode() == 'i') {
if (s[4].unicode() == 'f') {
return T_DOXY_ENDIF;
}
}
}
}
}
else if (s[0].unicode() == 'i') {
if (s[1].unicode() == 'f') {
if (s[2].unicode() == 'n') {
if (s[3].unicode() == 'o') {
if (s[4].unicode() == 't') {
return T_DOXY_IFNOT;
}
}
}
}
else if (s[1].unicode() == 'm') {
if (s[2].unicode() == 'a') {
if (s[3].unicode() == 'g') {
if (s[4].unicode() == 'e') {
return T_DOXY_IMAGE;
}
}
}
}
}
else if (s[0].unicode() == 'p') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 'r') {
if (s[3].unicode() == 'a') {
if (s[4].unicode() == 'm') {
return T_DOXY_PARAM;
}
}
}
}
}
else if (s[0].unicode() == 's') {
if (s[1].unicode() == 'h') {
if (s[2].unicode() == 'o') {
if (s[3].unicode() == 'r') {
if (s[4].unicode() == 't') {
return T_DOXY_SHORT;
}
}
}
}
else if (s[1].unicode() == 'i') {
if (s[2].unicode() == 'n') {
if (s[3].unicode() == 'c') {
if (s[4].unicode() == 'e') {
return T_DOXY_SINCE;
}
}
}
}
}
else if (s[0].unicode() == 't') {
if (s[1].unicode() == 'h') {
if (s[2].unicode() == 'r') {
if (s[3].unicode() == 'o') {
if (s[4].unicode() == 'w') {
return T_DOXY_THROW;
}
}
}
}
}
else if (s[0].unicode() == 'u') {
if (s[1].unicode() == 'n') {
if (s[2].unicode() == 'i') {
if (s[3].unicode() == 'o') {
if (s[4].unicode() == 'n') {
return T_DOXY_UNION;
}
}
}
else if (s[2].unicode() == 't') {
if (s[3].unicode() == 'i') {
if (s[4].unicode() == 'l') {
return T_DOXY_UNTIL;
}
}
}
}
}
return T_DOXY_IDENTIFIER;
}
static inline int classify6(const QChar *s) {
if (s[0].unicode() == 'a') {
if (s[1].unicode() == 'n') {
if (s[2].unicode() == 'c') {
if (s[3].unicode() == 'h') {
if (s[4].unicode() == 'o') {
if (s[5].unicode() == 'r') {
return T_DOXY_ANCHOR;
}
}
}
}
}
else if (s[1].unicode() == 'u') {
if (s[2].unicode() == 't') {
if (s[3].unicode() == 'h') {
if (s[4].unicode() == 'o') {
if (s[5].unicode() == 'r') {
return T_DOXY_AUTHOR;
}
}
}
}
}
}
else if (s[0].unicode() == 'e') {
if (s[1].unicode() == 'l') {
if (s[2].unicode() == 's') {
if (s[3].unicode() == 'e') {
if (s[4].unicode() == 'i') {
if (s[5].unicode() == 'f') {
return T_DOXY_ELSEIF;
}
}
}
}
}
else if (s[1].unicode() == 'n') {
if (s[2].unicode() == 'd') {
if (s[3].unicode() == 'd') {
if (s[4].unicode() == 'o') {
if (s[5].unicode() == 't') {
return T_DOXY_ENDDOT;
}
}
}
}
}
}
else if (s[0].unicode() == 'r') {
if (s[1].unicode() == 'e') {
if (s[2].unicode() == 't') {
if (s[3].unicode() == 'u') {
if (s[4].unicode() == 'r') {
if (s[5].unicode() == 'n') {
return T_DOXY_RETURN;
}
}
}
else if (s[3].unicode() == 'v') {
if (s[4].unicode() == 'a') {
if (s[5].unicode() == 'l') {
return T_DOXY_RETVAL;
}
}
}
}
}
}
else if (s[0].unicode() == 's') {
if (s[1].unicode() == 't') {
if (s[2].unicode() == 'r') {
if (s[3].unicode() == 'u') {
if (s[4].unicode() == 'c') {
if (s[5].unicode() == 't') {
return T_DOXY_STRUCT;
}
}
}
}
}
}
else if (s[0].unicode() == 't') {
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;
}
}
}
}
}
}
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[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') {
return T_DOXY_ENDLINK;
}
}
}
}
}
}
else if (s[1].unicode() == 'x') {
if (s[2].unicode() == 'a') {
if (s[3].unicode() == 'm') {
if (s[4].unicode() == 'p') {
if (s[5].unicode() == 'l') {
if (s[6].unicode() == 'e') {
return T_DOXY_EXAMPLE;
}
}
}
}
}
}
}
else if (s[0].unicode() == 'i') {
if (s[1].unicode() == 'n') {
if (s[2].unicode() == 'c') {
if (s[3].unicode() == 'l') {
if (s[4].unicode() == 'u') {
if (s[5].unicode() == 'd') {
if (s[6].unicode() == 'e') {
return T_DOXY_INCLUDE;
}
}
}
}
}
else if (s[2].unicode() == 'g') {
if (s[3].unicode() == 'r') {
if (s[4].unicode() == 'o') {
if (s[5].unicode() == 'u') {
if (s[6].unicode() == 'p') {
return T_DOXY_INGROUP;
}
}
}
}
}
}
}
else if (s[0].unicode() == 'm') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 'n') {
if (s[3].unicode() == 'o') {
if (s[4].unicode() == 'n') {
if (s[5].unicode() == 'l') {
if (s[6].unicode() == 'y') {
return T_DOXY_MANONLY;
}
}
}
}
}
}
}
else if (s[0].unicode() == 'p') {
if (s[1].unicode() == 'a') {
if (s[2].unicode() == 'c') {
if (s[3].unicode() == 'k') {
if (s[4].unicode() == 'a') {
if (s[5].unicode() == 'g') {
if (s[6].unicode() == 'e') {
return T_DOXY_PACKAGE;
}
}
}
}
}
}