# GLSL syntax file for Diffuse
# Copyright (C) 2009-2011 Derrick Moser <derrick_moser@yahoo.com>
syntax GLSL normal text
syntax_files GLSL '\.(frag|geom|glsl|vert)$'

# colours
colour glsl_comment 0.2 0.4 0.64
colour glsl_fixme 1.0 0.5 0.0
colour glsl_keyword 0.77 0.63 0.0
colour glsl_type 0.3 0.6 0.02
colour glsl_cpp 0.8 0.0 0.0
colour glsl_cppkeyword 0.46 0.31 0.48
colour glsl_literal 1.0 0.2 0.8
colour glsl_punctuation 0.5 0.5 0.5

# preprocessor
syntax_pattern normal cpp glsl_cppkeyword '^[ \t]*#[ \t]*(define|elif|else|endif|error|extension|if|ifdef|ifndef|line|pragma|undef|version)\b'
syntax_pattern cpp normal glsl_cppkeyword '(\r\n|\r|\n)$'
syntax_pattern normal normal text '[ \t\r\n]+'

# C++ style comments
syntax_pattern normal cpp_comment glsl_comment '//'
syntax_pattern cpp cpp_comment glsl_comment '//'
syntax_pattern cpp_comment normal glsl_comment '(\r\n|\r|\n)$'
syntax_pattern cpp_comment cpp_comment glsl_comment '\\(\r\n|\r|\n)$'
syntax_pattern cpp_comment cpp_comment glsl_fixme '\b(TODO|FIXME|XXX)\b'
syntax_pattern cpp_comment cpp_comment glsl_comment '.[^\\TFX\r\n]*'

# C style comments
syntax_pattern normal comment glsl_comment '/\*'
syntax_pattern comment normal glsl_comment '\*/'
syntax_pattern comment comment glsl_fixme '\b(TODO|FIXME|XXX)\b'
syntax_pattern comment comment glsl_comment '.[^\*TFX]*'

syntax_pattern cpp comment_cpp glsl_comment '/\*'
syntax_pattern comment_cpp cpp glsl_comment '\*/'
syntax_pattern comment_cpp comment_cpp glsl_fixme '\b(TODO|FIXME|XXX)\b'
syntax_pattern comment_cpp comment_cpp glsl_comment '.[^\*TFX]*'

# preprocessor args
syntax_pattern cpp cpp glsl_cpp '\\(\r\n|\r|\n)$'
syntax_pattern cpp cpp glsl_cpp '.[^\\/\r\n]*'

# literals
syntax_pattern normal normal glsl_literal '((([0-9]+\.[0-9]*|\.[0-9]+)([eE][\+\-]?[0-9]+)?|[0-9]+[eE][\+\-]?[0-9]+)[fF]?|(0x[0-9a-f]+|0[0-7]*|[1-9][0-9]*)[uU]?)' ignorecase
syntax_pattern normal normal glsl_literal '\b(true|false)\b'

# typing keywords
syntax_pattern normal normal glsl_type '\b(active|attribute|bool|centroid|class|common|const|double|enum|extern|external|filter|fixed|flat|float|half|highp|image([12]D(Array)?(Shadow)?|3D|Buffer|Cube)|[iu]image([12]D(Array)?|3D|Buffer|Cube)|in|inline|inout|input|int|interface|invariant|[iu]sampler([12]D(Array)?|3D|2DRect|Buffer|Cube)|layout|long|lowp|mat[2-4](x[2-4])?|mediump|namespace|noinline|noperspective|out|output|packed|partition|precision|row_major|sampler([12]D(Array)?(Shadow)?|3D|Cube(Shadow)?|2DRect(Shadow)?|3DRect|Buffer)|short|smooth|static|struct|superp|template|typedef|uniform|union|unsigned|varying|[bdfhi]?vec[2-4]|void|volatile)\b'

# keywords
syntax_pattern normal normal glsl_keyword '\b(asm|break|cast|continue|default|discard|do|else|for|goto|if|public|return|sizeof|switch|this|using|while)\b'

# punctuation
syntax_pattern normal normal glsl_punctuation '[!~%\|\&\^\(\)\<\>\*\-\+=\{\}\[\]:;,\?]+'
syntax_pattern normal normal glsl_punctuation '[/\.]'

# parsing optimisation
syntax_pattern normal normal text '[a-z_][a-z_0-9]*' ignorecase
