static procedure language_highlight_eaxhla (language_structure * language, syntax_structure * syntax) { character * separators = ".,+-*/[]<>=; \t\r\n"; character * declarations [] = { "program", "procedure", "machine", "library", "fast", "unix", "begin", "end", "if", "then", "else", "repeat", "break", "continue", "until", "exit", "fastcall", "shell", "alias", "macro", "scope", "unscope", "use", "include" }; character * types [] = { "integer_64", "character6", "s32", "s64", "natural_64", "natural_86", "u32", "u64", "f32", "f64", "real_640", "v0", "character28", "natural_828", "integer_1656", "natural_1656", "s512", "u512" }; character * instructions [] = { "jnpe", "jpo", "jnpo", "jpe", "jnb", "jae", "jnbe", "ja", "jna", "jbe", "jnae", "jb", "jnl", "jge", "jnle", "jg", "jng", "jle", "jnge", "jl", "cmovng", "cmovle", "cmovnge", "cmovl", "cmovnpe", "cmovpo", "cmovnpo", "cmovpe", "cmovnb", "cmovae", "cmovnbe", "cmova", "cmovna", "cmovbe", "cmovnae", "cmovb", "cmovnl", "cmovge", "cmovnle", "cmovg", "setnpe", "setpo", "setnpo", "setpe", "setnb", "setae", "setnbe", "seta", "setna", "setbe", "setnae", "setb", "setnl", "setge", "setnle", "setg", "setng", "setle", "setnge", "setl", "enter", "call", "jmp", "mov", "add", "or", "adc", "sbb", "and", "sub", "xor", "cmp", "inc", "dec", "not", "neg", "mul", "imul", "div", "idiv", "fadd", "fmul", "fcom", "fcomp", "fsub", "fsubr", "fdiv", "fdivr", "rol", "ror", "rcl", "rcr", "sal", "shr", "shl", "sar", "nop", "retn", "retf", "leave", "popf", "pushf", "in", "out", "syscall", "cpuid", "fnop", "fchs", "fabs", "ftst", "fxam", "fld1", "fldl2t", "fldl2e", "fldpi", "fldlg2", "fldln2", "fldz", "f2xm1", "fyl2x", "fptan", "fpatan", "fxtract", "fprem1", "fdecstp", "fincstp", "fprem", "fyl2xp1", "fsqrt", "fsincos", "frndint", "fscale", "fsin", "fcos", "pop", "push", "bswap", "bsf", "bsr", "loop", "loope", "loopne" }; character * registers [] = { "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d", "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w", "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" }; integer word; syntax_define (syntax, false, false, "#", "\n", '\0', language->comment_colour, language->comment_effect); syntax_define (syntax, false, false, "---", "\n", '\0', language->comment_colour, language->comment_effect); syntax_define (syntax, false, false, "//", "\n", '\0', language->comment_colour, language->comment_effect); syntax_define (syntax, false, false, "'", "'", '\\', language->character_colour, language->character_effect); syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour, language->string_effect); for (natural_64 word = 0; word < array_length (declarations); ++word) { syntax_define (syntax, false, true, declarations [word], separators, '\0', language->keyword_colour, language->keyword_effect); } for (natural_64 word = 0; word < array_length (types); ++word) { syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect); } for (natural_64 word = 0; word < array_length (instructions); ++word) { syntax_define (syntax, false, true, instructions [word], " \t\n", '\0', language->extension_colour, language->extension_effect); } for (natural_64 word = 0; word < array_length (registers); ++word) { syntax_define (syntax, false, true, registers [word], separators, '\0', language->register_colour, language->register_effect); } syntax_define (syntax, true, false, "()[]{}", "", '\0', language->bracket_colour, language->bracket_effect); syntax_define (syntax, true, false, ".,+*-/%$<>=;", "", '\0', language->operator_colour, language->operator_effect); syntax_define (syntax, true, true, language_digits, separators, '\0', language->number_colour, language->number_effect); syntax_define (syntax, true, true, language_lowercase, separators, '\0', language->lowercase_colour, language->lowercase_effect); syntax_define (syntax, true, true, language_uppercase, separators, '\0', language->uppercase_colour, language->uppercase_effect); syntax_define (syntax, true, true, "_", separators, '\0', language->underscore_colour, language->underscore_effect); }