anchor.diff:            
             var before = stack.removeFirst();
             var include = match.input.substring(before['end'], match.start);
  -          if(before['include'] == 1 || before['include'] == 2){
  -            if(include[0]=='(' && include.substring(include.length-1)==')') include = include.substring(1,include.length-1);
  +          if (before['include'] == 1 || before['include'] == 2) {
  +            if (include[0]=='(' && include.substring(include.length-1)==')') {
  +              include = include.substring(1,include.length-1);
  +            }
               include = include.split('||');
  -            if(include.length != 2) return completer.completeError(new Exception('ifelse : '+include.length+' != 2 : '+include.join('||')));
  +            if (include.length != 2) {
  +              return completer.completeError(new Exception('ifelse : '+include.length+' != 2 : '+include.join('||')));
  +            }
               include = include[before['include']-1];
  -          }else if(!before['include']) include='';
  +          } else if (!before['include']) {
  +            include = '';
  +          }
             match.replacePart(before['start'], match.end, include);
             if (instruction == "else" || instruction == "elif" || instruction == "elseif") {
  -            if(instruction=='else') include=!before['include'];
  -            else{
  -              if(content[0]=='!') include = !defines[content.substring(1).trim()];
  -              else include = defines[content];
  +            if (instruction=='else'){
  +              include=!before['include'];
  +            } else if(content[0]=='!') {
  +              include = !defines[content.substring(1).trim()];
  +            } else {
  +              include = defines[content];
               }
               stack.add({ "include": !before["include"], "start": match.lastIndex, "lastIndex": match.lastIndex });
             }
  
positive.code:     return completerPreprocessor.future;
    }
  }
  
  main(){
  	return (String type,Function pathResolver) => new Preprocessor(type,pathResolver);
  }
negative.code:   static indent(String str, String indent){
      return str.split("\n").map((line) => indent + line).join("\n");
    }
    
    // TODO : process String instead of data. lines by lines. For multi lines things like if/else/elseif, we know if they should be included or not because we know if the condition is valid.
    Future<String> process(Map<String,dynamic> defines, String data){
      assert(data != null);
      MutableString mutableData = new MutableString(data);
      
      Completer<String> completerPreprocessor = new Completer();
  