xuhao20040309 发表于 2023-3-18 17:08:54

[Add-in] Preader - 一个简单的中文阅读器

本帖最后由 xuhao20040309 于 2023-5-25 20:33 编辑

简介

前几天在Cemetech上逛了逛,了解了不少关于CG50编程的知识,并且知道了怎么调用系统内置的中文字库显示中文,遂花费大约一周时间写了一个简单的中文txt阅读器。由于写得匆忙,速度、界面和可靠性都与其他爱好者的阅读器有差距,不过作为临时代替品还是堪堪可用的吧。
2023/4/16、2023/4/22 小型更新(请注意:与上个版本配置文件不兼容)

功能

[*]在24px / 18px 字体下显示txt文本
[*]分页功能,最多支持8192页
[*]重新打开文件时自动跳到上次阅读的位置(同时最多记录32个文件的最后位置)
[*]书签功能(最多32个文件,每个文件最多8个书签;书签基于页码,字节偏移量仅用于书签转换时)
[*]按页跳转功能
[*]自动处理转义符(未测试;很有可能不工作)*
[*]背景图片功能(需要将图片转换为rgb565的vram数据)

*卡西欧的CG系列系统在调用系统函数输出中文时,会将反斜杠及其后的一个(或数个)字节处理为转义序列。可以在设置中决定是否将txt文件中的反斜线处理为转义序列。

食用时请注意
由于本人编程水平较弱,且时间匆忙,本程序存在以下问题,且在极端情况下可能导致系统崩溃重启、死循环等现象:

[*]请将文本文件放置于根目录。尽管理论上放置在子文件夹内也可以,但由于卡西欧的系统bug,不保证能够正常读取。
[*]此程序在字符串(如路径、txt内容)处理方面缺乏必要的边界检测。因此在路径、内容出现极端状况(例如:超长的不可显示的字符串、过大的文件、超长的路径等)时不排除损坏计算器的可能性(虽然几乎不可能)。因此,请确保文件采用GB2312编码,仅存在基本ASCII字符和GB2312标准的双字节字符。
为了保证效率,本程序不会对上述条件作检测。请一定要注意:显示二进制文件的后果是未知的!
[*]此程序中用于检测一行文本是否超出屏幕的函数并不可靠。因此,你可能会看到某些时候文本超出了对话框。
[*]此程序并未针对换行规则进行特别准备。西文单词可能会在单词中间被强制断开;中文逗号可能会出现在行首。
[*]如果想要在实机上使用,建议勾选上设置中的“使用严格的渲染机制”。这有助于让你在打开一些奇奇怪怪的二进制文件时不进入死循环。

使用过程中,请注意以下问题:
[*]在阅读界面中,按MENU键将呼出程序菜单,而不是系统菜单。这是为了防止程序没有关闭打开的文件就被迫终止(如果出现了这种情况,该文件直到下次深度重启前都将不可用)。
[*]程序最多存储32个不同的文本文件的记录。在记录被填满的情况下打开第33个文件,此文件仍然可以阅读,但无法存储其最后一次阅读位置,也无法保存书签。此时请在“管理存储槽位”中删除某一记录。
[*]程序在运行中会产生以下文件:
- <文本文件名>.lpd —— 在大字号下的分页结果
- <文本文件名>.spd —— 在小字号下的分页结果
所有文件都存储在“(艾特)PRDR”目录下,且都是二进制文件。
[*]程序将配置信息、书签信息存储在主内存中的“(艾特)PREADER”目录下的“Session”变量中。你可以在设置中以文件形式导入/导出这项数据。
效果图

下载
已编译好的程序(请先在模拟器上运行)(旧版,将配置文件存储在闪存中)

(第三次更新,将配置文件存储在主内存中;新增了统计功能)

(第四次更新,改进了分页机制、下划线问题。注:此次更新修改了分页文件的格式,请更新后重新分页)

源码
源代码已上传GitHub,采用LGPL2.1协议
https://github.com/xuhao148/prEader/

请小心使用!







mrlgs 发表于 2023-4-21 20:02:57

好的,试试以下

a2628109 发表于 2023-4-22 00:23:19

泰裤辣

bioafanda 发表于 2023-4-25 13:49:47

顶一顶。。。。。。

ExAcler 发表于 2023-5-12 12:37:49

本帖最后由 ExAcler 于 2023-5-12 13:14 编辑

朋友,非常棒的作品,尤其是不需要外挂字库是一个很大的突破!只是感觉文档分页的速度还有再改进的空间!
您可以参考本人开发的iBooks的分页算法:https://github.com/ExAcler/iBooks/tree/master/iBooks%20Pro%20C%20(Formerly%20iRead%20II)

xuhao20040309 发表于 2023-5-13 20:04:56

ExAcler 发表于 2023-5-12 12:37
朋友,非常棒的作品,尤其是不需要外挂字库是一个很大的突破!只是感觉文档分页的速度还有再改进的空间!
...

感谢您的评价!
当时我写的时候偷了懒,把绘制一页的函数同时用作分页函数了,产生了很多资源浪费。空闲时我会试着参考您的方法写一个新的分页函数。

ExAcler 发表于 2023-5-14 00:59:30

您按照每个字固定字宽直接计算出每页的截止点就行啦,如果还是不够快,您可以限制初始分页的页数(比如我这款是500页)。
加油!

xuhao20040309 发表于 2023-5-18 18:25:49

ExAcler 发表于 2023-5-14 00:59
您按照每个字固定字宽直接计算出每页的截止点就行啦,如果还是不够快,您可以限制初始分页的页数(比如我这 ...

我跟您写的软件对比了一下,又自己调试了一下,发现时间主要花费在画进度条和创建文件时指定大小上。目前对这两方面做了修改(重写的分页算法由于有一些奇怪的问题,暂时留在注释里),现在已经达到比较理想的速度了。再次感谢!

xiyihan 发表于 2023-5-24 18:31:47

感谢作者的贡献!
不过我在拿我的计算器阅读的时候,碰到了以下问题:
1.小说阅读后配置文件无法自动保存;
2.连续显示两行文字时,第二行的首字符“\”无法显示 or 第二行的汉字完全乱码;
3.由于系统字库问题,有些汉字无法正常显示。

因为本人的CG-50没电了,暂时无法截图复现问题,故将我阅读的小说放在这里以供参考:

再次谢谢作者!

xuhao20040309 发表于 2023-5-25 20:46:56

xiyihan 发表于 2023-5-24 18:31
感谢作者的贡献!
不过我在拿我的计算器阅读的时候,碰到了以下问题:
1.小说阅读后配置文件无法自动保存; ...

你好,感谢回复!
对于第一个问题,如果您遇到的是errno=53,可以尝试在设置中备份配置文件,再到文件管理器中删除主内存的(at)PREADER\Session文件,然后重新打开软件、导入配置。这应该是cg50 MCS文件系统的某种神秘机制,只是社区文档解释不清楚,我也尚未彻底弄清楚其中的原理。
对于第二个问题,我发现问题出在复制反斜线后下一行的偏移量错误的被加了1,目前已经修复,感谢指出!
对于第三个问题,由于卡西欧对国标字符集的支持仅从A0xx开始,相当于只支持GB2312字符集,要想显示生僻字只能外挂字库。您可以看看ExAcler大佬的作品(iBook),这是一个使用外挂字库的阅读器,应该会支持更多码点。
感谢您的建议!

mrlgs 发表于 2023-6-13 16:46:48

xuhao20040309 发表于 2023-5-25 20:46
你好,感谢回复!
对于第一个问题,如果您遇到的是errno=53,可以尝试在设置中备份配置文件,再到文件管 ...

CG20 第一次运行会遇到这个errno=53的问题,删了那个文件就好了
页: [1]
查看完整版本: [Add-in] Preader - 一个简单的中文阅读器