public HxlDocumentFragment Convert(DomContainer html, HxlDocumentFragment result, Action <Type> typeUse) { _result = result; _current = _result; _typeUse = typeUse; Visit(html); return(_result); }
private HxlDocumentFragment PrepareDocument() { _metrics.StartPreprocessor(); ParsedTemplate parsed = this; // TODO Consider which services belong here var sp = new ServiceContainer(ServiceProvider.Current); var all = CreateCompilerProcessors(); var converter = new DomConverter(); var myDoc = converter.Convert(parsed.SourceDocument, NewDocument(), t => _implicitAssemblyReferences.Add(t.GetTypeInfo().Assembly)); foreach (var c in all) { c.Preprocess(myDoc, sp); } // TODO Combine adjacent text uses (performance) // TODO ToArray() is wasteful (performance) // Convert document HxlDocumentFragment result = NewDocument(); foreach (var m in myDoc.ChildNodes.ToArray()) { var conv = HxlCompilerConverter.ChooseConverter(m); conv.ConvertAndAppend(result, m, CSharpScriptGenerator.Instance); } _metrics.EndPreprocessor(); // TODO This is a compiler settings property bool skipOptimizations = false; _metrics.TemplateOptimizerStarting("cs", !skipOptimizations); if (!skipOptimizations) { _metrics.StartOptimizer(); OptimizeRenderIslands.Rewrite(result); _metrics.EndOptimizer(); } return(result); }
public ParsedTemplate(string text, string name, HxlCompilerSettings settings) { _metrics = Metrics.ForTemplateParsing(); _metrics.StartParsing(); _sourceDocument = HtmlDocumentFragment.Parse(text, new HtmlReaderSettings { Mode = HtmlTreeBuilderMode.Xml }); _metrics.EndParsing(name, text.Length); _settings = settings; _nodeFactory = DomNodeFactory.Compose( HxlDomNodeFactory.Compiler, _settings.NodeFactories, new InvalidFactory()); Signature = string.Concat(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(text)) .Take(8) .Select(b => b.ToString("x2")) ); if (string.IsNullOrEmpty(name)) { this.TemplateName = "Template" + this.Signature; } else { this.TemplateName = CodeUtility.Slug(name); } this.Namespace = "Generated"; this.ClassName = this.TemplateName; using (UsingNamespaceResolver()) { this._preparedDocument = PrepareDocument(); } }