Exemplo n.º 1
0
        protected override void Write(HtmlRenderer renderer, InclusionInline inclusion)
        {
            if (string.IsNullOrEmpty(inclusion.Context.IncludedFilePath))
            {
                Logger.LogError("file path can't be empty or null in IncludeFile");
                renderer.Write(inclusion.Context.GetRaw());

                return;
            }

            if (!PathUtility.IsRelativePath(inclusion.Context.IncludedFilePath))
            {
                string tag     = "ERROR INCLUDE";
                string message = $"Unable to resolve {inclusion.Context.GetRaw()}: Absolute path \"{inclusion.Context.IncludedFilePath}\" is not supported.";
                ExtensionsHelper.GenerateNodeWithCommentWrapper(renderer, tag, message, inclusion.Context.GetRaw(), inclusion.Line);

                return;
            }

            var currentFilePath = ((RelativePath)_context.FilePath).GetPathFromWorkingFolder();
            var includeFilePath = ((RelativePath)inclusion.Context.IncludedFilePath).BasedOn(currentFilePath);

            var filePath = Path.Combine(_context.BasePath, includeFilePath.RemoveWorkingFolder());

            if (!File.Exists(filePath))
            {
                Logger.LogWarning($"Can't find {includeFilePath}.");
                renderer.Write(inclusion.Context.GetRaw());

                return;
            }

            var parents = _context.InclusionSet;

            if (parents != null && parents.Contains(includeFilePath))
            {
                string tag     = "ERROR INCLUDE";
                string message = $"Unable to resolve {inclusion.Context.GetRaw()}: Circular dependency found in \"{_context.FilePath}\"";
                ExtensionsHelper.GenerateNodeWithCommentWrapper(renderer, tag, message, inclusion.Context.GetRaw(), inclusion.Line);

                return;
            }

            var content = File.ReadAllText(filePath);
            var context = new MarkdownContextBuilder()
                          .WithContext(_context)
                          .WithFilePath(includeFilePath.RemoveWorkingFolder())
                          .WithContent(content)
                          .WithIsInline(true)
                          .WithAddingIncludedFile(currentFilePath)
                          .Build();

            _engine.ReportDependency(includeFilePath);
            // Do not need to check if content is a single paragragh
            // context.IsInline = true will force it into a single paragragh and render with no <p></p>
            var result = _engine.Markup(context, _parameters);

            renderer.Write(result);
        }
Exemplo n.º 2
0
        protected override void Write(HtmlRenderer renderer, InclusionBlock inclusion)
        {
            if (string.IsNullOrEmpty(inclusion.Context.IncludedFilePath))
            {
                Logger.LogError("file path can't be empty or null in IncludeFile");
                renderer.Write(inclusion.Context.GetRaw());

                return;
            }

            if (!PathUtility.IsRelativePath(inclusion.Context.IncludedFilePath))
            {
                var tag     = "ERROR INCLUDE";
                var message = $"Unable to resolve {inclusion.Context.GetRaw()}: Absolute path \"{inclusion.Context.IncludedFilePath}\" is not supported.";
                ExtensionsHelper.GenerateNodeWithCommentWrapper(renderer, tag, message, inclusion.Context.GetRaw(), inclusion.Line);

                return;
            }

            var currentFilePath  = ((RelativePath)_context.FilePath).GetPathFromWorkingFolder();
            var includedFilePath = ((RelativePath)inclusion.Context.IncludedFilePath).BasedOn(currentFilePath);

            if (!EnvironmentContext.FileAbstractLayer.Exists(includedFilePath))
            {
                Logger.LogWarning($"Can't find {includedFilePath}.");
                renderer.Write(inclusion.Context.GetRaw());

                return;
            }

            var parents = _context.InclusionSet;

            if (parents != null && parents.Contains(includedFilePath))
            {
                string tag     = "ERROR INCLUDE";
                string message = $"Unable to resolve {inclusion.Context.GetRaw()}: Circular dependency found in \"{_context.FilePath}\"";
                ExtensionsHelper.GenerateNodeWithCommentWrapper(renderer, tag, message, inclusion.Context.GetRaw(), inclusion.Line);

                return;
            }

            var content = EnvironmentContext.FileAbstractLayer.ReadAllText(includedFilePath);
            var context = new MarkdownContextBuilder()
                          .WithContext(_context)
                          .WithFilePath(includedFilePath.RemoveWorkingFolder())
                          .WithContent(content)
                          .WithAddingIncludedFile(currentFilePath)
                          .Build();

            _engine.ReportDependency(includedFilePath);
            var result = _engine.Markup(context, _parameters);

            result = SkipYamlHeader(result);

            renderer.Write(result);
        }
Exemplo n.º 3
0
        protected override void Write(HtmlRenderer renderer, CodeSnippet codeSnippet)
        {
            var refFileRelativePath = ((RelativePath)codeSnippet.CodePath).BasedOn((RelativePath)_context.FilePath);

            if (!EnvironmentContext.FileAbstractLayer.Exists(refFileRelativePath))
            {
                string tag     = "ERROR CODESNIPPET";
                string message = $"Unable to find {refFileRelativePath}";
                ExtensionsHelper.GenerateNodeWithCommentWrapper(renderer, tag, message, codeSnippet.Raw, codeSnippet.Line);
                return;
            }

            if (codeSnippet.DedentLength != null && codeSnippet.DedentLength < 0)
            {
                renderer.Write($"<!-- Dedent length {codeSnippet.DedentLength} should be positive. Auto-dedent will be applied. -->\n");
            }

            codeSnippet.SetAttributeString();

            renderer.Write("<pre><code").WriteAttributes(codeSnippet).Write(">");
            renderer.WriteEscape(GetContent(codeSnippet));
            renderer.Write("</code></pre>");
        }