本帖最后由 独行者 于 2020-8-3 09:34 编辑
8 ~/ }6 u! A8 u1 R% I5 H4 j" ]4 v# e. C
储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。
- I1 U, I3 J4 S) p; U. ~$ }1 o
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。
' ?; S. { T% u& a5 P" i }1 [0 e& \
例子: - Antarctica
( q6 T/ g$ B5 M7 s - <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>: ]+ n/ A/ z" o! t4 a& R j/ S2 s
- </>
复制代码 . P- O0 y7 E5 k0 [: a
, S8 i! F: R3 C7 H; e( u
词典 HMTL格式
3 w( X$ s; l4 }0 O+ o! S和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。 , m! b" |! b7 e9 Y
引入 css 和 js 文件; s# c- X8 {4 B. M
9 ~6 H8 b2 f% G' a
- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码
& I6 |' ]( s5 l2 Q引入音频
" l1 k4 M. }7 p) o% R; V% K! R' W6 l/ f% G& V2 T+ d
- <a href="sound://sound_file.mp3">keyword</a>
复制代码 0 d* B7 A1 x; e2 L/ [
引入图片
) V7 \- } [- f s6 [+ n s格式一: - <img src="file://abc.gif">
复制代码 % q! F2 l3 f) @ }: A$ N
格式二: file:// 可以省略
9 r6 d6 I3 ^+ w9 s! H跳转# O" d/ N+ s/ Y" E
两种形式: 资源
" S* H6 w8 v8 f# R( l1 O. \4 nHTML 中引入资源文件时根目录为 mdx 所在目录。 4 f7 q- N! }$ Z; S* _
存放0 Q, ?5 W6 x3 E' H* x3 A. h) T9 H8 v
优先级裸露的资源文件 > mdd 中的资源文件。 * U( r' ]; [" [4 |$ i
: N4 y( E9 g Z) l5 B
词典软件1 d$ H/ w7 x: \9 ~6 M; N
) _7 m+ c& C. @MDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。
% Z* A. V$ c/ E m( R( U GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
& \% v' a$ x+ t2 R, M: }
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。
; P# `/ I- A" z4 r
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。% `+ I8 U0 z; T6 R" T w; R: [
- ^0 Z [+ p% y" u
如原始 CSS - @charset "utf-8";! T9 p, a) P# k7 y. T! f! m
-
4 m( V; @$ Q% |1 d* w2 O: X! x# l - body {
; p# L% U' i- }0 T - margin: 2em;
7 [$ E6 c( }6 H3 ?7 L3 ?; }( Z - }
& S2 C3 ~8 T, r- z9 l -
& m' T. [; y I$ e - a:hover {
: e$ t+ ]3 R1 G: ~, p - color: #4372b6;
. u- c8 Y+ u2 Q2 d4 G - text-decoration: underline
4 M$ L: V6 k3 J) @0 r - }
复制代码
8 l" |3 U; c+ DGoldenDict 会解析为 - @charset "utf-8"; ! G Y6 ?" d( L7 M
- ( }3 {3 \7 G" A7 G: G
- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
+ }: s/ O0 w2 G9 [ - margin: 2em;
8 w" A5 V8 x6 p+ _. n0 U - }
9 r$ x( B: s0 N
2 a0 g6 |1 N; S, t K: E# J+ t- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {3 n9 ^4 i) R! P: |4 D. p9 ?
- color: #4372b6;
. u" c# M6 P O7 y7 Z - text-decoration: underline
, P H8 s% P0 Y& Z/ e - }
复制代码
1 R* Y: U, i ?$ ^6 @! H而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8";
2 V- I9 R0 [& X( q# A: i+ s - ) s( |; @$ f- P. \% ]! y
- body{
: P- z' h3 O; \) B- {# {: q% }. N - margin: 2em;1 H' A7 ^. Y$ e! G5 G2 _% A- e
- }
) C6 n2 R8 Q! ~! F9 `
4 g0 u( r k9 K ?! w- ]# \1 E- #ID224342347child a:hover {# W! B; v7 V% l' V8 ? Q% e' z& T
- color: #4372b6;
! J$ V6 C7 A! ^0 W; ^1 T - text-decoration: underline
* q1 Y6 U' ~, o* a+ o4 X - }
复制代码
# O* D; q& c) Y5 u& H, l! L4 M这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。 ; S- x% z9 f/ T0 R" T
制作工具- , e# q- B8 y& q; ~( V6 b8 i) T
制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。 - I! c1 o9 W" U' p5 }3 m# |
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options:
! b; [! X' k1 {Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。
' P5 s- g/ \0 D+ [$ f8 @
. W& j" f9 W- O5 v 制作技巧
5 ~3 t+ ]) F2 x# {+ V2 W+ z/ Q
8 {. r, d4 Z: |) x0 s
* b& o: @6 s2 G2 ?0 Y" B' L
7 ~ s0 M8 X$ i; j |