From 0a2d8b4075e7e65592fde63e0ee20395dccb5970 Mon Sep 17 00:00:00 2001
From: small
Date: Mon, 28 Oct 2024 11:23:16 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20CrossDown/Core.py?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CrossDown/Core.py | 182 ++++------------------------------------------
1 file changed, 13 insertions(+), 169 deletions(-)
diff --git a/CrossDown/Core.py b/CrossDown/Core.py
index 8d839cb..298446e 100644
--- a/CrossDown/Core.py
+++ b/CrossDown/Core.py
@@ -22,16 +22,13 @@ from pymdownx.tilde import DeleteSubExtension
from pymdownx.fancylists import FancyListExtension
from pymdownx.saneheaders import SaneHeadersExtension
-from pygments.formatters import HtmlFormatter
-
from markdown.treeprocessors import Treeprocessor
from markdown.inlinepatterns import InlineProcessor
from markdown.blockprocessors import BlockProcessor
from markdown.preprocessors import Preprocessor
-
from markdown.blockparser import BlockParser
-
from markdown import Markdown
+
from typing import *
import re
import xml
@@ -39,33 +36,6 @@ import emoji
from .Define import Variable
-try: # 检测当前平台是否支持扩展语法
- from .Extra import *
-
- EXTRA_ABLE = True
-except ModuleNotFoundError: # 不支持扩展语法
- EXTRA_ABLE = False
-
-
-class HighlightHtmlFormatter(HtmlFormatter):
- """
- 用于给code highlight扩展添加语言类型
- """
-
- def __init__(self, lang_str='', **options):
- """
- 初始化
- :param lang_str: 数据格式 {lang_prefix}{lang}
- :param options:
- """
- super().__init__(**options)
- self.lang_str = lang_str.split('-')[-1]
-
- def _wrap_code(self, source: str):
- yield 0, f''
- yield from source
- yield 0, '
'
-
class PreProcess(Preprocessor):
"""预处理"""
@@ -179,29 +149,6 @@ class ID(InlineProcessor):
return tag, m.start(), m.end()
-class Emoji(InlineProcessor):
- """
- 需要对HTML标签设置ID实现的样式
- """
-
- def __init__(self, pattern: str):
- """
- 初始化
- :param pattern: 正则表达式
- """
- super().__init__(pattern)
-
- def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[
- None, None, None]:
- """
- 处理匹配
- :param m: re模块的匹配对象
- :param data: 被匹配的原始文本
- :return: 标签 匹配开始 匹配结束
- """
- return emoji.emojize(m.group(0)), m.start(), m.end()
-
-
class Syllabus(BlockProcessor):
# 定义提纲的正则表达式
syllabus_re = r'(\d+(\.\d+)*)\s+(.*)'
@@ -230,57 +177,6 @@ class Syllabus(BlockProcessor):
return False
-class BoxBlock(BlockProcessor):
- def __init__(self, parser: BlockParser, re_start, re_end, style):
- """
- 初始化
- :param parser: 块处理器
- :param re_start: 块的起始re表达式
- :param re_end: 块的终止re表达式
- :param style: 块的风格
- """
- super().__init__(parser)
- self.re_start = re_start # start line, e.g., ` !!!!
- self.re_end = re_end # last non-blank line, e.g, '!!!\n \n\n'
- self.style = style
-
- def test(self, parent: xml.etree.ElementTree.Element, block: str) -> Match[str] | None | bool:
- """
- 检查当前块是否匹配正则表达式
- :param parent: 当前块的Element对象
- :param block: 当前块的内容
- :return: 匹配成功与否
- """
- return re.match(self.re_start, block)
-
- def run(self, parent: xml.etree.ElementTree.Element, blocks: List[str]) -> bool | None:
- """
- 对匹配到的块进行处理
- :param parent: 当前块的Element对象
- :param blocks: 包含文本中剩余块的列表
- :return: 匹配成功与否
- """
- original_block = blocks[0]
- blocks[0] = re.sub(self.re_start, '', blocks[0])
-
- # Find block with ending fence
- for block_num, block in enumerate(blocks):
- if re.search(self.re_end, block):
- # remove fence
- blocks[block_num] = re.sub(self.re_end, '', block)
- # render fenced area inside a new div
- e = xml.etree.ElementTree.SubElement(parent, 'div')
- e.set('style', self.style)
- self.parser.parseBlocks(e, blocks[0:block_num + 1])
- # remove used blocks
- for i in range(0, block_num + 1):
- blocks.pop(0)
- return True # or could have had no return statement
- # No closing marker! Restore and do nothing
- blocks[0] = original_block
- return False # equivalent to our test() routine returning False
-
-
class _Anchor(InlineProcessor):
def handleMatch(self, m: Match[str], data: str) -> Tuple[xml.etree.ElementTree.Element, int, int] | Tuple[
None, None, None]:
@@ -364,16 +260,6 @@ class CodeLine(Treeprocessor):
code.text = key
-class CodeBlock(Treeprocessor):
- """
- 渲染单行代码
- """
-
- def run(self, root: xml.etree.ElementTree.Element):
- for code in root:
- print(code.text)
-
-
class Pre(Extension):
"""预处理"""
@@ -414,50 +300,6 @@ class Basic(Extension):
md.parser.blockprocessors.register(Syllabus(md.parser), 'syllabus', 182) # 渲染提纲
-class Box(Extension):
- """
- 渲染外框
- """
-
- def extendMarkdown(self, md):
- """
- 添加扩展
- :param md: 转换器
- """
- md.registerExtension(self) # 注册扩展
- # 红框警告
- md.inlinePatterns.register(ID(
- r'!{3}(.+?)!{3}', tag='div', property_='style', value='display: inline-block; border: 1px solid red;'
- ), 'warning_in_line', 190) # 行内
- md.parser.blockprocessors.register(BoxBlock(
- md.parser, r'^ *!{3} *\n', r'\n *!{3}\s*$', 'display: inline-block; border: 1px solid red;'
- ), 'warning_box', 191) # 块
-
- # 黄框提醒
- md.inlinePatterns.register(ID(
- r'!{2}(.+?)!{2}', tag='div', property_='style', value='display: inline-block; border: 1px solid yellow;'
- ), 'reminding_in_line', 192) # 行内
- md.parser.blockprocessors.register(BoxBlock(
- md.parser, r'^ *!-! *\n', r'\n *!-!\s*$', 'display: inline-block; border: 1px solid yellow;'
- ), 'reminding_box', 193) # 块
-
- # 绿框安心
- md.inlinePatterns.register(ID(
- r',{3}(.+?),{3}', tag='div', property_='style', value='display: inline-block; border: 1px solid green;'
- ), 'reminding_in_line', 194) # 行内
- md.parser.blockprocessors.register(BoxBlock(
- md.parser, r'^ *,{3} *\n', r'\n *,{3}\s*$', 'display: inline-block; border: 1px solid green;'
- ), 'reminding_box', 195) # 块
-
- # 蓝框怀疑
- md.inlinePatterns.register(ID(
- r',-,(.+?),{2}', tag='div', property_='style', value='display: inline-block; border: 1px solid blue;'
- ), 'reminding_in_line', 196) # 行内
- md.parser.blockprocessors.register(BoxBlock(
- md.parser, r'^ *,-, *\n', r'\n *,-,\s*$', 'display: inline-block; border: 1px solid blue;'
- ), 'reminding_box', 197) # 块
-
-
class Anchor(Extension):
def extendMarkdown(self, md: Markdown):
"""
@@ -496,7 +338,17 @@ Extensions = {
'属性设置': legacy_attrs.LegacyAttrExtension(),
# pymdownx
- '基本扩展': ExtraExtension(),
+ '基本扩展': ExtraExtension(configs={
+ superfences: {
+ custom_fences: [ # 渲染mermaid
+ {
+ 'name': 'mermaid',
+ 'class': 'mermaid',
+ 'format': fence_div_format
+ }
+ ]
+ }
+ }),
'超级数学': ArithmatexExtension(),
'EMOJI': EmojiExtension(),
'块扩展': BlocksExtension(),
@@ -511,15 +363,7 @@ Extensions = {
'高亮': MarkExtension(),
'进度条': ProgressBarExtension(),
'高级符号': SmartSymbolsExtension(),
- '超级代码块': SuperFencesCodeExtension(
- custom_fences=[ # 渲染mermaid
- {
- 'name': 'mermaid',
- 'class': 'mermaid',
- 'format': fence_div_format
- }
- ]
- ),
+ '超级代码块': SuperFencesCodeExtension(),
'任务列表': TasklistExtension(clickable_checkbox=True),
'下标': DeleteSubExtension(),
'上标': InsertSupExtension(),
From e046f88595c228437003a40e4e8459d46c045d8b Mon Sep 17 00:00:00 2001
From: small
Date: Mon, 28 Oct 2024 11:26:49 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20CrossDown/Core.py?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CrossDown/Core.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/CrossDown/Core.py b/CrossDown/Core.py
index 298446e..9de8041 100644
--- a/CrossDown/Core.py
+++ b/CrossDown/Core.py
@@ -32,7 +32,6 @@ from markdown import Markdown
from typing import *
import re
import xml
-import emoji
from .Define import Variable
@@ -363,7 +362,6 @@ Extensions = {
'高亮': MarkExtension(),
'进度条': ProgressBarExtension(),
'高级符号': SmartSymbolsExtension(),
- '超级代码块': SuperFencesCodeExtension(),
'任务列表': TasklistExtension(clickable_checkbox=True),
'下标': DeleteSubExtension(),
'上标': InsertSupExtension(),
From 4c5fd23b067e91aa9d69545456e9141e3ca1ab5b Mon Sep 17 00:00:00 2001
From: small
Date: Mon, 28 Oct 2024 11:27:28 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20CrossDown/Core.py?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CrossDown/Core.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CrossDown/Core.py b/CrossDown/Core.py
index 9de8041..b309aa9 100644
--- a/CrossDown/Core.py
+++ b/CrossDown/Core.py
@@ -16,7 +16,7 @@ from pymdownx.keys import KeysExtension
from pymdownx.mark import MarkExtension
from pymdownx.progressbar import ProgressBarExtension
from pymdownx.smartsymbols import SmartSymbolsExtension
-from pymdownx.superfences import SuperFencesCodeExtension, fence_div_format
+from pymdownx.superfences import fence_div_format
from pymdownx.tasklist import TasklistExtension
from pymdownx.tilde import DeleteSubExtension
from pymdownx.fancylists import FancyListExtension