85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
|
# -------------------------------
|
|||
|
# Difficult Rocket
|
|||
|
# Copyright © 2021 by shenjackyuanjie
|
|||
|
# All rights reserved
|
|||
|
# -------------------------------
|
|||
|
|
|||
|
"""
|
|||
|
writen by shenjackyuanjie
|
|||
|
mail: 3695888@qq.com
|
|||
|
github: @shenjackyuanjie
|
|||
|
gitee: @shenjackyuanjie
|
|||
|
"""
|
|||
|
|
|||
|
import re
|
|||
|
import parse
|
|||
|
from typing import List, Dict, Union
|
|||
|
|
|||
|
from Difficult_Rocket import translate
|
|||
|
|
|||
|
# [\u4e00-\u9fa5] 中文字符
|
|||
|
compiler = Union[re.compile, parse.compile]
|
|||
|
compiler = Union[compiler]
|
|||
|
fonts_config = List[Dict[str: str, str: compiler, str: Dict[str: str, str: str]]]
|
|||
|
default_fonts_config = [
|
|||
|
{
|
|||
|
'match': re.compile(r'.'), # 匹配的字符 匹配选项可以是re.compile() 或者 parse.compile() 或者有 .parse的方法都可以(一定要有返回值)
|
|||
|
'shown': parse.compile(r'{}'), # 匹配到的字符中显示的部分
|
|||
|
'mode': 'default',
|
|||
|
'name': translate.鸿蒙简体,
|
|||
|
'size': 12,
|
|||
|
'bold': False,
|
|||
|
'italic': False,
|
|||
|
'color': 'black'
|
|||
|
},
|
|||
|
{
|
|||
|
'match': re.compile(r'[a-zA-Z]'),
|
|||
|
'shown': re.compile(r'[a-zA-Z]'),
|
|||
|
'mode': 'default',
|
|||
|
'name': translate.微软等宽,
|
|||
|
},
|
|||
|
# Markdown 语法规则匹配
|
|||
|
{
|
|||
|
# Markdown 粗体语法规则匹配
|
|||
|
'match': re.compile(r'\*\*(.*?(?<!\s))\*\*'),
|
|||
|
'shown': re.compile(r'(?<=\*\*)(.*?(?<!\s))(?=\*\*)'),
|
|||
|
'mode': 'set',
|
|||
|
'bold': True,
|
|||
|
'tag': {
|
|||
|
# 为 match 匹配到的字符添加标签
|
|||
|
'match': re.compile(r'\*\*'),
|
|||
|
'name': 'bold'
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
# Markdown 斜体语法规则匹配
|
|||
|
'match': re.compile(r'\*(.*?(?<!\s))\*'),
|
|||
|
'shown': re.compile(r'(?<=\*)(.*?(?<!\s))(?=\*)'),
|
|||
|
'mode': 'set',
|
|||
|
'italic': True,
|
|||
|
'ignore': {
|
|||
|
# 如果匹配到的字符含有 tag 就忽略本次解析
|
|||
|
'match': re.compile(r'\*'),
|
|||
|
'tag': 'bold'
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
# Markdown 链接规则匹配
|
|||
|
# 注意:这里的匹配模式是非贪婪的,即匹配到的结果必须是完整的
|
|||
|
# 即:链接名称不能是空格等空白字符开头,链接名称不能是空格等空白字符结尾
|
|||
|
# 匹配的内容:[abc](def)
|
|||
|
# 显示的内容:abc
|
|||
|
'match': re.compile(r'\[(.*?(?<!\s))\]\((.*?(?<!\s))\)'),
|
|||
|
'shown': parse.compile(r'[{}]({})')
|
|||
|
}
|
|||
|
]
|
|||
|
|
|||
|
|
|||
|
def decode_text_to_HTML(text: str,
|
|||
|
config: fonts_config=default_fonts_config) -> str:
|
|||
|
style_list = range(0, len(text)) # 字体样式列表
|
|||
|
tag_list = range(0, len(text)) # 字符标签列表
|
|||
|
style_HTML_str = '' # 字体样式HTML字符串
|
|||
|
|
|||
|
|