3.1 使用pymdownx

This commit is contained in:
跨越晨昏 2024-10-25 20:09:49 +08:00
parent 2017c80724
commit b885051c67
3 changed files with 273 additions and 110 deletions

View File

@ -1,5 +1,15 @@
from markdown.extensions import Extension, extra, admonition, meta, sane_lists, toc, wikilinks, codehilite, legacy_attrs from markdown.extensions import Extension, extra, admonition, meta, sane_lists, toc, wikilinks, codehilite, legacy_attrs
from pymdownx.arithmatex import ArithmatexExtension from pymdownx.arithmatex import ArithmatexExtension
from pymdownx.emoji import EmojiExtension
from pymdownx.blocks import BlocksExtension
from pymdownx.blocks.admonition import AdmonitionExtension
from pymdownx.blocks.definition import DefinitionExtension
from pymdownx.blocks.details import DetailsExtension
from pymdownx.blocks.html import HTMLExtension
from pymdownx.blocks.tab import TabExtension
from pymdownx.caret import CaretProcessor
from pymdownx.critic import CriticExtension
from pygments.formatters import HtmlFormatter from pygments.formatters import HtmlFormatter
@ -49,9 +59,9 @@ class HighlightHtmlFormatter(HtmlFormatter):
Extensions = { Extensions = {
# 自带 # 自带
'基本扩展': extra.ExtraExtension(fenced_code={'lang_prefix': ''}), '基本扩展': extra.ExtraExtension(fenced_code={'lang_prefix': ''}),
'警告扩展': admonition.AdmonitionExtension(), # '警告扩展': admonition.AdmonitionExtension(),
'元数据': meta.MetaExtension(), '元数据': meta.MetaExtension(),
'能列表': sane_lists.SaneListExtension(), # '能列表': sane_lists.SaneListExtension(),
'目录': toc.TocExtension(), '目录': toc.TocExtension(),
'内部链接': wikilinks.WikiLinkExtension(), '内部链接': wikilinks.WikiLinkExtension(),
# '代码高亮': codehilite.CodeHiliteExtension(guess_lang=False, pygments_formatter=HighlightHtmlFormatter), # '代码高亮': codehilite.CodeHiliteExtension(guess_lang=False, pygments_formatter=HighlightHtmlFormatter),
@ -59,11 +69,20 @@ Extensions = {
# pymdownx # pymdownx
'超级数学': ArithmatexExtension(), '超级数学': ArithmatexExtension(),
'EMOJI': EmojiExtension(),
'块扩展': BlocksExtension(),
'警告': AdmonitionExtension(),
'定义列表': DefinitionExtension(),
'详情': DetailsExtension(),
'HTML': HTMLExtension(),
'标签': TabExtension(),
'批评': CriticExtension(),
} }
class PreProcess(Preprocessor): class PreProcess(Preprocessor):
"""预处理""" """预处理"""
def __init__(self, variable: Variable): def __init__(self, variable: Variable):
super().__init__() super().__init__()
self.variable = variable self.variable = variable
@ -94,7 +113,8 @@ class Simple(InlineProcessor):
super().__init__(pattern) super().__init__(pattern)
self.tag = tag self.tag = tag
def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[None, None, None]: def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[
None, None, None]:
""" """
处理匹配 处理匹配
:param m: re模块的匹配对象 :param m: re模块的匹配对象
@ -123,7 +143,8 @@ class Nest(InlineProcessor):
self.outer_tag = outer_tag self.outer_tag = outer_tag
self.inner_tag = inner_tag self.inner_tag = inner_tag
def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[None, None, None]: def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[
None, None, None]:
""" """
处理匹配 处理匹配
:param m: re模块的匹配对象 :param m: re模块的匹配对象
@ -156,7 +177,8 @@ class ID(InlineProcessor):
self.property = property_ self.property = property_
self.value = value self.value = value
def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[None, None, None]: def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[
None, None, None]:
""" """
处理匹配 处理匹配
:param m: re模块的匹配对象 :param m: re模块的匹配对象
@ -182,7 +204,8 @@ class Emoji(InlineProcessor):
""" """
super().__init__(pattern) super().__init__(pattern)
def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[None, None, None]: def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[
None, None, None]:
""" """
处理匹配 处理匹配
:param m: re模块的匹配对象 :param m: re模块的匹配对象
@ -272,7 +295,8 @@ class BoxBlock(BlockProcessor):
class _Anchor(InlineProcessor): class _Anchor(InlineProcessor):
def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[None, None, None]: def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[
None, None, None]:
""" """
处理匹配 处理匹配
:param m: re模块的匹配对象 :param m: re模块的匹配对象
@ -357,6 +381,7 @@ class CodeBlock(Treeprocessor):
""" """
渲染单行代码 渲染单行代码
""" """
def run(self, root: xml.etree.ElementTree.Element): def run(self, root: xml.etree.ElementTree.Element):
for code in root: for code in root:
print(code.text) print(code.text)
@ -364,6 +389,7 @@ class CodeBlock(Treeprocessor):
class Pre(Extension): class Pre(Extension):
"""预处理""" """预处理"""
def __init__(self, variable: Variable): def __init__(self, variable: Variable):
""" """
初始化 初始化
@ -401,7 +427,7 @@ class Basic(Extension):
md.inlinePatterns.register(ID( md.inlinePatterns.register(ID(
r'\[(.*?)]-\((.*?)\)', tag='span', property_='title'), 'hide', 180 r'\[(.*?)]-\((.*?)\)', tag='span', property_='title'), 'hide', 180
) # [在指定的文本里面隐藏一段文本]-(只有鼠标放在上面才会显示隐藏文本) ) # [在指定的文本里面隐藏一段文本]-(只有鼠标放在上面才会显示隐藏文本)
md.inlinePatterns.register(Emoji(r':(.+?):'), 'emoji', 181) # 将emoji短代码转换为emoji字符 # md.inlinePatterns.register(Emoji(r':(.+?):'), 'emoji', 181) # 将emoji短代码转换为emoji字符
md.parser.blockprocessors.register(Syllabus(md.parser), 'syllabus', 182) # 渲染提纲 md.parser.blockprocessors.register(Syllabus(md.parser), 'syllabus', 182) # 渲染提纲
@ -475,8 +501,8 @@ class Code(Extension):
:param md: 转换器 :param md: 转换器
""" """
md.registerExtension(self) # 注册扩展 md.registerExtension(self) # 注册扩展
md.treeprocessors.register(CodeLine(variable=self.variable), 'code_line', 0) # 渲染单行代码块 # md.treeprocessors.register(CodeLine(variable=self.variable), 'code_line', 0) # 渲染单行代码块
md.treeprocessors.register(CodeBlock(), 'code_block', 1000) # 渲染多行代码块 # md.treeprocessors.register(CodeBlock(), 'code_block', 1000) # 渲染多行代码块
def main(text: str, variable: Variable = None) -> Tuple[str, Variable]: def main(text: str, variable: Variable = None) -> Tuple[str, Variable]:

File diff suppressed because one or more lines are too long

123
README.md
View File

@ -158,32 +158,18 @@ ls
4.2.5 latex 4.2.5 latex
```latex-rd $$
\documentclass{article} E(\mathbf{v}, \mathbf{h}) = -\sum_{i,j}w_{ij}v_i h_j - \sum_i b_i v_i - \sum_j c_j h_j
\title{我的第一个LaTeX文档} $$
\author{作者姓名}
\date{\today}
\begin{document} \[3 < 4\]
\maketitle \begin{align}
p(v_i=1|\mathbf{h}) & = \sigma\left(\sum_j w_{ij}h_j + b_i\right) \\
p(h_j=1|\mathbf{v}) & = \sigma\left(\sum_i w_{ij}v_i + c_j\right)
\end{align}
这是我的第一个LaTeX文档。它包含了一个标题、作者信息、日期和一个简单的正文部分。 行内公式: $p(x|y) = \frac{p(y|x)p(x)}{p(y)}$
\section{引言}
这是引言部分,可以简要介绍文档的主题和目的。
\section{正文}
这是正文部分,可以详细阐述你的观点或研究内容。你可以根据需要添加更多的章节和子章节。
\subsection{子章节示例}
这是一个子章节的示例用于展示如何在LaTeX文档中创建层次结构。
\end{document}
```
4.2.6 HTML 4.2.6 HTML
@ -311,9 +297,9 @@ Orange
12 Emoji 12 Emoji
:person_biking: :smile: :heart: :thumbsup:
这是一个笑脸:grinning_face_with_big_eyes:图案 这是一个笑脸 :smile: 图案
13 脚注 13 脚注
@ -384,3 +370,90 @@ Orange
可以设置文段的自定义字体{@style=font-family: SetoFont;}为小赖字体 可以设置文段的自定义字体{@style=font-family: SetoFont;}为小赖字体
可以设置文本的黄色外框{@style=display: inline-block; border: 1px solid yellow;} 可以设置文本的黄色外框{@style=display: inline-block; border: 1px solid yellow;}
18 超级块
18.1 警告
/// note | Did you know?
You can create a note with Blocks!
///
18.2 定义列表
/// define
Apple
- Pomaceous fruit of plants of the genus Malus in
the family Rosaceae.
Orange
- The fruit of an evergreen tree of the genus Citrus.
///
18.3 详情
/// details | Some summary
type: warning
Some content
///
18.4 HTML
/// html | div[style='border: 1px solid red;']
some *markdown* content
///
18.5 标签
/// tab | Tab A title
Tab A content
///
/// tab | Tab B title
Tab B content
///
/// tab | Tab C Title
new: true
Will be part of a separate, new tab group.
///
19 批评
Here is some {--*incorrect*--} Markdown. I am adding this{++ here++}. Here is some more {--text
that I am removing--}text. And here is even more {++text that I
am ++}adding.{~~
~> ~~}Paragraph was deleted and replaced with some spaces.{~~ ~>
~~}Spaces were removed and a paragraph was added.
And here is a comment on {==some
text==}{>>This works quite well. I just wanted to comment on it.<<}. Substitutions {~~is~>are~~} great!
General block handling.
{--
* test remove
* test remove
* test remove
* test remove
* test remove
--}
{++
* test add
* test add
* test add
* test add
* test add
++}