
Hi, i am trying to use boost.wave as a preprocessor for OpenGL Shading Language shader files (GLSL). GLSL uses a limited C/C++ preprocessor (no included etc.). I want to use boost.wave to handle the includes correctly besides generally gaining a more powerful preprocessor. Now the problem is that there a special preprocessor directives in GLSL that the compiler itself has to handle. I am speaking of the #version and #extension directives. I hoped boost.wave would provide the possibility to add special directives that the client code then can handle properly. Currently I use the context hook as follows: class glsl_preprocessing_hook : public boost::wave::context_policies::default_preprocessing_hooks { public: template <typename ContextT> void throw_exception(ContextT const &ctx, std::exception const& e) { throw e; } template <typename ContextT> void throw_exception(ContextT const &ctx, boost::wave::preprocess_exception const& e) { // just ignore ill formed directives (version, exception...) and let the glsl compiler handle these if(e.get_errorcode() != boost::wave::preprocess_exception::ill_formed_directive) { throw e; } } }; This just ignores the ill formed directives, but may still let unwanted errors through. Would it be possible to extend boost.wave in a way to be able feed the lexer or context regular expressions of the new custom directives? These could be pushed into a special hook method with the appropriate context information. I think this functionality would greatly increase the usability for C++ like languages with custom extensions to the preprocessor. Regards -chris