lambdacube-engine-0.2.1: Graphics/LambdaCube/Loader/MaterialScriptScanner.x
{
{-# OPTIONS_GHC -w #-}
-- alex scanner for use with uulib
-- compile with alex -o Scanner.hs -g Scanner.x
module Graphics.LambdaCube.Loader.Generated.MaterialScriptScanner(tokenize) where
import UU.Scanner
}
$litChar = [^[\" \\]]
$identChar = [a-zA-Z0-9_\.\-\/\~\[\]]
tokens :-
$white+ ; -- whitespace
"//".* ; -- comment
\" ($litChar | \\ \\ | \\ \" )* \" { valueToken TkString } -- string
(\+ | \-)?[0-9]+ { valueToken TkInteger10 } -- int
(\+ | \-)?[0-9]+\.[0-9]+ { valueToken TkFraction } -- float
(
on | off | true | false | force |
material | technique | pass | texture_unit |
lod_distances | receive_shadows | transparency_casts_shadows | set_texture_alias |
scheme | lod_index | lod_distances | shadow_caster_material | shadow_receiver_material |
gpu_vendor_rule | gpu_device_rule | include | exclude | case_sensitive |
ambient | vertexcolour | diffuse | specular | emissive | scene_blend |
add | modulate | alpha_blend | colour_blend |
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 |
separate_scene_blend | depth_check | depth_write | depth_func |
always_fail | always_pass | less | less_equal | equal | not_equal | greater_equal | greater |
depth_bias | iteration_depth_bias | alpha_rejection | alpha_to_coverage | light_scissor | light_clip_planes |
illumination_stage | per_light | decal | normalise_normals | transparent_sorting | cull_hardware |
clockwise | anticlockwise | none | cull_software | back | front | lighting | shading |
flat | gouraud | phong | polygon_mode | solid | wireframe | points |
polygon_mode_overrideable | fog_override | exp | exp2 | colour_write | start_light | max_lights | iteration |
once | once_per_light | directional | spot | point_size | point_sprites | point_size_attenuation |
point_size_min | point_size_max | texture_alias | texture | unlimited | alpha | gamma |
1d | 2d | 3d | cubic |
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 |
anim_texture | cubic_texture | combinedUVW | separateUV | binding_type | vertex | fragment | content_type | named | shadow |
tex_coord_set | tex_address_mode | wrap | clamp | mirror | border | tex_border_colour | filtering | bilinear | trilinear | anisotropic | linear | point |
max_anisotropy | mipmap_bias | colour_op | replace | colour_op_ex | source1 | source2 | modulate_x2 | modulate_x4 |
add_signed | add_smooth | subtract | blend_diffuse_alpha | blend_texture_alpha | blend_current_alpha |
blend_manual | dotproduct | blend_diffuse_colour | src_current | src_texture | src_diffuse | src_specular | src_manual |
colour_op_multipass_fallback | alpha_op_ex | env_map | spherical | planar | cubic_reflection | cubic_normal |
scroll | scroll_anim | rotate | rotate_anim | scale | wave_xform | scroll_x | scroll_y | scale_x | scale_y |
sine | triangle | square | sawtooth | inverse_sawtooth | transform |
scene_blend_op | reverse_subtract | min | max | separate_scene_blend_op |
keep | increment | decrement | increment_wrap | decrement_wrap | invert |
vertex_program | fragment_program | source | syntax | attach | manual_named_constants | profiles | entry_point |
target | preprocessor_defines | column_major_matrices |
input_operation_type | output_operation_type | max_output_vertices |
delegate | vertex_program_ref |fragment_program_ref | shadow_caster_vertex_program_ref | shadow_receiver_vertex_program_ref | shadow_receiver_fragment_program_ref |
default_params | param_named_auto | param_named | param_indexed_auto | param_indexed |
includes_skeletal_animation | includes_morph_animation | includes_pose_animation | uses_vertex_texture_fetch | uses_adjacency_information |
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 | 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
) { reserved } -- reserved keywords
[\{\}] { reserved } -- reserved symbols
$identChar+ { valueToken TkVarid } -- identifier
{
-- boilerplate code needed for Alex
type AlexInput = (Pos, String)
alexInputPrevChar :: AlexInput -> Char
alexInputPrevChar = error "alexInputPrevChar: there is no need to go back in the input."
alexGetChar :: AlexInput -> Maybe (Char, AlexInput)
alexGetChar (_, []) = Nothing
alexGetChar (p, (c:cs))
= let p' = adv p c
in Just (c, (p', cs))
-- use the Alex scanner to generate a list of tokens for the uulib token parsers
tokenize :: String -> String -> [Token]
tokenize filename str
= go (initpos, str)
where
initpos = Pos 1 1 filename
go inp@(pos, cs)
= case alexScan inp 0 of
AlexEOF -> []
AlexError inp' -> valueToken TkError [head cs] pos : go inp'
AlexSkip inp' _ -> go inp'
AlexToken inp' len act -> act (take len cs) pos : go inp'
}