用Python创造一门标记语言并渲染(1)——定义

用Python创造一门标记语言并渲染(1)——定义

背景

我在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知识库中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值