Example #1
0
    public static RazorHtmlDocument GetHtmlDocument(RazorCodeDocument codeDocument)
    {
        var options = codeDocument.GetCodeGenerationOptions();

        if (options == null || !options.DesignTime)
        {
            // Not needed in run time. This pass generates the backing HTML document that is used to provide HTML intellisense.
            return(null);
        }

        var writer     = new RazorHtmlWriter(codeDocument.Source);
        var syntaxTree = codeDocument.GetSyntaxTree();

        writer.Visit(syntaxTree.Root);

        var generatedHtml = writer.Builder.ToString();

        Debug.Assert(
            writer.Source.Length == writer.Builder.Length,
            $"The backing HTML document should be the same length as the original document. Expected: {writer.Source.Length} Actual: {writer.Builder.Length}");

        var razorHtmlDocument = new DefaultRazorHtmlDocument(generatedHtml, options);

        return(razorHtmlDocument);
    }
Example #2
0
    internal static RazorHtmlDocument GetHtmlDocument(this RazorCodeDocument document)
    {
        if (document == null)
        {
            throw new ArgumentNullException(nameof(document));
        }

        var razorHtmlObj = document.Items[typeof(RazorHtmlDocument)];

        if (razorHtmlObj == null)
        {
            var razorHtmlDocument = RazorHtmlWriter.GetHtmlDocument(document);
            if (razorHtmlDocument != null)
            {
                document.Items[typeof(RazorHtmlDocument)] = razorHtmlDocument;
                return(razorHtmlDocument);
            }
        }

        return((RazorHtmlDocument)razorHtmlObj);
    }