whole_func_string: function replacer(startString, endString){
      var startStringEscaped = startString.escape();
      var endStringEscaped = endString.escape();
      var matchRegexp = new RegExp(startStringEscaped + '([^' +startString[0].escape() + endString[0].escape()+ ']+)' + endStringEscaped,'g');
      
      return function(template, model){
          var brackets = template.match(matchRegexp) || [],
              value;
  
          for(var i=0;i<brackets.length;i++){
              brackets[i] = brackets[i].replace(startString,'').replace(endString,'');
              value = object.getValue(model, brackets[i].trim()) || '';
              template = template.replace(new RegExp(startStringEscaped + brackets[i] + endStringEscaped,'g'), value);
          }
  
          return template;
      };
  }
func_code_string: function replacer(startString, endString){
      var startStringEscaped = startString.escape();
      var endStringEscaped = endString.escape();
      var matchRegexp = new RegExp(startStringEscaped + '([^' +startString[0].escape() + endString[0].escape()+ ']+)' + endStringEscaped,'g');
      
      return function(template, model){
          var brackets = template.match(matchRegexp) || [],
              value;
  
          for(var i=0;i<brackets.length;i++){
              brackets[i] = brackets[i].replace(startString,'').replace(endString,'');
              value = object.getValue(model, brackets[i].trim()) || '';
              template = template.replace(new RegExp(startStringEscaped + brackets[i] + endStringEscaped,'g'), value);
          }
  
          return template;
      };
  }
func_documentation_string: /*
  String replacer for replacing variables in plain text, used before implementation of razor view engine