请教编程问题,关于书签功能的一些算法

数码科技
2021-11-25 16:43:45
16
229
此间风物

大佬们,假设要完善一个小说阅读器或者写作软件可能出现的功能模块,“书签”功能,应该以怎样的思路来进行?

感觉阅读器的比较好做,毕竟是固定的内容,书签无非就是添加标记,管理内容,记录章节id,行号,这些信息嘛……

那么问题来了,编辑器,可能修改的内容,怎么来设计,使得它可以更加方便的动态修改?

一时间没有头绪。

好比起点app的段评功能,其实也类似我说的这个书签。

如果作者对文章进行了一些改动,那么段评就有可能上下错位,它的程序员也没有去追踪这个修改以进行补偿。

回复
评分
收藏
举报
此间风物

有没有哪家小说网站的段评不会错位的,或者能相对智能的自动纠正错位……学习下

又或者,假如你们遇到了这样的需求,是怎么样解决?解决需求还是解决提出需求的人?

回复
评分
收藏
举报
清波扶风

如果字体大小变了,你记录的行号就不对了吧

回复
评分
收藏
举报
此间风物
@清波扶风如果字体大小变了,你记录的行号就不对了吧

这个倒不至于,锚定的是行号。跟显示无关。

主要还是增加或者删除了行,可能导致错位。

而我目前能够想到的,跟踪文字改变的事件,进行加减的补偿,只针对老老实实在编辑器中进行编辑有点儿用处(存疑),如果直接覆盖式改写,那又完全没用了。

回复
评分
收藏
举报
wear99

我觉得你这个是伪需求,你现在想的是固定在行上,正常不应该锚定在一段文字上吗? 你看看word的批注,当初设计的时候肯定都考虑清楚了。不管你怎么锚定,经过各种花式编辑后都可能会出现不对应的情况。

回复
评分
收藏
举报
wear99

我自己也是自学,自己写小程序,经常一时把功能想的很复杂。可过段时间又会觉得完全没必要,代码不是万能的,不可能应付各种情况。

回复
评分
收藏
举报
此间风物
@wear99我觉得你这个是伪需求,你现在想的是固定在行上,正常不应该锚定在一段文字上吗? 你看看word的批注,当初设计的时候肯定都考虑清楚了。不管你怎么锚定,经过各种花式编辑后都可能会出现不对应的情况。

了解了,锚定在“块”上面吗?类似亚马逊看书的批注好像也是这样的。

起初主要是囿于见识,被起点的段评误导了一下,多谢提醒

回复
评分
收藏
举报
此间风物
@wear99我自己也是自学,自己写小程序,经常一时把功能想的很复杂。可过段时间又会觉得完全没必要,代码不是万能的,不可能应付各种情况。

还记得上次你提过的缩略图的问题。哈哈。有时候是这样纠结。我也经常犯晕

回复
评分
收藏
举报
清波扶风
@此间风物这个倒不至于,锚定的是行号。跟显示无关。

可以把书签定到字符偏移量上面,如果文章修改了就直接删掉书签给个提示就好了。

回复
评分
收藏
举报
此间风物
@清波扶风可以把书签定到字符偏移量上面,如果文章修改了就直接删掉书签给个提示就好了。

好的,多谢,这个思路应该可行。

回复
评分
收藏
举报
#(滑稽)

正常的思路是,对某个文本区间做批注,做完批注后,这一段文本区间就其他文本区间隔离了,互相独立编辑。

举例,有一段文字:我和楼主有不共戴天之仇。

那么,用户选择“不共戴天”做批注。此时,这段文本分成了三个部分:我和楼主有[不共戴天]之仇。用户编辑任何一部分都是独立的。

回复
评分
收藏
举报
#(滑稽)

具体到算法实现上,你的文本不是存储在一个一维数组中,而是一个二维数组。

原始文本:“我和楼主有不共戴天之仇”

实际存储为:

[“我和楼主有不共戴天之仇”]

在用户添加批注后,文本变为:

[“我和楼主有”,“不共戴天”,“之仇”]

同时记录批注

[1,“批注文本”]

相应的,书签也可以采用类似的逻辑,书签作为特殊标记记录在文本中

[“我和”,“$书签标记”,“楼主有”,“不共戴天”,“之仇”]

同时修改批注索引

[3,“批注文本”]

1条评分,共1龙币收起评论
此间风物1
回复
评分
收藏
举报
#(滑稽)

其实这个没什么新奇的,参照html标记语言实现就好了,只是把标记语言转换为内存对象而已。

回复
评分
收藏
举报
神奇的

从Git借鉴啊

回复
评分
收藏
举报
此间风物
@神奇的从Git借鉴啊

因为是一个WPF的项目,主要还是在一款开源编辑器里面进行操作,非常小众的需求,现成代码几乎是没有的,主要借鉴一下思路,还要考虑它本身是否提供了接口和类方法来给我调用实现……

先看看再说

回复
评分
收藏
举报
此间风物
@#(滑稽)其实这个没什么新奇的,参照html标记语言实现就好了,只是把标记语言转换为内存对象而已。

多谢各位大佬了。

因为是一个WPF的项目,主要还是在一款开源编辑器里面进行操作,非常小众的需求,现成代码几乎是没有的,主要借鉴一下思路……

ps:刚刚无意之中查到了悬浮提示的方法,突然想起来,可以结合之前的关键词提示,把主角名那些提示一并做了。

之前只有类似写代码那样的关键词着色,但是查资料还得另外查,功能之间是割裂的。

现在鼠标悬浮在对应的文字上去,立刻就能显示对应内容。

等我把它和数据库关联起来,写好这个方法,就能像翻译软件那样直查角色,功法,地理名词那些的具体资料了,体验有点棒!

瞎折腾果然没错,哈哈哈

回复
评分
收藏
举报
此间风物
@#(滑稽)具体到算法实现上,你的文本不是存储在一个一维数组中,而是一个二维数组。

关于这个,主要还是得编辑器本身采用 PieceTable结构,或者类似的结构

回复
评分
收藏
举报

本帖需登录才可回复,没有帐号欢迎立即注册