#include <eepp/ui/doc/languages/sql.hpp>
#include <eepp/ui/doc/syntaxdefinitionmanager.hpp>

namespace EE { namespace UI { namespace Doc { namespace Language {

void addSQL() {

	SyntaxDefinitionManager::instance()->add(

		{ "SQL",
		  { "%.sql$", "%.psql$" },
		  {
			  { { "%-%-.-\n" }, "comment" },
			  { { "/%*", "%*/" }, "comment" },
			  { { "'", "'", "\\" }, "string" },
			  { { "-?%d+[%d%.eE]*f?" }, "number" },
			  { { "-?%.?%d+f?" }, "number" },
			  { { "[%+%-=/%*%%<>!~|&@%?$#]" }, "operator" },
			  { { "[%a_][%w_]*%f[(]" }, "function" },
			  { { "[%a_][%w_]*" }, "symbol" },

		  },
		  {
			  { "SERIAL8", "keyword2" },
			  { "INT8RANGE", "keyword2" },
			  { "INT8", "keyword2" },
			  { "bigint", "keyword2" },
			  { "VARBIT", "keyword2" },
			  { "recursive", "keyword" },
			  { "on", "keyword" },
			  { "foreign", "keyword" },
			  { "ENUM", "keyword" },
			  { "VARIADIC", "keyword" },
			  { "serial8", "keyword2" },
			  { "DOMAIN", "keyword" },
			  { "INT4RANGE", "keyword2" },
			  { "OPERATOR", "keyword" },
			  { "EVENT", "keyword" },
			  { "INDEX", "keyword" },
			  { "DATERANGE", "keyword2" },
			  { "event", "keyword" },
			  { "path", "keyword2" },
			  { "CURRENT_TIMESTAMP", "literal" },
			  { "RAISE", "keyword" },
			  { "LOOP", "keyword" },
			  { "loop", "keyword" },
			  { "BEGIN", "keyword" },
			  { "NOTICE", "keyword" },
			  { "EXECUTE", "keyword" },
			  { "execute", "keyword" },
			  { "raise", "keyword" },
			  { "alter", "keyword" },
			  { "macaddr", "keyword2" },
			  { "ROW", "keyword" },
			  { "CASE", "keyword" },
			  { "FALSE", "literal" },
			  { "row", "keyword" },
			  { "BEFORE", "keyword" },
			  { "trigger", "keyword" },
			  { "FOR", "keyword" },
			  { "for", "keyword" },
			  { "collation", "keyword" },
			  { "UNION", "keyword" },
			  { "circle", "keyword2" },
			  { "some", "keyword" },
			  { "PRECEDING", "keyword" },
			  { "left", "keyword" },
			  { "varbit", "keyword2" },
			  { "SELECT", "keyword" },
			  { "EACH", "keyword" },
			  { "enum", "keyword" },
			  { "preceding", "keyword" },
			  { "BETWEEN", "keyword" },
			  { "exists", "keyword" },
			  { "DESC", "keyword" },
			  { "between", "keyword" },
			  { "end", "keyword" },
			  { "ELSE", "keyword" },
			  { "WHEN", "keyword" },
			  { "ALSO", "keyword" },
			  { "DISTINCT", "keyword" },
			  { "END", "keyword" },
			  { "varchar", "keyword2" },
			  { "when", "keyword" },
			  { "CIDR", "keyword2" },
			  { "notice", "keyword" },
			  { "then", "keyword" },
			  { "SET", "keyword" },
			  { "uuid", "keyword2" },
			  { "FOREIGN", "keyword" },
			  { "UNKNOWN", "keyword" },
			  { "unknown", "keyword" },
			  { "int8", "keyword2" },
			  { "NOTNULL", "keyword" },
			  { "notnull", "keyword" },
			  { "isnull", "keyword" },
			  { "date", "keyword2" },
			  { "DECLARE", "keyword" },
			  { "INTO", "keyword" },
			  { "ROWS", "keyword" },
			  { "extension", "keyword" },
			  { "ALL", "keyword" },
			  { "ANY", "keyword" },
			  { "content", "keyword" },
			  { "ON", "keyword" },
			  { "case", "keyword" },
			  { "XMLPARSE", "keyword" },
			  { "in", "keyword" },
			  { "DOCUMENT", "keyword" },
			  { "PROCEDURE", "keyword" },
			  { "following", "keyword" },
			  { "DROP", "keyword" },
			  { "document", "keyword" },
			  { "type", "keyword" },
			  { "TO", "keyword" },
			  { "EXCLUDE", "keyword" },
			  { "option", "keyword" },
			  { "else", "keyword" },
			  { "UPDATE", "keyword" },
			  { "tsrange", "keyword2" },
			  { "xmlparse", "keyword" },
			  { "without", "keyword" },
			  { "zone", "keyword" },
			  { "sequence", "keyword" },
			  { "ALTER", "keyword" },
			  { "precision", "keyword2" },
			  { "INSTEAD", "keyword" },
			  { "partition", "keyword" },
			  { "THEN", "keyword" },
			  { "ZONE", "keyword" },
			  { "MONEY", "keyword2" },
			  { "instead", "keyword" },
			  { "TYPE", "keyword" },
			  { "also", "keyword" },
			  { "set", "keyword" },
			  { "EXISTS", "keyword" },
			  { "PRECISION", "keyword2" },
			  { "txid_snapshot", "keyword2" },
			  { "returning", "keyword" },
			  { "ARRAY", "keyword" },
			  { "any", "keyword" },
			  { "DECIMAL", "keyword2" },
			  { "bigserial", "keyword2" },
			  { "INNER", "keyword" },
			  { "drop", "keyword" },
			  { "full", "keyword" },
			  { "FULL", "keyword" },
			  { "NATURAL", "keyword" },
			  { "MACADDR", "keyword2" },
			  { "INTEGER", "keyword2" },
			  { "inner", "keyword" },
			  { "RIGHT", "keyword" },
			  { "CHECK", "keyword" },
			  { "jsonb", "keyword2" },
			  { "EXTENSION", "keyword" },
			  { "AND", "keyword" },
			  { "SETOF", "keyword" },
			  { "PARTITION", "keyword" },
			  { "line", "keyword2" },
			  { "SERIAL4", "keyword2" },
			  { "AS", "keyword" },
			  { "LIKE", "keyword" },
			  { "GROUP", "keyword" },
			  { "ORDINALITY", "keyword" },
			  { "RETURNS", "keyword" },
			  { "sql", "keyword" },
			  { "LATERAL", "keyword" },
			  { "NUMERIC", "keyword2" },
			  { "int4", "keyword2" },
			  { "FUNCTION", "keyword" },
			  { "references", "keyword" },
			  { "BOX", "keyword2" },
			  { "intersect", "keyword" },
			  { "CURRENT_DATE", "literal" },
			  { "AT", "keyword" },
			  { "ASC", "keyword" },
			  { "current_timestamp", "literal" },
			  { "NULLS", "keyword" },
			  { "first", "keyword" },
			  { "BOOLEAN", "keyword2" },
			  { "bytea", "keyword2" },
			  { "BOOL", "keyword2" },
			  { "BIGSERIAL", "keyword2" },
			  { "json", "keyword2" },
			  { "LAST", "keyword" },
			  { "localtimestamp", "literal" },
			  { "character", "keyword2" },
			  { "LEFT", "keyword" },
			  { "BYTEA", "keyword2" },
			  { "serial", "keyword2" },
			  { "time", "keyword2" },
			  { "operator", "keyword" },
			  { "CHARACTER", "keyword2" },
			  { "char", "keyword2" },
			  { "float8", "keyword2" },
			  { "CHAR", "keyword2" },
			  { "EXCEPT", "keyword" },
			  { "INT4", "keyword2" },
			  { "view", "keyword" },
			  { "TSRANGE", "keyword2" },
			  { "CIRCLE", "keyword2" },
			  { "INT2", "keyword2" },
			  { "daterange", "keyword2" },
			  { "TIMEZ", "keyword2" },
			  { "SERIAL", "keyword2" },
			  { "INSERT", "keyword" },
			  { "timestampz", "keyword2" },
			  { "TSQUERY", "keyword2" },
			  { "point", "keyword2" },
			  { "pg_lsn", "keyword2" },
			  { "unnest", "keyword" },
			  { "begin", "keyword" },
			  { "decimal", "keyword2" },
			  { "LOCALTIME", "literal" },
			  { "TIME", "keyword2" },
			  { "UNNEST", "keyword" },
			  { "tsquery", "keyword2" },
			  { "current_time", "literal" },
			  { "xmlserialize", "keyword" },
			  { "JSON", "keyword2" },
			  { "returns", "keyword" },
			  { "TSVECTOR", "keyword2" },
			  { "TXID_SNAPSHOT", "keyword2" },
			  { "lseg", "keyword2" },
			  { "int8range", "keyword2" },
			  { "localtime", "literal" },
			  { "index", "keyword" },
			  { "serial4", "keyword2" },
			  { "check", "keyword" },
			  { "INET", "keyword2" },
			  { "smallserial", "keyword2" },
			  { "into", "keyword" },
			  { "PRIMARY", "keyword" },
			  { "UNBOUNDED", "keyword" },
			  { "or", "keyword" },
			  { "FOLLOWING", "keyword" },
			  { "INTERSECT", "keyword" },
			  { "SERIAL2", "keyword2" },
			  { "false", "literal" },
			  { "smallint", "keyword2" },
			  { "union", "keyword" },
			  { "TIMESTAMPZ", "keyword2" },
			  { "float4", "keyword2" },
			  { "desc", "keyword" },
			  { "tstzrange", "keyword2" },
			  { "current_date", "literal" },
			  { "KEY", "keyword" },
			  { "DOUBLE", "keyword2" },
			  { "PG_LSN", "keyword2" },
			  { "DATE", "keyword2" },
			  { "TRIGGER", "keyword" },
			  { "asc", "keyword" },
			  { "numrange", "keyword2" },
			  { "RECURSIVE", "keyword" },
			  { "bit", "keyword2" },
			  { "SQL", "keyword" },
			  { "SMALLINT", "keyword2" },
			  { "TABLE", "keyword" },
			  { "tsvector", "keyword2" },
			  { "language", "keyword" },
			  { "distinct", "keyword" },
			  { "LSEG", "keyword2" },
			  { "int2", "keyword2" },
			  { "as", "keyword" },
			  { "OFFSET", "keyword" },
			  { "REAL", "keyword2" },
			  { "JSONB", "keyword2" },
			  { "TRUE", "literal" },
			  { "int4range", "keyword2" },
			  { "real", "keyword2" },
			  { "cidr", "keyword2" },
			  { "polygon", "keyword2" },
			  { "null", "keyword" },
			  { "CONTENT", "keyword" },
			  { "rows", "keyword" },
			  { "WITH", "keyword" },
			  { "LANGUAGE", "keyword" },
			  { "POINT", "keyword2" },
			  { "BIT", "keyword2" },
			  { "ORDER", "keyword" },
			  { "numeric", "keyword2" },
			  { "unbounded", "keyword" },
			  { "SMALLSERIAL", "keyword2" },
			  { "timez", "keyword2" },
			  { "money", "keyword2" },
			  { "lateral", "keyword" },
			  { "LINE", "keyword2" },
			  { "FIRST", "keyword" },
			  { "join", "keyword" },
			  { "bool", "keyword2" },
			  { "INT", "keyword2" },
			  { "inet", "keyword2" },
			  { "timestamp", "keyword2" },
			  { "FLOAT4", "keyword2" },
			  { "FLOAT8", "keyword2" },
			  { "all", "keyword" },
			  { "RETURNING", "keyword" },
			  { "int", "keyword2" },
			  { "box", "keyword2" },
			  { "cross", "keyword" },
			  { "IN", "keyword" },
			  { "ordinality", "keyword" },
			  { "TIMEZONE", "keyword" },
			  { "INTERVAL", "keyword2" },
			  { "each", "keyword" },
			  { "boolean", "keyword2" },
			  { "TSTZRANGE", "keyword2" },
			  { "serial2", "keyword2" },
			  { "ONLY", "keyword" },
			  { "JOIN", "keyword" },
			  { "default", "keyword" },
			  { "function", "keyword" },
			  { "NOT", "keyword" },
			  { "NUMRANGE", "keyword2" },
			  { "WHERE", "keyword" },
			  { "SOME", "keyword" },
			  { "VARCHAR", "keyword2" },
			  { "XML", "keyword2" },
			  { "primary", "keyword" },
			  { "delete", "keyword" },
			  { "variadic", "keyword" },
			  { "not", "keyword" },
			  { "DELETE", "keyword" },
			  { "declare", "keyword" },
			  { "XMLSERIALIZE", "keyword" },
			  { "OR", "keyword" },
			  { "natural", "keyword" },
			  { "interval", "keyword2" },
			  { "using", "keyword" },
			  { "before", "keyword" },
			  { "except", "keyword" },
			  { "owned", "keyword" },
			  { "values", "keyword" },
			  { "exclude", "keyword" },
			  { "timezone", "keyword" },
			  { "CONSTRAINT", "keyword" },
			  { "double", "keyword2" },
			  { "OWNED", "keyword" },
			  { "UNIQUE", "keyword" },
			  { "text", "keyword2" },
			  { "LIMIT", "keyword" },
			  { "constraint", "keyword" },
			  { "NULL", "keyword" },
			  { "update", "keyword" },
			  { "select", "keyword" },
			  { "REFERENCES", "keyword" },
			  { "only", "keyword" },
			  { "TEXT", "keyword2" },
			  { "to", "keyword" },
			  { "like", "keyword" },
			  { "nulls", "keyword" },
			  { "UUID", "keyword2" },
			  { "at", "keyword" },
			  { "HAVING", "keyword" },
			  { "from", "keyword" },
			  { "insert", "keyword" },
			  { "table", "keyword" },
			  { "setof", "keyword" },
			  { "true", "literal" },
			  { "key", "keyword" },
			  { "DEFAULT", "keyword" },
			  { "VIEW", "keyword" },
			  { "OUTER", "keyword" },
			  { "CREATE", "keyword" },
			  { "and", "keyword" },
			  { "right", "keyword" },
			  { "FROM", "keyword" },
			  { "create", "keyword" },
			  { "unique", "keyword" },
			  { "COLLATION", "keyword" },
			  { "order", "keyword" },
			  { "outer", "keyword" },
			  { "xml", "keyword2" },
			  { "SEQUENCE", "keyword" },
			  { "last", "keyword" },
			  { "BY", "keyword" },
			  { "where", "keyword" },
			  { "WITHOUT", "keyword" },
			  { "procedure", "keyword" },
			  { "POLYGON", "keyword2" },
			  { "group", "keyword" },
			  { "LOCALTIMESTAMP", "literal" },
			  { "VALUES", "keyword" },
			  { "CROSS", "keyword" },
			  { "OPTION", "keyword" },
			  { "PATH", "keyword2" },
			  { "ISNULL", "keyword" },
			  { "with", "keyword" },
			  { "by", "keyword" },
			  { "USING", "keyword" },
			  { "having", "keyword" },
			  { "domain", "keyword" },
			  { "offset", "keyword" },
			  { "TIMESTAMP", "keyword2" },
			  { "limit", "keyword" },
			  { "BIGINT", "keyword2" },
			  { "CURRENT_TIME", "literal" },
			  { "integer", "keyword2" },
			  { "array", "keyword" },

		  },
		  "--",
		  {}

		} );
}

}}}} // namespace EE::UI::Doc::Language
