]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/brushtokens.h
reformat code! now the code is only ugly on the *inside*
[xonotic/netradiant.git] / radiant / brushtokens.h
index 9b4d4fab05caaf3b63f87c66666eda79894cdf9a..67ed452f15e49bf79a2c17d3c615c7de3b4c9757 100644 (file)
 #include "stream/stringstream.h"
 #include "brush.h"
 
-inline bool FaceShader_importContentsFlagsValue( FaceShader& faceShader, Tokeniser& tokeniser ){
-       // parse the optional contents/flags/value
-       RETURN_FALSE_IF_FAIL( Tokeniser_getInteger( tokeniser, faceShader.m_flags.m_contentFlags ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getInteger( tokeniser, faceShader.m_flags.m_surfaceFlags ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getInteger( tokeniser, faceShader.m_flags.m_value ) );
-       return true;
-}
-
-inline bool FaceTexdef_importTokens( FaceTexdef& texdef, Tokeniser& tokeniser ){
-       // parse texdef
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.shift[0] ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.shift[1] ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.rotate ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.scale[0] ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.scale[1] ) );
-
-       ASSERT_MESSAGE( texdef_sane( texdef.m_projection.m_texdef ), "FaceTexdef_importTokens: bad texdef" );
-       return true;
-}
-
-inline bool FaceTexdef_BP_importTokens( FaceTexdef& texdef, Tokeniser& tokeniser ){
-       // parse alternate texdef
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "(" ) );
-       {
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "(" ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[0][0] ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[0][1] ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[0][2] ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, ")" ) );
-       }
-       {
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "(" ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[1][0] ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[1][1] ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[1][2] ) );
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, ")" ) );
-       }
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, ")" ) );
-       return true;
-}
-
-inline bool FaceTexdef_HalfLife_importTokens( FaceTexdef& texdef, Tokeniser& tokeniser ){
-       // parse texdef
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "[" ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_basis_s.x() ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_basis_s.y() ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_basis_s.z() ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.shift[0] ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "]" ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "[" ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_basis_t.x() ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_basis_t.y() ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_basis_t.z() ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.shift[1] ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "]" ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.rotate ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.scale[0] ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getFloat( tokeniser, texdef.m_projection.m_texdef.scale[1] ) );
-
-       texdef.m_projection.m_texdef.rotate = -texdef.m_projection.m_texdef.rotate;
-
-       ASSERT_MESSAGE( texdef_sane( texdef.m_projection.m_texdef ), "FaceTexdef_importTokens: bad texdef" );
-       return true;
+inline bool FaceShader_importContentsFlagsValue(FaceShader &faceShader, Tokeniser &tokeniser)
+{
+    // parse the optional contents/flags/value
+    RETURN_FALSE_IF_FAIL(Tokeniser_getInteger(tokeniser, faceShader.m_flags.m_contentFlags));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getInteger(tokeniser, faceShader.m_flags.m_surfaceFlags));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getInteger(tokeniser, faceShader.m_flags.m_value));
+    return true;
 }
 
-inline bool FacePlane_importTokens( FacePlane& facePlane, Tokeniser& tokeniser ){
-       // parse planepts
-       for ( std::size_t i = 0; i < 3; i++ )
-       {
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "(" ) );
-               for ( std::size_t j = 0; j < 3; ++j )
-               {
-                       RETURN_FALSE_IF_FAIL( Tokeniser_getDouble( tokeniser, facePlane.planePoints()[i][j] ) );
-               }
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, ")" ) );
-       }
-       facePlane.MakePlane();
-       return true;
-}
+inline bool FaceTexdef_importTokens(FaceTexdef &texdef, Tokeniser &tokeniser)
+{
+    // parse texdef
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.shift[0]));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.shift[1]));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.rotate));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.scale[0]));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.scale[1]));
 
-inline bool FacePlane_Doom3_importTokens( FacePlane& facePlane, Tokeniser& tokeniser ){
-       Plane3 plane;
-       // parse plane equation
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "(" ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getDouble( tokeniser, plane.a ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getDouble( tokeniser, plane.b ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getDouble( tokeniser, plane.c ) );
-       RETURN_FALSE_IF_FAIL( Tokeniser_getDouble( tokeniser, plane.d ) );
-       plane.d = -plane.d;
-       RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, ")" ) );
-
-       facePlane.setDoom3Plane( plane );
-       return true;
+    ASSERT_MESSAGE(texdef_sane(texdef.m_projection.m_texdef), "FaceTexdef_importTokens: bad texdef");
+    return true;
 }
 
-inline bool FaceShader_Doom3_importTokens( FaceShader& faceShader, Tokeniser& tokeniser ){
-       const char *shader = tokeniser.getToken();
-       if ( shader == 0 ) {
-               Tokeniser_unexpectedError( tokeniser, shader, "#shader-name" );
-               return false;
-       }
-       if ( string_equal( shader, "_emptyname" ) ) {
-               shader = texdef_name_default();
-       }
-       faceShader.setShader( shader );
-       return true;
-}
+inline bool FaceTexdef_BP_importTokens(FaceTexdef &texdef, Tokeniser &tokeniser)
+{
+    // parse alternate texdef
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "("));
+    {
+        RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "("));
+        RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[0][0]));
+        RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[0][1]));
+        RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[0][2]));
+        RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, ")"));
+    }
+    {
+        RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "("));
+        RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[1][0]));
+        RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[1][1]));
+        RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_brushprimit_texdef.coords[1][2]));
+        RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, ")"));
+    }
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, ")"));
+    return true;
+}
+
+inline bool FaceTexdef_HalfLife_importTokens(FaceTexdef &texdef, Tokeniser &tokeniser)
+{
+    // parse texdef
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "["));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_basis_s.x()));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_basis_s.y()));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_basis_s.z()));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.shift[0]));
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "]"));
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "["));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_basis_t.x()));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_basis_t.y()));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_basis_t.z()));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.shift[1]));
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "]"));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.rotate));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.scale[0]));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getFloat(tokeniser, texdef.m_projection.m_texdef.scale[1]));
+
+    texdef.m_projection.m_texdef.rotate = -texdef.m_projection.m_texdef.rotate;
+
+    ASSERT_MESSAGE(texdef_sane(texdef.m_projection.m_texdef), "FaceTexdef_importTokens: bad texdef");
+    return true;
+}
+
+inline bool FacePlane_importTokens(FacePlane &facePlane, Tokeniser &tokeniser)
+{
+    // parse planepts
+    for (std::size_t i = 0; i < 3; i++) {
+        RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "("));
+        for (std::size_t j = 0; j < 3; ++j) {
+            RETURN_FALSE_IF_FAIL(Tokeniser_getDouble(tokeniser, facePlane.planePoints()[i][j]));
+        }
+        RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, ")"));
+    }
+    facePlane.MakePlane();
+    return true;
+}
+
+inline bool FacePlane_Doom3_importTokens(FacePlane &facePlane, Tokeniser &tokeniser)
+{
+    Plane3 plane;
+    // parse plane equation
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "("));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getDouble(tokeniser, plane.a));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getDouble(tokeniser, plane.b));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getDouble(tokeniser, plane.c));
+    RETURN_FALSE_IF_FAIL(Tokeniser_getDouble(tokeniser, plane.d));
+    plane.d = -plane.d;
+    RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, ")"));
 
-inline bool FaceShader_importTokens( FaceShader& faceShader, Tokeniser& tokeniser ){
-       const char* texture = tokeniser.getToken();
-       if ( texture == 0 ) {
-               Tokeniser_unexpectedError( tokeniser, texture, "#texture-name" );
-               return false;
-       }
-       if ( string_equal( texture, "NULL" ) ) {
-               faceShader.setShader( texdef_name_default() );
-       }
-       else
-       {
-               StringOutputStream shader( string_length( GlobalTexturePrefix_get() ) + string_length( texture ) );
-               shader << GlobalTexturePrefix_get() << texture;
-               faceShader.setShader( shader.c_str() );
-       }
-       return true;
+    facePlane.setDoom3Plane(plane);
+    return true;
 }
 
-
-
-
-class Doom3FaceTokenImporter
+inline bool FaceShader_Doom3_importTokens(FaceShader &faceShader, Tokeniser &tokeniser)
+{
+    const char *shader = tokeniser.getToken();
+    if (shader == 0) {
+        Tokeniser_unexpectedError(tokeniser, shader, "#shader-name");
+        return false;
+    }
+    if (string_equal(shader, "_emptyname")) {
+        shader = texdef_name_default();
+    }
+    faceShader.setShader(shader);
+    return true;
+}
+
+inline bool FaceShader_importTokens(FaceShader &faceShader, Tokeniser &tokeniser)
 {
-Face& m_face;
+    const char *texture = tokeniser.getToken();
+    if (texture == 0) {
+        Tokeniser_unexpectedError(tokeniser, texture, "#texture-name");
+        return false;
+    }
+    if (string_equal(texture, "NULL")) {
+        faceShader.setShader(texdef_name_default());
+    } else {
+        StringOutputStream shader(string_length(GlobalTexturePrefix_get()) + string_length(texture));
+        shader << GlobalTexturePrefix_get() << texture;
+        faceShader.setShader(shader.c_str());
+    }
+    return true;
+}
+
+
+class Doom3FaceTokenImporter {
+    Face &m_face;
 public:
-Doom3FaceTokenImporter( Face& face ) : m_face( face ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       RETURN_FALSE_IF_FAIL( FacePlane_Doom3_importTokens( m_face.getPlane(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceTexdef_BP_importTokens( m_face.getTexdef(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_Doom3_importTokens( m_face.getShader(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importContentsFlagsValue( m_face.getShader(), tokeniser ) );
-
-       m_face.getTexdef().m_projectionInitialised = true;
-       m_face.getTexdef().m_scaleApplied = true;
-
-       return true;
-}
+    Doom3FaceTokenImporter(Face &face) : m_face(face)
+    {
+    }
+
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        RETURN_FALSE_IF_FAIL(FacePlane_Doom3_importTokens(m_face.getPlane(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceTexdef_BP_importTokens(m_face.getTexdef(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_Doom3_importTokens(m_face.getShader(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importContentsFlagsValue(m_face.getShader(), tokeniser));
+
+        m_face.getTexdef().m_projectionInitialised = true;
+        m_face.getTexdef().m_scaleApplied = true;
+
+        return true;
+    }
 };
 
-class Quake4FaceTokenImporter
-{
-Face& m_face;
+class Quake4FaceTokenImporter {
+    Face &m_face;
 public:
-Quake4FaceTokenImporter( Face& face ) : m_face( face ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       RETURN_FALSE_IF_FAIL( FacePlane_Doom3_importTokens( m_face.getPlane(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceTexdef_BP_importTokens( m_face.getTexdef(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_Doom3_importTokens( m_face.getShader(), tokeniser ) );
+    Quake4FaceTokenImporter(Face &face) : m_face(face)
+    {
+    }
 
-       m_face.getTexdef().m_projectionInitialised = true;
-       m_face.getTexdef().m_scaleApplied = true;
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        RETURN_FALSE_IF_FAIL(FacePlane_Doom3_importTokens(m_face.getPlane(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceTexdef_BP_importTokens(m_face.getTexdef(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_Doom3_importTokens(m_face.getShader(), tokeniser));
 
-       return true;
-}
+        m_face.getTexdef().m_projectionInitialised = true;
+        m_face.getTexdef().m_scaleApplied = true;
+
+        return true;
+    }
 };
 
-class Quake2FaceTokenImporter
-{
-Face& m_face;
+class Quake2FaceTokenImporter {
+    Face &m_face;
 public:
-Quake2FaceTokenImporter( Face& face ) : m_face( face ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       RETURN_FALSE_IF_FAIL( FacePlane_importTokens( m_face.getPlane(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importTokens( m_face.getShader(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceTexdef_importTokens( m_face.getTexdef(), tokeniser ) );
-       if ( Tokeniser_nextTokenIsDigit( tokeniser ) ) {
-               m_face.getShader().m_flags.m_specified = true;
-               RETURN_FALSE_IF_FAIL( FaceShader_importContentsFlagsValue( m_face.getShader(), tokeniser ) );
-       }
-       m_face.getTexdef().m_scaleApplied = true;
-       return true;
-}
+    Quake2FaceTokenImporter(Face &face) : m_face(face)
+    {
+    }
+
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        RETURN_FALSE_IF_FAIL(FacePlane_importTokens(m_face.getPlane(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importTokens(m_face.getShader(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceTexdef_importTokens(m_face.getTexdef(), tokeniser));
+        if (Tokeniser_nextTokenIsDigit(tokeniser)) {
+            m_face.getShader().m_flags.m_specified = true;
+            RETURN_FALSE_IF_FAIL(FaceShader_importContentsFlagsValue(m_face.getShader(), tokeniser));
+        }
+        m_face.getTexdef().m_scaleApplied = true;
+        return true;
+    }
 };
 
-class Quake3FaceTokenImporter
-{
-Face& m_face;
+class Quake3FaceTokenImporter {
+    Face &m_face;
 public:
-Quake3FaceTokenImporter( Face& face ) : m_face( face ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       RETURN_FALSE_IF_FAIL( FacePlane_importTokens( m_face.getPlane(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importTokens( m_face.getShader(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceTexdef_importTokens( m_face.getTexdef(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importContentsFlagsValue( m_face.getShader(), tokeniser ) );
-       m_face.getTexdef().m_scaleApplied = true;
-       return true;
-}
+    Quake3FaceTokenImporter(Face &face) : m_face(face)
+    {
+    }
+
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        RETURN_FALSE_IF_FAIL(FacePlane_importTokens(m_face.getPlane(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importTokens(m_face.getShader(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceTexdef_importTokens(m_face.getTexdef(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importContentsFlagsValue(m_face.getShader(), tokeniser));
+        m_face.getTexdef().m_scaleApplied = true;
+        return true;
+    }
 };
 
-class Quake3BPFaceTokenImporter
-{
-Face& m_face;
+class Quake3BPFaceTokenImporter {
+    Face &m_face;
 public:
-Quake3BPFaceTokenImporter( Face& face ) : m_face( face ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       RETURN_FALSE_IF_FAIL( FacePlane_importTokens( m_face.getPlane(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceTexdef_BP_importTokens( m_face.getTexdef(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importTokens( m_face.getShader(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importContentsFlagsValue( m_face.getShader(), tokeniser ) );
-
-       m_face.getTexdef().m_projectionInitialised = true;
-       m_face.getTexdef().m_scaleApplied = true;
-
-       return true;
-}
+    Quake3BPFaceTokenImporter(Face &face) : m_face(face)
+    {
+    }
+
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        RETURN_FALSE_IF_FAIL(FacePlane_importTokens(m_face.getPlane(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceTexdef_BP_importTokens(m_face.getTexdef(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importTokens(m_face.getShader(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importContentsFlagsValue(m_face.getShader(), tokeniser));
+
+        m_face.getTexdef().m_projectionInitialised = true;
+        m_face.getTexdef().m_scaleApplied = true;
+
+        return true;
+    }
 };
 
-class QuakeFaceTokenImporter
-{
-Face& m_face;
+class QuakeFaceTokenImporter {
+    Face &m_face;
 public:
-QuakeFaceTokenImporter( Face& face ) : m_face( face ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       RETURN_FALSE_IF_FAIL( FacePlane_importTokens( m_face.getPlane(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importTokens( m_face.getShader(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceTexdef_importTokens( m_face.getTexdef(), tokeniser ) );
-       m_face.getTexdef().m_scaleApplied = true;
-       return true;
-}
+    QuakeFaceTokenImporter(Face &face) : m_face(face)
+    {
+    }
+
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        RETURN_FALSE_IF_FAIL(FacePlane_importTokens(m_face.getPlane(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importTokens(m_face.getShader(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceTexdef_importTokens(m_face.getTexdef(), tokeniser));
+        m_face.getTexdef().m_scaleApplied = true;
+        return true;
+    }
 };
 
-class HalfLifeFaceTokenImporter
-{
-Face& m_face;
+class HalfLifeFaceTokenImporter {
+    Face &m_face;
 public:
-HalfLifeFaceTokenImporter( Face& face ) : m_face( face ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       RETURN_FALSE_IF_FAIL( FacePlane_importTokens( m_face.getPlane(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceShader_importTokens( m_face.getShader(), tokeniser ) );
-       RETURN_FALSE_IF_FAIL( FaceTexdef_HalfLife_importTokens( m_face.getTexdef(), tokeniser ) );
-       m_face.getTexdef().m_scaleApplied = true;
-       return true;
-}
+    HalfLifeFaceTokenImporter(Face &face) : m_face(face)
+    {
+    }
+
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        RETURN_FALSE_IF_FAIL(FacePlane_importTokens(m_face.getPlane(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceShader_importTokens(m_face.getShader(), tokeniser));
+        RETURN_FALSE_IF_FAIL(FaceTexdef_HalfLife_importTokens(m_face.getTexdef(), tokeniser));
+        m_face.getTexdef().m_scaleApplied = true;
+        return true;
+    }
 };
 
 
-inline void FacePlane_Doom3_exportTokens( const FacePlane& facePlane, TokenWriter& writer ){
-       // write plane equation
-       writer.writeToken( "(" );
-       writer.writeFloat( facePlane.getDoom3Plane().a );
-       writer.writeFloat( facePlane.getDoom3Plane().b );
-       writer.writeFloat( facePlane.getDoom3Plane().c );
-       writer.writeFloat( -facePlane.getDoom3Plane().d );
-       writer.writeToken( ")" );
-}
-
-inline void FacePlane_exportTokens( const FacePlane& facePlane, TokenWriter& writer ){
-       // write planepts
-       for ( std::size_t i = 0; i < 3; i++ )
-       {
-               writer.writeToken( "(" );
-               for ( std::size_t j = 0; j < 3; j++ )
-               {
-                       writer.writeFloat( Face::m_quantise( facePlane.planePoints()[i][j] ) );
-               }
-               writer.writeToken( ")" );
-       }
-}
-
-inline void FaceTexdef_BP_exportTokens( const FaceTexdef& faceTexdef, TokenWriter& writer ){
-       // write alternate texdef
-       writer.writeToken( "(" );
-       {
-               writer.writeToken( "(" );
-               for ( std::size_t i = 0; i < 3; i++ )
-               {
-                       writer.writeFloat( faceTexdef.m_projection.m_brushprimit_texdef.coords[0][i] );
-               }
-               writer.writeToken( ")" );
-       }
-       {
-               writer.writeToken( "(" );
-               for ( std::size_t i = 0; i < 3; i++ )
-               {
-                       writer.writeFloat( faceTexdef.m_projection.m_brushprimit_texdef.coords[1][i] );
-               }
-               writer.writeToken( ")" );
-       }
-       writer.writeToken( ")" );
+inline void FacePlane_Doom3_exportTokens(const FacePlane &facePlane, TokenWriter &writer)
+{
+    // write plane equation
+    writer.writeToken("(");
+    writer.writeFloat(facePlane.getDoom3Plane().a);
+    writer.writeFloat(facePlane.getDoom3Plane().b);
+    writer.writeFloat(facePlane.getDoom3Plane().c);
+    writer.writeFloat(-facePlane.getDoom3Plane().d);
+    writer.writeToken(")");
 }
 
-inline void FaceTexdef_exportTokens( const FaceTexdef& faceTexdef, TokenWriter& writer ){
-       ASSERT_MESSAGE( texdef_sane( faceTexdef.m_projection.m_texdef ), "FaceTexdef_exportTokens: bad texdef" );
-       // write texdef
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.shift[0] );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.shift[1] );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.rotate );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.scale[0] );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.scale[1] );
+inline void FacePlane_exportTokens(const FacePlane &facePlane, TokenWriter &writer)
+{
+    // write planepts
+    for (std::size_t i = 0; i < 3; i++) {
+        writer.writeToken("(");
+        for (std::size_t j = 0; j < 3; j++) {
+            writer.writeFloat(Face::m_quantise(facePlane.planePoints()[i][j]));
+        }
+        writer.writeToken(")");
+    }
 }
 
-inline void FaceTexdef_HalfLife_exportTokens( const FaceTexdef& faceTexdef, TokenWriter& writer ){
-       ASSERT_MESSAGE( texdef_sane( faceTexdef.m_projection.m_texdef ), "FaceTexdef_exportTokens: bad texdef" );
-       // write texdef
-       writer.writeToken( "[" );
-       writer.writeFloat( faceTexdef.m_projection.m_basis_s.x() );
-       writer.writeFloat( faceTexdef.m_projection.m_basis_s.y() );
-       writer.writeFloat( faceTexdef.m_projection.m_basis_s.z() );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.shift[0] );
-       writer.writeToken( "]" );
-       writer.writeToken( "[" );
-       writer.writeFloat( faceTexdef.m_projection.m_basis_t.x() );
-       writer.writeFloat( faceTexdef.m_projection.m_basis_t.y() );
-       writer.writeFloat( faceTexdef.m_projection.m_basis_t.z() );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.shift[1] );
-       writer.writeToken( "]" );
-       writer.writeFloat( -faceTexdef.m_projection.m_texdef.rotate );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.scale[0] );
-       writer.writeFloat( faceTexdef.m_projection.m_texdef.scale[1] );
+inline void FaceTexdef_BP_exportTokens(const FaceTexdef &faceTexdef, TokenWriter &writer)
+{
+    // write alternate texdef
+    writer.writeToken("(");
+    {
+        writer.writeToken("(");
+        for (std::size_t i = 0; i < 3; i++) {
+            writer.writeFloat(faceTexdef.m_projection.m_brushprimit_texdef.coords[0][i]);
+        }
+        writer.writeToken(")");
+    }
+    {
+        writer.writeToken("(");
+        for (std::size_t i = 0; i < 3; i++) {
+            writer.writeFloat(faceTexdef.m_projection.m_brushprimit_texdef.coords[1][i]);
+        }
+        writer.writeToken(")");
+    }
+    writer.writeToken(")");
+}
+
+inline void FaceTexdef_exportTokens(const FaceTexdef &faceTexdef, TokenWriter &writer)
+{
+    ASSERT_MESSAGE(texdef_sane(faceTexdef.m_projection.m_texdef), "FaceTexdef_exportTokens: bad texdef");
+    // write texdef
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.shift[0]);
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.shift[1]);
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.rotate);
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.scale[0]);
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.scale[1]);
 }
 
-inline void FaceShader_ContentsFlagsValue_exportTokens( const FaceShader& faceShader, TokenWriter& writer ){
-       // write surface flags
-       writer.writeInteger( faceShader.m_flags.m_contentFlags );
-       writer.writeInteger( faceShader.m_flags.m_surfaceFlags );
-       writer.writeInteger( faceShader.m_flags.m_value );
+inline void FaceTexdef_HalfLife_exportTokens(const FaceTexdef &faceTexdef, TokenWriter &writer)
+{
+    ASSERT_MESSAGE(texdef_sane(faceTexdef.m_projection.m_texdef), "FaceTexdef_exportTokens: bad texdef");
+    // write texdef
+    writer.writeToken("[");
+    writer.writeFloat(faceTexdef.m_projection.m_basis_s.x());
+    writer.writeFloat(faceTexdef.m_projection.m_basis_s.y());
+    writer.writeFloat(faceTexdef.m_projection.m_basis_s.z());
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.shift[0]);
+    writer.writeToken("]");
+    writer.writeToken("[");
+    writer.writeFloat(faceTexdef.m_projection.m_basis_t.x());
+    writer.writeFloat(faceTexdef.m_projection.m_basis_t.y());
+    writer.writeFloat(faceTexdef.m_projection.m_basis_t.z());
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.shift[1]);
+    writer.writeToken("]");
+    writer.writeFloat(-faceTexdef.m_projection.m_texdef.rotate);
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.scale[0]);
+    writer.writeFloat(faceTexdef.m_projection.m_texdef.scale[1]);
+}
+
+inline void FaceShader_ContentsFlagsValue_exportTokens(const FaceShader &faceShader, TokenWriter &writer)
+{
+    // write surface flags
+    writer.writeInteger(faceShader.m_flags.m_contentFlags);
+    writer.writeInteger(faceShader.m_flags.m_surfaceFlags);
+    writer.writeInteger(faceShader.m_flags.m_value);
 }
 
-inline void FaceShader_exportTokens( const FaceShader& faceShader, TokenWriter& writer ){
-       // write shader name
-       if ( string_empty( shader_get_textureName( faceShader.getShader() ) ) ) {
-               writer.writeToken( "NULL" );
-       }
-       else
-       {
-               writer.writeToken( shader_get_textureName( faceShader.getShader() ) );
-       }
+inline void FaceShader_exportTokens(const FaceShader &faceShader, TokenWriter &writer)
+{
+    // write shader name
+    if (string_empty(shader_get_textureName(faceShader.getShader()))) {
+        writer.writeToken("NULL");
+    } else {
+        writer.writeToken(shader_get_textureName(faceShader.getShader()));
+    }
 }
 
-inline void FaceShader_Doom3_exportTokens( const FaceShader& faceShader, TokenWriter& writer ){
-       // write shader name
-       if ( string_empty( shader_get_textureName( faceShader.getShader() ) ) ) {
-               writer.writeString( "_emptyname" );
-       }
-       else
-       {
-               writer.writeString( faceShader.getShader() );
-       }
+inline void FaceShader_Doom3_exportTokens(const FaceShader &faceShader, TokenWriter &writer)
+{
+    // write shader name
+    if (string_empty(shader_get_textureName(faceShader.getShader()))) {
+        writer.writeString("_emptyname");
+    } else {
+        writer.writeString(faceShader.getShader());
+    }
 }
 
-class Doom3FaceTokenExporter
-{
-const Face& m_face;
+class Doom3FaceTokenExporter {
+    const Face &m_face;
 public:
-Doom3FaceTokenExporter( const Face& face ) : m_face( face ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       FacePlane_Doom3_exportTokens( m_face.getPlane(), writer );
-       FaceTexdef_BP_exportTokens( m_face.getTexdef(), writer );
-       FaceShader_Doom3_exportTokens( m_face.getShader(), writer );
-       FaceShader_ContentsFlagsValue_exportTokens( m_face.getShader(), writer );
-       writer.nextLine();
-}
+    Doom3FaceTokenExporter(const Face &face) : m_face(face)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        FacePlane_Doom3_exportTokens(m_face.getPlane(), writer);
+        FaceTexdef_BP_exportTokens(m_face.getTexdef(), writer);
+        FaceShader_Doom3_exportTokens(m_face.getShader(), writer);
+        FaceShader_ContentsFlagsValue_exportTokens(m_face.getShader(), writer);
+        writer.nextLine();
+    }
 };
 
-class Quake4FaceTokenExporter
-{
-const Face& m_face;
+class Quake4FaceTokenExporter {
+    const Face &m_face;
 public:
-Quake4FaceTokenExporter( const Face& face ) : m_face( face ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       FacePlane_Doom3_exportTokens( m_face.getPlane(), writer );
-       FaceTexdef_BP_exportTokens( m_face.getTexdef(), writer );
-       FaceShader_Doom3_exportTokens( m_face.getShader(), writer );
-       writer.nextLine();
-}
+    Quake4FaceTokenExporter(const Face &face) : m_face(face)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        FacePlane_Doom3_exportTokens(m_face.getPlane(), writer);
+        FaceTexdef_BP_exportTokens(m_face.getTexdef(), writer);
+        FaceShader_Doom3_exportTokens(m_face.getShader(), writer);
+        writer.nextLine();
+    }
 };
 
-class Quake2FaceTokenExporter
-{
-const Face& m_face;
+class Quake2FaceTokenExporter {
+    const Face &m_face;
 public:
-Quake2FaceTokenExporter( const Face& face ) : m_face( face ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       FacePlane_exportTokens( m_face.getPlane(), writer );
-       FaceShader_exportTokens( m_face.getShader(), writer );
-       FaceTexdef_exportTokens( m_face.getTexdef(), writer );
-       if ( m_face.getShader().m_flags.m_specified || m_face.isDetail() ) {
-               FaceShader_ContentsFlagsValue_exportTokens( m_face.getShader(), writer );
-       }
-       writer.nextLine();
-}
+    Quake2FaceTokenExporter(const Face &face) : m_face(face)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        FacePlane_exportTokens(m_face.getPlane(), writer);
+        FaceShader_exportTokens(m_face.getShader(), writer);
+        FaceTexdef_exportTokens(m_face.getTexdef(), writer);
+        if (m_face.getShader().m_flags.m_specified || m_face.isDetail()) {
+            FaceShader_ContentsFlagsValue_exportTokens(m_face.getShader(), writer);
+        }
+        writer.nextLine();
+    }
 };
 
-class Quake3FaceTokenExporter
-{
-const Face& m_face;
+class Quake3FaceTokenExporter {
+    const Face &m_face;
 public:
-Quake3FaceTokenExporter( const Face& face ) : m_face( face ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       FacePlane_exportTokens( m_face.getPlane(), writer );
-       FaceShader_exportTokens( m_face.getShader(), writer );
-       FaceTexdef_exportTokens( m_face.getTexdef(), writer );
-       FaceShader_ContentsFlagsValue_exportTokens( m_face.getShader(), writer );
-       writer.nextLine();
-}
+    Quake3FaceTokenExporter(const Face &face) : m_face(face)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        FacePlane_exportTokens(m_face.getPlane(), writer);
+        FaceShader_exportTokens(m_face.getShader(), writer);
+        FaceTexdef_exportTokens(m_face.getTexdef(), writer);
+        FaceShader_ContentsFlagsValue_exportTokens(m_face.getShader(), writer);
+        writer.nextLine();
+    }
 };
 
-class Quake3BPFaceTokenExporter
-{
-const Face& m_face;
+class Quake3BPFaceTokenExporter {
+    const Face &m_face;
 public:
-Quake3BPFaceTokenExporter( const Face& face ) : m_face( face ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       FacePlane_exportTokens( m_face.getPlane(), writer );
-       FaceTexdef_BP_exportTokens( m_face.getTexdef(), writer );
-       FaceShader_exportTokens( m_face.getShader(), writer );
-       FaceShader_ContentsFlagsValue_exportTokens( m_face.getShader(), writer );
-       writer.nextLine();
-}
+    Quake3BPFaceTokenExporter(const Face &face) : m_face(face)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        FacePlane_exportTokens(m_face.getPlane(), writer);
+        FaceTexdef_BP_exportTokens(m_face.getTexdef(), writer);
+        FaceShader_exportTokens(m_face.getShader(), writer);
+        FaceShader_ContentsFlagsValue_exportTokens(m_face.getShader(), writer);
+        writer.nextLine();
+    }
 };
 
-class QuakeFaceTokenExporter
-{
-const Face& m_face;
+class QuakeFaceTokenExporter {
+    const Face &m_face;
 public:
-QuakeFaceTokenExporter( const Face& face ) : m_face( face ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       FacePlane_exportTokens( m_face.getPlane(), writer );
-       FaceShader_exportTokens( m_face.getShader(), writer );
-       FaceTexdef_exportTokens( m_face.getTexdef(), writer );
-       writer.nextLine();
-}
+    QuakeFaceTokenExporter(const Face &face) : m_face(face)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        FacePlane_exportTokens(m_face.getPlane(), writer);
+        FaceShader_exportTokens(m_face.getShader(), writer);
+        FaceTexdef_exportTokens(m_face.getTexdef(), writer);
+        writer.nextLine();
+    }
 };
 
-class HalfLifeFaceTokenExporter
-{
-const Face& m_face;
+class HalfLifeFaceTokenExporter {
+    const Face &m_face;
 public:
-HalfLifeFaceTokenExporter( const Face& face ) : m_face( face ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       FacePlane_exportTokens( m_face.getPlane(), writer );
-       FaceShader_exportTokens( m_face.getShader(), writer );
-       FaceTexdef_HalfLife_exportTokens( m_face.getTexdef(), writer );
-       writer.nextLine();
-}
+    HalfLifeFaceTokenExporter(const Face &face) : m_face(face)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        FacePlane_exportTokens(m_face.getPlane(), writer);
+        FaceShader_exportTokens(m_face.getShader(), writer);
+        FaceTexdef_HalfLife_exportTokens(m_face.getTexdef(), writer);
+        writer.nextLine();
+    }
 };
 
 
-class BrushTokenImporter : public MapImporter
-{
-Brush& m_brush;
+class BrushTokenImporter : public MapImporter {
+    Brush &m_brush;
 
 public:
-BrushTokenImporter( Brush& brush ) : m_brush( brush ){
-}
-bool importTokens( Tokeniser& tokeniser ){
-       if ( Brush::m_type == eBrushTypeQuake3BP || Brush::m_type == eBrushTypeDoom3 || Brush::m_type == eBrushTypeQuake4 ) {
-               tokeniser.nextLine();
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "{" ) );
-       }
-       while ( 1 )
-       {
-               // check for end of brush
-               tokeniser.nextLine();
-               const char* token = tokeniser.getToken();
-               if ( string_equal( token, "}" ) ) {
-                       break;
-               }
-
-               tokeniser.ungetToken();
-
-               m_brush.push_back( FaceSmartPointer( new Face( &m_brush ) ) );
-
-               //!todo BP support
-               tokeniser.nextLine();
-
-               Face& face = *m_brush.back();
-
-               switch ( Brush::m_type )
-               {
-               case eBrushTypeDoom3:
-               {
-                       Doom3FaceTokenImporter importer( face );
-                       RETURN_FALSE_IF_FAIL( importer.importTokens( tokeniser ) );
-               }
-               break;
-               case eBrushTypeQuake4:
-               {
-                       Quake4FaceTokenImporter importer( face );
-                       RETURN_FALSE_IF_FAIL( importer.importTokens( tokeniser ) );
-               }
-               break;
-               case eBrushTypeQuake2:
-               {
-                       Quake2FaceTokenImporter importer( face );
-                       RETURN_FALSE_IF_FAIL( importer.importTokens( tokeniser ) );
-               }
-               break;
-               case eBrushTypeQuake3:
-               {
-                       Quake3FaceTokenImporter importer( face );
-                       RETURN_FALSE_IF_FAIL( importer.importTokens( tokeniser ) );
-               }
-               break;
-               case eBrushTypeQuake3BP:
-               {
-                       Quake3BPFaceTokenImporter importer( face );
-                       RETURN_FALSE_IF_FAIL( importer.importTokens( tokeniser ) );
-               }
-               break;
-               case eBrushTypeQuake:
-               {
-                       QuakeFaceTokenImporter importer( face );
-                       RETURN_FALSE_IF_FAIL( importer.importTokens( tokeniser ) );
-               }
-               break;
-               case eBrushTypeHalfLife:
-               {
-                       HalfLifeFaceTokenImporter importer( face );
-                       RETURN_FALSE_IF_FAIL( importer.importTokens( tokeniser ) );
-               }
-               break;
-               }
-               face.planeChanged();
-       }
-       if ( Brush::m_type == eBrushTypeQuake3BP || Brush::m_type == eBrushTypeDoom3 || Brush::m_type == eBrushTypeQuake4 ) {
-               tokeniser.nextLine();
-               RETURN_FALSE_IF_FAIL( Tokeniser_parseToken( tokeniser, "}" ) );
-       }
-
-       m_brush.planeChanged();
-       m_brush.shaderChanged();
-
-       return true;
-}
+    BrushTokenImporter(Brush &brush) : m_brush(brush)
+    {
+    }
+
+    bool importTokens(Tokeniser &tokeniser)
+    {
+        if (Brush::m_type == eBrushTypeQuake3BP || Brush::m_type == eBrushTypeDoom3 ||
+            Brush::m_type == eBrushTypeQuake4) {
+            tokeniser.nextLine();
+            RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "{"));
+        }
+        while (1) {
+            // check for end of brush
+            tokeniser.nextLine();
+            const char *token = tokeniser.getToken();
+            if (string_equal(token, "}")) {
+                break;
+            }
+
+            tokeniser.ungetToken();
+
+            m_brush.push_back(FaceSmartPointer(new Face(&m_brush)));
+
+            //!todo BP support
+            tokeniser.nextLine();
+
+            Face &face = *m_brush.back();
+
+            switch (Brush::m_type) {
+                case eBrushTypeDoom3: {
+                    Doom3FaceTokenImporter importer(face);
+                    RETURN_FALSE_IF_FAIL(importer.importTokens(tokeniser));
+                }
+                    break;
+                case eBrushTypeQuake4: {
+                    Quake4FaceTokenImporter importer(face);
+                    RETURN_FALSE_IF_FAIL(importer.importTokens(tokeniser));
+                }
+                    break;
+                case eBrushTypeQuake2: {
+                    Quake2FaceTokenImporter importer(face);
+                    RETURN_FALSE_IF_FAIL(importer.importTokens(tokeniser));
+                }
+                    break;
+                case eBrushTypeQuake3: {
+                    Quake3FaceTokenImporter importer(face);
+                    RETURN_FALSE_IF_FAIL(importer.importTokens(tokeniser));
+                }
+                    break;
+                case eBrushTypeQuake3BP: {
+                    Quake3BPFaceTokenImporter importer(face);
+                    RETURN_FALSE_IF_FAIL(importer.importTokens(tokeniser));
+                }
+                    break;
+                case eBrushTypeQuake: {
+                    QuakeFaceTokenImporter importer(face);
+                    RETURN_FALSE_IF_FAIL(importer.importTokens(tokeniser));
+                }
+                    break;
+                case eBrushTypeHalfLife: {
+                    HalfLifeFaceTokenImporter importer(face);
+                    RETURN_FALSE_IF_FAIL(importer.importTokens(tokeniser));
+                }
+                    break;
+            }
+            face.planeChanged();
+        }
+        if (Brush::m_type == eBrushTypeQuake3BP || Brush::m_type == eBrushTypeDoom3 ||
+            Brush::m_type == eBrushTypeQuake4) {
+            tokeniser.nextLine();
+            RETURN_FALSE_IF_FAIL(Tokeniser_parseToken(tokeniser, "}"));
+        }
+
+        m_brush.planeChanged();
+        m_brush.shaderChanged();
+
+        return true;
+    }
 };
 
 
-class BrushTokenExporter : public MapExporter
-{
-const Brush& m_brush;
+class BrushTokenExporter : public MapExporter {
+    const Brush &m_brush;
 
 public:
-BrushTokenExporter( const Brush& brush ) : m_brush( brush ){
-}
-void exportTokens( TokenWriter& writer ) const {
-       m_brush.evaluateBRep(); // ensure b-rep is up-to-date, so that non-contributing faces can be identified.
-
-       if ( !m_brush.hasContributingFaces() ) {
-               return;
-       }
-
-       writer.writeToken( "{" );
-       writer.nextLine();
-
-       if ( Brush::m_type == eBrushTypeQuake3BP ) {
-               writer.writeToken( "brushDef" );
-               writer.nextLine();
-               writer.writeToken( "{" );
-               writer.nextLine();
-       }
-
-       if ( Brush::m_type == eBrushTypeDoom3 || Brush::m_type == eBrushTypeQuake4 ) {
-               writer.writeToken( "brushDef3" );
-               writer.nextLine();
-               writer.writeToken( "{" );
-               writer.nextLine();
-       }
-
-       for ( Brush::const_iterator i = m_brush.begin(); i != m_brush.end(); ++i )
-       {
-               const Face& face = *( *i );
-
-               if ( face.contributes() ) {
-                       switch ( Brush::m_type )
-                       {
-                       case eBrushTypeDoom3:
-                       {
-                               Doom3FaceTokenExporter exporter( face );
-                               exporter.exportTokens( writer );
-                       }
-                       break;
-                       case eBrushTypeQuake4:
-                       {
-                               Quake4FaceTokenExporter exporter( face );
-                               exporter.exportTokens( writer );
-                       }
-                       break;
-                       case eBrushTypeQuake2:
-                       {
-                               Quake2FaceTokenExporter exporter( face );
-                               exporter.exportTokens( writer );
-                       }
-                       break;
-                       case eBrushTypeQuake3:
-                       {
-                               Quake3FaceTokenExporter exporter( face );
-                               exporter.exportTokens( writer );
-                       }
-                       break;
-                       case eBrushTypeQuake3BP:
-                       {
-                               Quake3BPFaceTokenExporter exporter( face );
-                               exporter.exportTokens( writer );
-                       }
-                       break;
-                       case eBrushTypeQuake:
-                       {
-                               QuakeFaceTokenExporter exporter( face );
-                               exporter.exportTokens( writer );
-                       }
-                       break;
-                       case eBrushTypeHalfLife:
-                       {
-                               HalfLifeFaceTokenExporter exporter( face );
-                               exporter.exportTokens( writer );
-                       }
-                       break;
-                       }
-               }
-       }
-
-       if ( Brush::m_type == eBrushTypeQuake3BP || Brush::m_type == eBrushTypeDoom3 || Brush::m_type == eBrushTypeQuake4 ) {
-               writer.writeToken( "}" );
-               writer.nextLine();
-       }
-
-       writer.writeToken( "}" );
-       writer.nextLine();
-}
+    BrushTokenExporter(const Brush &brush) : m_brush(brush)
+    {
+    }
+
+    void exportTokens(TokenWriter &writer) const
+    {
+        m_brush.evaluateBRep(); // ensure b-rep is up-to-date, so that non-contributing faces can be identified.
+
+        if (!m_brush.hasContributingFaces()) {
+            return;
+        }
+
+        writer.writeToken("{");
+        writer.nextLine();
+
+        if (Brush::m_type == eBrushTypeQuake3BP) {
+            writer.writeToken("brushDef");
+            writer.nextLine();
+            writer.writeToken("{");
+            writer.nextLine();
+        }
+
+        if (Brush::m_type == eBrushTypeDoom3 || Brush::m_type == eBrushTypeQuake4) {
+            writer.writeToken("brushDef3");
+            writer.nextLine();
+            writer.writeToken("{");
+            writer.nextLine();
+        }
+
+        for (Brush::const_iterator i = m_brush.begin(); i != m_brush.end(); ++i) {
+            const Face &face = *(*i);
+
+            if (face.contributes()) {
+                switch (Brush::m_type) {
+                    case eBrushTypeDoom3: {
+                        Doom3FaceTokenExporter exporter(face);
+                        exporter.exportTokens(writer);
+                    }
+                        break;
+                    case eBrushTypeQuake4: {
+                        Quake4FaceTokenExporter exporter(face);
+                        exporter.exportTokens(writer);
+                    }
+                        break;
+                    case eBrushTypeQuake2: {
+                        Quake2FaceTokenExporter exporter(face);
+                        exporter.exportTokens(writer);
+                    }
+                        break;
+                    case eBrushTypeQuake3: {
+                        Quake3FaceTokenExporter exporter(face);
+                        exporter.exportTokens(writer);
+                    }
+                        break;
+                    case eBrushTypeQuake3BP: {
+                        Quake3BPFaceTokenExporter exporter(face);
+                        exporter.exportTokens(writer);
+                    }
+                        break;
+                    case eBrushTypeQuake: {
+                        QuakeFaceTokenExporter exporter(face);
+                        exporter.exportTokens(writer);
+                    }
+                        break;
+                    case eBrushTypeHalfLife: {
+                        HalfLifeFaceTokenExporter exporter(face);
+                        exporter.exportTokens(writer);
+                    }
+                        break;
+                }
+            }
+        }
+
+        if (Brush::m_type == eBrushTypeQuake3BP || Brush::m_type == eBrushTypeDoom3 ||
+            Brush::m_type == eBrushTypeQuake4) {
+            writer.writeToken("}");
+            writer.nextLine();
+        }
+
+        writer.writeToken("}");
+        writer.nextLine();
+    }
 };