From b1627517c841060d1b1556b32cc8bfeede9addfa Mon Sep 17 00:00:00 2001 From: Ethan Dalool Date: Fri, 24 Sep 2021 16:18:14 -0700 Subject: [PATCH] Add fix_decorator_classes. --- voussoir.net/writing/vmarkdown.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/voussoir.net/writing/vmarkdown.py b/voussoir.net/writing/vmarkdown.py index 068cce1..def312c 100644 --- a/voussoir.net/writing/vmarkdown.py +++ b/voussoir.net/writing/vmarkdown.py @@ -553,6 +553,26 @@ def fix_argument_def_classes(element): element['class'].remove('o') element['class'].append('n') +def fix_decorator_classes(element): + ''' + Given the first element of a decorator expression, this gives the decorator + class to all the siblings for the rest of the line, because pygments stops + coloring after it finds a dot i.e. [@decorators].my_decorator. + ''' + while True: + if get_innertext(element).endswith('\n'): + break + + if isinstance(element, bs4.NavigableString): + element = element.nextSibling + continue + + # print(element, element['class']) + if element['class'] == ['n']: + element['class'] = ['nd'] + + element = element.nextSibling + def fix_repl_classes(element): ''' Given a
 element, this function detects that this pre contains a REPL
@@ -583,7 +603,6 @@ def fix_repl_classes(element):
 
         if isinstance(child, bs4.NavigableString):
             continue
-
         if del_styles:
             del child['class']
 
@@ -614,6 +633,9 @@ def fix_classes(soup):
         if get_innertext(element.nextSibling) == '(':
             fix_argument_call_classes(element)
 
+    for element in soup.find_all('span', {'class': 'nd'}):
+        fix_decorator_classes(element)
+
 def fix_reddit_links(soup):
     for a in soup.find_all('a'):
         if not a.get('href'):