diff --git a/CrossDown.py b/CrossDown.py
index 94ae379..a0a1b5f 100644
--- a/CrossDown.py
+++ b/CrossDown.py
@@ -9,6 +9,12 @@ class Header:
def __call__(self, *args, **kwargs):
"""
渲染标题
+ # 一级标题
+ ## 二级标题
+ ### 三级标题
+ #### 四级标题
+ ##### 五级标题
+ ###### 六级标题
:return: 处理后的文本
"""
h6 = re.sub(r'###### (.*?)\n', r'
\1
\n', self.text) # H6
@@ -34,54 +40,64 @@ class Style:
def italic(self):
"""
- 斜体
+ *斜体*
:return:
"""
self.text = re.sub(r'\*([^*\n]+)\*', r'\1', self.text)
def bold(self):
"""
- 粗体
+ **粗体**
:return:
"""
self.text = re.sub(r'\*\*([^*\n]+)\*\*', r'\1', self.text)
def underline(self):
"""
- 下划线
+ ~下划线~
:return:
"""
self.text = re.sub(r'~([^~\n]+)~', r'\1', self.text)
def strikethrough(self):
"""
- 删除线
+ ~~删除线~~
:return:
"""
self.text = re.sub(r'~~([^~\n]+)~~', r'\1', self.text)
def highlight(self):
"""
- 高亮
+ ==高亮==
:return:
"""
self.text = re.sub(r'==([^=\n]+)==', r'\1', self.text)
def up(self):
"""
- 在文本的正上方添加一行小文本,主要用于标拼音
+ [在文本的正上方添加一行小文本]^(主要用于标拼音)
:return:
"""
self.text = re.sub(r'\[(.*?)]\^\((.*?)\)', r'\1', self.text)
def hide(self):
"""
- 在指定的文本里面隐藏一段文本,只有鼠标放在上面才会显示隐藏文本
+ [在指定的文本里面隐藏一段文本]-(只有鼠标放在上面才会显示隐藏文本)
:return:
"""
self.text = re.sub(r'\[(.*?)]-\((.*?)\)', r'\1', self.text)
def split_line(self):
+ """
+ 添
+ ***
+ 加
+ ___
+ 分
+ ---
+ 隔
+ :return:
+ """
self.text = re.sub(r'([*_-]){3}\n', r'
', self.text)
def __call__(self, *args, **kwargs):
@@ -116,14 +132,14 @@ class Function:
def image(self):
"""
- 实现链接
+ ![链接图片](链接地址)
:return:
"""
self.text = re.sub(r'!\[([^\[\]\n]+)]\(([^()\n]+)\)', r'', self.text)
def link(self):
"""
- 实现链接
+ [链接文本](链接地址)
:return:
"""
self.text = re.sub(r'\[([^\[\]\n]+)]\(([^()\n]+)\)', r'\1', self.text)
@@ -141,11 +157,17 @@ class Function:
class Value:
+ """
+ 定义: {变量名}: 值
+ 赋值: {变量或锚点名}
+ 锚点: #{锚点名}
+ """
def __init__(self, text: str):
self.text = text
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中提取所有变量并转换成字典
+ self.anchor = re.findall(r'#\{([^{}]+)}', text) # TODO
def __call__(self, *args, **kwargs) -> Tuple[str, Dict[str, str]]:
"""
@@ -155,6 +177,9 @@ class Value:
:return: 赋值后的正文
"""
text = self.text
+ for item in self.anchor:
+ text = re.sub(r'#\{(' + item + ')}', r'', text) # 添加锚点
+ text = re.sub(r'\{' + item + '}', fr'{item}', text) # 添加页内链接
for k, v in self.values.items():
text = re.sub(r'\{' + k + '} ?= ?(.+?)(?=\n|$)', '', text) # 移除变量的定义
text = re.sub(r'\{' + k + '}', fr'{v}', text) # 给变量赋值
@@ -164,7 +189,7 @@ class Value:
class CodeBlock:
def __init__(self, text: str):
"""
- 找出代码块并移除代码标识
+ 找出`代码块`并移除代码标识
:param text: 输入的文本
"""
self.codes = [i for i in re.findall(r'`([^`]*)`', text) if i != ''] # 找出代码快
@@ -257,6 +282,9 @@ class Escape:
class Cite:
+ """
+ > 渲染引用 --[引用来源]
+ """
def __init__(self, text):
self.text = text
@@ -266,6 +294,21 @@ class Cite:
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:
def __init__(self, text: str):
self.text: str = text
@@ -273,7 +316,7 @@ class Basic:
@staticmethod
def strong_annotation(text: str) -> str:
"""
- 移除强注释
+ 移除|=强注释=|
:param text: 原始文本
:return: 移除强注释后的文本
"""
@@ -282,7 +325,7 @@ class Basic:
@staticmethod
def week_annotation(text: str) -> str:
"""
- 移除弱注释
+ 移除 // 弱注释
:param text: 原始文本
:return: 移除弱注释后的文本
"""
@@ -290,7 +333,7 @@ class Basic:
def paragraph(self):
"""
- 为普通的行套上段落标签
+ 为普通的行套上段落标签
"""
# TODO 有点问题
self.text = re.sub(r'(<.+?>.*?<.+?>)
\n',
@@ -336,6 +379,7 @@ def body(text: str) -> Tuple[str, Dict[str, str]]:
text = Basic.week_annotation(text) # 移除弱注释
text, values = Value(text)() # 提取变量并赋值到文本中
text = Header(text)() # 渲染标题
+ Syllabus(text)()
text = Style(text)() # 渲染字体样式
text = Function(text)() # 渲染特殊功能
text = Cite(text)() # 渲染引用
diff --git a/Example.mdc b/Example.mdc
new file mode 100644
index 0000000..e69de29