本帖最后由 独行者 于 2020-8-3 09:34 编辑
& B( E1 c ^; _( D0 J4 s7 u
1 Z! f# c5 B5 y) @. v3 ~2 O) n储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。 ( l4 B, U# J" p
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。
" k0 L1 f% v' T+ m% I0 M
例子: - Antarctica# o6 V! [2 t& S$ N
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
2 f2 ^! _* Z2 t) p4 i% y6 Y - </>
复制代码 5 v, w( l) ? w v7 [$ t( c
' a3 m9 Z* }! l& t. o& d x词典 HMTL格式$ l5 s% ~ H% e, t. n: Q* h
和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。
1 O) M" q, c" A5 }$ y' S& o引入 css 和 js 文件+ G" l. U! k; t5 K
1 A1 J: j: o$ C5 J, U* z
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码 3 O0 E- R1 G8 K1 H
引入音频
! G. m' V. f: {
# v0 s- J9 K5 X& s% G$ ]/ J- <a href="sound://sound_file.mp3">keyword</a>
复制代码 " V: i% X. n' B" }* C& i
引入图片
7 n0 C8 S% |. {* p8 e- T- Q% h格式一: - <img src="file://abc.gif">
复制代码
, r% U# f: J3 s+ l. e3 n格式二: file:// 可以省略
+ [, r$ U$ Y, }: t: W- Q1 }, b2 i8 ]跳转4 d2 {$ c5 R7 ~* Z W
两种形式: 资源
+ [5 X( N2 R$ K- J0 g" WHTML 中引入资源文件时根目录为 mdx 所在目录。 + V) S* [% ~! h# i7 F; _
存放
: r- ?' }! y/ \& t; T优先级裸露的资源文件 > mdd 中的资源文件。 $ C0 i( H7 l, p* Y( I; @
- O E1 D0 U. f \' V词典软件
N2 S9 l, t: L( j4 S* `
9 s5 _) |- \9 |5 S5 cMDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。 F! j8 V& m/ b0 m4 ]1 T8 M) e
GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
9 e0 L j2 V8 K
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。
6 p) z- [$ ~ w
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。% a# p5 {, {& @( |6 b/ e o/ f( s
7 _% J; Z. V3 e/ p# M
如原始 CSS - @charset "utf-8";
5 D$ m/ W$ b. K/ t- H - : j! ~- c7 }1 \. t& \- y
- body {5 l% A( x4 W. n5 e C# k" N
- margin: 2em;
. w. C) m3 ^/ R5 h! x/ k% ] - }
) }0 o" h! E$ ]" b9 _ - ) R+ \0 k1 S, Y+ o& P. h
- a:hover {. C) v% v* X- M8 ~' P4 L8 u
- color: #4372b6;
* `4 w+ n0 ` s+ ]4 Y3 X9 s5 ~4 |) S7 r - text-decoration: underline
; d) V0 E& m2 I- h! U - }
复制代码
/ t' w, }6 c2 y1 S& eGoldenDict 会解析为 - @charset "utf-8"; 4 G0 u* k9 f+ R6 ]; }( K
' X+ I- H" r. g( n1 T- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
3 v' U! g H/ b# @6 o3 @+ P$ h0 ~ - margin: 2em;
# \- ]2 a1 I8 E; k" | - }+ |1 y; o/ f4 a" P7 S
- 6 X0 }7 @1 d& j F) p. |6 g6 p
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {
* _, T( F" ?! Z" w5 f" X - color: #4372b6;9 b( S: o s6 j6 a
- text-decoration: underline' I0 @9 I6 B( s( x' ]! \* w
- }
复制代码 / N) K7 t- N) L, J/ |: `) j
而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8"; 4 k! H: E; M, h% N6 @) u I6 c0 a
- . x- h$ X* i9 @8 T
- body{
/ J7 p e* L+ ~4 U( i$ b - margin: 2em;2 x) R' P0 ], q& H) E) n; _1 K1 W* P
- } ( k4 u/ i6 j, `. {5 d# y2 ]
- $ z" I2 w8 x- ?
- #ID224342347child a:hover {
0 l) U" _) n6 F8 a! B R( f: Y% g* @ - color: #4372b6;
/ R$ e1 N' N; S6 f: ^) O - text-decoration: underline. O8 ?( y& v n7 w8 q" B3 W0 `+ y
- }
复制代码 $ I4 G U, ]+ L# J
这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。 $ M- N# \9 Q/ n; a7 O) ?1 J8 w! ]
制作工具- 3 P7 ?/ g: R0 o: e, C& |' ~, Y
制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。
J$ N# b* Q: ?, Z, c* p# @
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options: G+ Z2 I1 P3 v( m) s* Z, _; i
Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。 * F8 K) ^3 O2 [8 D& y
. s4 r7 y" I2 a5 z8 z 制作技巧
2 Q1 m# d$ I/ {3 y# s/ Q0 \( {3 h% |9 ~8 }
+ C ^# G4 u! |( a8 \# l# z4 z& e( [* A: M! h
|