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

楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 / J- ~) x( d7 K. b+ C3 P4 n
3 s! L4 z* F1 L! K/ J
# MdxSourceBuilder
; x8 l" Y* \0 Q# r+ w& D
: j& ^$ N( B( @/ c一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件# e5 D; j9 l* e/ b
' I& b+ `$ e1 ?7 L; @) k) P0 P0 a5 m
: O! i& d3 z4 h0 E5 W## 背景
2 `' n7 p9 V& Q+ y5 c. J5 u! O* o- u; m/ h: r- L5 Y
### 需求背景5 w2 {. m4 S( Q$ e& v" t9 G
3 B: S; X7 J4 L5 j5 i: ~时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。6 t9 l9 N& q! `
. p- U2 Z, y1 i! s1 b, [但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:5 i+ z! |5 ^# \6 S Y4 I
4 ~0 }+ N( O( v9 N8 K3 c* 导航不理想,极大降低了用户的使用体验
1 t5 H, Q5 l, h8 Q, @0 ^* 制作修订过程复杂,极大干扰了制作者的热情
& @% w# V( X! _1 J2 c
: H1 ~) s/ O) `$ T4 ^+ ?6 U& k8 H8 Z5 j这完全可以通过工具来解决。' u1 P8 z4 |8 D) a2 Z4 d! ?. [/ O
A5 s2 o# v/ D! b- J
### 程序设计背景. k' F5 Z% g8 u
( J0 q$ B4 E8 ~& I
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。
# V$ s5 P/ |. a! d& ]6 }& \! Q; Q9 x' [8 |
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。3 D2 g& L/ b7 V6 _; v
5 r" d; U1 e2 c0 {' m! L非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。
d+ Y0 p: t6 E/ @5 b' a W! R+ D5 w* r. U0 y2 J
## 解决方案
( Q2 D M4 S. b/ @# L$ t5 d4 p, E9 i8 Y; N( u0 y- D
基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件
8 C; J( X4 M g$ ]. {
0 c& w& |! ]) V5 z d3 F1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
8 C; w1 Z( n9 r) j* Z
3 ?/ @& w: {& z0 F6 d1 \3 r6 `7 V$ x 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。$ X( E$ e/ B, O% R$ p6 v
; {8 F2 J0 y- b6 F% T9 `" y
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
% v; `# r L+ b+ a' ?) ?* U" ?" X# c4 [( Y7 o
目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。* d9 y, a! k: D% v2 u! z! d. ^6 V
5 @, o9 y! N- R# B1 o3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
: z5 x- s9 T& N3 M3 e) g; {0 ?7 m" o, o7 a& X
目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。: Q: a9 V) u# X
- y4 e' v( r( T2 r, j: F9 P4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
+ } F$ E$ W, A4 i% ^. p7 [/ q1 W& ]5 c7 Y7 @; `
## 程序文件及安装
' w+ Z( [: j h. M$ ?2 }2 I1 R8 w8 k5 R# h- X) i0 Q% W+ H. w. V! L
根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。: [) u2 u! C# H$ q: M5 x
4 e, O1 @4 I% a; o" s5 F* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
" d0 U' X: N7 _% T" {; U! ]1 D- i- Z4 w* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
2 z+ m# W! Y0 C+ [* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会. Y9 k6 b; T0 ^; d7 g+ H! f3 `
3 `1 b& W2 `8 I# y# Z1 H0 y! T
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
7 Y1 ?3 N5 n& z; F8 s V5 I9 X% l
; q; j8 r/ E# P6 k0 \# k1 T6 y## 体验案例“火星词典”
$ h1 U+ d6 N% K+ ~+ [0 E+ ~! A/ }* D K& f% J
为展示程序的特点,特制作了“火星词典”,供观摩使用。# H0 E9 @9 I5 b# }% |
" ~! y, I; ?& \; k) O6 D
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式1 m4 k3 |; p7 T- I' T' K
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息
9 |' E% \4 ~" J: @7 r! }( r! ]; n2 Q+ [, b* } B2 R+ ~
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。' l) u% m8 g Y1 Z* |3 t& s
3 [% s# j3 k) M; r) G; N' q6 ?
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
7 m7 C2 m0 F( p* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决) L: h# W% m7 G! o! ]
* 之后你只要照猫画虎,即可制作自己的图片词典了$ g! j3 t+ A2 `0 T2 {" l8 m/ ]. b& W, q
% p4 A/ d6 D( e2 }
## 使用说明
, O. X9 w2 M# W g R: \/ ?( F
### 极简使用说明3 d1 k; \% z$ o9 p4 H4 Z
" D6 {5 }( v# k7 K
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
5 T N: ^3 e- n5 U, B) g
* t6 ]! L% h+ n+ L2 z5 A1 F3 v### 概要使用说明
1 g2 C$ e m6 a e0 ~5 ?% o; O1 u! S$ a7 Q# d3 K
1. 按格式要求准备好词条文件1 \& X, l0 {) o8 R' q
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
8 V# i2 O" O3 Z- r" V7 f! d3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
+ g7 L# P/ j; p9 \& r( S# M) @! h0 T% t
### 详细使用说明6 @/ A$ p; A6 ]3 e- w; H
+ z% y% R- R. t$ d* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
) n! W( i; O" N; N* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。- O. N8 v+ G: k) d/ k4 D. f' M7 L+ M2 L
9 d0 E! J" [# A8 j3 X### Tips: 使用更便捷快速的命令
" \9 R2 X" i0 T+ \! L! B
4 b1 V; P9 F2 Q; Q9 @) L- |0 S7 g* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
" G- o2 p' N6 l5 x! }2 I2 f0 N$ `" w/ E* Y
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
* `8 N" }4 R; B& x) h- f) V( P8 }% t( Z" g$ O
* 那么建议使用如下更快的方法(自动寻址):
2 i; Q5 z: v3 T( q2 b
+ A/ \" W, I/ w: r( W0 I用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`6 L! S- R. g* H' S
* B1 Q# m% T& U: R1 Y
甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`% T ^) J' @4 G
( O% d( W1 t" A- I: w这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
6 m8 A! F% X3 ~" d, l. G& o! Y! y) x/ h7 P% [9 c( u1 R0 Y
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`1 s7 c+ S( v7 o% P- L8 e
& H" [6 A e6 }5 b6 p
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
8 D+ K$ V6 |* G- T- o s) e6 p$ D7 R7 ~1 c, f
: ^5 ?) }# w( b+ W9 J
### 相关FAQ& P/ k* o0 ?" [# G7 _( N
' ]1 M c5 c3 a' `1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
- O) ]4 G1 g. y6 Q2 s" s: C$ l/ x
* Q: vim出现乱码
: f! V7 L, h! B8 Y2 X3 f" x4 W* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`8 h: W) U* v* h9 @
# m3 ]% b3 D; Q A 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
, \8 V C( b. B' _+ I6 ]1 O: D* w, E6 ]9 s: t1 _* V
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。+ n! R$ i9 v7 ~0 T$ @
# Q6 X' M4 I* o5 m S) \8 Z## 社区讨论与反馈
+ o% I1 A: O/ E! t. Z3 v E0 X
/ V4 `+ c! ]& C$ R6 A5 K* Github: https://github.com/VimWei/MdxSourceBuilder
! T* i- v$ f6 t( b/ S( U) ~2 M1 O* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
; A9 G! @4 J0 C: a+ ], Q j" i
6 A# A4 W* W4 ?4 \3 \6 W- x## LICENSE
1 ^8 d5 O2 r0 V I* E1 z- I0 a3 L2 c
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html). ~# ]& `/ P" `6 I# j$ Q# J: u, w
; ]1 F! s( w# |3 B! L; m0 { |
|