背景
我在2020年年初,自己使用Python/tkinter定义了一个名称为TiN的标记语言(为了方便,以下直接写为Tin),并在周末和课余时间不断完善和改进升级。
我是一名中学生,使用中不需要对这个标记语言有太多要求,只需要实现普通文本能够显示的格式即可。既然现在已经有 html 和 Markdown 等标记语言还有Word等富文本编辑器了,为什么我还需要自己设计一个标记语言并渲染呈现呢?html对我来说过于复杂,Markdown和Word等文本标记或者是显示器,都是直接显示整个文本,那么不同的人可能就要发相同主题的不同内容的文件,不便于管理。而且在学习中需要进行文本阐述,一大堆文字或图片一下子摆在那,也不便于读者思考。
那么我就想设计一个灵活、简单的编辑语言。这个标记语言应该是以标签为开头,告诉解析器需要渲染或操作的是什么,然后以英文分号为参数分割,告诉解析器这个标签的参数是什么,然后再用文本框显示出来。同时,最好还要具备同一个文件内,不同部分可以通过密码控制读者查看,还能够让读者跟随我(文本编者)的思路阅读文本等功能。
目标设定好了,下一步就要开始对Tin的定义了。
定义
语言实现
以Python为基础语言,渲染完全依靠tkinter(以及tkinter的第三方拓展)。
Tin不会将标记文本转为html或Markdown,也就是说Tin依靠自身渲染框呈现。
语法
Tin是一门标记语言,语言格式定义如下:
<标签名称>参数1;参数2;……
;英文分号后为注释
;部分标签需要多行格式的参数,如加密控制
<标签名称>
多行内容
……
</标签名称>
此外,为了方便编写,并不能让所有标签都能够多行编写,像密码模块等需要内置标签的,才需要多行参数。同时,不准备支持嵌套,因为那样会增加文本复杂程度,往后会想办法解决嵌套问题。
那么基本语法就可以总结如下:
<object>msg[;arg1][;arg2][...]
;特殊情况
<-object->
......
</-object>
在后来的设计中,某些多行参数的标签,可以通过“|”作为每行的分隔
定位
定位不需要太高,平常可以方便使用就行了,Tin被定位于富文本标记。
渲染
解析
逐行解析并呈现,如果需要多行参数,暂不呈现,等处理到结尾标签后再呈现。
方式
不给自己加负担,这个标记语言的主体部分必须可以被Python/tkinter的文本框显示出来。也就是从上至下渲染呈现。
基本效果
为了保证Tin的基本语法不被更改,我编译成了 TinEngine.pyd(pyd的名称是随意取的,更准确应该是 render,不要喷😁)。在Tin知识库中可以下载渲染文本框。
TinEngine.pyd依赖于 PIL 和 requests 两个第三方库
以下是基本文本标签的调用和渲染效果:
Python代码
from tkinter import Tk
from TinEngine import TinText,set_name,set_file
import PIL
import requests
root=Tk()
root.geometry('750x780+200+2')
root.title('test tin engine')
text=TinText(root,font=('宋体',13))
text.pack(fill='both',expand=True)
text.point_file(['<title>this is title;;blue',
'<sp>2',
'<main>this is main centence','<sp>',
'<progressbar>orange-grey;570;74','<middle> 74%','<sp>2',
'<progress>#;#cc6c6e;37','<middle> 74%','<sp>2',
'<middles>*本程序使用TinEngine.pyd,====;_请按照说明的要求通过安装三方库和 TinEngine.pyd 编写。==red==;/TinEngine.pyd 由 Smart-Space|张峻铭 提供,是TinGroup的一个组件。==#2ffc61==;'
'-TiN作者 目前在读于 广州为明元培A 初三==#5ab490==',
'<separat>blue;- -','<sp>2',
'<img>tinlogo.png;https://assets.baklib.com/09d9a8d0-7d54-422d-84e7-0de26defdcb5/Tin图标TM1594974558551.png;400x350'])
set_name(text)#当解析tins可能会使用到
root.mainloop()
#TinEngine依赖于 PIL 和 requests 第三方库
#如果无法运行,需要使用 pip 下载这两个第三方库
#注:requests 还需要额外的第三方库,不过在 pip 安装时已经自动下载
#data\img 目录必不可少
Tin的渲染效果
详细内容在Tin知识库中。