var Tokeniser = require("./tokeniser").Tokeniser;
var TokenIterator = require("./TokenIterator");
var StringIterator = require("./StringIterator");
var StringSource = require("./StringSource");

exports.Parser = function(options) {
    var tokeniser = new Tokeniser(options);
    return {
        parseString: function(parser, string) {
            var source = new StringSource(string);
            var iterator = new StringIterator(source);
            var tokens = tokeniser.tokenise(iterator).tokens;
            var tokensToParse = options.ignoreWhitespace ? ignoreWhitespace(tokens) : tokens;
            var input = new TokenIterator(tokensToParse);
            return parser(input);
        }
    };
};

var ignoreWhitespace = function(tokens) {
    return tokens.filter(function(token) {
        return token.name !== "whitespace";
    });
};

@@ -277,24 +277,16 @@
     
-return %7B
 %0A    
-   
+var
  par
@@ -293,17 +293,18 @@
 seString
-:
+ =
  functio
@@ -319,28 +319,24 @@
 , string) %7B%0A
-    
         var 
@@ -370,24 +370,125 @@
 tring);%0A    
+    return parseSource(parser, source);%0A    %7D;%0A    %0A    var parseSource = function(parser, source) %7B%0A
         var 
@@ -526,36 +526,32 @@
 ource);%0A        
-   
- 
 var tokens = tok
@@ -576,36 +576,32 @@
 erator).tokens;%0A
-    
         var toke
@@ -678,28 +678,24 @@
 ns;%0A        
-  
-  
 var input = 
@@ -740,43 +740,121 @@
     
- 
+return parser(input);%0A    %7D;%0A    %0A
    
+ 
 return 
-parser(input);%0A        %7D
+%7B%0A        parseString: parseString,%0A        parseSource: parseSource
 %0A   

Create separate parseSource method