站点图标 久久日记本

MDX/MDD词典词库文件解析服务

无聊,迅速做了一个新玩具,一个词典服务,没想好叫什么名字,就叫做 久久词典吧。

Garden提供词库管理,目前仅支持mdx词库的操作。

关于mdx词库操作,来自mdx-query的源码,稍微改了改嵌入到Garden中。

发音功能倒是必须的,没有音频文件,需要看看mdd怎么操作。(20240208 已支持mdd中的mp3音频文件解析)

页内@link和@entry跳转还没做。(20240208已作支持)

用户登录和收藏夹功能计划中,导出功能好像没多大意义。(优先级低)

ld2词库文件的解析还没有加上。

没有上面功能,好歹还能用用吧。

Todo list

已标注时间的表示已经开发完成,但并不表示已经release

基础功能:
新版本 (20230419,20240207)
必备功能(重点):

单词联动(20210813 预计重构,已支持 20240207)

MDD资源文件支持(20220808-20220909):

位于mdd文件的css中的嵌套资源,并且该资源又来自mdd文件,这样的嵌套支持起来有点麻烦,容易形成嵌套地狱,目前未支持,准确说我也没想好怎么取数据好。(20240207)

外部资源文件支持:
可选功能:

吐个槽

20240208

偶然间看到Github上一个issue: Eudic doesn't load CSS and JS files from .mdd file #5

鉴于利用有限的空闲时间来写这个服务,吐个槽。

有些制作词典的大佬们,喜欢将 js, css, font 资源文件打包在 mdd 中。

这样解析先得拉了mdd 中的css (还不知道key,人工肉眼检索初始化 db 文件,写死在代码里,要不然就得低效检索所有的 mdd 文件),再从 css 中正则出 css 引用的资源的key(一般是font),再继续 在 mdd 中查询出该 key 的内容,循环嵌套,嵌套地狱。

作为目前这个词典服务,完全不想解析这样的 mdd 文件,既浪费机器资源,对于网页服务,查询出来的数据占用流量会大很多。字体这块不太好缓存下来,除非做个工具提取,精力实在跟不上。

倒是外挂的css, js,font,解析起来方便,正则出来挂上就行,而且字体还能缓存。

Log

更新日志以后就放在这里吧,未发布是没有时间且未整合完成,最终会发的。

2024-02-07(未发布)
1.由Vuex切换到Pinia;
2.全面重构和设计各个组件;
3.词典多释义支持(不完美),支持 @@@=link, Entry:\\ 资源跳转;
4.支持 jpg, png 资源图片显示;
5.支持外挂 js, css文件;
6.支持外挂字体文件(不完美),暂时简单解决多次缓存,节省流量;
7.重构后端查词逻辑,减少资源暂用;
8.修复后端mdx-query在一个词典包含多个mdx, mdd文件时的初始化bug;
8.已知问题,外挂资源文件存到mdd文件中并且套娃的问题,暂未想到好的解决方法;

2023-11-03(未发布)
1.升级到最新的Vue3工具链;
2.使用 Vite,typescript重构所有组件;

2023-04-19(未发布)

1.使用vue3深度重构search/word/dict页面;
(1).element-plus渐渐成熟,移除bootstrap依赖,重回element-plus,所以单词结果页面不再支持emoji了;
(2).重构后暂时不支持单词内重定向检索单词;

2.支持mdd词库资源文件检索和页面显示;
(1).支持JS脚本执行;
(2).多词典检索情况下支持脚本,样式,字体隔离;
(实现下来v-html不支持js,且与母页面会导致样式侵入结果页;
shadow dom可以继承母页面字体,但在js上并不能达到想要的效果;
权衡之下用了iframe,做到了隔离,但是由于无法共用母页面字体,需要在查询结果页面需要加字体追加到页面中,且需要字体文件托管在固定域名下,可以考虑放CDN)(已做处理,可以被浏览器缓存 20230207);
(3).支持本地发音文件,TTS;
(4).支持图片资源显示;
(5).支持第三方字体侧加载;

3.支持将单词查询结果保存为本地HTML文件;
4.支持词典内容中emoji(已移除bootstrap, 所以这个不支持了,后续再看看怎么解决);

2022-03-09
1.1
1.改进导航路由级别;
2.引入bootstrap
(1).去除项目底层rem设置为px(不兼容bootstrap的base font size);
(2).重写部分组件,去除其对于element-plus的依赖;
(3).支持词典内容中emoji;
(4).检索结果排版优化;
(5).高亮词典内容中关键字;
3.重写category功能,新增setting配置,可将配置保存到本地;
4.支持用户登录;
5.单词本管理功能;(未完成)
6.支持收藏单词;(暂不支持自定义单词本)

2021-11-23
1.0
1.支持分类,可以按照词典类型来检索;
2.支持字典类跳转entry://对于category的支持;
3.dict页面新增词典分类
4.目前存在的bug:element-plusselect控件开启filter会触发手机键盘,导致错位的问题;

2021-09-13
0.9
1.修正element-ui图标问题,折叠按钮在iphone 6s及其他小屏手机下的bug,暂时采用符号替代;

2021-08-23
0.8
1.重构vue2vue3版本(element-ui/icon, vuex, vue-router);
2.修正搜索单词undefined的问题;
3.修正vue-router重定向问题;
4.修正element-ui图标问题;

2021-08-17
0.7
1.修正entry://替换逻辑, 暂时支持所有词典的单词联动;
2.header样式修正;
3.修正《音标与发音库集合》词典音频显示效果;

2021-08-16
0.6
1.支持更多entry://页面跳转到关联单词的词典支持;
2.header样式修正;

2021-08-13
0.5
1.修正Kingsoft-Phonetic字体在Firefox浏览器不生效的问题;
2.支持entry://页面跳转到关联单词;
3.加入第三方语音,目前存在播放后https降级问题;

2021-08-12
0.4
1.增加 Kingsoft-Phonetictahoma字体,解决部分词库音标乱码问题;
2.构建环境变量修正;

2021-08-11
0.3
1.支持链接直接搜索 search/?word=xxxx;
2.添加meta info, 似乎动态生成的没有识别???;

2021-08-10
0.2
1.支持词典列表展示;
2.暂时屏蔽mdx检索出的发音和其他img标签;
3.默认折叠,无搜索结果词典将会显示为灰色;

2021-08-09
0.1
1.支持多词典mdx检索,暂不支持mdd,ld2文件和跳转

Document

下面两个项目对本项目至关重要:

本项目的mdx/mdd查询来源该项目,mdict_query: A python module for looking up mdict dictionary file (.mdx and .mdd).

本项目对于mdd资源的处理效果参考自下面项目:mdict-js: A pure Javascript implementation for parsing MDict file (mdx/mdd) in local.

退出移动版