# D language definition file
#
# Author: Andre Simon
#   Mail: andre.simon1@gmx.de
#   Date: 18.3.2002
# ------------------------------------------
# This file is a part of highlight, a free source code converter released under the GPL.
#
# The file is used to describe keywords and special symbols of programming languages.
# See README in the highlight directory for details.
#
# New definition files for future releases of highlight are always appreciated ;)
#
# ----------
# andre.simon1@gmx.de
# http:/www.andre-simon.de/

$DESCRIPTION=D

$DESCRIPTION=D definition

$KEYWORDS(kwa)=abstract alias align asm assert auto  bit body 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 function  goto
idouble if ifloat import in inout int interface invariant ireal is  long  mixin module  new null  out override  package pragma private
protected public  real return  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

# special tokens
$KEYWORDS(kwb)=__FILE__ __LINE__ __DATE__ __TIME__ __TIMESTAMP__

# assembler upcodes
$KEYWORDS(kwc)=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


#$KEYWORDS(kwb)=regex([A-Z]+)

$KEYWORDS(kwd)=regex((\w+)\s*\()

$STRINGDELIMITERS=" ' `
$RAWSTRINGPREFIX=r

$SL_COMMENT=//
$ML_COMMENT=/* */
$ML_COMMENT=/+ +/

$ALLOWNESTEDCOMMENTS=false

$IGNORECASE=false

$ESCCHAR=regex(\\\d{3}|\\x\p{XDigit}{2}|\\[ntvbrfa\\\?'"])

$ALLOWEXTESCAPE=true

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

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