当前位置: 首页 > article >正文

python.tkinter设计标记语言(渲染7-动态呈现标签) - 副本

@TOC

前言

Tin标记语言的一个特性就是在渲染呈现的时候,让读者的思维跟着作者走,那么动态呈现是肯定的(当然,这是除了每渲染一则标记就更新阅读器,这个不算)。在新版的TinML中,就有若干负责动态呈现内容的标签:

  • <part>,由读者来决定呈现哪部分的内容

    (这个标签在上一篇文章讲过,本文将不展示实现细节)

  • <wait>,由读者决定何时开始阅读接下来的内容

    (这个标签在上一篇文章讲过,本文将不展示实现细节)

  • <pages>,将一部分内容分为若干个标签页进行阅读

  • <ac>,作为锚点,由读者决定是否跳转到对应的位置查看

动态呈现标签的解释和渲染

上述这些标签在解析中是无法和普通渲染标记、流程控制标记区分出来的,因此它们的呈现全部在解释器和渲染器中完成。

本小节将以<pages>标签为例解释。

<part>实际上还是属于流程控制标记,因为其可以嵌套,且最终渲染内容可以被读者选择进行渲染呈现,而<pages>无论读者是否想看,都会渲染,只不过对于读者来说,可以选择对已经完成渲染的内容是否查看。

<part>标记类似,当<pages>开头标记出现后,解释器部分self.PAGES_TAG被赋值为True,那么就会在正式匹配标签与标记之前触发解析多页面内容。根据TinML优先级中控制标签大于元素标签的规则,多页面标记的判定要晚于<part>的判定。

if self.PAGES_TAG:
    if unit[1] not in ('</pages>','</page>'):
        if len(unit)==3:
            tincontent=''.join(unit[1:])
        else:
            tincontent=unit[1]+'|'.join(unit[2:])
        self.page_content.append(tincontent)
        continue

<pages>虽然无法在单一源文本嵌套,但是允许多页面分割(本来就应该的属性)。当遇到界面终止标签</page>后,渲染已经读取的页面内容,清空缓存列表并继续读取:

case '</page>':
    #<pages>的间隔标签
    page_tin='\n'.join(self.page_content)
    #渲染页面,但是是线程阻塞的
    self.pages[page_num].thread_render(page_tin,True)
    self.page_content.clear()
    page_num+=1

当读到标记终止标记(也是左后一个页面终止标记),整个标签的解释才算结束,当渲染完最后一个界面后,将完成整个标签的渲染:

case '</pages>':
    #<pages>的间隔标签
    page_tin='\n'.join(self.page_content)
    #渲染页面,但是是线程阻塞的
    self.pages[page_num].thread_render(page_tin,True)
    self.page_content.clear()
    #<pages>的结束标签
    pages=self.pages.copy()
    self.tinml.addtin('<pages>',pages=pages,names=page_names)
    del page_num
    del page_names
    self.PAGES_TAG=False
    self.pages.clear()
    self.page_content.clear()

<pages>在TinText(TinGroup)软件中测测试标签渲染例子如下:
在这里插入图片描述
这两个页面都是在内部TinText(TinEngine)展示的,且无论读者是否想看都会进行解析渲染。

总的来看,动态呈现标签和流程控制标签很像,都是通过解释器的多次循环获取呈现标签来推进整个标签内容的读取、解释、渲染。


http://www.kler.cn/a/522914.html

相关文章:

  • 低代码产品表单渲染架构
  • C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】
  • 二叉树-堆(补充)
  • 记录 | Docker的windows版安装
  • AndroidCompose Navigation导航精通1-基本页面导航与ViewPager
  • React基础
  • 1.2第1章DC/DC变换器的动态建模-1.2Buck-Boost 变换器的交流模型--电力电子系统建模及控制 (徐德鸿)--读书笔记
  • game101 环节搭建 windows 平台 vs2022
  • doris:STRUCT
  • 【阅读笔记】New Edge Diected Interpolation,NEDI算法,待续
  • 跨域问题解释及前后端解决方案(SpringBoot)
  • 接口技术-第2次作业
  • Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
  • AAAI2024论文合集解读|Multi-dimensional Fair Federated Learning-water-merged
  • IBMSamllPower服务器监控指标解读
  • 【数据库初阶】表的查询语句和聚合函数
  • leetcode 2920. 收集所有金币可获得的最大积分
  • 10 款《医学数据库和期刊》查阅网站
  • Lesson 119 A true story
  • 蓝桥杯模拟算法:多项式输出
  • 【Prometheus】Prometheus如何监控Haproxy
  • 菜鸟之路Day09一一集合进阶(二)
  • 【公因数匹配——暴力、(质)因数分解、哈希】
  • Github 2025-01-27 开源项目周报 Top15
  • 第 4 章:游戏逻辑与状态管理
  • 【微服务与分布式实践】探索 Sentinel