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

楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 2 Y/ a: {( I- A! [5 A1 y
+ \, D8 g& ~; a9 o: N# MdxSourceBuilder; D, \" u F; c7 g6 b4 D( X" S) {
& [/ t& j) c/ R3 w" ~5 }一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件
1 ~: c" {. X, ^8 `, M& V' R7 D( j" j9 T% A0 J3 L
2 b: z0 i- w4 m6 ]' M& g
## 背景
/ W4 Z& C) ~+ u0 b* y/ p& c) a* i% | I- F) r9 C7 }
### 需求背景
6 h1 m4 T" l& _4 b$ C6 B0 ]! `- h: o9 G) z
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。4 w! f% R8 g8 R4 _1 n
: p6 v( r& j" w- ^$ J/ V# o5 V但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:( Y" g0 G! O8 [5 M/ |
! V7 s" l! F3 i* 导航不理想,极大降低了用户的使用体验: E0 z9 c. K# c+ |
* 制作修订过程复杂,极大干扰了制作者的热情
6 @ e: X* y6 ^
5 u; g3 j. V s K4 @4 T这完全可以通过工具来解决。- Q" v: \& L0 s8 l, M* Q
% V# |/ V$ l1 ~1 P
### 程序设计背景
7 B5 g/ C# r6 q8 }5 R
$ A0 w% {7 [( E6 ^. A* i3 R# h本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。
" ~# E1 M% o8 `* o% u- I8 n; \; |- _8 N+ P% ?
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。1 ^ Z' L% i% P# s, \2 T
6 n- H% v& H& R' @* Z
非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。
3 R( P: ?7 L% G3 b
* q6 O5 ~ [* _0 I+ ]## 解决方案! k1 `6 }* ^8 G* m: K u
6 f. L' @8 L& @/ a基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件
+ ]9 |5 w' ]$ O8 O+ ^/ I# K) E, Y' q0 v/ P, F. n, {7 K/ N& x4 q
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
|1 o% D! [" L) J" L& W$ v' h( x$ Y; f" w# ?
目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。
7 T$ U9 H) ~$ O, k. r& Q' G& c9 H; i: l2 J( Z9 g1 i
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
- P" K0 s4 L" O, k3 U6 R5 _- W& ^# u
2 _: y% r* \0 y/ r% S5 B1 Q) J 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
$ K9 o; o: x5 a- { Q- C6 A: e, h @3 j8 Q. B8 [
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
8 Y6 F9 {1 ^ q- a: `+ W% t2 g2 }9 @ @3 v/ ^7 o5 y
目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。- W7 v4 i/ w; N% B- `$ n
8 f J- |2 G7 A5 ]( y4 u4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!9 P; Y, G2 ?+ M6 [$ F
# b0 L3 m. s( ~## 程序文件及安装
U2 J1 m# E& X9 h. d; }- t# D1 a
( H' X, ]/ l: `( ]: m. S根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
+ y* h! d% J. X$ b( R p# Z6 W, S: Q% K; J1 Q3 T( r0 B. j+ x9 j
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
: o: @' l: l6 |% J7 H* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
0 O- T' ]2 S* `- @, N6 P5 i3 \* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会- G: p! y. p0 a, o$ s3 q( Y
5 P3 v& m; _' J; g' u4 W. s7 Q其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
% I7 O' ]2 p- b" p& d% x C
; }: F1 [3 m3 x## 体验案例“火星词典”
+ N9 O9 h+ l* T/ H6 y# \# S/ l M$ b: B# s4 F
为展示程序的特点,特制作了“火星词典”,供观摩使用。6 p5 \6 K+ }( J
& r: m2 K$ X4 J6 @
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
2 D* s- r5 A( f/ c2 C0 a6 V0 Y# |* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息# J4 F, r5 U2 y6 h4 E( N' ?
7 ~8 e$ U2 i6 x: Y! ]$ {案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
1 `+ ~$ \ j2 @; J% U0 Z+ U3 v7 _- t; g
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
) _8 u+ s: Y8 `! N$ P* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
; M5 {& K# w) I" r" P* 之后你只要照猫画虎,即可制作自己的图片词典了
2 k5 y' o; b% X: n: f9 s
" l0 s Q1 _4 Y3 s' ]5 Z4 ~; p0 z## 使用说明- i V* z# Z: P; |
, M1 O! f6 X0 L% p3 g' k( Y x" ?, ]4 Y### 极简使用说明& j I8 O' ?, Y% d
' |; T% t; T3 S' y
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。& \; n( m/ b% j s' ]9 u
: w8 H% T$ r7 o) T' B5 h* X/ s f% T### 概要使用说明
7 Q* K( n4 _( j1 R1 b: z- q6 [# r w
1. 按格式要求准备好词条文件 a8 D( Q; u; |
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
# z! L3 F/ V, _2 q4 N5 Z3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。# M* G9 Y8 g4 t6 u& |
3 N$ p- Z5 C$ b6 h" x
### 详细使用说明8 k& J, l) Z U9 W% t. r
0 S7 x V2 u9 \. }* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
; O) B+ z& y. v1 c. @& X* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。& ?/ N1 n) m. D
; W1 P3 _( D8 i8 C' M
### Tips: 使用更便捷快速的命令
) v' C0 m5 e% `9 U2 U8 R5 G8 o4 q: z' K# f0 [% X9 G
* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦1 i6 k( O& z" o
& E8 [; t3 d- e! U$ g打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。+ h2 u: }' ~4 d$ v" V
: S- D: _) G0 e4 I- E* I9 M* 那么建议使用如下更快的方法(自动寻址):
; L. M/ C' k) R* j7 k+ A. L9 f
k, K2 R* S' z) P用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
1 r8 Z0 z) ^2 A, v$ W3 L7 @2 ]6 ]6 G9 [9 {* m& {1 A. l9 f
甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`! q7 f* O5 R- R. T2 }) J$ ^' d$ {& e
+ a: {1 k& X: r5 k( o5 l1 ]这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
# l4 _" z0 I( f3 @9 g+ R" Y$ u7 L- r( P
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`: C3 Q' ]/ d$ [0 I* o4 h6 ]
: G S, \, p X
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
4 z- F: x& |9 h& z/ I1 y; u
" |# J7 [ j( c4 h- x- @# o0 _* z5 U7 t+ T7 N
### 相关FAQ2 Y2 k5 I8 F& V) E/ b
! I; p" t' P1 {! A
1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。* f7 M2 w' P' @1 y
7 m) [! o& ]) e9 N2 j: H
* Q: vim出现乱码- T6 h' M1 J4 p9 ?( A
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`) j& D! Q# L+ e# k
/ h( H$ P; k% Y" s2 K/ Z( |5 R% n 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
: R8 `- P3 g8 U W9 ^8 h$ }# j# _3 L. g& b$ [9 _& E _3 n
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
* G' v- \! A& e" k" \9 W9 x, c0 k/ z8 |1 ^0 o
## 社区讨论与反馈
* \% p% o0 q" A' _" k% K! t* j+ w' e! q4 s
* Github: https://github.com/VimWei/MdxSourceBuilder
' d- d$ `* E( h* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
, m* q( M4 {1 d2 `; Z
: | R/ g0 P V0 ]0 F## LICENSE
- v, h3 B" p- ?( S% a+ M; C! C7 G/ E2 B! m: H
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
- {$ i! ]) _) }9 a, ]1 o$ a
, w; I" Q2 X2 \. ~ |
|