cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 2472|回复: 10

[fx-CG10/20/50] [Add-in] Preader - 一个简单的中文阅读器

[复制链接]
发表于 2023-3-18 17:08:54 | 显示全部楼层 |阅读模式
本帖最后由 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”变量中。你可以在设置中以文件形式导入/导出这项数据。
效果图
demo_new.png
下载
已编译好的程序(请先在模拟器上运行)(旧版,将配置文件存储在闪存中)
txtReader.g3a (62 KB, 下载次数: 19)
(第三次更新,将配置文件存储在主内存中;新增了统计功能)
txtReader2_MCS.g3a (72.11 KB, 下载次数: 30)
(第四次更新,改进了分页机制、下划线问题。注:此次更新修改了分页文件的格式,请更新后重新分页
txtReader2_0.1.3r5.g3a (71.99 KB, 下载次数: 71)
源码
源代码已上传GitHub,采用LGPL2.1协议
https://github.com/xuhao148/prEader/

请小心使用!







txtReader2_0.1.3r4.g3a

71.95 KB, 下载次数: 19

发表于 2023-4-21 20:02:57 | 显示全部楼层
好的,试试以下
发表于 2023-4-22 00:23:19 来自手机 | 显示全部楼层
泰裤辣
发表于 2023-4-25 13:49:47 | 显示全部楼层
顶一顶。。。。。。
发表于 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)
 楼主| 发表于 2023-5-13 20:04:56 | 显示全部楼层
ExAcler 发表于 2023-5-12 12:37
朋友,非常棒的作品,尤其是不需要外挂字库是一个很大的突破!只是感觉文档分页的速度还有再改进的空间!
...

感谢您的评价!
当时我写的时候偷了懒,把绘制一页的函数同时用作分页函数了,产生了很多资源浪费。空闲时我会试着参考您的方法写一个新的分页函数。
发表于 2023-5-14 00:59:30 | 显示全部楼层
您按照每个字固定字宽直接计算出每页的截止点就行啦,如果还是不够快,您可以限制初始分页的页数(比如我这款是500页)。
加油!
 楼主| 发表于 2023-5-18 18:25:49 | 显示全部楼层
ExAcler 发表于 2023-5-14 00:59
您按照每个字固定字宽直接计算出每页的截止点就行啦,如果还是不够快,您可以限制初始分页的页数(比如我这 ...

我跟您写的软件对比了一下,又自己调试了一下,发现时间主要花费在画进度条和创建文件时指定大小上。目前对这两方面做了修改(重写的分页算法由于有一些奇怪的问题,暂时留在注释里),现在已经达到比较理想的速度了。再次感谢!
发表于 2023-5-24 18:31:47 | 显示全部楼层
感谢作者的贡献!
不过我在拿我的计算器阅读的时候,碰到了以下问题:
1.小说阅读后配置文件无法自动保存;
2.连续显示两行文字时,第二行的首字符“\”无法显示 or 第二行的汉字完全乱码;
3.由于系统字库问题,有些汉字无法正常显示。

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

再次谢谢作者!

背叛者_Part1.txt

412.23 KB, 下载次数: 19

 楼主| 发表于 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),这是一个使用外挂字库的阅读器,应该会支持更多码点。
感谢您的建议!

评分

参与人数 1金钱 +3 收起 理由
mrlgs + 3 很给力!

查看全部评分

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

CG20 第一次运行会遇到这个errno=53的问题,删了那个文件就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-2-27 02:37 , Processed in 0.046812 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表