这里用到了一个python库
mistletoe
还有一个pygments
PygmentsRender
convert.py
'''
Author: meowrain meowrain@126.com
Date: 2023-11-05 20:21:44
LastEditors: meowrain meowrain@126.com
LastEditTime: 2023-11-05 21:36:23
FilePath: \acg_random\convert_markdown_html\app\convert\main.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
import mistletoe
from .utils import PygmentsRenderer
import os
directory = './convert/files'
files_list = os.listdir(directory)
def convert_md():
for file in files_list:
with open(os.path.join(directory,file),'r',encoding='utf-8') as input_file:
text = input_file.read()
html = mistletoe.markdown(text,PygmentsRenderer)
with open(f'./convert/web/{file.split(".")[0]}.html','w',encoding='utf-8',errors='xmlcharrefreplace') as output_file:
output_file.write(html)
print(f'convert {file} over')
因为对代码没有进行高亮显示,所以要引入另一个py文件(当然这个是别人写的)
coderender.py
from mistletoe import HtmlRenderer
from pygments import highlight
from pygments.formatters.html import HtmlFormatter
from pygments.lexers import get_lexer_by_name as get_lexer, guess_lexer
from pygments.styles import get_style_by_name as get_style
from pygments.util import ClassNotFound
class PygmentsRenderer(HtmlRenderer):
formatter = HtmlFormatter()
formatter.noclasses = True
def __init__(self, *extras, style='default', fail_on_unsupported_language=False, **kwargs):
"""
Args:
extras (list): allows subclasses to add even more custom tokens.
style (str): short name of the style to be used by Pygments' `HtmlFormatter`,
see `pygments.styles.get_style_by_name()`.
fail_on_unsupported_language (bool): whether to let Pygments' `ClassNotFound`
be thrown when there is an unsupported language found on
a code block.
If `False`, then language is guessed instead of throwing the error.
**kwargs: additional parameters to be passed to the ancestor's
constructor.
"""
super().__init__(*extras, **kwargs)
self.formatter.style = get_style(style)
self.fail_on_unsupported_language = fail_on_unsupported_language
def render_block_code(self, token):
code = token.content
lexer = None
if token.language:
try:
lexer = get_lexer(token.language)
except ClassNotFound as err:
if self.fail_on_unsupported_language:
raise err
if lexer is None:
lexer = guess_lexer(code)
return highlight(code, lexer, self.formatter)