diff options
| author | Bobby <[email protected]> | 2023-05-27 19:27:26 -0400 |
|---|---|---|
| committer | Bobby <[email protected]> | 2023-05-27 19:27:26 -0400 |
| commit | 48872c66c5e1179302e24ae9df26a7ae2eab07b2 (patch) | |
| tree | 1b2c650ede797443dd7a01d07a09366a88af1818 | |
| parent | 3a765998cc2984cf5e38bd77392409446facfeb7 (diff) | |
| download | thatcomputerscientist-48872c66c5e1179302e24ae9df26a7ae2eab07b2.tar.xz thatcomputerscientist-48872c66c5e1179302e24ae9df26a7ae2eab07b2.zip | |
Ability to define languages in comments by tapping into `lang-<language>` markup
| -rw-r--r-- | blog/context_processors.py | 34 | ||||
| -rw-r--r-- | templates/blog/post.html | 16 |
2 files changed, 41 insertions, 9 deletions
diff --git a/blog/context_processors.py b/blog/context_processors.py index e59e6300..bc8d3039 100644 --- a/blog/context_processors.py +++ b/blog/context_processors.py @@ -54,7 +54,7 @@ def avatar_list(): avatar_list[directory].remove(file) return avatar_list -def highlight_code_blocks(code_block): +def highlight_code_blocks(code_block, language=None): # replace with space try: cb = code_block.string @@ -63,11 +63,16 @@ def highlight_code_blocks(code_block): cb = cb.replace(u'\xa0', u' ') # guess the language as there is no data-lang attribute - try: - lexer = guess_lexer(cb) - except: - lexer = get_lexer_by_name('text') - + if language: + try: + lexer = get_lexer_by_name(language.strip()) + except: + lexer = get_lexer_by_name('text') + else: + try: + lexer = guess_lexer(cb) + except: + lexer = get_lexer_by_name('text') # highlight the code formatter = HtmlFormatter(noclasses=True, style='native', wrapcode=True) highlighted_code = highlight(cb, lexer, formatter) @@ -80,9 +85,24 @@ def comment_processor(comment): comment = re.sub(r'>', '>', comment) # any text between ``` and ``` must be highlighted as code + # code_blocks = re.findall(r'```(.+?)```', comment, re.DOTALL) + # for code_block in code_blocks: + # comment = comment.replace('```' + code_block + '```', highlight_code_blocks(code_block.replace('<', '<').replace('>', '>'))) + + # new highlight code block: + # any text between ``` and ``` must be highlighted as code with guessed language + # and any text between ```lang-<language> and ``` must be highlighted as code with specified language code_blocks = re.findall(r'```(.+?)```', comment, re.DOTALL) for code_block in code_blocks: - comment = comment.replace('```' + code_block + '```', highlight_code_blocks(code_block.replace('<', '<').replace('>', '>'))) + if code_block.startswith('lang-'): + language = code_block.split('\n')[0].replace('lang-', '') + code_block = code_block.replace('lang-' + language + '\n', '') + # comment = highlight_code_blocks(code_block.replace('<', '<').replace('>', '>'), language) + comment = comment.replace('```lang-' + language + '\n' + code_block + '```', highlight_code_blocks(code_block.replace('<', '<').replace('>', '>'), language)) + else: + comment = comment.replace('```' + code_block + '```', highlight_code_blocks(code_block.replace('<', '<').replace('>', '>'))) + + # retain line breaks, for every newline character, add a <br> tag comment = comment.replace('\n', '<br>') diff --git a/templates/blog/post.html b/templates/blog/post.html index 58a7a362..67b9dda3 100644 --- a/templates/blog/post.html +++ b/templates/blog/post.html @@ -127,9 +127,21 @@ shortkey: <kbd>Ctrl or Cmd + D</kbd> <br><br> </li> - <li>Wrap text in triple backticks (```) to make it a code block. + <li>Wrap text in triple backticks (```) to make it a code block: <br> - e.g. <code>```code block```</code>, + e.g. +<pre> + ``` + code block + ``` +</pre> + or define with language as: +<pre> + ```lang-<language> + code block + ``` +</pre> + e.g. lang-python, lang-java, lang-javascript, etc. shortkey: <kbd>Ctrl or Cmd + K</kbd> <br><br> </li> |
