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

Issue with handling {=comment} syntax in Markdown files #247

Open
TomBener opened this issue May 30, 2024 · 1 comment
Open

Issue with handling {=comment} syntax in Markdown files #247

TomBener opened this issue May 30, 2024 · 1 comment

Comments

@TomBener
Copy link

TomBener commented May 30, 2024

I've encountered an issue when using the {=comment} syntax in Markdown files processed with the Panflute.

Here's the command I'm using:

pandoc -C test.md -o test.html --filter sort-cnbib.py

The sort-cnbib.py script uses panflute to sort Chinese bibliography entries by their Pinyin representation:

sort-cnbib.py
import panflute as pf
from pypinyin import pinyin, Style


def contains_chinese(text):
    return any('\u4e00' <= char <= '\u9fff' for char in text)


def special_pinyin(text):
    # 多音字的姓氏拼音
    surname_map = {
        '葛': 'ge3',
        '阚': 'kan4',
        '任': 'ren2',
        '单': 'shan4',
        '解': 'xie4',
        '燕': 'yan1',
        '尉': 'yu4',
        '乐': 'yue4',
        '曾': 'zeng1',
        '查': 'zha1',
    }

    if contains_chinese(text):
        name = text.split(",")[0] if "," in text else text
        surname = name[0]
        return surname_map.get(surname, "".join([i[0] for i in pinyin(name, style=Style.TONE3)]))
    else:
        return None


def prepare(doc):
    doc.chinese_entries = []
    doc.non_chinese_entries = []


def action(elem, doc):
    if isinstance(elem, pf.Div) and "references" in elem.classes:
        for e in elem.content:
            if isinstance(e, pf.Div) and "csl-entry" in e.classes:
                entry_text = pf.stringify(e)
                if contains_chinese(entry_text):
                    doc.chinese_entries.append(e)
                else:
                    doc.non_chinese_entries.append(e)
        elem.content = []


def finalize(doc):
    doc.chinese_entries.sort(key=lambda x: special_pinyin(pf.stringify(x)))

    # Replace the Div container content with sorted entries
    for elem in doc.content:
        if isinstance(elem, pf.Div) and "references" in elem.classes:
            # Sort the Chinese bibliography entries by Pinyin and append them to the end of the non-Chinese entries
            # Swap the entries below can change the order of Chinese and non-Chinese bibliography entries
            elem.content = doc.non_chinese_entries + doc.chinese_entries
            break


def main(doc=None):
    return pf.run_filter(action, prepare=prepare, finalize=finalize, doc=doc)


if __name__ == '__main__':
    main()

When I include a {=comment} block in my Markdown file:

```{=comment}
This is a comment block.
```

I get the following error:

TypeError: element str not in group {'vimwiki', 'docbook', 'openxml', 'odt', 'markdown', 'opml', 'html', 'twiki', 'native', 'tikiwiki', 'rst', 'jats', 'tex', 'org', 'gfm', 'ipynb', 'muse', 'fb2', 'context', 'latex', 't2t', 'man', 'icml', 'markdown_phpextra', 'markdown_mmd', 'markdown_strict', 'epub', 'textile', 'haddock', 'markdown_github', 'creole', 'noteref', 'dokuwiki', 'rtf', 'commonmark', 'json', 'docx', 'opendocument', 'mediawiki'}

If I remove the {=comment} block, the command runs without any issues.

It seems like Panflute is having trouble handling the {=comment} syntax. I would like to use this syntax for comments in my Markdown files, so it would be great if Panflute could support it.

Related: Three methods to add a comment to Pandoc Markdown texts.

Thank you for your help!

@NMarkgraf
Copy link

In elements.py line 1249f you should add "comment" in the list. This should fix the ={comment} issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants