/// <summary>
/// Compiles the provided input
/// </summary>
/// <param name="input"></param>
/// <param name="filename"></param>
/// <param name="compilationErrors"></param>
/// <param name="compactionErrors"></param>
/// <returns></returns>
public IOptimizedResult Compile(TextReader input, string filename, List <ParseException> compilationErrors, List <ParseException> compactionErrors)
{
if (input == null)
{
throw new ArgumentNullException("input");
}
// verify, compact and write out results
// parse JBST markup
JbstWriter writer = new JbstWriter(filename);
StringWriter sw = new StringWriter();
string source = input.ReadToEnd();
try
{
HtmlDistiller parser = new HtmlDistiller();
parser.EncodeNonAscii = false;
parser.BalanceTags = false;
parser.NormalizeWhitespace = false;
parser.HtmlWriter = writer;
parser.HtmlFilter = new NullHtmlFilter();
parser.Parse(source);
// render the pretty-printed version
writer.Render(sw);
}
catch (ParseException ex)
{
compilationErrors.Add(ex);
}
catch (Exception ex)
{
compilationErrors.Add(new ParseError(ex.Message, filename, 0, 0, ex));
}
SimpleJbstBuildResult result = new SimpleJbstBuildResult(writer.JbstName, writer.AutoMarkup);
result.Source = source;
result.PrettyPrinted = sw.GetStringBuilder().ToString();
result.Compacted = this.Compact(result.PrettyPrinted, filename, compactionErrors);
result.ContentType = "text/javascript";
result.FileExtension = ".jbst.js";
result.Hash = this.ComputeHash(result.Source);
// return any errors
return(result);
}