/**
*
* Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
**/
package lucee.runtime.functions.other;
import lucee.runtime.PageContext;
import lucee.runtime.ext.function.Function;
/**
* Implements the CFML Function xmlformat
*/
public final class XMLFormat implements Function {
public static String call(PageContext pc , String xmlString) {
int len=xmlString.length();
int plus=0;
for(int pos=0;pos<len;pos++) {
char chr = xmlString.charAt(pos);
switch(chr){
case '<': plus+=3; break;
case '>': plus+=3; break;
case '&': plus+=4; break;
case '"': plus+=5; break;
case '\'': plus+=5; break;
}
}
if(plus==0) return xmlString;
char[] chars=new char[len+plus];
int count=0;
for(int pos=0;pos<len;pos++) {
char chr = xmlString.charAt(pos);
switch(chr){
case '<':
chars[count++]='&';
chars[count++]='l';
chars[count++]='t';
chars[count++]=';';
break;
case '>':
chars[count++]='&';
chars[count++]='g';
chars[count++]='t';
chars[count++]=';';
break;
case '&':
chars[count++]='&';
chars[count++]='a';
chars[count++]='m';
chars[count++]='p';
chars[count++]=';';
break;
case '"':
chars[count++]='&';
chars[count++]='q';
chars[count++]='u';
chars[count++]='o';
chars[count++]='t';
chars[count++]=';';
break;
case '\'':
chars[count++]='&';
chars[count++]='a';
chars[count++]='p';
chars[count++]='o';
chars[count++]='s';
chars[count++]=';';
break;
default:
chars[count++]=chr;
break;
}
}
//if(start<len)sb.append(xmlString.substring(start,len));
return new String(chars);
}
}