python.tkinter设计标记语言(转译2-html)

server/2024/9/18 13:40:04/ 标签: python, tkinter

@TOC

前言

本文只作为笔记记录。

前文我们已经通过TinText渲染器部分和TinML获得了test.tin解释后的标记内容列表。本文,我们将根据这个解释结果将Tin标记转为html文件。

转为html的好处

第一,Tin标记语言作为一个小小小小小项目,光把编写内容呈现在TinText中是不够的,需要导出为其它常见文件。

第二,html足够常见,而且可以通过html格式继续转化为其它格式文件。html转图片、PDF、Markdown等格式的功能,已经有了完善的实现。我们只需要把Tin标记文本转译为html格式文本,就相当于打开了一扇落地窗😇,进而可以借助html格式转变为其它能够转变的任何格式文件。

而如果我们想给Tin标记文本转化为另一个新的格式文件,或者单纯就是为了练手,同样可以根据解释结果列表来进行编写。本篇文章中,就以HTML为例。

tin转译为html

工具类

我们先定义一下转译工具类。

python">class TinTranslator():"""tin->html的转译工具类*后续可能支持tin->markdown"""def __init__(self,tinml:TinML):self.tinml=tinmlself.doc=Noneself.tinPmark=('*','/','_','-','!')self.tinPlink_re=re.compile('.*?!\[(.*?)\]\((..*?)\)')

这里,我们定义了一些基础属性和小工具。

TinTranslator直接绑定TinML,做到实时同步。

转译功能

这里先以<title>为例。

TinText使用dominate作为html生成工具。

python">    def tohtml(self,_title='TinText',_style=''):#tin->htmldoc=dominate.document(title=_title)doc.head.add(meta(charset='utf-8'))if _style!='':doc.head.add(style(_style))_body=div()doc.body.add(_body)for tag,kw in self.tinml:if tag == '<title>':#标题text=kw['title']level=int(kw['level'])if level==1:_body.add(h1(text))elif level==2:_body.add(h2(text))elif level==3:_body.add(h3(text))elif level==4:_body.add(h4(text))elif level==5:_body.add(h5(text))elif level==6:_body.add(h6(text))

有了解释结果,转译就很方便了,不需要处理可能的错误。

<p>有点复杂,因为Tin的p标记与html的p标记并不同级,而是包含了html中的b, u, i, s, a等标记,还要继续下分情况,因此需要类似TinText中的预渲染步骤。

python">    def __tinP_to_html(self,texts):#tin段落转html段落res=[]for text in texts:if text=='':res.append(br())elif text[0]==' ':res.append(text[1:])elif text[0] not in self.tinPmark:res.append(text)else:head_mark=text[:5]head_num=0now_p=None#初始化,空if '*' in head_mark: head_num+=1if '/' in head_mark: head_num+=1if '_' in head_mark: head_num+=1if '-' in head_mark: head_num+=1#开始具体转义html<p>if '!' in head_mark:result=self.tinPlink_re.match(text)if result:url_text,url=result.groups()if url_text=='':url_text=urlnow_p=a(url_text,href=url)else:head_num+=1if '*' in head_mark:if now_p:now_p=b(now_p)else:now_p=b(text[head_num:])if '/' in head_mark:if now_p:now_p=i(now_p)else:now_p=i(text[head_num:])if '_' in head_mark:if now_p:now_p=u(now_p)else:now_p=u(text[head_num:])if '-' in head_mark:if now_p:now_p=s(now_p)else:now_p=s(text[head_num:])res.append(now_p)return res

转译部分的代码如下:

python">            elif tag == '<p>':#段落texts=kw['text']_p=p('')htmltexts=self.__tinP_to_html(texts)for htmltext in htmltexts:_p.add(htmltext)_body.add(_p)

尽量保持转译部分的干净,额外的处理交给转译器类的内置函数。

效果展示

下图中,左侧为浏览器,右侧为TinText.TinReader。
在这里插入图片描述


http://www.ppmy.cn/server/98952.html

相关文章

haproxy

haproxy七层代理 实验环境搭建 [roothaproxy ~]# dnf install haproxy -y [rootserver1 ~]# dnf installl nginx -y #server主机使用nginx [rootserver1 ~]# echo " webserver 1 172.25.2550.10" > /usr/share/nginx/html/index.html [rootserver2 ~]# echo &quo…

Oracle子程序

Oracle子程序就是存储在数据库中的PL/SQL块。 1. 存储过程 1.1 语法结构 create [or replace] precedure<存储过程名> [(<参数列表>)] is|as<局部变量声明> begin<执行语句>[exception<异常处理>] end;1.2 案例 无参案例&#xff1a; -- 写…

ES6对数据类型都做了那些优化

ES6 对 String 字符串类型做优化&#xff1a; ES6 新增了字符串模板&#xff0c;在拼接大段字符串时&#xff0c;用反斜杠(、)取代以往的字符串相加的形 式&#xff0c; 能保留所有空格和换行&#xff0c;使得字符串拼接看起来更加直观&#xff0c; 更加优雅 ES6 对 Array 数…

初学嵌入式-C语言常犯错误详解

1、对于下面这道题&#xff0c;估计有很多人会选择B答案&#xff0c;但其实答案是D 2.int a10, b9,c9,d; d b || (a>c)&#xff0c;请问上述代码执行完毕后a b c d的值分别是 。 A、10 9 10 9 B、10 10 10 1 C、10 9 10 1 D、10 10 9 1 答案解释&#xff1a; 在C语言…

Spring boot框架指南

1. Spring Boot 概述 1.1 定义与起源 Spring Boot是一种基于Spring框架的开源框架&#xff0c;旨在简化Spring应用程序的创建和开发过程。它通过提供一系列默认配置和自动配置功能&#xff0c;减少了开发者在配置上的工作量&#xff0c;使得快速搭建生产级别的Spring应用程序…

C# 枚举 扩展方法

C# 枚举 扩展方法 功能 1.获取枚举描述 2.将指定枚举类型转换成List 3.将枚举类型转换成ListModel 4.绑定枚举 优点 1.一定编写随处可用。 2.调用代码简单&#xff0c;代码量少。 3.成熟代码无BUG 我是封装到DLL文件中&#xff0c;在具体的项目中引用。 调用 1、获取枚举列…

【物联网设备端开发】ESP-IDF差分OTA升级的代码示例

目录 一、ESP-IDF OTA升级基本示例 1.1 配置分区表 1.2 编写OTA升级代码 二、服务器端集成差分升级 2.1 差分文件的生成 2.2 服务器端配置 2.3 安全性考虑 2.4 兼容性与回滚 编写一个完整的支持差分OTA升级的代码示例相对复杂&#xff0c;因为它涉及到固件差异文件的生…

技术周总结 08.05-08.11周日(scala git回滚)

文章目录 一、08.06 周二1.1) 问题01 mac安装 scala:1. 使用 Homebrew2. 使用 SDKMAN!其他注意事项1. 确认 Scala 安装位置2. 设置 PATH 环境变量对于 zsh (macOS Catalina 及更高版本默认使用 zsh):对于 bash (如果您使用的是 bash shell): 3. 验证安装 二、08.09 周五2.1&…

七、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制和JS颜色选择器改变灯珠颜色

本地代码集成离线iro.js库来添加一个颜色选择器控件&#xff0c;在无网络环境可以通过JavaScript将选中的颜色发送到服务器以改变LED颜色。以下是将iro.js集成到网页后的颜色图片。 Iro.js 地址API操作手册 color:change # 每当所选颜色发生变化时触发 - 无论是当用户与颜色选…

Docker高级应用讲解

Docker高级应用讲解 目录 概述Docker网络 2.1 网络模式2.2 自定义网络2.3 容器间通信 Docker存储 3.1 数据卷3.2 绑定挂载3.3 tmpfs挂载3.4 存储插件 Docker Compose高级用法 4.1 多容器编排4.2 环境变量和配置文件4.3 部署和扩展 Docker Swarm高级用法 5.1 服务编排5.2 节点…

选课系统2

#include<stdio.h> #include<string.h> #include<stdlib.h>//学生结构体 struct student {char name[30];char id[10];char course[30][10];double score[30]; };//教师结构体 struct teacher {char name[30];char course[10];char id[5]; };//声明函数 void…

【starRocks-docker 部署问题汇总】

Starrocks系列文章目录 例如&#xff1a;starrocks 常见问题汇总 文章目录 Starrocks系列文章目录前言一、Starrocks-be运行一段时间后,容器无法restart&#xff1f;二、等待后续跟新 前言 starrocks基于docker-compose部署的3节点分布式(3FE,3BE)&#xff0c;遇到的问题也都…

【vue3|第20期】vue3中Vue Router路由器工作模式

日期&#xff1a;2024年8月6日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

免费【2024】springboot 高校失物招领平台的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

Python爬虫(8)

JsonPath介绍使用 JsonPath是一种轻量级的查询库&#xff0c;可以从JSON文本数据中进行筛选和提取操作。有点类似于使用XPath在HTML数据中提取数据的功能。JsonPath 也可以通过使用类似于 XPath 的表达式来访问 JSON对象中的属性和元素&#xff0c;并支持通配符、筛选器和函数…

密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(1)

目录 1.消息摘要(Hash) 2.SHA-1 3.SHA-2 4.小结 1.消息摘要(Hash) Hash函数是一种单向密码体制&#xff0c;把任意长度的输入经过变换得到一个固定长度的输出&#xff0c;同时它还具备单向性&#xff0c;只能从明文到密文&#xff0c;不能逆向&#xff0c;正是由于Hash函数…

谷粒商城实战笔记-144-性能压测-性能监控-堆内存与垃圾回收

文章目录 一&#xff0c;两种类型的应用1&#xff0c;CPU密集型应用示例&#xff1a;Apache Spark 2&#xff0c;IO密集型应用示例&#xff1a;MySQL 二&#xff0c;监控 我们通过压力测试对接口进行了性能评估&#xff0c;以确定其是否满足性能要求。 如果不符合&#xff0c;就…

Python学习笔记(六)

""" 演示对序列进行切片操作 """ # 切片&#xff1b;从一个序列中&#xff0c;取出一个子序列 # 语法[起始下标&#xff1a;结束下标&#xff1a;步长] # 这三个都不写也行&#xff0c;视为从头到尾步长为1 # 起始下标不写&#xff0c;视作从头开…

NTP时钟同步服务器_ntp时间服务器-京准

NTP时钟同步服务器_ntp时间服务器-京准 NTP时钟同步服务器_ntp时间服务器-京准 ◆ 高精度&#xff0c;串口/脉冲可达30ns&#xff0c;NTP客户端优于2ms&#xff0c;时间同步快。 ◆ 双CPU同时工作&#xff0c;32位CPU双核处理器&#xff0c;采用DSP/CPLD技术高速处理&#xff1…

裁剪或填充张量(Tensor)(四维与五维)(Python代码)

import torch.nn.functional as F# 将(Batch_Size, Num_Class, Height, Weight)裁剪掉指定的Height和Weight def crop_tensor_by_height_width(tensor, height_crop, width_crop):assert len(tensor.shape) 4, 输入的tensor应为4维assert height_crop > 0 and width_crop &…