diff --git a/parser/nodes.h b/parser/nodes.h index fa84c60..4b855dc 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -552,6 +552,13 @@ class SubtractNode : public Node virtual NodeRef evaluate() { return new SubtractNode(); } }; +class TextureNode : public IdentifierNode +{ + public: + TextureNode(const std::string & str) : IdentifierNode(str) {} + virtual NodeRef evaluate() { return new TextureNode(m_string); } +}; + class TranslateNode : public VectorNode { public: diff --git a/parser/parser.lex b/parser/parser.lex index 9ea6d71..a78ce43 100644 --- a/parser/parser.lex +++ b/parser/parser.lex @@ -90,6 +90,7 @@ size return SIZE; specular return SPECULAR; sphere return SPHERE; subtract return SUBTRACT; +texture return TEXTURE; translate return TRANSLATE; transparency return TRANSPARENCY; union return UNION; diff --git a/parser/parser.yy b/parser/parser.yy index 573dfed..c658dce 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -103,6 +103,7 @@ refptr parser_scope; %token SPECULAR; %token SPHERE; %token SUBTRACT; +%token TEXTURE; %token TRANSLATE; %token TRANSPARENCY; %token UNION; @@ -208,6 +209,7 @@ general_item: AMBIENT vector3 { $$ = new AmbientNode($2); } | SIZE vector3 { $$ = new SizeNode($2); } | SPECULAR vector3 { $$ = new SpecularNode($2); } | stmt_expression { $$ = $1; } + | TEXTURE STRING { $$ = new TextureNode($2->getString()); } | transform_block { $$ = $1; } | TRANSLATE vector3 { $$ = new TranslateNode($2); } | TRANSPARENCY expression { $$ = new TransparencyNode($2); } diff --git a/vim/syntax/fart.vim b/vim/syntax/fart.vim index 884f07c..15e1a0e 100644 --- a/vim/syntax/fart.vim +++ b/vim/syntax/fart.vim @@ -10,7 +10,7 @@ endif syn case match -syn keyword fartKeywords ambient ambient_occlusion color define diffuse exposure height jitter look_at material max_depth multisample ngon offset polygon position radius reflectance refraction rotate scale shininess size specular translate transparency union up vfov width +syn keyword fartKeywords ambient ambient_occlusion color define diffuse exposure height jitter look_at material max_depth multisample ngon offset polygon position radius reflectance refraction rotate scale shininess size specular texture translate transparency union up vfov width syn keyword fartObjects box camera cyl extrude intersect light options plane scene shape sphere subtract union syn keyword fartControl for while if else elsif local syn match fartNumber "\(^\|\W\)\@<=[+-]\=\(\d\+\)\=\.\=\d\+\([eE][+-]\=\d\+\)\="