V0.5.2
This commit is contained in:
parent
04ed134111
commit
946ec5464b
72
CrossDown.py
72
CrossDown.py
@ -9,6 +9,12 @@ class Header:
|
|||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
渲染标题
|
渲染标题
|
||||||
|
# 一级标题
|
||||||
|
## 二级标题
|
||||||
|
### 三级标题
|
||||||
|
#### 四级标题
|
||||||
|
##### 五级标题
|
||||||
|
###### 六级标题
|
||||||
:return: 处理后的文本
|
:return: 处理后的文本
|
||||||
"""
|
"""
|
||||||
h6 = re.sub(r'###### (.*?)\n', r'<h6>\1</h6>\n', self.text) # H6
|
h6 = re.sub(r'###### (.*?)\n', r'<h6>\1</h6>\n', self.text) # H6
|
||||||
@ -34,54 +40,64 @@ class Style:
|
|||||||
|
|
||||||
def italic(self):
|
def italic(self):
|
||||||
"""
|
"""
|
||||||
斜体
|
*斜体*
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'\*([^*\n]+)\*', r'<i>\1</i>', self.text)
|
self.text = re.sub(r'\*([^*\n]+)\*', r'<i>\1</i>', self.text)
|
||||||
|
|
||||||
def bold(self):
|
def bold(self):
|
||||||
"""
|
"""
|
||||||
粗体
|
**粗体**
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'\*\*([^*\n]+)\*\*', r'<b>\1</b>', self.text)
|
self.text = re.sub(r'\*\*([^*\n]+)\*\*', r'<b>\1</b>', self.text)
|
||||||
|
|
||||||
def underline(self):
|
def underline(self):
|
||||||
"""
|
"""
|
||||||
下划线
|
~下划线~
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'~([^~\n]+)~', r'<u>\1</u>', self.text)
|
self.text = re.sub(r'~([^~\n]+)~', r'<u>\1</u>', self.text)
|
||||||
|
|
||||||
def strikethrough(self):
|
def strikethrough(self):
|
||||||
"""
|
"""
|
||||||
删除线
|
~~删除线~~
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'~~([^~\n]+)~~', r'<s>\1</s>', self.text)
|
self.text = re.sub(r'~~([^~\n]+)~~', r'<s>\1</s>', self.text)
|
||||||
|
|
||||||
def highlight(self):
|
def highlight(self):
|
||||||
"""
|
"""
|
||||||
高亮
|
==高亮==
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'==([^=\n]+)==', r'<mark>\1</mark>', self.text)
|
self.text = re.sub(r'==([^=\n]+)==', r'<mark>\1</mark>', self.text)
|
||||||
|
|
||||||
def up(self):
|
def up(self):
|
||||||
"""
|
"""
|
||||||
在文本的正上方添加一行小文本,主要用于标拼音
|
[在文本的正上方添加一行小文本]^(主要用于标拼音)
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'\[(.*?)]\^\((.*?)\)', r'<ruby>\1<rt>\2</rt></ruby>', self.text)
|
self.text = re.sub(r'\[(.*?)]\^\((.*?)\)', r'<ruby>\1<rt>\2</rt></ruby>', self.text)
|
||||||
|
|
||||||
def hide(self):
|
def hide(self):
|
||||||
"""
|
"""
|
||||||
在指定的文本里面隐藏一段文本,只有鼠标放在上面才会显示隐藏文本
|
[在指定的文本里面隐藏一段文本]-(只有鼠标放在上面才会显示隐藏文本)
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'\[(.*?)]-\((.*?)\)', r'<span title="\2">\1</span>', self.text)
|
self.text = re.sub(r'\[(.*?)]-\((.*?)\)', r'<span title="\2">\1</span>', self.text)
|
||||||
|
|
||||||
def split_line(self):
|
def split_line(self):
|
||||||
|
"""
|
||||||
|
添
|
||||||
|
***
|
||||||
|
加
|
||||||
|
___
|
||||||
|
分
|
||||||
|
---
|
||||||
|
隔
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
self.text = re.sub(r'([*_-]){3}\n', r'<hr>', self.text)
|
self.text = re.sub(r'([*_-]){3}\n', r'<hr>', self.text)
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
@ -116,14 +132,14 @@ class Function:
|
|||||||
|
|
||||||
def image(self):
|
def image(self):
|
||||||
"""
|
"""
|
||||||
实现链接
|
![链接图片](链接地址)
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'!\[([^\[\]\n]+)]\(([^()\n]+)\)', r'<img src="\2" alt="\1">', self.text)
|
self.text = re.sub(r'!\[([^\[\]\n]+)]\(([^()\n]+)\)', r'<img src="\2" alt="\1">', self.text)
|
||||||
|
|
||||||
def link(self):
|
def link(self):
|
||||||
"""
|
"""
|
||||||
实现链接
|
[链接文本](链接地址)
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self.text = re.sub(r'\[([^\[\]\n]+)]\(([^()\n]+)\)', r'<a href="\2">\1</a>', self.text)
|
self.text = re.sub(r'\[([^\[\]\n]+)]\(([^()\n]+)\)', r'<a href="\2">\1</a>', self.text)
|
||||||
@ -141,11 +157,17 @@ class Function:
|
|||||||
|
|
||||||
|
|
||||||
class Value:
|
class Value:
|
||||||
|
"""
|
||||||
|
定义: {变量名}: 值
|
||||||
|
赋值: {变量或锚点名}
|
||||||
|
锚点: #{锚点名}
|
||||||
|
"""
|
||||||
def __init__(self, text: str):
|
def __init__(self, text: str):
|
||||||
self.text = text
|
self.text = text
|
||||||
self.values = {
|
self.values = {
|
||||||
key: value for key, value in re.findall(r'\{([^{}]+)} ?= ?(.+?)(?=\n|$)', text)
|
key: value for key, value in re.findall(r'\{([^{}#]+)} ?= ?(.+?)(?=\n|$)', text)
|
||||||
} # 从text中提取所有变量并转换成字典
|
} # 从text中提取所有变量并转换成字典
|
||||||
|
self.anchor = re.findall(r'#\{([^{}]+)}', text) # TODO
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs) -> Tuple[str, Dict[str, str]]:
|
def __call__(self, *args, **kwargs) -> Tuple[str, Dict[str, str]]:
|
||||||
"""
|
"""
|
||||||
@ -155,6 +177,9 @@ class Value:
|
|||||||
:return: 赋值后的正文
|
:return: 赋值后的正文
|
||||||
"""
|
"""
|
||||||
text = self.text
|
text = self.text
|
||||||
|
for item in self.anchor:
|
||||||
|
text = re.sub(r'#\{(' + item + ')}', r'<span id="\1"></span>', text) # 添加锚点
|
||||||
|
text = re.sub(r'\{' + item + '}', fr'<a href="#{item}">{item}</a>', text) # 添加页内链接
|
||||||
for k, v in self.values.items():
|
for k, v in self.values.items():
|
||||||
text = re.sub(r'\{' + k + '} ?= ?(.+?)(?=\n|$)', '', text) # 移除变量的定义
|
text = re.sub(r'\{' + k + '} ?= ?(.+?)(?=\n|$)', '', text) # 移除变量的定义
|
||||||
text = re.sub(r'\{' + k + '}', fr'{v}', text) # 给变量赋值
|
text = re.sub(r'\{' + k + '}', fr'{v}', text) # 给变量赋值
|
||||||
@ -164,7 +189,7 @@ class Value:
|
|||||||
class CodeBlock:
|
class CodeBlock:
|
||||||
def __init__(self, text: str):
|
def __init__(self, text: str):
|
||||||
"""
|
"""
|
||||||
找出代码块并移除代码标识
|
找出`代码块`并移除代码标识
|
||||||
:param text: 输入的文本
|
:param text: 输入的文本
|
||||||
"""
|
"""
|
||||||
self.codes = [i for i in re.findall(r'`([^`]*)`', text) if i != ''] # 找出代码快
|
self.codes = [i for i in re.findall(r'`([^`]*)`', text) if i != ''] # 找出代码快
|
||||||
@ -257,6 +282,9 @@ class Escape:
|
|||||||
|
|
||||||
|
|
||||||
class Cite:
|
class Cite:
|
||||||
|
"""
|
||||||
|
> 渲染引用 --[引用来源]
|
||||||
|
"""
|
||||||
def __init__(self, text):
|
def __init__(self, text):
|
||||||
self.text = text
|
self.text = text
|
||||||
|
|
||||||
@ -266,6 +294,21 @@ class Cite:
|
|||||||
return self.text
|
return self.text
|
||||||
|
|
||||||
|
|
||||||
|
class Syllabus:
|
||||||
|
"""
|
||||||
|
1. 找到提纲
|
||||||
|
1.1 找到符合若干个‘数字+点+数字’且首尾都是数字的行
|
||||||
|
"""
|
||||||
|
def __init__(self, text):
|
||||||
|
self.text = text
|
||||||
|
self.syllabus = [num for num, txt in re.findall(r'([\.|\d]+) ([^ ]+?)\n', self.text) if not num.endswith('.')] # 找出提纲
|
||||||
|
|
||||||
|
def __call__(self, *args, **kwargs):
|
||||||
|
for num in self.syllabus:
|
||||||
|
# 检测层级
|
||||||
|
self.text = re.sub(f'({num}) .+?', '', self.text)
|
||||||
|
|
||||||
|
|
||||||
class Basic:
|
class Basic:
|
||||||
def __init__(self, text: str):
|
def __init__(self, text: str):
|
||||||
self.text: str = text
|
self.text: str = text
|
||||||
@ -273,7 +316,7 @@ class Basic:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def strong_annotation(text: str) -> str:
|
def strong_annotation(text: str) -> str:
|
||||||
"""
|
"""
|
||||||
移除强注释
|
移除|=强注释=|
|
||||||
:param text: 原始文本
|
:param text: 原始文本
|
||||||
:return: 移除强注释后的文本
|
:return: 移除强注释后的文本
|
||||||
"""
|
"""
|
||||||
@ -282,7 +325,7 @@ class Basic:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def week_annotation(text: str) -> str:
|
def week_annotation(text: str) -> str:
|
||||||
"""
|
"""
|
||||||
移除弱注释
|
移除 // 弱注释
|
||||||
:param text: 原始文本
|
:param text: 原始文本
|
||||||
:return: 移除弱注释后的文本
|
:return: 移除弱注释后的文本
|
||||||
"""
|
"""
|
||||||
@ -290,7 +333,7 @@ class Basic:
|
|||||||
|
|
||||||
def paragraph(self):
|
def paragraph(self):
|
||||||
"""
|
"""
|
||||||
为普通的行套上段落标签
|
为普通的行套上<p>段落标签</p>
|
||||||
"""
|
"""
|
||||||
# TODO 有点问题
|
# TODO 有点问题
|
||||||
self.text = re.sub(r'<p>(<.+?>.*?<.+?>)</p>\n',
|
self.text = re.sub(r'<p>(<.+?>.*?<.+?>)</p>\n',
|
||||||
@ -336,6 +379,7 @@ def body(text: str) -> Tuple[str, Dict[str, str]]:
|
|||||||
text = Basic.week_annotation(text) # 移除弱注释
|
text = Basic.week_annotation(text) # 移除弱注释
|
||||||
text, values = Value(text)() # 提取变量并赋值到文本中
|
text, values = Value(text)() # 提取变量并赋值到文本中
|
||||||
text = Header(text)() # 渲染标题
|
text = Header(text)() # 渲染标题
|
||||||
|
Syllabus(text)()
|
||||||
text = Style(text)() # 渲染字体样式
|
text = Style(text)() # 渲染字体样式
|
||||||
text = Function(text)() # 渲染特殊功能
|
text = Function(text)() # 渲染特殊功能
|
||||||
text = Cite(text)() # 渲染引用
|
text = Cite(text)() # 渲染引用
|
||||||
|
0
Example.mdc
Normal file
0
Example.mdc
Normal file
Loading…
Reference in New Issue
Block a user