VimHelpBot icon indicating copy to clipboard operation
VimHelpBot copied to clipboard

Escape special chars in topic and skip mono

Open idbrii opened this issue 3 years ago • 2 comments

Fix #36.

If the topic contains chars that make markdown formatting difficult ([ ] `), escape them and omit fixed width styling.

Markdown parsers are often inconsistent, so hopefully simpler markdown is more likely to display properly for more users.

Never deployed, but I've tested the code separately based on some examples from #36. I don't know what actual values pop out of the db for topic -- I've guessed them based on vimhelpbot's responses.

My test code:

import re

tests = [
    {
        "topic": "`]",
        "link": "https://vimhelp.org/motion.txt.html#%60%5D",
        "doc": "motion",
    },
    {
        "topic": ":make",
        "link": "https://neovim.io/doc/user/quickfix.html#%3Amake",
        "doc": "quickfix",
    },
    {
        "topic": "c_CTRL-G",
        "link": "https://vimhelp.org/cmdline.txt.html#c_CTRL-G",
        "doc": "cmdline",
    },
    {
        "topic": "c_CTRL-L",
        "link": "https://vimhelp.org/cmdline.txt.html#c_CTRL-L",
        "doc": "cmdline",
    },
    {
        "topic": "pattern.txt",
        "link": "https://vimhelp.org/pattern.txt.html#pattern.txt",
        "doc": "pattern",
    },
    {
        "topic": "c_CTRL-F",
        "link": "https://vimhelp.org/cmdline.txt.html#c_CTRL-F",
        "doc": "cmdline",
    },
    {
        "topic": "search()",
        "link": "https://vimhelp.org/eval.txt.html#search%28%29",
        "doc": "eval",
    },
    {
        "topic": "c_CTRL-R_CTRL-W",
        "link": "https://vimhelp.org/cmdline.txt.html#c_CTRL-R_CTRL-W",
        "doc": "cmdline",
    },
    {
        "topic": "[I",
        "link": "https://vimhelp.org/tagsrch.txt.html#%5BI",
        "doc": "tagsrch",
    },
    {
        "topic": "[_CTRL-I",
        "link": "https://vimhelp.org/tagsrch.txt.html#%5B_CTRL-I",
        "doc": "tagsrch",
    },
]



for t in tests:
    topic = t["topic"]
    link = t["link"]
    doc = t["doc"]

    text = ""
    escaped, count = re.subn(r"([\[\]`])", r"\\\1", topic)
    if count > 0:
        topic = escaped
        text += "* [{}]({}) in _{}.txt_\n".format(topic, link, doc)
    else:
        text += "* [`{}`]({}) in _{}.txt_\n".format(topic, link, doc)

    print(text)

Which produces results that look okay on old reddit and new reddit:

* [\`\]](https://vimhelp.org/motion.txt.html#%60%5D) in _motion.txt_
* [`:make`](https://neovim.io/doc/user/quickfix.html#%3Amake) in _quickfix.txt_
* [`c_CTRL-G`](https://vimhelp.org/cmdline.txt.html#c_CTRL-G) in _cmdline.txt_
* [`c_CTRL-L`](https://vimhelp.org/cmdline.txt.html#c_CTRL-L) in _cmdline.txt_
* [`pattern.txt`](https://vimhelp.org/pattern.txt.html#pattern.txt) in _pattern.txt_
* [`c_CTRL-F`](https://vimhelp.org/cmdline.txt.html#c_CTRL-F) in _cmdline.txt_
* [`search()`](https://vimhelp.org/eval.txt.html#search%28%29) in _eval.txt_
* [`c_CTRL-R_CTRL-W`](https://vimhelp.org/cmdline.txt.html#c_CTRL-R_CTRL-W) in _cmdline.txt_
* [\[I](https://vimhelp.org/tagsrch.txt.html#%5BI) in _tagsrch.txt_
* [\[_CTRL-I](https://vimhelp.org/tagsrch.txt.html#%5B_CTRL-I) in _tagsrch.txt_

idbrii avatar Oct 08 '22 07:10 idbrii

Looks good. Can you add some tests in test_bot.py?

heraldofsolace avatar Oct 08 '22 12:10 heraldofsolace

I added some tests. I don't have reddit's API auth or whatever else is necessary run it locally so I didn't try running the tests directly. They're a port of my above test.

idbrii avatar Nov 16 '22 06:11 idbrii