TinText

TinEngineCore

TinEngine是TinText(应用组)实现TinML渲染和转译的核心部件,TinEngineCore则是实现TinEngine的直接接口,内含TinParser(解析类)和TinText(控件)。

其中,TinText使用的子线程退出机制有专门的篇幅介绍。

TinParser 解析类

TinParser的主要作用就是将一串TinML文本转为可被进一步解释、渲染的内容参数。

比如以下文本:

<title>标题

|-注释(下方<p>在实际写作中不建议多行写法)
<p>这是;
|*文本
|。|

这全部是文字,但是需要通过解析形成类似下方的数据:

(
    ('<title>','标题'),
    ('<p>','这是','*文本','。')
)

TinParser的实现原理简述见python.tkinter设计标记语言(语法2-语法解析器)

parse(tin:str)

此方法用于将TinML标记文本转为TinText能够解析的结构。

TinText本身的渲染方法直接调用了TinParser.parse

每一个标签块通过yield输出,例如:

<title>标题|2

输出:

(1, '<title>', ('标题','2'))

但是,如果标记块不符合TinML规范,则会输出错误(不是抛出):


TinText 控件类

TinText由两部分功能组成,解释、渲染。这两个功能在同一个模块(render function)里,但是有先后之分。

解释,就是将标签参数解释成有意义的内容。还是拿上方生成的数据为例,最终需要转变为如下内容:

(
    ('<title>', {'title':'标题','level':'1'}),
    ('<p>',{'texts':('这是','*文本','。')})
)

这部分的简述见python.tkinter设计标记语言(渲染1-解释器)

渲染,就是将这些已经有了具体文本意义和样式意义的内容呈现出来,简述见python.tkinter设计标记语言(渲染2-渲染器)。当然,最直观的还是查看TinEngineCore.py源代码。

render(tintext:str, new=True)

此方法用于将TinML标记文本进行渲染呈现。

new = True时,则会清除已有内容和上下文标记,重新开始渲染任务。

thread_render(tintext:str, wait=False, new=True, in_queue=False)

此方法用于将TinML标记文本在子线程中进行渲染呈现。

wait = True时,渲染线程将阻塞主线程。如果是一般渲染,建议将此值设False,而不是直接使用render方法。

new = True时,则会清除已有内容和上下文标记,重新开始渲染任务。

in_queue = True时,则会在正在渲染时将标记文本添加到待渲染队列中,但此时waitnew参数都不会起作用。

如果当前没有渲染线程,或者当前正在渲染,而指定将标记文本添加到待渲染队列,该方法均会返回True,代表渲染申请得到处理。否则返回False,代表不会渲染。