
Description="D"

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