anchor.diff:      return completerPreprocessor.future;
     }
   }
  -
  -main(){
  -	return (String type,Function pathResolver) => new Preprocessor(type,pathResolver);
  -}
positive.code:   static final int errorSourceAhead = 50;
    static final RegExp regExpIfThen = new RegExp(r'^(.*) then (.*)$');
    
    Preprocessor(String this._type,[ Function this._pathResolver ]){
      var EXPR_INSTRUCTIONS = '(include(?:Once)?|ifn?def|ifelse|if|\/if|endif|else|el(?:se)?if|eval|value|val|setbasedir)';
      
      var multilineRegExp = new RegExp(r'(^[ \t]*)?\/\*[ ]*#[ ]*' + EXPR_INSTRUCTIONS + r'([^\*]*)[ ]*\*\/', multiLine:true);
  
negative.code:           
            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);
              }
              include = include.split('||');
              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 = '';
            }
            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];
              }
              stack.add({ "include": !before["include"], "start": match.lastIndex, "lastIndex": match.lastIndex });
            }
  