本帖最后由 独行者 于 2020-8-3 09:34 编辑
$ g3 V3 o3 x4 g- }. L" O1 b/ `' F' F2 p; }0 @8 D
储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。
2 C4 z- ]5 _ p: j7 T
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。 0 j# D+ v& A' [, \) Z3 ~" ]5 [6 d
例子: - Antarctica
# S! h$ ?" B4 P4 m' B2 ~ - <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
5 i9 C, k. k. a! B' e7 F& x& s - </>
复制代码 5 U3 @0 G# T1 \3 }
4 h* ?" M- x0 O3 \" J4 x7 C6 t
词典 HMTL格式
2 }* f! h, X7 M; O9 i& ^# E和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。
$ @* m* s* {0 f$ [2 i( i; o6 Y8 L引入 css 和 js 文件
" w) `9 u; ^8 S8 a, b& ]/ C+ J. n9 m) D9 Y% j' b
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码
4 z' k5 u) w( ?+ |7 i引入音频
: L( B- m/ c) v7 t3 I
% w5 v. s% Y9 i5 I6 |! \- <a href="sound://sound_file.mp3">keyword</a>
复制代码 . y1 H1 B+ l+ N5 _4 `2 w8 {% J
引入图片8 }9 x; H# C4 @5 l
格式一: - <img src="file://abc.gif">
复制代码 3 J$ Y u( n* P5 c' B; w0 O* W/ m
格式二: file:// 可以省略 : U/ J3 r4 _7 \9 w8 r* G- Z
跳转
' ]6 b% ^* y# _/ ?; ]1 R7 ?9 O两种形式: 资源/ d4 @5 Z) R; S" ^6 n9 p
HTML 中引入资源文件时根目录为 mdx 所在目录。 ' a3 m$ L( ]' |/ X( ?( _0 i( R) N
存放, x4 i8 Z9 k- G2 G# y+ N7 @. d
优先级裸露的资源文件 > mdd 中的资源文件。 ' ~. ` g% k0 V; x0 h
4 `4 U: s. C% q( z词典软件
# A2 T9 p) L' D7 \: _) _) s1 d* ^; n6 `4 z& l
MDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。 & u) b4 [, V" _- }! |$ a$ d
GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
, V1 t+ l9 S% U: u4 Q [2 b6 \- H {
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。 ! M( t0 Z1 y8 l! ]. ]
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。( S- F5 ]# n' s5 Q, M# V
, K: G! g& P9 O# l* d# k1 M
如原始 CSS - @charset "utf-8";% @1 `; o; Q, j9 s
- 0 I! l$ r# y P9 Y9 H3 O4 B
- body {
* n( R. L% z3 l& Q& G2 N& `* U - margin: 2em;6 D) l8 \1 s9 ~, x1 a& X9 `9 _
- }1 J7 i9 E$ g% C7 K$ E
-
( @8 [, k$ x( {: W3 {( ? - a:hover {4 F' M' b1 N8 d- v
- color: #4372b6;
# M, E/ Z9 \# [) @1 ] - text-decoration: underline
/ Y9 C) H% F- k% h7 |4 Y/ u - }
复制代码
9 u( z* ~- Y1 S' Y) hGoldenDict 会解析为 - @charset "utf-8";
+ m6 o9 k# b/ F; k. B9 M
+ G# P \7 \8 j( O9 b7 {4 r- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
7 I4 Y0 N3 S8 L' v+ _0 ^ - margin: 2em;
3 M0 `8 t. l H3 E4 n/ H9 y( C - }1 y; ?1 i' A9 Y; z, @) E8 d0 s0 H y) X% w
- % Y& G# Q! x% U8 C, e
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {
, W' E* a- F$ F+ q V - color: #4372b6;
( {/ V, M1 p, }8 [ - text-decoration: underline
7 }8 G1 B X Z/ Q. ^) T2 m7 L - }
复制代码
; C0 q( O2 B6 k& h$ s2 i) R而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8"; 9 ]% Z; A8 k& x7 X. `0 W; y
5 l, G& D. i6 E- body{( J, Y' m+ w5 Q
- margin: 2em;
# r" H7 c1 i W5 `+ m# Q$ \3 X - }
4 _$ Z" w/ V& `% c" q- p R - ) t( E, K/ w) _1 i: h X3 u. [ r
- #ID224342347child a:hover {* c" n4 }) W" S; f b
- color: #4372b6;
; d5 o2 X' T! u0 ]+ V - text-decoration: underline
- P; _- k4 p3 Z0 b/ v8 a - }
复制代码 # @; _: B' ^+ K% R8 `
这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。 . p+ e( }$ s+ m( s0 a
制作工具制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。
k7 o/ A& Q# m) k' \, D
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options:
0 m/ u& n6 m+ `5 JOriginal:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。
+ X0 [3 q# T: e7 Q1 N/ F
: H, H" U+ Y/ \6 a* _7 ~, d- i 制作技巧
$ k: F9 ^3 M. v0 d7 o3 r6 s( B- o) S0 ^' C
$ u+ U; g" W& r, t; A* h5 ^/ W2 @( M x
% N* U9 K' M" t |