docs: protected Expression string(Data data) throws TemplateException {
  
  	// check starting character for a string literal
  	if (!data.srcCode.isCurrent('"') && !data.srcCode.isCurrent('\'')) return null;
  	Position line = data.srcCode.getPosition();
  
  	// Init Parameter
  	char quoter = data.srcCode.getCurrentLower();
  	StringBuilder str = new StringBuilder();
  	Expression expr = null;
  
  	while (data.srcCode.hasNext()) {
  	    data.srcCode.next();
  	    // check sharp
  	    if (data.srcCode.isCurrent('#')) {
  
  		// Ecaped sharp
  		if (data.srcCode.isNext('#')) {
  		    data.srcCode.next();
  		    str.append('#');
  		}
  		// get Content of sharp
  		else {
  		    data.srcCode.next();
  		    comments(data);
  		    Expression inner = assignOp(data);
  		    comments(data);
  		    if (!data.srcCode.isCurrent('#')) throw new TemplateException(data.srcCode, "Invalid Syntax Closing [#] not found");
  
  		    ExprString exprStr = null;
  		    if (str.length() != 0) {
  			exprStr = data.factory.createLitString(str.toString(), line, data.srcCode.getPosition());
  			if (expr != null) {
  			    expr = data.factory.opString(expr, exprStr);
  			}
  			else expr = exprStr;
  			str = new StringBuilder();
  		    }
  		    if (expr == null) {
  			expr = inner;
  		    }
  		    else {
  			expr = data.factory.opString(expr, inner);
  		    }
  		}
  	    }
  	    // check quoter
  	    else if (data.srcCode.isCurrent(quoter)) {
  		// Ecaped sharp
  		if (data.srcCode.isNext(quoter)) {
  		    data.srcCode.next();
  		    str.append(quoter);
  		}
  		// finsish
  		else {
  		    break;
  		}
  	    }
  	    // all other character
  	    else {
  		str.append(data.srcCode.getCurrent());
  	    }
  	}
  	if (!data.srcCode.forwardIfCurrent(quoter)) throw new TemplateException(data.srcCode, "Invalid Syntax Closing [" + quoter + "] not found");
  
  	if (expr == null) expr = data.factory.createLitString(str.toString(), line, data.srcCode.getPosition());
  	else if (str.length() != 0) {
  	    expr = data.factory.opString(expr, data.factory.createLitString(str.toString(), line, data.srcCode.getPosition()));
  	}
  	comments(data);
  
  	if (expr instanceof Variable) {
  	    Variable var = (Variable) expr;
  	    var.fromHash(true);
  	}
  
  	return expr;
  
      }