Vim ogre dotmaterial        

Ogre material


The following code was created for highlighting ogre dotmaterial files in vim, but it will work as well for dotprogram files (vertex_program, fragment_program, geometry_program blocks will also be properly highlighted).

" File created by Aliaksandr Ivaniuk (rride), 2010
" A newer versions may be available at https://bitbucket.org/rride_a/myvim/
" Any issues can be posted at the issue tracker of the mentionaed repository.


 if version < 600
     syntax clear
 elseif exists("b:current_syntax")
     finish
 endif
		
syntax sync fromstart
" error region should be the first to have the lowest priority among all syntax classes. Only completely unknown structures should be highlighted as errors.
syntax region 	MaterialError 				 excludenl start="\i" end="$" contained

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" primitive data types
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


syntax keyword OnOff				on off contained 
syntax keyword Boolean				true false contained 
syntax match   Integer				"\d\|\(0x\)\d*" contained
 
" floats will be present in templates too often so use some scripting :)
let pattFloat	= '\<[0-9]\+\(\.[0-9]*\)\='
let pattFloat4  = printf( repeat( '%s\s\+', 3) . '%s\>', pattFloat, pattFloat, pattFloat, pattFloat )
let pattFloat6  = printf( '\(%s\s\+\)\{5}%s\>', pattFloat, pattFloat )
let pattFloat16 = printf( '\(%s\s\+\)\{15}\s+%s\>', pattFloat, pattFloat )

execute 'syntax match Float " ' . pattFloat. '" contained'
execute 'syntax match Float4 "' . pattFloat4 . '" contained'
execute 'syntax match Float6 "' . pattFloat6 . '" contained'
execute 'syntax match Float16 "' . pattFloat16 . '" contained'

syntax region  String				start=+"+ end=+"+ skip=+\\"+ contains=@Spell contained

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Material block
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax keyword GpuType 				matrix4x4 float4x4 float4 float contained
syntax match   GpuType				"\<float\([1-9]\d*\)\=\>" contained
syntax match   GpuType				"\<int\([1-9]\d*\)\=\>" contained

syntax region  Comment 				start="/\*" end="\*/"
syntax region  Comment 				excludenl start="//"	end="$"

let pattColorValue 			= printf( repeat( '%s\s\+', 2 ). '%s\(\s\+%s\)\=', pattFloat, pattFloat, pattFloat, pattFloat )  " match expression 'float float float [float]
let pattColorOrVertexColor 	= printf( '\(%s\)\|\(%s\)', pattColorValue, 'vertexcolor' )

"echo pattColorOrVertexColor
"echo match( "vertexcolor", "vertexcolor" )
"echo match("100 100 100 100 100 100", pattFloat6 )
execute 'syntax match	ColorValue "' 		.		pattColorValue . '" contained'
execute 'syntax match	ColorValueOrVertexColor "'.	pattColorOrVertexColor . '" contained'


syntax region 	UnknownBlock		matchgroup=Error start="{" end="}" transparent contains=UnknownBlock,Comment

syntax match    AbstractBlock 		nextgroup=PassBlock,TechniqueBlock skipwhite  "\<abstract\>" 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Material block
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

syntax region 	MaterialBlock		matchgroup=MaterialBlock start="\<material\>" end="{"me=e-1 transparent contains=Comment nextgroup=MaterialBlockEnd 
syntax region	MaterialBlockEnd	matchgroup=MaterialBlock start="{" end="}" transparent contained contains=MaterialAttribute,Comment,TechniqueBlock,UnknownBlock skipempty

syntax keyword 	MaterialLodStrategy Distance PixelCount contained 
syntax region 	MaterialAttribute 	matchgroup=MaterialAttribute keepend start="^\s*lod_strategy\>" end="$"  contained skipwhite contains=MaterialLodStrategy,Comment,MaterialError

" lod_distances is a deprecated feature right now, so just skip it
syntax region 	MaterialAttribute 	matchgroup=MaterialAttribute keepend start="^\s*lod_distances\>" end="$" contained skipwhite contains=Comment,MaterialError
syntax region 	MaterialAttribute 	matchgroup=MaterialAttribute keepend start="^\s*receive_shadows\>" end="$" contained skipwhite contains=OnOff,Comment,MaterialError
syntax region 	MaterialAttribute 	matchgroup=MaterialAttribute keepend start="^\s*receive_shadows\>" end="$" contained skipwhite contains=OnOff,Comment,MaterialError
syntax region 	MaterialAttribute 	matchgroup=MaterialAttribute keepend start="^\s*transparency_casts_shadows\>" end="$" contained skipwhite contains=OnOff,Comment,MaterialError
syntax region 	MaterialAttribute 	matchgroup=MaterialAttribute keepend start="^\s*lod_values\>" end="$" contained skipwhite contains=OnOff,Comment,MaterialError


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Technique block
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax region TechniqueBlock		matchgroup=TechniqueBlock start="\<technique\>" end="{"me=e-1 transparent contained contains=Comment nextgroup=TechniqueBlockEnd
syntax region TechniqueBlockEnd		matchgroup=TechniqueBlock start="{" end="}" transparent contained contains=TechniqueAttribute,PassBlock,Comment,UnknownBlock

syntax region TechniqueAttribute 	matchgroup=TechniqueAttribute start="^\s*\<lod_index\>" end="$" transparent contained contains=Integer
syntax region TechniqueAttribute 	matchgroup=TechniqueAttribute start="^\s*\<shadow_caster_material\>" end="$" transparent contained contains=String
syntax region TechniqueAttribute	matchgroup=TechniqueAttribute start="^\s*\<shadow_receiver_material\>" end="$" transparent contained contains=String
syntax region TechniqueAttribute	matchgroup=TechniqueAttribute start="^\s*\<scheme\>" end="$" transparent contained contains=String

syntax keyword InclusionType		include exclude contained
syntax region TechniqueAttribute	matchgroup=TechniqueAttribute start="^\s*\<gpu_device_rule\>" end="$" transparent contained contains=InclusionType,Comment
syntax region TechniqueAttribute	matchgroup=TechniqueAttribute start="^\s*\<gpu_vendor_rule\>" end="$" transparent contained contains=InclusionType,Comment


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Pass block
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

syntax region PassBlock 	matchgroup=PassBlock start="\<pass\>" end="{"me=e-1 transparent contained contains=Comment nextgroup=PassBlockEnd
syntax region PassBlockEnd		matchgroup=PassBlock start="{" end="}" transparent contained contains=TextureUnit,PassAttribute,GpuProgramRef,Comment,UnknownBlock,MaterialError

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*ambient\>" end="$" transparent contained contains=ColorValueOrVertexColor,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*diffuse\>" end="$" transparent contained contains=ColorValueOrvertexColor,Comment,MaterialError

let pattSpecular = printf( '%s\s\+%s', pattColorOrVertexColor, pattFloat )
execute 'syntax match SpecularValue "' pattSpecular.'" contained'

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*specular\>" end="$" transparent contained contains=SpecularValue,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*emissive\>" end="$" transparent contained contains=ColorValueOrVertexColor,Comment,MaterialError

" composite scene blend value
syntax keyword SceneBlendValueOp	add modulate colour_blend alpha_blend contained
syntax keyword SceneBlendValueFactor one zero dest_colour src_colour one_minus_dest_colour one_minus_src_colour dest_alpha src_alpha one_minus_dest_alpha one_minus_src_alpha contained

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*scene_blend\>" end="$" transparent contained contains=SceneBlendValueOp,SceneBlendValueFactor,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*separate_scene_blend\>" end="$" transparent contained contains=SceneBlendValueFactor,SceneBlendValue,Comment,MaterialError

syntax keyword SceneBlendOpValue add subtract reverse_subtract min max contained
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*scene_blend_op\>" end="$" transparent contained contains=SceneBlendOpValue,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*separate_scene_blend_op\>" end="$" transparent contained contains=SceneBlendOpValue,Comment,MaterialError

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*depth_check\>" end="$" transparent contained contains=OnOff,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*depth_write\>" end="$" transparent contained contains=OnOff,Comment,MaterialError

syn keyword ComparisonFunctionValue	always_fail always_pass less less_equal equal not_equal greater_equal greater contained

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*depth_func\>" end="$" transparent contained contains=ComparisonFunctionValue,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*depth_bias\>" end="$" transparent contained contains=Float,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*iteration_depth_bias\>" end="$" transparent contained contains=Float,Comment,MaterialError

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*alpha_rejection\>" end="$" transparent contained contains=ComparisonFunctionValue,Integer,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*alpha_to_coverage\>" end="$" transparent contained contains=OnOff,Comment,MaterialError

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*light_scissor\>" end="$" transparent contained contains=OnOff,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*light_clip_planes\>" end="$" transparent contained contains=OnOff,Comment,MaterialError

syntax keyword IlluminationStageValue ambient per_light decal contained
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*illumination_stage\>" end="$" transparent contained contains=IlluminationStageValue,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*normalise_normals\>" end="$" transparent contained contains=OnOff,Comment,MaterialError

syntax keyword TransparentSortingValue on off force contained
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*transparent_sorting\>" end="$" transparent contained contains=TransparentSortingValue,Comment,MaterialError

syntax keyword HardwareCullingValue clockwise anticlockwise none contained
syntax keyword SoftwareCullingValue back front none contained

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*cull_hardware\>" end="$" transparent contained contains=HardwareCullingValue,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*cull_software\>" end="$" transparent contained contains=SoftwareCullingValue,Comment,MaterialError

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*lighting\>" end="$" transparent contained contains=OnOff,Comment,MaterialError

syntax keyword ShadingType		flat gourard phong contained
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*shading\>" end="$" transparent contained contains=ShadingType,Comment,MaterialError

syntax keyword PolygonMode		solid wireframe points contained
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*polygon_mode\>" end="$" transparent contained contains=PolygonMode,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*polygon_mode_overrideable\>" end="$" transparent contained contains=Boolean,Comment,MaterialError

syntax keyword FogTypes 		none linear exp exp2 contained skipwhite nextgroup=float6
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*fog_override\>" end="$" transparent contained contains=Boolean,FogTypes,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*colour_write\>" end="$" transparent contained contains=OnOff,Comment,MaterialError

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*max_lights\>" end="$" transparent contained contains=Integer,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*start_light\>" end="$" transparent contained contains=Integer,Comment,MaterialError


syntax keyword LightType 		point directional spot contained
syntax keyword IterationFrequency	once once_per_light per_light per_n_light
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*iteration\>" end="$" transparent contained contains=LightType,IterationFrequency,Integer,Comment,MaterialError


syntax region PassAttribute		matchgroup=PassAttribute start="^\s*point_size\>" end="$" transparent contained contains=Float,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*point_sprites\>" end="$" transparent contained contains=OnOff,Comment,MaterialError

syntax keyword PointSizeAttenuationType constant linear quadratic contained
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*point_size_attenuation\>" end="$" transparent contained contains=OnOff,PointSizeAttenuationType,Comment,MaterialError

syntax region PassAttribute		matchgroup=PassAttribute start="^\s*point_size_min\>" end="$" transparent contained contains=Float,Comment,MaterialError
syntax region PassAttribute		matchgroup=PassAttribute start="^\s*point_size_max\>" end="$" transparent contained contains=Float,Comment,MaterialError

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Texture units blocks
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax region TextureUnit	 	matchgroup=TextureUnitBlock start="\<texture_unit\>" end="{"me=e-1 transparent contained contains=Comment nextgroup=TextureUnitEnd
syntax region TextureUnitEnd	matchgroup=TextureUnitBlock start="{" end="}" transparent contained contains=TextureUnitAttribute,Comment,UnknownBlock,MaterialError

" rride: let it be unsupported for now=)
" syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*texture_source\>" end="$" transparent contained contains=Comment,MaterialError
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*texture_alias\>" end="$" transparent contained contains=Comment,MaterialError

syntax keyword TextureType 			1d 2d 3d cubic contained
syntax keyword TextureParams		unlimited alpha gamma contained
syntax keyword PixelFormat		
	\	PF_L8 
	\	PF_L16 
	\	PF_A8 
	\	PF_A4L4 
	\	PF_BYTE_LA 
	\	PF_R5G6B5 
	\	PF_B5G6R5 
	\	PF_R3G3B2 
	\	PF_A4R4G4B4 
	\	PF_A1R5G5B5 
	\	PF_R8G8B8 
	\	PF_B8G8R8 
	\	PF_A8R8G8B8 
	\	PF_A8B8G8R8 
	\	PF_B8G8R8A8 
	\	PF_R8G8B8A8 
	\	PF_X8R8G8B8 
	\	PF_X8B8G8R8 
	\	PF_A2R10G10B10 
	\	PF_A2B10G10R10 
	\	PF_FLOAT16_R 
	\	PF_FLOAT16_RGB 
	\	PF_FLOAT16_RGBA 
	\	PF_FLOAT32_R 
	\	PF_FLOAT32_RGB 
	\	PF_FLOAT32_RGBA 
	\	PF_SHORT_RGBA 
	\	contained


syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*texture\>" end="$" transparent contained contains=String,TextureType,Integer,TextureParams,PixelFormat,Comment

" anim_texture <base_name> <num_frames> <duration>
"  - OR -
" anim_texture <frame1> <frame2> ... <duration>
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*anim_texture\>" end="$" transparent contained contains=String,Float,Comment,MaterialError

" Format1 (short): cubic_texture <base_name> <combinedUVW|separateUV>
" -OR-
" Format2 (long): cubic_texture <front> <back> <left> <right> <up> <down> separateUV
syntax keyword CubicTextureUsageMode combinedUVW separateUV contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*cubic_texture\>" end="$" transparent contained contains=String,CubicTextureUsageMode,Comment,MaterialError

" binding_type <vertex|fragment>
syntax keyword TextureUnitBindingType vertex fragment contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*binding_type\>" end="$" transparent contained contains=TextureUnitBindingType,Comment,MaterialError

" content_type <named|shadow|compositor> [<Referenced Compositor Name>] [<Referenced Texture Name>] [<Referenced MRT Index>] 
syntax keyword TextureContentType	named shadow compositor contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*content_type\>" end="$" transparent contained contains=TextureContentType,Comment,MaterialError

" tex_coord_set <set_num>
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*tex_coord_set\>" end="$" transparent contained contains=Integer,Comment,MaterialError

"tex_address_mode <uvw_mode> 
"tex_address_mode <u_mode> <v_mode> [<w_mode>]
syntax keyword TexAddressModeType	wrap clamp mirror border contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*tex_address_mode\>" end="$" transparent contained contains=TexAddressModeType,Comment,MaterialError

" tex_border_colour <red> <green> <blue> [<alpha>]
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*tex_border_colour\>" end="$" transparent contained contains=ColorValue,Comment,MaterialError

" filtering <none|bilinear|trilinear|anisotropic>
" -OR-
" filtering <minification> <magnification> <mip>
syntax keyword TextureFilteringType none bilinear trilinear anisotropic point linear contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*filtering\>" end="$" transparent contained contains=TextureFilteringType,Comment,MaterialError

syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*max_anisotropy\>" end="$" transparent contained contains=Integer,Comment,MaterialError
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*mipmap_bias\>" end="$" transparent contained contains=Comment,MaterialError

" colour_op <replace|add|modulate|alpha_blend>
syntax keyword TextureUnitColorOp replace add modulate alpha_blend contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*colour_op\>" end="$" transparent contained contains=Comment,MaterialError

" colour_op_ex <operation> <source1> <source2> [<manual_factor>] [<manual_colour1>] [<manual_colour2>]
syntax keyword TextureUnitColorOpEx source1 source2 modulate modulate_x2 modulate_x4 add add_signed add_smooth contained
syntax keyword TextureUnitColorOpEx subtract blend_diffuse_alpha blend_texture_alpha blend_current_alpha contained
syntax keyword TextureUnitColorOpEx blend_manual dotproduct blend_diffuse_colour src_current src_texture src_diffuse src_specular src_manual contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*colour_op_ex\>" end="$" transparent contained contains=TextureUnitColorOpEx,Comment,MaterialError

syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*colour_op_multipass_fallback\>" end="$" transparent contained contains=SceneBlendValueFactor,Comment,MaterialError

syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*alpha_op_ex\>" end="$" transparent contained contains=TextureUnitColorOpEx,Comment,MaterialError

syntax keyword EnvMap				off spherical planar cubic_reflection cubic_normal contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*env_map\>" end="$" transparent contained contains=EnvMap,Comment,MaterialError

syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*scroll\>" end="$" transparent contained contains=Float,Comment,MaterialError
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*scroll_anim\>" end="$" transparent contained contains=Float,Comment,MaterialError
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*rotate\>" end="$" transparent contained contains=Float,Comment,MaterialError
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*rotate_anim\>" end="$" transparent contained contains=Float,Comment,MaterialError
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*scale\>" end="$" transparent contained contains=Float,Comment,MaterialError

" wave_xform <xform_type> <wave_type> <base> <frequency> <phase> <amplitude>
syntax keyword TextureUnitXformType scroll_x scroll_y rotate scale_x scale_y contained
syntax keyword TextureUnitWaveType	sine triangle square sawtooth inverse_sawtooth contained
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*wave_xform\>" end="$" transparent contained contains=TextureUnitXformType,TextureUnitWaveType,Comment,MaterialError
syntax region TextureUnitAttribute	matchgroup=TextureUnitAttribute	start="^\s*transform\>" end="$" transparent contained contains=Float16,Comment,MaterialError


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" GPU program references syntax
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax region GpuProgramRef 		matchgroup=GpuProgramRef start="\(\<vertex_program_ref\>\)\|\(\<fragment_program_ref\>\)\|\(\<geometry_program_ref\>\)" end="{"me=e-1 transparent contained contains=Comment nextgroup=GpuProgramRefBlock
syntax region GpuProgramRefBlock	matchgroup=GpuProgramRef start="{" end="}" transparent contained contains=GpuProgramParams,GpuSharedParamsRef,Comment,MaterialError


syntax keyword GpuAutoParamType
	\ 	world_matrix
	\ 	inverse_world_matrix
	\	transpose_world_matrix
	\	inverse_transpose_world_matrix
	\	world_matrix_array_3x4
	\	view_matrix
	\	inverse_view_matrix
	\	transpose_view_matrix
	\	inverse_transpose_view_matrix
	\	projection_matrix
	\	inverse_projection_matrix
	\	transpose_projection_matrix
	\	inverse_transpose_projection_matrix
	\	worldview_matrix
	\	inverse_worldview_matrix
	\	transpose_worldview_matrix
	\	inverse_transpose_worldview_matrix
	\	viewproj_matrix
	\	inverse_viewproj_matrix
	\	transpose_viewproj_matrix
	\	inverse_transpose_viewproj_matrix
	\	worldviewproj_matrix
	\	inverse_worldviewproj_matrix
	\	transpose_worldviewproj_matrix
	\	inverse_transpose_worldviewproj_matrix
	\	texture_matrix
	\	render_target_flipping
	\	vertex_winding
	\	light_diffuse_colour
	\	light_specular_colour
	\	light_attenuation
	\	spotlight_params
	\	light_position
	\	light_direction
	\	light_position_object_space
	\	light_direction_object_space
	\	light_distance_object_space
	\	light_position_view_space
	\	light_direction_view_space
	\	light_power
	\	light_diffuse_colour_power_scaled
	\	light_specular_colour_power_scaled
	\	light_number
	\	light_diffuse_colour_array
	\	light_specular_colour_array
	\	light_diffuse_colour_power_scaled_array
	\	light_specular_colour_power_scaled_array
	\	light_attenuation_array
	\	spotlight_params_array
	\	light_position_array
	\	light_direction_array
	\	light_position_object_space_array
	\	light_direction_object_space_array
	\	light_distance_object_space_array
	\	light_position_view_space_array
	\	light_direction_view_space_array
	\	light_power_array
	\	light_count
	\	light_casts_shadows
	\	ambient_light_colour
	\	surface_ambient_colour
	\	surface_diffuse_colour
	\	surface_specular_colour
	\	surface_emissive_colour
	\	surface_shininess
	\	derived_ambient_light_colour
	\	derived_scene_colour
	\	derived_light_diffuse_colour
	\	derived_light_specular_colour
	\	derived_light_diffuse_colour_array
	\	derived_light_specular_colour_array
	\	fog_colour
	\	fog_params
	\	camera_position
	\	camera_position_object_space
	\	lod_camera_position
	\	lod_camera_position_object_space
	\	time
	\	time_0_x
	\	costime_0_x
	\	sintime_0_x
	\	tantime_0_x
	\	time_0_x_packed
	\	time_0_1
	\	costime_0_1
	\	sintime_0_1
	\	tantime_0_1
	\	time_0_1_packed
	\	time_0_2pi
	\	costime_0_2pi
	\	sintime_0_2pi
	\	tantime_0_2pi
	\	time_0_2pi_packed
	\	frame_time
	\	fps
	\	viewport_width
	\	viewport_height
	\	inverse_viewport_width
	\	inverse_viewport_height
	\	viewport_size
	\	texel_offsets
	\	view_direction
	\	view_side_vector
	\	view_up_vector
	\	fov
	\	near_clip_distance
	\	far_clip_distance
	\	texture_viewproj_matrix
	\	texture_viewproj_matrix_array
	\	texture_worldviewproj_matrix
	\	texture_worldviewproj_matrix_array
	\	spotlight_viewproj_matrix
	\	spotlight_worldviewproj_matrix
	\	scene_depth_range
	\	shadow_scene_depth_range
	\	shadow_colour
	\	shadow_extrusion_distance
	\	texture_size
	\	inverse_texture_size
	\	packed_texture_size
	\	pass_number
	\	pass_iteration_number
	\	animation_parametric
	\	custom
	\ contained


syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<param_named\>" end="$" transparent contained contains=GpuType,Float,Comment
syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<param_named_auto\>" end="$" transparent contained contains=GpuAutoParamType,GpuType,Float,Comment
syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<param_indexed\>" end="$" transparent contained contains=GpuType,Float,Comment
syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<param_indexed_auto\>" end="$" transparent contained contains=GpuAutoParamType,GpuType,Float,Comment
syntax region GpuSharedParamsRef matchgroup=GpuSharedParamsRef start="\<shared_params_ref\>" end="$" transparent contained contains=Comment


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" GPU program block
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

synta keyword GpuProgramType 	asm hlsl cg glsl contained
syntax region GpuProgram 		matchgroup=GpuProgram start="\(\<vertex_program\>\)\|\(\<fragment_program\>\)\|\(\<geometry_program\>\)" end="{"me=e-1 transparent contains=GpuProgramType,Comment nextgroup=GpuProgramBlock
syntax region GpuProgramBlock	matchgroup=GpuProgram start="{" end="}" transparent contained contains=GpuProgramAttribute,DefaultGPUProgramParams,Comment,MaterialError

syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<source\>" end="$" transparent contained contains=String,Comment
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<entry_point\>" end="$" transparent contained contains=Comment

syntax keyword GpuProgramSyntax 
	\	vs_1_1 
	\	vs_2_0 
	\	vs_2_x 
	\	vs_3_0 
	\	arbvp1 
	\	vp20 
	\	vp30 
	\	vp40 
	\	ps_1_1 ps_1_2 ps_1_3 
	\	ps_1_4 
	\	ps_2_0 
	\	ps_2_x 
	\	ps_3_0 
	\	ps_3_x 
	\	arbfp1 
	\	fp20 
	\	fp30 
	\	fp40 
	\	gpu_gp gp4_gp 


syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<profiles\>" end="$" transparent contained contains=GpuProgramSyntax,Comment,MaterialError
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<syntax\>" end="$" transparent contained contains=GpuProgramSyntax,Comment,MaterialError
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<target\>" end="$" transparent contained contains=GpuProgramSyntax,Comment,MaterialError
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<manual_named_constants\>" end="$" transparent contained contains=Comment

syntax match PreProc 			  "\i\+" contained
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<preprocessor_defines\>" end="$" transparent contained contains=PreProc,Comment

syntax region DefaultGPUProgramParams matchgroup=GpuProgram start="\<default_params\>" end="{"me=e-1 transparent contained contains=Comment nextgroup=GpuProgramRefBlock

"""""""""""
" attributes for high-level GPU programs
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<includes_skeletal_animation\>" end="$" transparent contained contains=Boolean,Comment,MaterialError
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<includes_morph_animation\>" end="$" transparent contained contains=Boolean,Comment,MaterialError
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<uses_vertex_texture_fetch\>" end="$" transparent contained contains=Boolean,Comment,MaterialError
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<uses_adjacency_information\>" end="$" transparent contained contains=Boolean,Comment,MaterialError
syntax region GpuProgramAttribute matchgroup=GpuProgramAttribute start="\<includes_pose_animation\>" end="$" transparent contained contains=Integer,Comment,MaterialError


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Gpu programs shared params
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
syntax region GpuProgramSharedParamsBlock matchgroup=GpuProgramRef start="\<shared_params\>" end="{"me=e-1 transparent contained contains=Comment nextgroup=GpuProgramSharedParamsBlockEnd
syntax region GpuProgramSharedParamsBlockEnd matchgroup=GpuProgramRef start="{" end="}" transparent contained contains=GpuProgramParams,GpuSharedParamsRef,Comment,MaterialError

syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<shared_param_named\>" end="$" transparent contained contains=GpuType,Float,Comment
syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<shared_param_named_auto\>" end="$" transparent contained contains=GpuAutoParamType,GpuType,Float,Comment
syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<shared_param_indexed\>" end="$" transparent contained contains=GpuType,Float,Comment
syntax region GpuProgramParams matchgroup=GpuProgramParams start="\<shared_param_indexed_auto\>" end="$" transparent contained contains=GpuAutoParamType,GpuType,Float,Comment
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Finalization
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"syntax region MaterialAttribute 
if version >= 508 || !exists("did_test_syntax_inits")
	if version < 508
		let did_lua_syntax_inits = 1
		command -nargs=+ HiLink hi link <args>
	else
		command -nargs=+ HiLink hi link <args>
	endif
	HiLink OnOff				Boolean
	HiLink MaterialError		Error

	HiLink Integer				Number

	HiLink Float				Number
	HiLink Float4				Number
	HiLink Float16				Number
	HiLink Float6				Number

	HiLink GpuType				Type

	HiLink AbstractBlock 		Keyword
	"material highlight defs
	HiLink MaterialBlock 		Structure
	HiLink MaterialAttribute 	Statement
	HiLink MaterialLodStrategy 	Constant

	" technique highlighting defs
	HiLink TechniqueBlock 		Structure
	HiLink TechniqueAttribute	Statement
	HiLink InclusionType	 	Constant

	" pass highlighting defs
	HiLink PassBlock 			Structure
	HiLink PassAttribute		Statement

	HiLink SpecularValue 		Constant
	HiLink PolygonMode			Constant
	HiLink FogTypes				Constant
	HiLink ShadingType			Constant
	HiLink SoftwareCullingValue Constant
	HiLink HardwareCullingValue Constant
	HiLink SceneBlendValueOp		Constant
	HiLink SceneBlendValueFactor	Constant
	HiLink SceneBlendOpValue 		Constant
	HiLink ComparisonFunctionValue	Constant
	HiLink IlluminationStageValue 	Constant
	HiLink TransparentSortingValue 	Constant
	HiLink LightType			Constant
	HiLink IterationFrequency	Constant	

	" taxture unit highlighting defs
	HiLink TextureUnitBlock 	Structure
	HiLink TextureUnitAttribute	Statement

	HiLink TextureType			Constant
	HiLink TextureParams		Constant
	HiLink PixelFormat			Constant
	HiLink CubicTextureUsageMod Constant
	HiLink TextureUnitBindingType Constant
	HiLink TextureContentType Constant

	HiLink TexAddressModeType Constant
	HiLink TextureFilteringType Constant
	HiLink TextureUnitColorOp Constant
	HiLink TextureUnitColorOpEx Constant
	HiLink EnvMap Constant
	HiLink TextureUnitXformType Constant
	HiLink TextureUnitWaveType Constant
	
	" gpu program refs
	HiLink GpuProgramRef 	Structure
	HiLink GpuProgramParams Statement
	HiLink GpuSharedParamsRef Statement

	" gpu programs secition
	HiLink GpuProgram		Structure
	HiLink GpuProgramAttribute	Statement
	HiLink GpuProgramType	Constant

	HiLink GpuAutoParamType Identifier

	delcommand HiLink
endif

let b:current_syntax = "ogrematerial"

HOWTO use:


Just drop this in your .vim\syntax directory as ogrematerial.vim

Your .vim\filetype.vim file will probably need something like this to set your filetype automatically.

au BufNewFile,BufRead    *.material            setf ogrematerial    " [Feral:176/05@19:09] OGRE3d's material files


Smart Indentation

By default vim uses C indentation for material files. This is irritating because Ogre scripts does not have semicolons end of each statement.
Here is a simple indent script to add proper indentation for .material, .program and .particle files.

Save this file in vim/indent folder named as 'ogrematerial.vim'.

if exists("b:did_indent")
    finish
endif
let b:did_indent = 1

setlocal nolisp
setlocal autoindent
setlocal indentexpr=OgreIndent(v:lnum)
setlocal indentkeys+=<:>,0=},0=)

if exists("*OgreIndent")
  finish
endif

function! OgreIndent(lnum)
  let prevlinenum = prevnonblank(a:lnum-1)
  if prevlinenum == 0
    return 0
  endif

  let pl = substitute(getline(prevlinenum), '//.*$', '', '')
  let thisl = substitute(getline(a:lnum), '//.*$', '', '')
  let previ = indent(prevlinenum)

  let ind = previ

  if pl =~ '{\s*$'
    let ind += &sw
  endif

  if thisl =~ '^\s*}'
    let ind -= &sw
  endif

  return ind
endfunction


Add these commands to your vimrc file.

"runs the correct indentation file when Ogre scripts are loaded
au BufNewFile,BufRead *.material runtime! indent/ogrematerial.vim
au BufNewFile,BufRead *.program runtime! indent/ogrematerial.vim
au BufNewFile,BufRead *.particle runtime! indent/ogrematerial.vim

Tip: Press gg=G for full file formatting.