markdig icon indicating copy to clipboard operation
markdig copied to clipboard

Unable to parse relative URL to parent directories

Open AmadeusW opened this issue 1 year ago • 3 comments

I'm writing a Markdown renderer that formats user .md files into navigable .html pages. Some user documents contain relative paths to a parent directory, like these:

[example link](..\example.md)
[example link](\..\example.md)

Currently, LinkHelper.TryParseInlineLink calls LinkHelper.TryParseInlineLink, which calls LinkHelper.TryParseUrl leaving isAutoLink unset as false. This means that TryParseUrl treats the slash as escape character and effectively removes it. The character is not recorded as a part of trivia, and there's no way to infer its presence by examining the AST.

Setting isAutoLink to true seems to address this issue, but I don't know what auto link is, and whether this is an appropriate wokaround. I was thinking about a solution where we'd set a property on InlineProcessor.MarkdownPaserContext to influence LinkInlineParser.TryProcessLinkOrImage, but would like to get your opinion before making code changes.

AmadeusW avatar Sep 30 '24 16:09 AmadeusW

@xoofx I'd appreciate your opinion how to best fix this, or how to override the behavior of LinkInlineParser

AmadeusW avatar Oct 15 '24 00:10 AmadeusW

I would use / instead of \ and you wouldn't have to change the parser:

[example link](../example.md)
[example link](/../example.md)

None of the CommonMark parser are supporting \ in that case and they all trim it in the same way here

xoofx avatar Oct 15 '24 05:10 xoofx

While I do not recommend it - I pre-parsed markdown to rewrite the links to the standard, then passed that to this wonderful library. It's a pain, if you can get escaped unix style paths that's better.

jefflomax avatar Nov 24 '24 03:11 jefflomax