From d57651aee1a4a1ce7308b36210be7b59a49a07ed Mon Sep 17 00:00:00 2001 From: crossdark Date: Sat, 21 Sep 2024 20:45:45 +0800 Subject: [PATCH] =?UTF-8?q?0.8.3=E6=8F=90=E7=BA=B2=E4=BC=9A=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E4=BB=A5=E7=82=B9=E7=BB=93=E5=B0=BE=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=BA=B2=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/CrossDown.iml | 6 +- CrossDown.py | 24 ++++--- README.html | 159 +++++++++++++++++++++++++------------------- 3 files changed, 110 insertions(+), 79 deletions(-) diff --git a/.idea/CrossDown.iml b/.idea/CrossDown.iml index 909438d..9460add 100644 --- a/.idea/CrossDown.iml +++ b/.idea/CrossDown.iml @@ -1,7 +1,11 @@ - + + + + + diff --git a/CrossDown.py b/CrossDown.py index 56ff1d4..6410a3a 100644 --- a/CrossDown.py +++ b/CrossDown.py @@ -164,6 +164,7 @@ class Value: 赋值: {变量或锚点名} 锚点: {#锚点名} """ + def __init__(self, text: str): self.text = text self.values = { @@ -225,7 +226,8 @@ class CodeBlock: if head in ('', 'yaml'): self.codes[index] = f'
{code}
' elif head in ('shell', 'python'): - self.codes[index] = f'
{re.sub(f"({head})", "", code)}
' + self.codes[ + index] = f'
{re.sub(f"({head})", "", code)}
' elif head in ('mermaid',): self.codes[index] = f'
{re.sub(f"({head})", "", code)}
' elif re.match(r'\$[^$]*\$', code): # 是LaTex代码(单行) @@ -257,7 +259,7 @@ class Escape: # TODO 还有点问题 self.text = text self.escapes = { i: f'\0\1\2{i}\2\1\0' for i in re.findall(r'(\\.)', text) - } # 找出要转义的字符 + } # 找出要转义的字符 def __call__(self, *args, **kwargs): """ @@ -297,11 +299,13 @@ class Cite: """ > 渲染引用 --[引用来源] """ + def __init__(self, text): self.text = text def __call__(self, *args, **kwargs) -> str: - self.text = re.sub('> (.*?) --\[(.*?)]\n', r'
\1
\2
', self.text) # 渲染有来源的引用 + self.text = re.sub('> (.*?) --\[(.*?)]\n', r'
\1
\2
', + self.text) # 渲染有来源的引用 self.text = re.sub('> (.*?)\n', r'
\1
\n', self.text) # 渲染没有来源的引用 return self.text @@ -312,15 +316,19 @@ class Syllabus: 2 找到符合若干个‘数字+点+数字’且首尾都是数字的行 每个提纲编号全文只能出现一次 """ + def __init__(self, text: str): self.text = text - self.syllabus = {tuple(syllabus[0].split('.')): syllabus[1] for syllabus in [re.match(r'([\.|\d]+) ([^ ]+?)\n', i) for i in self.text.split('\n')] if syllabus is not None} # 找出提纲 - print(self.syllabus) def __call__(self, *args, **kwargs): - for num, txt in self.syllabus.items(): - self.text = re.sub(f'{".".join(num)} {re.escape(txt)}', f'{"#" * len(num)}{".".join(num)} {txt}{{#' + '.'.join(num) + f'}}\n', self.text) # 按照层级为提纲添加不同等级的标题并创建锚点 - return self.text + return '\n'.join([ + (lambda match, origen: + re.sub(f'^({match.groups()[0]})', + fr'{"#" * len(match.groups()[0].split("."))} \1{{#' + match.groups()[0] + '}', origen) + if match is not None else origen) # 对于不是提纲的行,直接返回原始字符 + (re.match(r'^([\d.]+) ', line), line) # 匹配提纲号 + for line in self.text.splitlines() # 分割并遍历文本的每一行 + ]) class Basic: diff --git a/README.html b/README.html index a36aaa0..ea74e2c 100644 --- a/README.html +++ b/README.html @@ -25,52 +25,52 @@

CrossDown

自制的markdown,添加了一些自定义的语法 - 效果请见README.html - 1 基本语法 - 1.1 标题

+ 效果请见README.html

+

1 基本语法

+

1.1 标题

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题
-

1.2 样式 - 1.2.1 斜体 - 1.2.2 粗体 - 1.2.3 粗斜体 - 1.2.4 下划线 - 1.2.5 删除线 - 1.2.6 高亮 - 1.2.7 在文本的正上方添加一行小文本主要用于标拼音 - 1.2.8 在指定的文本里面隐藏一段文本 - 1.2.9 分割线

+

1.2 样式

+

1.2.1 斜体

+

1.2.2 粗体

+

1.2.3 粗斜体

+

1.2.4 下划线

+

1.2.5 删除线

+

1.2.6 高亮

+

1.2.7 在文本的正上方添加一行小文本主要用于标拼音

+

1.2.8 在指定的文本里面隐藏一段文本

+

1.2.9 分割线




-

1.3 链接 - 1.3.1 普通链接 - 链接文本 - CrossDark - 1.3.2 图片 - 链接图片 - sea - 1.3.3 变量链接 - 链接文本

-

2 变量 - 2.1 定义

-

2.2 赋值 - 值 锚点名 - 提纲的编号已经自动配置为了锚点,可直接使用{2} - 2.3 添加锚点 - - 3 代码块 - 3.1 单行 - 3.1.1 LaTex -

\(CO_2\)

-

\(H_2O\)

- 3.2 多行 - 3.2.1 YAML -

+    

1.3 链接

+

1.3.1 普通链接

+

链接文本 + CrossDark

+

1.3.2 图片

+

链接图片 + sea

+

1.3.3 变量链接

+

链接文本

+

2 变量

+

2.1 定义

+

2.2 赋值

+

锚点名 + 提纲的编号已经自动配置为了锚点,可直接使用2

+

2.3 添加锚点

+

+

3 代码块

+

3.1 单行

+

3.1.1 LaTex

+

\(CO_2\)

+

\(H_2O\)

+

3.2 多行

+

3.2.1 YAML

+


     A:
         1. a
         2. b
@@ -79,24 +79,24 @@
         - a
         - b
         - c
-    
- 3.2.2 Python -

+    

+

3.2.2 Python

+


     print('CrossDown')
-    
- 3.2.3 Mermaid -
+

+

3.2.3 Mermaid

+

graph LR A-->B A-->C B-->D C-->D -
- 4 转义 - \ +

+

4 转义

+

\ \a - * - 5 引用

+ *

+

5 引用

一级引用

@@ -116,27 +116,46 @@

引文内添加斜体粗体下划线删除线高亮

-

6 提纲

-

7 注释 - 7.1 强注释

-

7.2 弱注释 - 只有在 - // 代码中的注释弱不会被移除 - 8 列表 - 8.1 有序列表 - 1. a - 2. b - 3. c - 4. d

-

8.2 无序列表 - - A - - B - - C - - D

-

9 表格 - | 表头1 | 表头2 | 表头3 |
- | :--: | :--: | :--: |
- | 单元格1 | 单元格2 | 单元格3 |
- | 单元格4 | 单元格5 | 单元格6 |

+

6 提纲

+

7 注释

+

7.1 强注释

+

7.2 弱注释

+

只有在 + // 代码中的注释弱不会被移除

+

8 列表

+

8.1 有序列表

+

1. a

+

2. b

+

3. c

+

4. d

+

8.2 无序列表

+ +

9 表格

+ + + + + + + + + + + + + + + + + + + + +
表头1表头2表头3
单元格1单元格2单元格3
单元格4单元格5单元格6