aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Numerlor <[email protected]>2020-07-22 02:06:50 +0200
committerGravatar Numerlor <[email protected]>2020-07-22 02:06:50 +0200
commit6795a7f05e3720f375a9195182b996a14d754ea0 (patch)
treef5aedd3125cf3501f6042c7be4b14e7e5bc8c243
parentMove DocMarkdownConverter to parsing. (diff)
Fix ordered list indices in markdown converter.
markdownify relies on the parent tag's index method, which goes through all of its contents, if there is anything else in the contents apart from the li tags, those indices are then shifted.
-rw-r--r--bot/cogs/doc/parsing.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/bot/cogs/doc/parsing.py b/bot/cogs/doc/parsing.py
index 8f6688bd2..25001b83d 100644
--- a/bot/cogs/doc/parsing.py
+++ b/bot/cogs/doc/parsing.py
@@ -3,10 +3,12 @@ import re
import string
from functools import partial
from typing import Callable, List, Optional, Tuple, Union
+from urllib.parse import urljoin
from aiohttp import ClientSession
from bs4 import BeautifulSoup
from bs4.element import PageElement, Tag
+from markdownify import MarkdownConverter
from .cache import async_cache
@@ -32,6 +34,22 @@ class DocMarkdownConverter(MarkdownConverter):
super().__init__(**options)
self.page_url = page_url
+ def convert_li(self, el: PageElement, text: str) -> str:
+ """Fix markdownify's erroneous indexing in ol tags."""
+ parent = el.parent
+ if parent is not None and parent.name == 'ol':
+ li_tags = parent.find_all("li")
+ bullet = '%s.' % (li_tags.index(el)+1)
+ else:
+ depth = -1
+ while el:
+ if el.name == 'ul':
+ depth += 1
+ el = el.parent
+ bullets = self.options['bullets']
+ bullet = bullets[depth % len(bullets)]
+ return '%s %s\n' % (bullet, text or '')
+
def convert_code(self, el: PageElement, text: str) -> str:
"""Undo `markdownify`s underscore escaping."""
return f"`{text}`".replace('\\', '')