/* ** Copyright (C) 1999, 2000, Lorenzo Bettini <lorenzo.bettini@penteres.it> ** ** 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 of the License, 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; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** */ // generators.cc // generators and decorators #include "textgen.h" #include "decorators.h" #include "tags.h" #include "keys.h" #define GET_DECORATED( d ) ( d ? d : GlobalGenerator ) TextGenerator *GlobalGenerator ; TextGenerator *KeywordGenerator ; TextGenerator *CommentGenerator ; TextGenerator *StringGenerator ; TextGenerator *TypeGenerator ; TextGenerator *NumberGenerator ; static TextGenerator *createGenerator( char *key ) ; void createGenerators() { GlobalGenerator = new TextGenerator ; KeywordGenerator = createGenerator( KEYWORD ) ; CommentGenerator = createGenerator( COMMENT ) ; StringGenerator = createGenerator( STRING ) ; TypeGenerator = createGenerator( TYPE ) ; NumberGenerator = createGenerator( NUMBER ) ; } void createGeneratorsForCSS() { GlobalGenerator = new TextGenerator ; KeywordGenerator = new SpanDecorator(GlobalGenerator, KEYWORD) ; CommentGenerator = new SpanDecorator(GlobalGenerator, COMMENT) ; StringGenerator = new SpanDecorator(GlobalGenerator, STRING) ; TypeGenerator = new SpanDecorator(GlobalGenerator, TYPE) ; NumberGenerator = new SpanDecorator(GlobalGenerator, NUMBER) ; } TextGenerator *createGenerator( char *key ) { Tag *tag = getTag( key ) ; TextDecorator *dec = NULL ; if ( ! tag ) // no options return GlobalGenerator ; char * color = tag->GetColor() ; if ( color ) dec = new ColorDecorator( GlobalGenerator, color ) ; if ( tag->IsBold() ) dec = new TagDecorator( GET_DECORATED( dec ), BOLD_TAG ) ; if ( tag->IsItalic() ) dec = new TagDecorator( GET_DECORATED( dec ), ITALIC_TAG ) ; if ( tag->IsUnderline() ) dec = new TagDecorator( GET_DECORATED( dec ), UNDERLINE_TAG ) ; return GET_DECORATED( dec ) ; // There should be some options, but it's not ncessary ... // so this is just to be safe }