
Description="D"

Categories = {"source"}

Digits=[[ (?:0x|0X)[0-9a-fA-F]+|\d*[\.\_]?\d+(?:[eE][\-\+]\d+)?[lLuUbfdm]* ]]

Keywords={
  { Id=1,
    List={
    "abstract","alias","align","asm","assert","auto","body","bool","break","byte",
    "case","cast","catch","cdouble","cent","cfloat","char","class","const",
    "continue","creal","dchar","debug","default","delegate","delete","deprecated",
    "do","double","else","enum","export","extern","false",
    "final","finally","float","for","foreach","foreach_reverse","function","goto",
    "idouble","if","ifloat","immutable","import","in","inout",
    "int","interface","invariant","ireal","is","lazy","long","macro","mixin",
    "module","new","nothrow","null","out","override","package","pragma","private",
    "protected","public","pure","real","ref","return","scope","shared","short",
    "static","struct","super","switch","synchronized","template","this","throw",
    "true","try","typedef","typeid","typeof","ubyte","ucent","uint","ulong","union",
    "unittest","ushort","version","void","volatile","wchar","while","with"
    },
  },
  { Id=2,
    List={"aaa", "aad", "aam", "aas", "adc",  "add", "addpd", "addps",
    "addsd", "addss",  "and", "andnpd", "andnps", "andpd", "andps",  "arpl",
    "bound", "bsf", "bsr", "bswap",  "bt", "btc", "btr", "bts", "call",
    "cbw", "cdq", "clc", "cld", "clflush",  "cli", "clts", "cmc", "cmova",
    "cmovae",  "cmovb", "cmovbe", "cmovc", "cmove", "cmovg", "cmovge", "cmovl",
    "cmovle", "cmovna", "cmovnae",  "cmovnb", "cmovnbe", "cmovnc", "cmovne",
    "cmovng",  "cmovnge", "cmovnl", "cmovnle", "cmovno", "cmovnp",  "cmovns",
    "cmovnz", "cmovo", "cmovp", "cmovpe",  "cmovpo", "cmovs", "cmovz", "cmp",
    "cmppd",  "cmpps", "cmps", "cmpsb", "cmpsd", "cmpss",  "cmpsw",
    "cmpxch8b", "cmpxchg", "comisd", "comiss",  "cpuid", "cvtdq2pd", "cvtdq2ps",
    "cvtpd2dq", "cvtpd2pi",  "cvtpd2ps", "cvtpi2pd", "cvtpi2ps", "cvtps2dq",
    "cvtps2pd",  "cvtps2pi", "cvtsd2si", "cvtsd2ss", "cvtsi2sd", "cvtsi2ss",
    "cvtss2sd", "cvtss2si", "cvttpd2dq", "cvttpd2pi", "cvttps2dq",  "cvttps2pi",
    "cvttsd2si", "cvttss2si", "cwd", "cwde",  "da", "daa", "das", "db", "dd",  "de", "dec", "df",
    "di", "div",  "divpd", "divps", "divsd", "divss", "dl",  "dq", "ds", "dt",
    "dw", "emms",  "enter", "f2xm1", "fabs", "fadd", "faddp",  "fbld",
    "fbstp", "fchs", "fclex", "fcmovb",  "fcmovbe", "fcmove", "fcmovnb",
    "fcmovnbe", "fcmovne",  "fcmovnu", "fcmovu", "fcom", "fcomi", "fcomip",
    "fcomp", "fcompp", "fcos", "fdecstp", "fdisi",  "fdiv", "fdivp", "fdivr",
    "fdivrp", "feni",  "ffree", "fiadd", "ficom", "ficomp", "fidiv", "fidivr",
    "fild", "fimul", "fincstp", "finit",  "fist", "fistp", "fisub", "fisubr",
    "fld",  "fld1", "fldcw", "fldenv", "fldl2e", "fldl2t",  "fldlg2",
    "fldln2", "fldpi", "fldz", "fmul",  "fmulp", "fnclex", "fndisi", "fneni",
    "fninit",  "fnop", "fnsave", "fnstcw", "fnstenv", "fnstsw",  "fpatan",
    "fprem", "fprem1", "fptan", "frndint", "frstor", "fsave", "fscale", "fsetpm",
    "fsin",  "fsincos", "fsqrt", "fst", "fstcw", "fstenv",  "fstp", "fstsw",
    "fsub", "fsubp", "fsubr", "fsubrp", "ftst", "fucom", "fucomi", "fucomip",  "fucomp", "fucompp",
    "fwait", "fxam", "fxch",  "fxrstor", "fxsave", "fxtract", "fyl2x", "fyl2xp1",
    "hlt", "idiv", "imul", "in", "inc",  "ins", "insb", "insd", "insw",
    "int",  "into", "invd", "invlpg", "iret", "iretd",  "ja", "jae", "jb",
    "jbe", "jc",  "jcxz", "je", "jecxz", "jg", "jge",  "jl", "jle", "jmp",
    "jna", "jnae", "jnb", "jnbe", "jnc", "jne", "jng",  "jnge", "jnl", "jnle",
    "jno", "jnp",  "jns", "jnz", "jo", "jp", "jpe",  "jpo", "js", "jz",
    "lahf", "lar",  "ldmxcsr", "lds", "lea", "leave", "les", "lfence", "lfs",
    "lgdt", "lgs", "lidt",  "lldt", "lmsw", "lock", "lods", "lodsb",  "lodsd",
    "lodsw", "loop", "loope", "loopne",  "loopnz", "loopz", "lsl", "lss", "ltr",
    "maskmovdqu", "maskmovq", "maxpd", "maxps", "maxsd",  "maxss", "mfence",
    "minpd", "minps", "minsd",  "minss", "mov", "movapd", "movaps", "movd",
    "movdq2q", "movdqa", "movdqu", "movhlps", "movhpd",  "movhps", "movlhps",
    "movlpd", "movlps", "movmskpd",  "movmskps", "movntdq", "movnti", "movntpd", "movntps",
    "movntq", "movq", "movq2dq", "movs", "movsb",  "movsd", "movss", "movsw",
    "movsx", "movupd",  "movups", "movzx", "mul", "mulpd", "mulps",  "mulsd",
    "mulss", "neg", "nop", "not",  "or", "orpd", "orps", "out", "outs",
    "outsb", "outsd", "outsw", "packssdw", "packsswb",  "packuswb", "paddb",
    "paddd", "paddq", "paddsb",  "paddsw", "paddusb", "paddusw", "paddw", "pand",
    "pandn", "pavgb", "pavgw", "pcmpeqb", "pcmpeqd",  "pcmpeqw", "pcmpgtb",
    "pcmpgtd", "pcmpgtw", "pextrw",  "pinsrw", "pmaddwd", "pmaxsw", "pmaxub",
    "pminsw",  "pminub", "pmovmskb", "pmulhuw", "pmulhw", "pmullw",
    "pmuludq", "pop", "popa", "popad", "popf",  "popfd", "por", "prefetchnta",
    "prefetcht0", "prefetcht1",  "prefetcht2", "psadbw", "pshufd", "pshufhw",
    "pshuflw",  "pshufw", "pslld", "pslldq", "psllq", "psllw",  "psrad",
    "psraw", "psrld", "psrldq", "psrlq",  "psrlw", "psubb", "psubd", "psubq",
    "psubsb",  "psubsw", "psubusb", "psubusw", "psubw", "punpckhbw",  "punpckhdq",
    "punpckhqdq", "punpckhwd", "punpcklbw", "punpckldq",  "punpcklqdq",
    "punpcklwd", "push", "pusha", "pushad",  "pushf", "pushfd", "pxor", "rcl",
    "rcpps",  "rcpss", "rcr", "rdmsr", "rdpmc", "rdtsc",  "rep", "repe",
    "repne", "repnz", "repz",  "ret", "retf", "rol", "ror", "rsm",  "rsqrtps",
    "rsqrtss", "sahf", "sal", "sar",  "sbb", "scas", "scasb", "scasd", "scasw",
    "seta", "setae", "setb", "setbe", "setc",  "sete", "setg", "setge",
    "setl", "setle",  "setna", "setnae", "setnb", "setnbe", "setnc",  "setne",
    "setng", "setnge", "setnl", "setnle", "setno", "setnp", "setns", "setnz",
    "seto",  "setp", "setpe", "setpo", "sets", "setz",  "sfence", "sgdt",
    "shl", "shld", "shr",  "shrd", "shufpd", "shufps", "sidt", "sldt",
    "smsw", "sqrtpd", "sqrtps", "sqrtsd", "sqrtss",  "stc", "sti", "stmxcsr",
    "stos",  "stosb", "stosd", "stosw", "str", "sub",  "subpd", "subps",
    "subsd", "subss", "sysenter",  "sysexit", "test", "ucomisd", "ucomiss", "ud2",  "unpckhpd", "unpckhps",
    "unpcklpd", "unpcklps", "verr", "verw", "wait", "wbinvd", "wrmsr", "xadd",
    "xchg", "xlat", "xlatb", "xor", "xorpd", "xorps", "addsubpd", "addsubps",
    "fisttp", "haddpd", "haddps", "hsubpd", "hsubps", "lddqu", "monitor", "movddup",
    "movshdup", "movsldup", "mwait", "pavgusb", "pf2id", "pfacc", "pfadd",
    "pfcmpeq", "pfcmpge",  "pfcmpgt", "pfmax", "pfmin", "pfmul", "pfnacc",
    "pfpnacc", "pfrcp", "pfrcpit1", "pfrcpit2", "pfrsqit1", "pfrsqrt", "pfsub",
    "pfsubr", "pi2fd", "pmulhrw", "pswapd"},
  },
    { Id=3,
    Regex=[[\@\w+]],
  },
  { Id=4,
    Regex=[[(\w+)\s*\(]],
  },

}

Strings={
  Delimiter=[["|'|`]],
  RawPrefix="r",
    Interpolation=[[ %\d?\$?s ]],
    DelimiterPairs= {
      { Open=[[ q"[\[\(\<\{] ]], Close=[[ "[\]\)\>\}] ]], Raw=true }
    }
}

IgnoreCase=false

Comments={
  { Block=false,
    Delimiter= { [[//]] },
  },
  { Block=true,
    Nested=false,
    Delimiter= { [[\/\*]],[[\*\/]],}
  },
  { Block=true,
    Nested=false,
    Delimiter= { [[\/\+]],[[\+\/]],}
  }
}

Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\.|\:|\&|<|>|\!|\=|\/|\*|\%|\+|\-|\~|\$]]

Digits=[[ (?:0x|0X|0b)[0-9a-fA-F_]+|\d*[\.\_]?\d+(?:[eE][\-\+]?\d+)?[fFlLuU]? ]]

