Пример #1
0
        private void CheckLink(ParseResult parseResult, Link link, string rootDirectory)
        {
            switch (link)
            {
            case AbsoluteLink _:
                if (_options.CheckLinks && !IsUrlAlive(link.Address))
                {
                    _logger.Warn(
                        $"Absolute Link {link.Address} at {link.Node.LineColumnSpan} is probably broken");
                }
                break;

            case RelativeLink _:
                string normalizedAddress = HeaderToLinkConverter.ConvertHeaderTitleToLink(link.Address,
                                                                                          _options.InputMarkdownType);
                if (!parseResult.Anchors.ContainsKey(normalizedAddress))
                {
                    _logger.Error($"Relative link {link.Address} at {link.Node.LineColumnSpan} is broken");
                }
                break;

            case LocalLink _:
                var fullPath = Path.Combine(rootDirectory, link.Address);
                if (!File.Exists(fullPath))
                {
                    var    linkFileName = link.Node.File.Name;
                    string suffix       = linkFileName != parseResult.File.Name
                            ? $" at {linkFileName}"
                            : "";
                    _logger.Error($"Local file {fullPath} at {link.Node.LineColumnSpan}{suffix} does not exist");
                }
                break;
            }
        }
Пример #2
0
        public Parser(ProcessorOptions options, ILogger logger, TextFile file)
        {
            _options = options;
            _logger  = logger;
            var builder = new MarkdownPipelineBuilder {
                PreciseSourceLocation = true
            };

            builder.UseAutoLinks();
            builder.UseGridTables().UsePipeTables();
            _file     = file;
            _links    = new Dictionary <Node, Link>();
            _linksMap = new Dictionary <Link, Link>(LinkAddressComparer.Instance);
            _anchors  = new Dictionary <string, Anchor>();
            _headerToLinkConverter = new HeaderToLinkConverter(_anchors);
            _markdownDocument      = Markdown.Parse(_file.Data, builder.Build());
            _endOfLine             = GetEndOfLine();
        }
Пример #3
0
 public ConverterState()
 {
     NewAnchors = new Dictionary<string, Anchor>();
     HeaderToLinkConverter = new HeaderToLinkConverter(NewAnchors);
 }