TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 ) E: s$ Y4 n! H
W2 A9 x, }. I% g/ o
# MdxSourceBuilder
% b' M8 N# X; U. W; }. m! j9 w1 P$ I6 g6 m
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件
: z; a0 N0 O* I+ g) l9 V9 H, p' ^: i9 z8 P1 U
l9 X! n. d4 x7 ~## 背景, p* |1 i. k8 S2 a6 e
$ s( l ~2 y' s: ?### 需求背景/ a4 z' K) I9 Y: G+ U
0 n# I. p! x: { {2 c/ c- C4 h
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。* e2 V5 e1 v1 N$ `
: C, P4 M) B6 t% J但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:
+ V: k- u5 B1 u
! J) p- [( t4 o8 q7 Y. I* 导航不理想,极大降低了用户的使用体验. e \. ?) ]4 t& {1 f1 S
* 制作修订过程复杂,极大干扰了制作者的热情
+ p! ]+ H- f( P- i
: n; u% r( @; K3 Z$ ~这完全可以通过工具来解决。& L3 B7 c1 C' @5 d. F
# j6 D/ s" V5 Q" K% h" w) |
### 程序设计背景: w; w0 _7 Y" t; E, E" G
: u. A3 g6 h: N+ f本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。
' R1 @# W: \6 R" Y1 i2 _+ V- x# U o* G' m% E& q. H
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。
( W3 F4 U+ a2 A0 r, ]% s
- c1 b1 G% ]# W; K2 [非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。
" R* w- }! w- ^: U3 B$ R, @ q3 \# {" y1 ]
## 解决方案7 R* k8 }) c5 t) s: k' }
, z w6 p( K* T* o基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件0 T- r! r. Y7 x, `- T* W/ [
- [6 G$ ?! V+ V; D0 O$ l1 T E, W
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。' s! n/ x! u- v) h8 i( {
% Q6 C9 m# D" G4 X. G8 x. A; @+ ~' h: J
目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。: `4 \6 t) Q3 k& z" s
$ V6 o3 f8 x2 a, d2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
2 k1 k( G& v* z D: ^- X$ \' L; R' j
目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
% m( |: Q1 X2 C. W+ h2 p B7 u* j! X; G8 u& N z7 a% x# Q! I, D. }' J
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。2 V9 n' }8 y! T# ]$ j
* f! Y0 ?: u3 G; I' b 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
8 ^8 e, _2 Q8 Z7 y. {, c
- K* A, l& q; ^. Z: L$ R! ^4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!: n8 ]% y) J V' ?( [3 }+ Y; |
* [% E% ^! X* l
## 程序文件及安装7 O7 \# L1 e& p8 X) S
O4 ~- b: g D根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。$ w- p; k* e: b/ H3 @) Y/ }
/ \7 i; _: Y0 ~8 w. e
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会 v# I, H; S2 w/ v9 u
* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
: G' {. |0 N5 O+ I7 m3 X* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
! N& @+ P6 |! c0 u+ ]" M, i4 l- v3 r* g ]( ~! S( \. |! N
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
! M D+ J4 s. K7 H) D7 b; o
5 ^6 c7 Z$ o% ]+ {8 q0 K! r6 k## 体验案例“火星词典”- l) S8 |' w8 i: e% }% C0 |
5 ]- C. z1 j k& |# g为展示程序的特点,特制作了“火星词典”,供观摩使用。
5 F f5 L/ o1 z b' K
% h9 I3 F. H, ^$ t/ T* V* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
5 f' p9 ^( `' c9 `8 c9 H& A* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息- x \9 n! P- G0 R& k
/ e3 @' V. Y- n; J h
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
4 p- N$ k4 M- O3 J) m8 M0 o( ~. q7 f8 b T9 i
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
0 S, l E l* o* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
& g0 k* k$ t5 B( ~. o, {' R: C* 之后你只要照猫画虎,即可制作自己的图片词典了
8 r" C8 [: N1 _; X* h' g* d
1 X: `( n: i# |## 使用说明" c5 U, ?$ C8 m& {/ Y* r
; I5 M( o! w( V- g2 O### 极简使用说明
# i+ c3 ]6 Y, z L" Q5 j. K% ^7 r c" p! N7 g
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。' ~/ F. i( T* I" V2 ]" s6 F+ O, q& `2 T
% @) G! V( D q4 F2 k9 O### 概要使用说明
" S0 G& q* ?- W+ ]3 N
$ j! }, w3 N Z$ f J" S' a1. 按格式要求准备好词条文件
9 F! w- y, i- y( ^$ i3 c2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
; k8 m) A% g, Z) s3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。7 Q8 R% p& \- [1 p4 b
3 P4 @9 V8 V# U) o. w
### 详细使用说明
, R$ ]0 @9 u. c- g8 p% w9 p0 t. E! t- U6 a3 M9 ^, V
* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。5 h$ w, R$ x0 K! S$ t
* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
! x9 g& M0 J9 X; G* l! l) h9 l8 t2 R8 [% e3 o0 R& T7 q0 Y8 v/ d. ]7 T
### Tips: 使用更便捷快速的命令
! y$ a- e5 _4 {1 M" ^
9 S* v' g2 G0 I4 {& v' W8 w* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
8 ]1 B7 G* X2 j& S0 {0 [* h+ F6 I) f2 x: m4 W# j, f5 z* \
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
8 W$ j$ l, S- p8 H# A" P1 n
! F! s- X* S( Q, h* 那么建议使用如下更快的方法(自动寻址):
; k1 y$ j. M1 N7 i3 A% v
- J$ A- D# B9 u9 d7 \; z0 H3 G用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
. M+ i+ C2 }) f
2 j2 L. J6 y3 ?& p甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`! h$ m2 _" N& X1 L& z
( N7 u0 f' O; K( ^! N这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。) N4 C5 O8 ^1 x' U
; o2 r2 T9 K, B- x% |也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`- Q. C" f. u4 @+ b. j# t0 V5 z6 p
9 Q3 c( S4 M& m# ]8 n8 c; Y
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
0 y4 u: l3 t, H+ Q/ A: c" M6 n# q, U# J5 X
4 g3 d4 f0 r# t( ~### 相关FAQ0 i& u) E* b3 z) E
/ S& S( |. X/ D3 B; @1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
6 }- U# h) z5 @" F
0 z( B4 @7 S9 ]5 n7 W& Z: h* Q: vim出现乱码 K; }6 b* |' S: G% S
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`
$ B7 B5 ^9 ]$ _
7 q0 z' C6 N: k* ]% A 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
& J( j6 d. Q m% e D& r4 j5 j4 y! ]! |3 p8 k4 W: f6 t" H! W5 T
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。+ i4 T2 l3 m! r! S
0 K- ~1 s3 n: s8 W I. {
## 社区讨论与反馈& ]# X c w& x
, R; D% m7 F( C* Github: https://github.com/VimWei/MdxSourceBuilder
& N: P( w" A. Z2 G& u) h" z9 P* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html/ W( P% L1 m+ Y+ U( x2 G
' e* d; Z* e, ^- L% j# H: Z% {2 c6 p## LICENSE& @, [/ V3 ]% b& P0 _) s" |3 X
1 i6 s3 H( m- g( {. s
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
) W3 q% e% Z9 I+ i1 d9 D6 i. O: [9 T8 A; }8 c ~! |
|
|