本帖最后由 独行者 于 2020-8-3 09:34 编辑 8 }+ I5 O- u0 c B+ w
/ F" `3 k6 [) b m1 r% Z' K# Z: `储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。
! g) ^; @2 K! d4 f' q9 B
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。 6 |. Q* Q" {+ N( F+ j
例子: - Antarctica" L( w- b; M4 m6 q/ U
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>3 `, _" \) c2 r
- </>
复制代码 % l1 |+ q# T. o4 O
7 D( ^/ T8 s2 r
词典 HMTL格式
, ?" h# } r+ M! v( p& V和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。 8 d# f; X* n7 U+ x4 V% t
引入 css 和 js 文件
* P) {, i$ _0 F3 ?! `$ X7 S! k$ |; }' u
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码 * Q3 `4 V/ U$ ?# Q6 @0 U
引入音频6 e, u5 x% j8 D' H, Z
( @) n5 T6 q7 |
- <a href="sound://sound_file.mp3">keyword</a>
复制代码 ( d6 |: e# B' C& w9 i5 Q# V$ B
引入图片
2 X0 i; E- k6 v) {. u7 R) G格式一: - <img src="file://abc.gif">
复制代码
( [8 e L0 S4 Q格式二: file:// 可以省略 6 v+ U4 h1 F- [7 b3 M
跳转
+ [; |& H* p! v+ k两种形式: 资源
: n; y1 ]8 R4 jHTML 中引入资源文件时根目录为 mdx 所在目录。 5 {0 }+ G K8 K( |6 V
存放. S3 C0 L2 m! p- R5 v& _- `
优先级裸露的资源文件 > mdd 中的资源文件。
% B. R. @4 G8 S, @7 m( g
' H4 j. @- [: O0 h+ P' T词典软件
, A: s8 `2 h! l2 ^- C3 H5 Q% i1 W ~, }, f- A3 ^& v4 L0 N" s# x
MDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。
2 h" B3 i3 t1 i, x* v GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。 9 |8 P. u3 s" m, j' t" q2 X
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。
: k( o* g7 Z' H2 o' k; f# O9 Q
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。
j& c1 H. W- ~2 H/ _& U( q) Y4 A% ]! ]# z5 a" |+ U7 e
如原始 CSS - @charset "utf-8";
# W0 y3 e3 E" T4 f - % ^; L# P% I) Y+ x; A; A2 P# }. D
- body {& h- m3 w) p8 c: g' ^
- margin: 2em;6 c; J K& _2 V% @
- }. N4 F6 k* J: O* s( U1 w3 Y
-
. f. K! t( ]' x: }% H: }* k - a:hover {( }2 f/ {: a7 s' |
- color: #4372b6;
. j k) i9 p. G: C/ ]' ?3 D6 E - text-decoration: underline
k7 p3 A' J9 W; R) @ - }
复制代码
+ D5 m2 v/ @; pGoldenDict 会解析为 - @charset "utf-8"; * q7 l2 H! ^+ _& J0 P
- 2 W; ]# q( r* Q+ y9 j& |8 h
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
& V) R4 u/ d3 W9 K - margin: 2em;, ?, q3 p; o) l/ w+ u
- }
! h4 f2 ^$ J6 p* u# T; }, ?, `1 ` - . R5 L1 _% h4 C! X& x+ V7 g
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {4 f$ [2 F+ R& ~' S' S
- color: #4372b6;+ x6 y( J2 B7 @
- text-decoration: underline
+ ~4 E" S" H$ X. B& j - }
复制代码
" {& M! b5 I2 S2 G h; k而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8"; 2 g- F- Y$ X+ C' _
1 l6 C, ]) C7 i Q" n I( Y; k- body{
5 Z% R0 S9 s$ K - margin: 2em;
) I( w, c4 ]# Y: Y6 j - }
- D4 Y% X" d+ A2 |( C, { - 0 d1 _0 @5 |: Q" @" q* x
- #ID224342347child a:hover {7 I% i1 ]3 X) I2 ]7 [+ B, |, {
- color: #4372b6;/ _6 o" s6 z0 g, z3 X# _
- text-decoration: underline
! x! F0 [+ \& e, l - }
复制代码 + ?" k/ ?# O4 y
这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。
* H: O8 C0 z: o6 U F J 制作工具制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。 ; F+ n8 u* A! j" _
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options: ; i6 F0 y6 A7 j& n, `
Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。 ! O. P4 t1 f5 {, t% S
9 ~. c& p, a2 [; Q2 D- s& Q$ b
制作技巧
; f; x! t9 }, k5 q" e6 y7 g9 i ~4 I
$ E7 A& V6 t% f* o+ B$ e
( l" Z7 |3 N; y# C |