diff --git a/CrossDown/Core.py b/CrossDown/Core.py index 7c562cd..6683f38 100644 --- a/CrossDown/Core.py +++ b/CrossDown/Core.py @@ -89,7 +89,7 @@ class Syllabus(Preprocessor): return [ (lambda match, origen: re.sub(f'^({match.groups()[0]})', # 按照提纲等级添加#和锚点 - fr'{"#" * len(match.groups()[0].split("."))} \1{{#' + match.groups()[0] + '}', origen) + fr'{"#" * len(match.groups()[0].split("."))} \1', origen) if match is not None else origen) # 对于不是提纲的行,直接返回原始字符 ((lambda x: re.match(r'^([\d.]+) ', x) # 判断是否是提纲 if not any((x.startswith('.'), # 以.开头 @@ -116,6 +116,16 @@ class Value(Preprocessor): return lines +class Header(Treeprocessor): + def run(self, root): + """ + 通过修改AST来给标题添加锚点 + """ + for header in root.iter(): + if header.tag in ('h1', 'h2', 'h3', 'h4', 'h5', 'h6'): # 查找标题 + header.set('id', header.text.split(' ')[0]) # 给标题添加锚点 + + class Basic(Extension): def extendMarkdown(self, md): md.registerExtension(self) # 注册扩展 @@ -128,6 +138,11 @@ class More(Extension): md.preprocessors.register(Value(md), 'values', 0) +class Decorate(Extension): + def extendMarkdown(self, md): + md.treeprocessors.register(Header(md), 'header', 0) + + def main(text: str) -> Tuple[str, Dict[str, List[str]]]: - md = Markdown(extensions=[Basic(), More()] + list(Extensions.values())) + md = Markdown(extensions=[Basic(), More()] + list(Extensions.values()) + [Decorate()]) return md.convert(text), md.Meta diff --git a/CrossDown/Extra.py b/CrossDown/Extra.py new file mode 100644 index 0000000..e69de29 diff --git a/README.html b/README.html index 58fff18..d3cb82c 100644 --- a/README.html +++ b/README.html @@ -29,8 +29,8 @@
自制的markdown,添加了一些自定义的语法
效果请见README.html
{变量名} = 值
-{变量名} {锚点名}
提纲的编号已经自动配置为了锚点,可直接使用{2}
-{#锚点名}
-单行
单行
$CO_2$
$H_2O$
¥y=x*2+1¥
// 不定义范围
¥y=x**2¥€-50,50€
// 定义了x范围
¥y=x**3¥€-50,50|-100,100€
// 定义了y范围
A:
1. a
2. b
@@ -176,21 +176,21 @@
- a
- b
- c
python
print('CrossDown')
mermaid
graph LR
A-->B
A-->C
B-->D
C-->D
\
\a
*
--一级引用
@@ -210,43 +210,43 @@引文内添加斜体粗体下划线
删除线高亮
以数字和点组成,通过空格与提纲名分隔,例如:
-点不能出现在开头或结尾,例如
.6.1.2 错误示范
6.1.3. 错误示范
不能出现两个及以上连续的点,例如:
6..1…4 错误示范
提纲号会被自动配置为锚点,可直接使用{6}{6.1}
-|=
无论如何都会被移除
放在代码块里也没用
=|
只有在 // 后面才会被移除
// 代码中的注释弱不会被移除
这是一条警告
:person_biking:
:grinning_face_with_big_eyes:
-Don’t try this at home