TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|

楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 . c& k( s6 K! t* Z& R" z. v6 O& T
9 c# k" R: `2 m" c& a- r0 m# MdxSourceBuilder
9 T/ U5 |7 u2 K/ g4 e/ `. {- v x& I4 N( r% f: J4 X7 D
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件0 ^2 k& c, J% `: \$ _4 N$ ]# E
6 v& ?3 a" [! B0 a
2 K4 w B0 e; q$ V# f## 背景
1 p2 V3 {! B! t0 l
7 T" X y) M: P2 L% A- ]; J. u### 需求背景
, d$ }3 h8 A4 P; e* ?0 D- C2 a
, |# h$ e8 Y4 `9 A. c时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
0 w' Y8 n9 h. ~* L! m, ^. `/ V2 e" _- S" K7 V- u6 j
但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:: k+ K- b4 i: o, Q9 ~( w
8 @' y/ z3 m, w) ~2 V
* 导航不理想,极大降低了用户的使用体验
; f* J2 r8 z, y/ l* 制作修订过程复杂,极大干扰了制作者的热情
- G& w: D! ` D5 j. v, u
8 C8 _% J* l6 o0 S& _1 N这完全可以通过工具来解决。; ]% c6 j8 L3 p! g, A
! w! T; A- N1 z; b6 N$ F) x3 b
### 程序设计背景
! Q/ N7 m- k$ f) l* t" m
- F; Q( f% P% M1 ]/ c本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。8 X" a F! n+ ?, U/ T9 G" d
" a! d: V6 P' M" Z' G
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。# y% ?# M! Y1 k+ ]' g9 j
2 T, |6 ^+ _+ N, u, J, X# ~非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。* A1 g$ G4 s$ }& }! r
, M" q3 g6 K9 c; T' \## 解决方案
1 M- V$ v' V# h1 ?/ D0 X) T3 h- A6 {1 \. S, p
基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件
3 t6 ^) D! t3 |. o6 Z, T# P) X2 O' ]: P% M/ ~: Y# o
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。+ i8 V( i* F# I& Y
8 s9 ^. f) h' u( u* L% P* r
目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。+ t) d% ?' Z* K6 I5 v( u3 z b
, S4 Q! p# _. q
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
+ g5 T, L+ L, R' ~1 c/ h& ~; q$ c
, L+ |& n4 q* ]4 e1 i 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
- W* g( ~" D' b' q" T4 V: c3 U5 m3 T7 x- i" {5 l) U
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
# w# e( H" ?3 h# j8 b/ g" N/ w8 s# K+ V3 s5 [' }
目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
; l; D0 m+ q. Z3 E/ @0 q, L3 }! T" n3 K( [2 K( @) l/ }( b9 D) W
4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
4 t, X. P5 Y+ R
( h3 v5 T3 E/ L/ K$ \1 h/ Y## 程序文件及安装0 W' X; g& p; N, \+ T
}1 f; R! {* W, z F
根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。, u, [: \; G/ _) h% O9 I/ F
. D" \& T) U% z5 l4 u' ~2 ~7 }! [* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
1 X. L: ]/ W4 V* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
% I3 r1 T. V2 J* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会+ x4 T& E' o& `* d2 t! J$ J
\: B3 i0 |3 p2 C
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
3 R7 O% a$ p- O& `* W+ W# }% R& ?7 m+ ?$ @+ k$ U1 A0 y
## 体验案例“火星词典”
$ Z- [! I( Z5 G9 M, A+ T
\& w& C2 @& c; Q6 S" }8 \为展示程序的特点,特制作了“火星词典”,供观摩使用。# G$ R/ Q! N3 H* U3 l
: j( _! h6 |5 M, m! k; d
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式7 {+ q1 H2 `" ^! k- w
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息
5 D' ]. x" X: H' E
0 r9 v9 G4 Q3 d0 j8 q9 N案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
6 } E7 _" i+ X5 I/ \, X5 Z4 M! b+ | U- }
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
' A6 ^/ `8 a% l* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
3 d9 x7 [# F8 _* 之后你只要照猫画虎,即可制作自己的图片词典了$ Q. x. A2 K; w" U! S5 j
; I( N, _& U5 H( ~, U
## 使用说明
, Q2 q2 z. E. C1 ?. f: X
) H8 N" c. Z+ P# ~### 极简使用说明( M; `2 p3 p; r* {+ `+ B" A
& s' y: b, n6 d8 R9 z/ w
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
9 r4 Q! P$ o u1 d; _- E0 w
. e% d8 h+ S, p& Y+ t### 概要使用说明4 |* K1 s( V9 `6 c/ x7 m# w2 F. p5 C
" ^* r- y1 \ u# [8 x' p: O
1. 按格式要求准备好词条文件9 v; J, m3 [3 s% H6 _9 z# |
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
: B9 G2 R( J& i! p; Z- Q3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
; U; n- [+ E& C" d1 u" D( K1 m- {
3 P3 ?. n) b6 m2 S### 详细使用说明
2 h" A% M6 B* c. L4 B* m) \$ a
' u7 N2 p' x/ t, I- n* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
+ g; \+ n0 z4 v* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
- ]/ W+ Q- o0 F3 Y F& b0 g
7 {* {8 _: u9 J1 A### Tips: 使用更便捷快速的命令$ i0 Y# p+ U& g' X
0 S3 i0 t% X. X. u6 H: G% }) P
* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦; G) O# [4 Y( \8 k5 x
8 ^8 Q2 T" {. n$ J3 I3 I$ K. G
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。5 [* R t! g; E, q
. q6 C1 U0 N) Y1 ^# A0 U* 那么建议使用如下更快的方法(自动寻址):
7 w, t: ]. U. n' U# e9 V( o4 w! E
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`: V# J2 }7 u7 x% k1 @
% B3 g, G5 W( t甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`
* x; M& v& N6 x* U9 K% W% K; x, i j1 v- h+ T5 t
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
# I+ [; V. U1 Z5 A" C1 K
6 t4 Z" |% w9 S m: {7 m! T& |6 T# k也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`8 c: {' F2 G! O
! [7 K- w) m/ ~+ E( i' o
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
( P, G# N8 D* p5 I+ e1 B- c* V9 W
7 C, Q3 C& r6 S1 x' f* C* C/ v2 X. {2 h& H# M5 d
### 相关FAQ7 p) E- Y) T+ `. _7 O' `! G: {3 |% x
3 n/ q# W8 ~5 l2 k P0 [8 J
1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。" z( {8 i4 R! @
2 `% G( n* j0 J' d( v( {! _
* Q: vim出现乱码. _. |5 v8 ]8 w$ t1 q2 }; k
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`
; I8 T* t% `/ [+ D I. x1 l+ S- H$ V6 S% y
其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
8 n6 s& f3 Y% N+ O( a- h' q+ L8 Q- G" b
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
/ L ~, H# O: u' B. f F$ i* z1 o9 s2 L$ r: n0 U
## 社区讨论与反馈
) b. H7 l4 h5 A3 l! y% D: }$ k4 s, {5 q% o' d. ~
* Github: https://github.com/VimWei/MdxSourceBuilder( n5 u: x/ |, l4 ^( S" @
* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html1 Z. X( D0 @- Q, r6 c1 Y! x A
2 `! X3 M3 ?+ S( n+ S0 G5 q' J* C## LICENSE
) s0 Z# x: |8 Z
n' e* R* f( T9 [[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)# h0 P. z; C/ W$ g7 m
. q& _0 ~. ~2 ]3 H% [/ P7 P. W |
|