001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019package lucee.transformer.cfml.evaluator.impl;
020
021import lucee.runtime.config.Config;
022import lucee.runtime.exp.TemplateException;
023import lucee.transformer.bytecode.statement.tag.Tag;
024import lucee.transformer.bytecode.util.ASMUtil;
025import lucee.transformer.cfml.Data;
026import lucee.transformer.cfml.evaluator.EvaluatorSupport;
027import lucee.transformer.library.function.FunctionLib;
028import lucee.transformer.library.tag.TagLib;
029import lucee.transformer.library.tag.TagLibTag;
030
031public final class PageEncoding extends EvaluatorSupport {
032    
033    public TagLib execute(Config config, Tag tag, TagLibTag libTag, FunctionLib[] flibs, Data data) throws TemplateException {
034        
035        // encoding
036        String encoding=ASMUtil.getAttributeString(tag, "charset",null);
037        if(encoding==null)
038                throw new TemplateException(data.cfml,"attribute [pageencoding] of the tag [processingdirective] must be a constant value");
039        
040        if(encoding.equalsIgnoreCase(data.cfml.getCharset()) || "UTF-8".equalsIgnoreCase(data.cfml.getCharset())) {
041                encoding=null;
042        }
043        
044        // 
045        
046        if(encoding!=null){
047                throw new ProcessingDirectiveException(data.cfml,encoding,null,data.cfml.getWriteLog());
048        }
049        
050        
051        return null;
052        }
053}