For Mac users using BBedit/TextWrangler for Ogre script editing, add the following files (plist xml format) to ~/Library/Application Support/TextWrangler/Language Modules/ (or the appropriate path for BBEdit) to get basic keyword and comment colouring and block recognition for .material and .particle files. Only structure (material, texture_unit, etc) and attribute (scene_blend, colour_op, etc) names are coloured, not their values, even if predefined enums (ex. scene_blend = < alpha_blend | colour_blend | add | modulate >). Since the language modules only provide one colour for all keywords, it could get a bit cluttered/unclear if such values were coloured in the same way as the attribute names, though you can always add attribute enum values to the keyword listing in your plist file if you like.

If you find that any standard Ogre attribute/struct names are missing from the material and particle keyword lists below, please add them.

OgreMaterialModule.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>BBEditDocumentType</key>
	<string>CodelessLanguageModule</string>
	<key>BBLMLanguageDisplayName</key>
	<string>Ogre Material Script</string>
	<key>BBLMLanguageCode</key>
	<string>OgMt</string>
	<key>BBLMColorsSyntax</key>
	<true/>
	<key>BBLMScansFunctions</key>
	<false/>
	<key>BBLMIsCaseSensitive</key>
	<true/>
	<key>BBLMKeywordList</key>
	<array>
		<string>abstract</string>
		<string>material</string>
		<string>lod_strategy</string>
		<string>lod_values</string>
		<string>receive_shadows</string>
		<string>transparency_casts_shadows</string>
		<string>set</string>
		<string>set_texture_alias</string>
		<string>technique</string>
		<string>scheme</string>
		<string>lod_index</string>
		<string>shadow_caster_material</string>
		<string>shadow_receiver_material</string>
		<string>gpu_vendor_rule</string>
		<string>gpu_device_rule</string>
		<string>pass</string>
		<string>ambient</string>
		<string>diffuse</string>
		<string>specular</string>
		<string>emissive</string>
		<string>scene_blend</string>
		<string>separate_scene_blend</string>
		<string>scene_blend_op</string>
		<string>separate_scene_blend_op</string>
		<string>depth_check</string>
		<string>depth_write</string>
		<string>depth_func</string>
		<string>depth_bias</string>
		<string>iteration_depth_bias</string>
		<string>alpha_rejection</string>
		<string>alpha_to_coverage</string>
		<string>light_scissor</string>
		<string>light_clip_planes</string>
		<string>illumination_stage</string>
		<string>transparent_sorting</string>
		<string>normalise_normals</string>
		<string>cull_hardware</string>
		<string>cull_software</string>
		<string>lighting</string>
		<string>shading</string>
		<string>polygon_mode</string>
		<string>polygon_mode_overrideable</string>
		<string>fog_override</string>
		<string>colour_write</string>
		<string>max_lights</string>
		<string>start_light</string>
		<string>iteration</string>
		<string>point_size</string>
		<string>point_sprites</string>
		<string>point_size_attenuation</string>
		<string>point_size_min</string>
		<string>point_size_max</string>
		<string>texture_unit</string>
		<string>texture_alias</string>
		<string>texture</string>
		<string>anim_texture</string>
		<string>cubic_texture</string>
		<string>tex_coord_set</string>
		<string>tex_address_mode</string>
		<string>tex_border_colour</string>
		<string>filtering</string>
		<string>max_anisotropy</string>
		<string>mipmap_bias</string>
		<string>colour_op</string>
		<string>colour_op_ex</string>
		<string>colour_op_multipass_fallback</string>
		<string>alpha_op_ex</string>
		<string>env_map</string>
		<string>scroll</string>
		<string>scroll_anim</string>
		<string>rotate</string>
		<string>rotate_anim</string>
		<string>scale</string>
		<string>wave_xform</string>
		<string>transform</string>
		<string>binding_type</string>
		<string>content_type</string>
		<string>texture_source</string>
		<string>filename</string>
		<string>play_mode</string>
		<string>set_T_P_S</string>
		<string>frames_per_second</string>
		<string>vertex_program</string>
		<string>source</string>
		<string>entry_point</string>
		<string>profiles</string>
		<string>default_params</string>
		<string>param_named</string>
		<string>param_named_auto</string>
		<string>syntax</string>
		<string>fragment_program</string>
		<string>vertex_program_ref</string>
		<string>fragment_program_ref</string>
		<string>delegate</string>
		<string>target</string>
		<string>param_indexed</string>
		<string>param_indexed_auto</string>
		<string>shared_params_ref</string>
		<string>shadow_caster_vertex_program_ref</string>
		<string>shadow_receiver_vertex_program_ref</string>
		<string>shadow_receiver_fragment_program_ref</string>
		<string>max_output_vertices</string>
		<string>preprocessor_defines</string>
		<string>geometry_program</string>
		<string>geometry_program_ref</string>
		<string>uses_adjacency_information</string>
	</array>
	<key>BBLMSuffixMap</key>
	<array>
		<dict>
			<key>BBLMLanguageSuffix</key>
			<string>.material</string>
		</dict>
	</array>
	<key>Language Features</key>
	<dict>
		<key>Identifier and Keyword Character Class</key>
		<string>!$%&amp;*+.,;/()&lt;;=&gt;?^~0-9A-Z_a-z@:-</string>
		<key>Open Block Comments</key>
		<string>/*</string>
		<key>Close Block Comments</key>
		<string>*/</string>
		<key>Open Line Comments</key>
		<string>//</string>
		<key>Open Statement Blocks</key>
		<string>{</string>
		<key>Close Statement Blocks</key>
		<string>}</string>
	</dict>
</dict>
</plist>


OgreParticleModule.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>BBEditDocumentType</key>
	<string>CodelessLanguageModule</string>
	<key>BBLMLanguageDisplayName</key>
	<string>Ogre Particle Script</string>
	<key>BBLMLanguageCode</key>
	<string>OgPt</string>
	<key>BBLMColorsSyntax</key>
	<true/>
	<key>BBLMScansFunctions</key>
	<false/>
	<key>BBLMIsCaseSensitive</key>
	<true/>
	<key>BBLMKeywordList</key>
	<array>
		<string>particle_system</string>
		<string>quota</string>
		<string>material</string>
		<string>particle_width</string>
		<string>particle_height</string>
		<string>cull_each</string>
		<string>billboard_type</string>
		<string>billboard_origin</string>
		<string>billboard_rotation_type</string>
		<string>common_direction</string>
		<string>common_up_vector</string>
		<string>renderer</string>
		<string>sorted</string>
		<string>local_space</string>
		<string>point_rendering</string>
		<string>accurate_facing</string>
		<string>iteration_interval</string>
		<string>nonvisible_update_timeout</string>
		<string>emitter</string>
		<string>angle</string>
		<string>colour</string>
		<string>colour_range_start</string>
		<string>colour_range_end</string>
		<string>direction</string>
		<string>emission_rate</string>
		<string>position</string>
		<string>velocity</string>
		<string>velocity_min</string>
		<string>velocity_max</string>
		<string>time_to_live</string>
		<string>time_to_live_min</string>
		<string>time_to_live_max</string>
		<string>duration</string>
		<string>duration_min</string>
		<string>duration_max</string>
		<string>repeat_delay</string>
		<string>repeat_delay_min</string>
		<string>repeat_delay_max</string>
		<string>Point</string>
		<string>Box</string>
		<string>width</string>
		<string>height</string>
		<string>depth</string>
		<string>Cylinder</string>
		<string>Ellipsoid</string>
		<string>HollowEllipsoid</string>
		<string>inner_width</string>
		<string>inner_height</string>
		<string>inner_depth</string>
		<string>Ring</string>
		<string>inner_width</string>
		<string>inner_height</string>
		<string>name</string>
		<string>emit_emitter</string>
		<string>emit_emitter_quota</string>
		<string>affector</string>
		<string>LinearForce</string>
		<string>force_vector</string>
		<string>force_application</string>
		<string>ColourFader</string>
		<string>red</string>
		<string>green</string>
		<string>blue</string>
		<string>alpha</string>
		<string>ColourFader2</string>
		<string>red1</string>
		<string>green1</string>
		<string>blue1</string>
		<string>alpha1</string>
		<string>red2</string>
		<string>green2</string>
		<string>blue2</string>
		<string>alpha2</string>
		<string>state_change</string>
		<string>Scaler</string>
		<string>rate</string>
		<string>Rotator</string>
		<string>rotation_speed_range_start</string>
		<string>rotation_speed_range_end</string>
		<string>rotation_range_start</string>
		<string>rotation_range_end</string>
		<string>ColourInterpolator</string>
		<string>time0</string>
		<string>colour0</string>
		<string>time1</string>
		<string>colour1</string>
		<string>time2</string>
		<string>colour2</string>
		<string>time3</string>
		<string>colour3</string>
		<string>time4</string>
		<string>colour4</string>
		<string>time5</string>
		<string>colour5</string>
		<string>ColourImage</string>
		<string>image</string>
		<string>DeflectorPlane</string>
		<string>plane_point</string>
		<string>plane_normal</string>
		<string>bounce</string>
		<string>DirectionRandomiser</string>
		<string>randomness</string>
		<string>scope</string>
		<string>keep_velocity</string>
	</array>
	<key>BBLMSuffixMap</key>
	<array>
		<dict>
			<key>BBLMLanguageSuffix</key>
			<string>.particle</string>
		</dict>
	</array>
	<key>Language Features</key>
	<dict>
		<key>Identifier and Keyword Character Class</key>
		<string>!$%&amp;*+.,;/()&lt;;=&gt;?^~0-9A-Z_a-z@:-</string>
		<key>Open Block Comments</key>
		<string>/*</string>
		<key>Close Block Comments</key>
		<string>*/</string>
		<key>Open Line Comments</key>
		<string>//</string>
		<key>Open Statement Blocks</key>
		<string>{</string>
		<key>Close Statement Blocks</key>
		<string>}</string>
	</dict>
</dict>
</plist>

TODO

  • compositor script module


Aside: If someone knows how to change the name of this page, please do so to indicate that this is relevant for BBEdit as well (TextWrangler is basically just a "lite"/free version of BBEdit).