TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 5 |! j( T& {' Y7 M9 p
( J/ T! p: Z& h7 j# MdxSourceBuilder& m8 _: Y9 q, d7 q; N! [
8 y/ G2 O: u- M2 f# o
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件
3 w2 {2 m, W u$ q+ s( s+ z0 n: C, E; c4 ?
" z, b9 |# q! b/ h
## 背景) }: _; \ t# [: f
& }% j X, a% r: S5 P, e3 e### 需求背景- E% m* l0 u. A+ {0 }
; M$ Q+ V2 S! {4 \ @0 l2 j时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。, _5 Q3 O1 C) r
* d& c) [. k2 K$ e% Q! }
但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:) e! r1 I+ ]& j h* F+ g% F
, f& ^' Q2 w3 f& N
* 导航不理想,极大降低了用户的使用体验
4 b- e: R( B: \3 o3 {* 制作修订过程复杂,极大干扰了制作者的热情
0 e6 Z8 d& ^4 ]# g9 e+ O
1 h+ k8 F$ U% v8 v, u这完全可以通过工具来解决。
; }( Q/ t( ^3 A- Y* i% A5 y4 J2 \* ]4 D4 U
### 程序设计背景( N: y, _% l+ J! M& H; O! B/ M
$ w* x. e. \6 X本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。0 P6 @7 l: s8 z3 }; w2 [
1 b+ E& n( a% d, }( x# c7 A3 V本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。* I0 W( Y% \+ V7 t1 @
: n+ Z, {5 P9 h' G- C
非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。
& T, {' t+ g v
; `1 J% U2 `3 ~- k1 V' g; w2 V## 解决方案
* e5 X% V* A' j: b* ~8 U2 ^' ~# U6 G: X: i" D4 s" j
基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件
( U' B ]$ l y' p5 [( P: Z& a1 K
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
2 I P6 z6 E" j$ Q8 O0 U* S; C8 k' g$ G9 \1 L
目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。
. L0 g/ ]& F1 C( U0 y: Z! C
. a3 r4 Y8 i0 C" X! Q5 p2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
8 \: x% G, h8 w* |0 P2 W( [
( F: Q& {# K8 g/ |2 a 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
" S) b" S3 Y6 E; H |' c1 i0 a. S3 |7 S4 x0 u7 |
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
3 v5 W2 z0 ?2 n) G1 K' e; {0 B1 c
5 F, p2 r0 z i9 ], V 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。" ~0 l- S* c; m) h1 i% P& ^
/ A: Q+ L' Q; N% M+ f; ~4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
* `) e* s5 I0 V# `& H3 q8 ~" @7 D; _4 b
## 程序文件及安装
7 ~0 i! p6 a# u/ V. [
& H: e- {/ G7 p8 X, L* ^ E根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
; K& X# `$ G3 u' j" G: W$ O# d0 q2 a. W ^4 I. d5 U
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
# t- F& e& G0 s8 _: W; F2 Z" e* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会" ~4 N* s( }+ o
* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
* m, x/ g2 p; C4 C" Q5 g3 o X: o/ i: X) r; q. K
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
8 v% M0 f" l. W! ?) _/ p- t" [+ _7 E5 P& M9 U. j
## 体验案例“火星词典”5 ^' s! k- K$ d8 o4 ?" H1 A
9 a, T! y" e; ?$ ]3 X为展示程序的特点,特制作了“火星词典”,供观摩使用。5 C: L% d% A" I6 b( V7 \" s& G$ e! l
) K! O3 y2 D. U' Q! x* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式9 f; I6 W* e7 C3 ]) M, v, k
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息
( l y" B" R, c2 p% r! R
: p. E6 p1 l% g* l& p案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
8 Z4 T1 q8 y0 C3 m7 j9 D
- a8 b! C" Y6 o7 H; u" a7 Z& A- M* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx& M% ^; N$ |' g; T4 ~. T
* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
( l0 C7 z. q' {0 o* 之后你只要照猫画虎,即可制作自己的图片词典了
$ m: R2 Y1 D; W; f) x0 y0 M5 x( v9 F7 ~+ @* M V- I0 S' x
## 使用说明
+ J+ ]+ K, s* |. _) d
5 O* {: ~/ R$ \' b3 @- K' T### 极简使用说明
# [& S8 a" V) Y3 o7 O0 L0 a0 T+ B" d" O6 W4 ?
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
0 R: T+ ^, Z* q; G2 D0 v/ `# a8 n
, n' x* F) q! y2 S* U6 f5 e' B### 概要使用说明
/ u1 H7 U( ~! w/ [; s) _& I) N
: f9 U" @6 }; Q# T1. 按格式要求准备好词条文件
1 K) M' ^ B* i2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
5 R# _- U. z1 {7 z$ E3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
' |# P: H$ X9 s
% k: r$ c# ?. f8 a### 详细使用说明
! f' P$ P4 Z0 O t' _2 G& X" B. Q3 y3 M& ` Z
* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。2 `( q. s6 ?# _6 M$ P1 E6 T: ~
* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。, Y9 k- m5 k$ x
( }" b* c% N7 }! K% Z! o
### Tips: 使用更便捷快速的命令9 g4 z) ~/ q/ U- d1 c, q- A7 h% i
) O, B( j! E2 g( G* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
7 _- w* @9 v7 N& t! R- g i7 V4 V; H4 O M- X, c
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
8 m; w# ^9 h+ _& y3 [# |
- K2 I* F8 O0 ~( H* @: B5 d* 那么建议使用如下更快的方法(自动寻址):
7 E n z. F+ n0 v. e$ {7 D x
0 }5 ^8 X5 J" G7 x1 Z. ?$ J用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`* B( c, E( E& S. r
1 W' ]$ k* v' B7 p甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`" o, `7 u8 Y# D$ Q
" a+ I2 W: j2 n$ W3 ~- n1 _( l q
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
/ S4 C: ~, h/ _ A. q2 K, D4 x9 `0 }( m! Q) A1 i- x' p; p% ~: q
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`
# f, X5 ^0 L/ [; {2 L, E3 |4 [. Y8 [. t. L
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
' w# T) b- t, o+ ^% @
. p: ]: n. q9 u) R( H) I) L8 @- U1 Z$ n7 ]& L' Y
### 相关FAQ% C/ J! Z' i/ X ^' h4 P6 G) j
4 U6 Q% T: z4 Z& L1 Z" Q1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。$ g9 F/ _) d& i; J* F. J) @
3 ?" Z: J, s* }3 q7 x- v* Q: vim出现乱码+ p# D( k% k; {7 O2 D
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`
: O" H7 c' p: r
1 @0 H! u' j7 W3 o( Y9 I6 C; _ 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
3 T$ I# y0 ^$ y0 Y9 D0 m' n7 d0 X7 B) B( V7 [
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
2 H5 `7 m9 z- {4 H+ @. ?+ R) H2 `
## 社区讨论与反馈
5 \( x# I% h4 c" n4 ^1 e% q2 {" e* m2 n) s; ~( X! N9 X
* Github: https://github.com/VimWei/MdxSourceBuilder
. m- G7 b2 \2 @ r4 V9 w" C- d* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
) i _+ D8 Z' I. x6 [ D4 V5 _1 ^2 m7 V
8 C) S" O1 q! W( ]## LICENSE
0 B7 a+ ~ t# l) E7 n8 c* n) e
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
4 U2 R3 ~. p: o3 T- M8 ?0 B# Y& f! X& j# A8 j& h
|
|