# Style sheet for Pov-Ray
# Copyright (c) 2000 Jean-Baptiste Nivoit
# Inspired by c.ssh & cpp.ssh

#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING.  If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#

style "Pov-Ray" is

written by "Jean-Baptiste Nivoit <jbnivoit@multimania.com>"
version is 1.0
requires a2ps version 4.13

documentation is
  "Should handle Persistence Of Vision input files."
end documentation

alphabets are
   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_#%"
case sensitive

# Looks a lot like C preprocessor keywords...
keywords in Keyword are
   /^#[ ]*(declare|debug|version|e(l(if|se)|nd)|i(f(|def|ndef)|nclude)|undef)/
end keywords

# tokens taken from source/tokenize.c in povray3 source
keywords in Keyword_strong are

   aa_level, aa_threshold, abs, acos, acsh, adaptive, adc_bailout,
   agate, agate_turb, all, alpha, ambient_light, ambient, angle,
   aperture, arc_angle, area_light, asc, asin, asinh, assumed_gamma,
   atan, atan2, atanh, atmosphere, atmospheric_attenuation,
   attenuating, average, background, bicubic_patch, black_hole, blob,
   blue, blur_samples, bounded_by, box_mapping, box, bozo, break,
   brick_size, brick, brightness, brilliance, bumps, bump_map,
   bump_size, camera, "case", caustics, ceil, checker, chr,
   clipped_by, clock, colour, color_map, color, component, composite,
   concat, cone, confidence, conic_sweep, constant, cos, cosh, count,
   crackle, crand, cube, cubic_spline, cubic, cylinder,
   cylindrical_mapping, default, degrees, dents, difference, diffuse,
   direction, disc, distance_maximum, distance, div, dust, dust_type,
   else, emitting, error_bound, error, eccentricity, exponent, exp,
   fade_distance, fade_power, falloff_angle, falloff, false,
   file_exists, shadowless, filter, finish, fisheye, flatness, flip,
   float, floor, focal_point, fog_alt, fog, fog_offset, fog_type,
   frequency, gif, global_settings, glowing, gradient, granite,
   gray_threshold, green, halo, height_field, hexagon, hf_gray_16,
   hierarchy, hollow, hypercomplex, iff, image_map, incidence,
   interpolate, intersection, int, inverse, ior, irid,
   irid_wavelength, jitter, julia_fractal, lambda, lathe, leopard,
   light_source, linear_spline, linear_sweep, linear, location, log,
   looks_like, look_at, low_error_factor, mandel, map_type, marble,
   material_map, matrix, max_intersections, max_iteration, max,
   max_trace_level, max_value, merge, mesh, metallic, minimum_reuse,
   min, mod, mortar, nearest_count, normal_map, no_shadow, no,
   number_of_waves, object, octaves, offset, off, omega, omnimax,
   once, onion, on, open, orthographic, panoramic, perspective, pgm,
   phase, phong_size, phong, pigment_map, pigment, pi, planar_mapping,
   plane, png, point_at, polygon, poly, pot, pow, ppm, precision,
   prism, pwr, quadratic_spline, quadric, quartic, quaternion,
   quick_color, quick_colour, quilted, radial, radians, radiosity,
   radius, rainbow, ramp_wave, rand, range, reciprocal,
   recursion_limit, red, reflection, refraction, render, repeat,
   rgbft, rgbf, rgbt, rgb, right, ripples, rotate, roughness, samples,
   scale, scallop_wave, scattering, seed, sine_wave, sin, sinh,
   sky_sphere, sky, slice, slope_map, smooth, smooth_triangle, sor,
   specular, sphere, spherical_mapping, spiral, spotlight, spotted,
   sqr, sqrt, statistics, strcmp, strength, string, strlen, strlwr,
   strupr, str, sturm, substr, superellipsoid, switch, sys, t, tan,
   tanh, texture_map, texture, text, tga, thickness, threshold,
   tightness, tiles, normal, torus, track, transform, translate,
   transmit, triangle, triangle_wave, true, ttf, turbulence,
   turb_depth, type, ultra_wide_angle, union, up, use_color,
   use_colour, use_index, u_steps, u, val, variance, vaxis_rotate,
   vcross, vdot, vector, vlength, vnormalize, volume_object,
   volume_rendered, vol_with_light, vrotate, v_steps, v, warning,
   warp, water_level, waves, while, width, wood, wrinkles, x, yes, y,
   z

end keywords


optional operators are
   "&",
   "@",
   "`",
   # \\,
   "|",
   ":",
   "-",
   "$",
   "=",
   "^",
   "<",
   "(",
   "[",
   "%",
   ".",
   "+",
   "?",
   ">=",
   "<=",
   "!=",
   ">",
   "}",
   ")",
   ";",
   "'",
   "]",
   "*",
   "/",
   "~",
   ! \not
end operators

sequences are
    "/*" Comment "*/",
    "//" Comment,
    C-string
end sequences

end style
