[跨平台 Mac/Win/Linux] 词典APP Medict (开发者预览版)讨论

社区里常用的两款制作工具,官方的 mdxbuilder 3.0和 mdict-utils 都不会修改词条。你可以参考下后者的实现。

这个是 medict 在比较的时候进行的 strip 处理,既然社区里面实际制作的时候都不会进行strip,那么我在查询的时候也不进行strip就可以了

词典的 Record 部分是有记录词条内容的偏移量和内容长度的,读取的时候依赖这个。具体怎么读到的忘记了。看代码是在读取压缩块的偏移量和长度时,通过 shadowEndPos计算出来的。曾经写过这一块,供参考:

let record_index = &self.parser.record_indexes[i];
let record_size = match iter.peek() {
    Some((next_offset, _)) => (next_offset - offset),
    None => (record_index.shadow_end_pos - offset),
};

let record_addr = RecordAddr {
    id: self.parser.id,
    comp_pos: self.parser.record_blocks_pos + record_index.start_pos,
    record_offset: offset - record_index.shadow_start_pos,
    decomp_size: record_index.decomp_size,
    comp_size: record_index.comp_size,
    record_size: record_size,
};
let range =
    addr.record_offset as usize..(addr.record_offset + addr.record_size as u64) as usize;
let record_buf = &decomp_buf[range];

let (content, encoding, has_err) = self.parser.encoding_rs.decode(&record_buf);
if has_err {
    return Err(format!(
        "failed to decode '{}' content with '{}' data",
        self.parser.encoding,
        encoding.name()
    ))?;
}

let content = content.trim_matches(|c: char| c == '\x00');
Ok(content.to_string())

当初写的时候,实际上是复刻的 GoldenDict 的实现,在如下链接位置:

shadowEndPos 的读取过程:

1 个赞

感谢大佬指点,这块我需要再仔细完善一下查询部分的代码,不然总是有些小毛病

我这里还是没有反应,我在这里下载的 2.0.4

@青稚Quentin 可以试试把开发者工具中的dev-tool 打开然后再试试”添加“ 操作吗?我看看具体是什么问题。
也可以把开发者工具中的主进程日志打开看一下日志。

terasum 兄,昨晚才發現,之前那個詞典在翻頁的詞條有多了個標簽,mdict ,和你的軟件好像有容錯吧,竟然都顯示正常,差異只有我反應的那頁沒顯示,GD 是多了標簽 就馬上出現了異常…沒有容錯功能…,顯然仁兄的功力相當深厚,連標簽的容錯也行啊,讚!…盼仁兄再加把勁,完善一些功能
But…容錯寫的太好好像也是會有問題…因為我們可能搞不清楚錯在哪…無從改善抓一些 bug…可否提供一個按鍵來切換容錯和沒有容錯的顯示,這樣編輯辭典時才能理解標簽是否有多了還是少了,在下不懂編程,若實現有困難就忽略…

1 个赞

弱弱问一句诸位大佬,因为这帖子实在太火,有点长,偷懒直接问一下:

  1. 这个和老牌欧路词典比有哪些更实用的功能么,这么火我看
  2. win版本好像最新有两个我都依次下载安装了,可加载完mdx和mdd然后查的时候闪一下,没有内容,好像用不了客户端,还是我打开的不对?

现在只是beta早期版本,大家是热心测试。截至今天,比不上老牌词典软件。

听君一席话,胜读100楼啊,感谢。
也支持楼主,真是能用到这么多资源,往往却不知道原创作者姓氏名谁,技术大神们想必自有天地,我等膜拜…

相对老牌词典软件,可能唯一的优势就是开源免费吧 :joy:

目前 bug 还巨多,论坛里面大家都非常热心地帮忙测试,提了很多建议。从稳定性和功能上讲,和老牌软件相比差距还是很大的。


另: 闪一下没有内容这个问题,能否提供一下截图或者日志(日志可以在开发者工具看到)


P.P.S 是否默认打开开发者工具会更加方便排查问题? 现在开发者工具默认是隐藏的。

1 个赞

其实不是我功力深厚,实在是 chromium 的 blink 引擎太强,一般的标签错误都能够自动修复的。 :rofl:

看上去已经让欧路有点瑟瑟发抖,担心未来了哈,既然Github上有python,相比这种词典工具的开发只是时间的问题了肯定,好的我看看啊,我不知道我安装的对吗,是加载完mdx和mdd就可以么,每个词典资源都是独立文件夹,我目前是用欧路

1 个赞

卸载再安装之后可以使用了,多按两下回车就有了,另外查词历史,还有任意界面下搜索框输入查词,切换字典时显示内容可以自动切过去么等等

哇!剛剛才注意到老兄的重磅消息,在下最近常恍神…內分泌失調久矣…謝謝啦!趕快來玩一下
剛試了, clip path inset 應該是沒有支援…
但是你的 preview 那個一直都有支援呀!,不是都是 Chrome 的核心嗎?

只需要选择 mdx/mdd 文件就可以了,不需要建立索引,由于实现机制的问题,可能查询-渲染的过程有一点点延迟,默认回车即可返回结果,如果使用过程当中有问题,可以更贴反馈,我周末都会统一处理。

2 个赞

Terasum 兄,試一下,看能否支援,因您的核心是Chrome 那應該是可以才是呀!謝謝囉!

裏面只有一個詞條 aberration

ClipPath_inset.zip (627.4 KB)

查词页面,左侧显示的单词列表,在单击设置后,再切回查词页面,单词列表里的词头就消失了。

还是添加操作的bug,这是开发者工具的报错: