internal CompilationRecord Compile(CompilerContext context, FileInfo coffeeScriptFileInfo, List<string> includedRequiredFiles) { var inputFilePath = _preScriptLoadActions.Aggregate(coffeeScriptFileInfo.FullName, (current, action) => action(context, current)); coffeeScriptFileInfo = new FileInfo(inputFilePath); context = new CompilerContext(context.CompilationRecorder, _isDebug) { WorkingDirectory = coffeeScriptFileInfo.Directory.FullName }; var javaScriptFilePath = Regex.Replace(coffeeScriptFileInfo.FullName, coffeeScriptFileInfo.Extension + "$", ".js", RegexOptions.IgnoreCase); javaScriptFilePath = _preScriptOutputActions.Aggregate(javaScriptFilePath, (current, action) => action(context, current)); using (var input = new StreamReader(File.OpenRead(coffeeScriptFileInfo.FullName))) { using (var output = new StreamWriter(File.Open(javaScriptFilePath, FileMode.Create))) { Compile(context, input, output); } } context.CompilationRecorder.Stop(); return context.CompilationRecorder.GetRecord(); }
private void Compile(CompilerContext context, StreamReader input, StreamWriter output) { var coffeeScript = input.ReadToEnd(); coffeeScript = _preCompilationActions.Aggregate(coffeeScript, (current, action) => action(context, current)); string javascript; try { javascript = CompileString(coffeeScript); } catch(JavaScriptException ex) { throw new CompilerException(ex.Message, ex); } javascript = _postCompilationActions.Aggregate(javascript, (current, action) => action(context, current)); output.Write(javascript); }
internal CompilationRecord Compile(string coffeeScriptFilePath, List<string> includedRequiredFiles) { var compilationRecorder = new CompilationRecorder(); compilationRecorder.Start(); var coffeeScriptFileInfo = new FileInfo(coffeeScriptFilePath); var context = new CompilerContext(compilationRecorder, _isDebug) { WorkingDirectory = coffeeScriptFileInfo.Directory.FullName }; return Compile(context, coffeeScriptFileInfo, includedRequiredFiles); }