docs: private void literal(Data data, Body parent) throws TemplateException {
  	while (codeIsland && data.srcCode.isCurrent(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR)) {
  	    int start = data.srcCode.getPos();
  
  	    if (data.srcCode.forwardIfCurrent(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR + AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR)) {
  		parent.addPrintOut(data.factory, AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR, data.srcCode.getPosition(start), data.srcCode.getPosition());
  	    }
  	    else {
  		done = true;
  		return;
  	    }
  	}
  	boolean _end = false;
  	// with expression
  	if (data.parseExpression) {
  	    if (data.srcCode.isAfterLast()) return;
  	    // data.cfml.getCurrent()
  	    StringBuilder text = new StringBuilder();
  	    int count = 0;
  	    while (data.srcCode.isValidIndex()) {
  		count++;
  		// #
  		if (data.srcCode.isCurrent('#')) {
  		    data.srcCode.next();
  		    if (data.srcCode.isCurrent('#')) {
  			text.append('#');
  		    }
  		    else {
  			if (text.length() > 0) {
  			    Position end = data.srcCode.getPosition();
  			    Position start = data.srcCode.getPosition(end.pos - text.length());
  
  			    parent.addPrintOut(data.factory, text.toString(), start, end);
  			    start = end;
  			    text = new StringBuilder();
  			}
  			Position end = data.srcCode.getPosition();
  			Position start = data.srcCode.getPosition(end.pos - text.length());
  
  			PrintOut po;
  			parent.addStatement(po = new PrintOut(data.transformer.transform(data), start, end));
  			po.setEnd(data.srcCode.getPosition());
  
  			if (!data.srcCode.isCurrent('#')) throw new TemplateException(data.srcCode, "missing terminating [#] for expression");
  		    }
  		}
  		else if (data.srcCode.isCurrent('<') && count > 1) {
  		    break;
  		}
  		else if (codeIsland && data.srcCode.isCurrent(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR) && count > 1) {
  		    // int start = data.srcCode.getPos();
  		    if (data.srcCode.forwardIfCurrent(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR + AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR)) {
  			text.append(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR);
  			// parent.addPrintOut(data.factory,AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR,
  			// data.srcCode.getPosition(start),data.srcCode.getPosition());
  			data.srcCode.previous();
  		    }
  		    else {
  			_end = true;
  			break;
  		    }
  		}
  		else text.append(data.srcCode.getCurrent());
  		data.srcCode.next();
  	    }
  	    if (text.length() > 0) {
  		Position end = data.srcCode.getPosition();
  		Position start = data.srcCode.getPosition(end.pos - text.length());
  
  		parent.addPrintOut(data.factory, text.toString(), start, end);
  		if (_end) {
  		    done = true;
  		    return;
  		    // throw new CodeIslandEnd();
  		}
  	    }
  	}
  	// no expression
  	else {
  	    int start = data.srcCode.getPos();
  	    data.srcCode.next();
  
  	    int end = data.srcCode.indexOfNext('<');
  	    int endIsland = codeIsland ? data.srcCode.indexOfNext(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR) : -1;
  	    int endIslandEsc = codeIsland ? data.srcCode.indexOfNext(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR + AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR) : -1;
  
  	    // next is escaped
  	    while (endIsland != -1 && endIslandEsc != -1 && endIsland == endIslandEsc && (end == -1 || endIsland < end)) {
  		String txt = data.srcCode.substring(start, endIsland - start) + AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR;
  		int s = data.srcCode.getPos();
  		data.srcCode.setPos(endIsland + (AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR.length() * 2));
  		parent.addPrintOut(data.factory, txt, data.srcCode.getPosition(s), data.srcCode.getPosition());
  
  		// now we need to check again
  		start = data.srcCode.getPos();
  		// data.srcCode.next();
  		end = data.srcCode.indexOfNext('<');
  		endIsland = data.srcCode.indexOfNext(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR);
  		endIslandEsc = data.srcCode.indexOfNext(AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR + AbstrCFMLScriptTransformer.TAG_ISLAND_INDICATOR);
  	    }
  
  	    String text;
  	    if (endIsland != -1 && (end == -1 || endIsland < end)) {
  		text = data.srcCode.substring(start, endIsland - start);
  		data.srcCode.setPos(endIsland);
  		_end = true;
  	    }
  	    else if (end != -1) {
  		text = data.srcCode.substring(start, end - start);
  		data.srcCode.setPos(end);
  	    }
  	    else {
  		text = data.srcCode.substring(start);
  		data.srcCode.setPos(data.srcCode.length());
  	    }
  	    Position e = data.srcCode.getPosition();
  	    Position s = data.srcCode.getPosition(start);
  
  	    parent.addPrintOut(data.factory, text, s, e);
  	    if (_end) {
  		done = true;
  		return;
  		// throw new CodeIslandEnd();
  	    }
  	}
      }