TODO list and scratch pad for Structure Synth. /Mikael

- Update website

Structure Synth 1.5.0 ("Hinxton") Released
------------------------------------------
Structure Synth is a tool for generating 3D structures from recursive rules. The structures are often complex and surprising.
Structure Synth integrates with third-party renderers (such as Sunflow and POV-Ray) using a flexible template based export system.

Binaries for Windows (XP and Vista).
Mac binaries available soon.
Linux is source only.

Download instructions at:
http://structuresynth.sourceforge.net/download.php

New major features (since 1.0.0):
- Integrated raytracer
- JavaScript integration (for building animations).
- OBJ exporter (supporting all primitives and tagging)

Minor features:
- Added 'random[-2,3]' for preprocessor generated random numbers (uniform distributed).
- Added 'show coordinate system'.
- Added option to Template Export Dialog to Autosave Eisenscript. The Autosave includes the random seed and camera settings. 
- Context menu with command help in editor window.
- Proper sorting of transparent OpenGL objects.
- Added a patch by François Beaune to support Appleseed.
- GUI Refactoring.

For more information see:
http://structuresynth.sourceforge.net/


- Website: 
    - add section links.
    - tutorials: 'EisenScript Kata'

- JanJacobSV has some interesting 3D experiments with CFDG and Virtools. http://www.youtube.com/watch?v=KWgQ8XIPAio






EisenScript
-----------

Structures are specified in EisenScript (named after the russian film director Sergei Eisenstein). 

EisenScript is processed by the Eisenstein Engine by the following steps:
1) Preprocessor (strips comments imports '#include' statements).
2) Tokenizer (divides string input into symbols. The string input is split at any white space (except if it occurs inside quotes).)  
3) Parser (standard recursive descent parser). The parser creates a 'ruleset' from the text input. 
4) Name resolving. Rules contain symbolic references to other rules. These symbols must be resolved.

The EBNF notation for EisenScript looks like this:

program = { set | rule } ;
rule = 'RULE' ,  rule_name , [ weight ] , '{' , { set | action } , '}' ;
action = { transformationloop } [transformationlist] rule_ref ;
transformationloop = number , '*' , transformationlist ;
transformationlist = '{' , { transformation } , '}';
transformation = 'X' , number |                      // translations
                 'Y' , number |
                 'Z' , number |
                 'RX', number |						 // rotation about axis
                 'RY', number |
                 'RZ', number |
                 'S', number |						 // resizing (all axis equal)
                 'S', number number number, 		 // resizing for x,y,z individually
                 
set = 'SET' , var_name , string ;

'rule_ref', 'var_name', and 'string' are text strings with a reasonable set of allowed characters.
Though not strictly a part of the syntax, a few rules are provided as predefined primitives in Structure Synth:

Primitives: 
-----------
box      - solid box
grid	 - wireframe box
sphere   - 
line     - along x axis, centered in y,z plane.
point    - centered in coordinate system.
cylinder - the symmetry axis will be the current x axis.
pbox     - continues box (will be drawn smoothly as the coordinate system transforms).
pcylinder- polygonal cylinder (will be drawn smoothly as the coordinate system transforms).
tube     - (With number of division)

