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

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

void addPascal() {

	SyntaxDefinitionManager::instance()->add(

		{ "Pascal",
		  { "%.pas$", "%.dpr$", "%.dpk$" },
		  {
			  { { "//.*" }, "comment" },
			  { { "%(%*", "%*%)" }, "comment" },
			  { { "{", "}" }, "comment" },
			  { { "'", "'", "\\" }, "string" },
			  { { "'\\?.'" }, "string" },
			  { { "-?%$%x+" }, "number" },
			  { { "-?%%[0-1]+" }, "number" },
			  { { "-?%d+[%d%.eE]*" }, "number" },
			  { { "-?%.?%d+" }, "number" },
			  { { "[%+%-=/%*%^@<>]" }, "operator" },
			  { { ":=" }, "operator" },
			  { { "[%a_][%w_]*%f[(]" }, "function" },
			  { { "[%a_][%w_]*" }, "symbol" },
			  { { "%s+" }, "normal" },
			  { { "%w+%f[%s]" }, "normal" },

		  },
		  {
			  { "xor", "keyword" },
			  { "writeonly", "keyword" },
			  { "wordbool", "keyword2" },
			  { "word", "keyword2" },
			  { "virtual", "keyword" },
			  { "var", "keyword" },
			  { "uses", "keyword" },
			  { "until", "keyword" },
			  { "unsafe", "keyword" },
			  { "type", "keyword" },
			  { "try", "keyword" },
			  { "with", "keyword" },
			  { "trunc", "function" },
			  { "true", "literal" },
			  { "to", "keyword" },
			  { "threadvar", "keyword" },
			  { "while", "keyword" },
			  { "then", "keyword" },
			  { "succ", "function" },
			  { "stdcall", "keyword" },
			  { "static", "keyword" },
			  { "sqrt", "function" },
			  { "sqr", "function" },
			  { "as", "keyword" },
			  { "forward", "keyword" },
			  { "goto", "keyword" },
			  { "for", "keyword" },
			  { "begin", "keyword" },
			  { "initialization", "keyword" },
			  { "if", "keyword" },
			  { "implementation", "keyword" },
			  { "array", "keyword" },
			  { "far", "keyword" },
			  { "asm", "keyword" },
			  { "file", "keyword" },
			  { "or", "keyword" },
			  { "except", "keyword" },
			  { "dynamic", "keyword" },
			  { "reintroduce", "keyword" },
			  { "boolean", "keyword2" },
			  { "double", "keyword2" },
			  { "unit", "keyword" },
			  { "dispinterface", "keyword" },
			  { "assembler", "keyword" },
			  { "inherited", "keyword" },
			  { "eof", "function" },
			  { "dispid", "keyword" },
			  { "implements", "keyword" },
			  { "label", "keyword" },
			  { "shortint", "keyword2" },
			  { "automated", "keyword" },
			  { "class", "keyword" },
			  { "message", "keyword" },
			  { "at", "keyword" },
			  { "exp", "function" },
			  { "return", "keyword" },
			  { "write", "keyword" },
			  { "contains", "keyword" },
			  { "deprecated", "keyword" },
			  { "constructor", "keyword" },
			  { "abstract", "keyword" },
			  { "shl", "keyword" },
			  { "string", "keyword" },
			  { "finally", "keyword" },
			  { "downto", "keyword" },
			  { "integer", "keyword2" },
			  { "absolute", "keyword" },
			  { "override", "keyword" },
			  { "near", "keyword" },
			  { "arctan", "function" },
			  { "export", "keyword" },
			  { "abs", "function" },
			  { "bytebool", "keyword2" },
			  { "out", "keyword" },
			  { "pascal", "keyword" },
			  { "read", "keyword" },
			  { "case", "keyword" },
			  { "object", "keyword" },
			  { "finalization", "keyword" },
			  { "else", "keyword" },
			  { "in", "keyword" },
			  { "exports", "keyword" },
			  { "char", "keyword2" },
			  { "cdecl", "keyword" },
			  { "function", "keyword" },
			  { "default", "keyword" },
			  { "register", "keyword" },
			  { "eoln", "function" },
			  { "comp", "keyword2" },
			  { "extended", "keyword2" },
			  { "not", "keyword" },
			  { "const", "keyword" },
			  { "local", "keyword" },
			  { "cos", "function" },
			  { "external", "keyword" },
			  { "real", "keyword2" },
			  { "inline", "keyword" },
			  { "interface", "keyword" },
			  { "is", "keyword" },
			  { "end", "keyword" },
			  { "private", "keyword" },
			  { "resourcestring", "keyword" },
			  { "property", "keyword" },
			  { "index", "keyword" },
			  { "library", "keyword" },
			  { "procedure", "keyword" },
			  { "program", "keyword" },
			  { "ln", "function" },
			  { "byte", "keyword2" },
			  { "do", "keyword" },
			  { "sin", "function" },
			  { "resident", "keyword" },
			  { "safecall", "keyword" },
			  { "longint", "keyword2" },
			  { "mod", "keyword" },
			  { "final", "keyword" },
			  { "public", "keyword" },
			  { "destructor", "keyword" },
			  { "chr", "function" },
			  { "and", "keyword" },
			  { "name", "keyword" },
			  { "nil", "literal" },
			  { "nodefault", "keyword" },
			  { "odd", "function" },
			  { "div", "keyword" },
			  { "of", "keyword" },
			  { "false", "literal" },
			  { "smallint", "keyword2" },
			  { "ord", "function" },
			  { "overload", "keyword" },
			  { "longbool", "keyword2" },
			  { "sealed", "keyword" },
			  { "currency", "keyword2" },
			  { "package", "keyword" },
			  { "packed", "keyword" },
			  { "repeat", "keyword" },
			  { "stored", "keyword" },
			  { "platform", "keyword" },
			  { "pointer", "keyword2" },
			  { "pred", "function" },
			  { "namespaces", "keyword" },
			  { "published", "keyword" },
			  { "raise", "keyword" },
			  { "readonly", "keyword" },
			  { "record", "keyword" },
			  { "varargs", "keyword" },
			  { "requires", "keyword" },
			  { "cardinal", "keyword2" },
			  { "on", "keyword" },
			  { "round", "function" },
			  { "self", "literal" },
			  { "shr", "keyword" },
			  { "protected", "keyword" },
			  { "set", "keyword" },
			  { "single", "keyword2" },

		  },
		  "//",
		  {}

		} );
}

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