Package railo.runtime.interpreter

Source Code of railo.runtime.interpreter.JSONExpressionInterpreter

package railo.runtime.interpreter;

import railo.commons.lang.NumberUtil;
import railo.runtime.exp.PageException;
import railo.runtime.interpreter.ref.Ref;
import railo.runtime.interpreter.ref.literal.LStringBuffer;

public class JSONExpressionInterpreter extends CFMLExpressionInterpreter {
  public JSONExpressionInterpreter(){
    this(false);
    allowNullConstant=true;
    }
 
  public JSONExpressionInterpreter(boolean strict){// strict is set to true, it should not be compatible with CFMLExpressionInterpreter
    allowNullConstant=true;
   
    }
       
  @Override
    protected Ref string() throws PageException {
       
        // Init Parameter
        char quoter = cfml.getCurrentLower();
        //String str="";
        LStringBuffer str=new LStringBuffer();
       
        while(cfml.hasNext()) {
            cfml.next();
            // check sharp
            if(cfml.isCurrent('\\')) {
              if(cfml.isNext(quoter)){
                    cfml.next();
                    str.append(quoter);
                }
              else if(cfml.isNext('\\')){
                    cfml.next();
                    str.append('\\');
                }
              else if(cfml.isNext('"')){
                    cfml.next();
                    str.append('"');
                }
              else if(cfml.isNext('\'')){
                    cfml.next();
                    str.append('\'');
                }
              else if(cfml.isNext('t')){
                    cfml.next();
                    str.append('\t');
                }
              else if(cfml.isNext('n')){
                    cfml.next();
                    str.append('\n');
                }
              else if(cfml.isNext('b')){
                    cfml.next();
                    str.append('\b');
                }
              else if(cfml.isNext('f')){
                    cfml.next();
                    str.append('\f');
                }
              else if(cfml.isNext('r')){
                    cfml.next();
                    str.append('\r');
                }
              else if(cfml.isNext('u')){
                    cfml.next();
                    StringBuffer sb=new StringBuffer();
                    int i=0;
                   
                    for(;i<4 && cfml.hasNext();i++){
                      cfml.next();
                      sb.append(cfml.getCurrent());
                    }
                    if(i<4){
                      str.append("\\u");
                      str.append(sb.toString());
                    }
                    else{
                      int asc = NumberUtil.hexToInt(sb.toString(),-1);
                      if(asc!=-1)str.append((char)asc);
                      else {
                        str.append("\\u");
                          str.append(sb.toString());
                      }
                    }  
                   
                }
              else if(cfml.isNext('/')){
                    cfml.next();
                    str.append('/');
                }
                else {
                  str.append('\\');
                }    
            }
            else if(cfml.isCurrent(quoter)) {
                break;         
            }
            // all other character
            else {
                str.append(cfml.getCurrent());
            }
        }
        if(!cfml.forwardIfCurrent(quoter))
            throw new InterpreterException("Invalid String Literal Syntax Closing ["+quoter+"] not found");
       
        cfml.removeSpace();
        mode=STATIC;
        /*Ref value=null;
        if(value!=null) {
            if(str.isEmpty()) return value;
            return new Concat(pc,value,str);
        }*/
        return str;
    }

}
TOP

Related Classes of railo.runtime.interpreter.JSONExpressionInterpreter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.