Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comparing MarkdownDocuments when one has been appended to #793

Open
jphorv-bdo opened this issue Apr 29, 2024 · 0 comments
Open

Comparing MarkdownDocuments when one has been appended to #793

jphorv-bdo opened this issue Apr 29, 2024 · 0 comments
Labels

Comments

@jphorv-bdo
Copy link

I have a problem for which I don't see an obvious solution. I have a markdown string that is continuously appended to. After each append it is parsed to a MarkdownDocument. I want to determine what blocks are different between the previous MarkdownDocument and the latest one.

My naive approach was to iterate over each document's top-level Blocks and compare their Span properties, something like:

        int maxIndex = Math.Max(oldDoc.Count, newDoc.Count);

        for (int index = 0; index < maxIndex; index++)
        {
            var oldBlock = index < oldDoc.Count ? oldDoc[index] : null;
            var newBlock = index < newDoc.Count ? newDoc[index] : null;
            if (oldBlock is null && newBlock is null)
                // do nothing, shouldn't ever happen
            else if (oldBlock is null)
                // New block that wasn't here before
            else if (newBlock is null)
                // Old block is no longer here (not even sure if this can happen)
            else if (oldBlock.Span != newBlock.Span)
                // This block is different, do something...
        }

But that doesn't work. One scenario where I found it doesn't (and surely there are more) is when the document ends in the middle of a fenced code block, the block's Span property doesn't encompass the remainder of the markdown string, and it isn't until the fenced block's delimiter arrives that that Span accurately reflects the whole length of the fenced block. I assume this is expected behavior.

My question is, for 2 non-null Block objects, what can I compare on them to determine equality?

@xoofx xoofx added the question label Apr 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants