kiwi/src/Kiwi.js
2013-02-15 15:58:02 -05:00

91 lines
No EOL
1.9 KiB
JavaScript

var Kiwi = (function ($) {
var TRANSPOSE_CHAR = '%';
var interpolate_general = function(text, array){
var stringToReturn = ""
,length = text.length
,index = 0
,array_length = array.length;
for(var i = 0; i < length; i++){
var currentChar = text[i];
var nextChar = null;
if(i + 1 < length) nextChar = text[i+1];
if(currentChar === '`' && nextChar === TRANSPOSE_CHAR){
stringToReturn += TRANSPOSE_CHAR;
i += 1;
}else{
if(currentChar === TRANSPOSE_CHAR){
if(index < array_length){
stringToReturn += array[index++];
}else{
stringToReturn += '';
}
}
else{
stringToReturn += currentChar;
}
}
}
return stringToReturn;
}
var get_key_length = function(text, index){
var length = text.length;
var key = "";
var i = index;
while(i < length && text[i] !== '}'){
key += text[i];
i++;
}
if(text[i] === '}') key += '}';
else throw Error("SYNTAX ERROR");
return [key.slice(2, key.length - 1), key.length];
}
var interpolate_key_value = function(text, json){
var stringToReturn = ""
,length = text.length
,index = 0;
for(var i = 0; i < length; i++){
var currentChar = text[i];
var nextChar = null;
if(i + 1 < length) nextChar = text[i+1];
if(currentChar === '%' && nextChar === '{'){
var result = get_key_length(text, i);
var key = result[0];
var key_length = result[1];
stringToReturn += (json[key] === undefined ? "" : json[key]);
i += key_length - 1 ;
}else{
stringToReturn += currentChar;
}
}
return stringToReturn;
}
var interpolate = function(text, input){
if(input === undefined) return text;
if(Object.prototype.toString.call(input) === "[object Array]"){
return interpolate_general(text, input);
}else{
return interpolate_key_value(text, input);
}
};
return {
"compose": interpolate
};
}(Kiwi));