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

楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑
4 G+ j1 X5 N$ c+ G
( ^9 P3 m( H4 ~# x# j7 S+ ^# MdxSourceBuilder
1 s! f6 l# o; L# J+ d- e5 _- U
l% ~( [( z8 D7 g/ f8 O# Z一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件0 Q2 d% h' t2 {1 C1 a/ l3 I+ q
& H) V" o0 `* q7 x6 O K# d+ ]
; \! l# P3 o7 L! t. ~/ Q
## 背景
* v2 f+ x3 l" r" k, w- B
0 p& r! g, P6 W- Z$ y! s5 u### 需求背景6 N* \) i1 {; |
$ A* |' K) D9 W* t
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
# `/ f7 r5 I4 L: b% S6 v
0 a# K t. z- R% @* U8 d但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:7 A2 D/ S: p0 N+ R A. z$ R$ P9 p
, c9 p& N3 x' Z6 L/ S
* 导航不理想,极大降低了用户的使用体验' I' j3 E3 ^3 {3 i4 j1 p) X
* 制作修订过程复杂,极大干扰了制作者的热情
- Z( v$ X \5 Z; D) u$ \" B. u4 ~
这完全可以通过工具来解决。
, J" n3 ~! b3 F# ]7 s& q: K- `
$ W5 N; c1 n1 b/ h% n( G! S8 a### 程序设计背景
9 g1 O1 X8 l% }- l$ i2 ^4 i: X$ [8 z5 K' M
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。
6 j0 ^, C$ M, g) ~) f0 |* C V/ }" W* X" I/ E; s& X8 }1 c
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。
, U2 a! Q: T/ Y, A. F$ I
" M) K+ c- m7 n- g u$ O非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。# @9 D+ l6 ~# d8 \6 q: C% T
1 Y4 R8 k* w" I Y1 `9 w
## 解决方案2 P5 y; p# P# K& O) j( T
) d: c1 S2 j, s0 {3 \基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件
- K# g; m, X4 e+ ]. ]/ {5 ~
$ J% ]! E: F' V, [3 Y2 L$ i6 N1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。$ D8 M& @0 K n9 D" \5 ], O
& F; }, @; |% s6 e1 L% {, Q 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。
3 b p' M8 s. v7 f9 d% R6 w4 H& F! e
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。! h* x* _/ n! w& S! k% @: B
! N4 Y& n9 i, t8 g* g( y4 r 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。: U6 x3 q4 ]. l% O3 I
% z$ Q6 \# l; P6 O" v @& H3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
1 I* J; `. V5 r
/ f! x, U7 X8 O p) _ 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。; J: h% G9 x$ y
! W* b9 g/ s' b# u" q# p% P4 v4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!0 B1 H/ ^# n% y0 R! a* M
1 O7 U8 q# k( P: C6 R. v## 程序文件及安装
) q7 A) h. E8 U5 M
& s, \! R+ ^! m F* l2 [( d7 H根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。" F6 E) B+ Z' x+ r( L' t
k1 g' s( U; P2 Y4 w% J d* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会3 b: d% d9 b& u
* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
+ }1 q+ l! Z* v: R) \. v* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会0 O8 B6 Y `* I) }/ z" _# M0 o
" u/ m: u |& t5 z5 C3 S/ Z5 k其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
4 A: q0 `) j- S% q: V* `5 B1 R9 o+ r$ v8 T8 c) N
## 体验案例“火星词典”
$ S6 t- b; h' E- s6 ]6 d7 o( f# W* q% }( r
为展示程序的特点,特制作了“火星词典”,供观摩使用。1 b2 K' c! ?1 m' C: I/ |
: u6 j0 e3 ?* C$ K4 S
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
' P; U+ s$ d* P! q: y! ~* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息
7 N# O0 Y% }1 {
5 o( d+ h: r9 k7 U6 R1 l" n V案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
# ]! o7 p' T# f [% N# n
! K! i! x) M" Q1 w* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
4 ]+ Y* X* L6 ^0 `" G* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
' w; w8 k7 @3 E# C8 M' z* 之后你只要照猫画虎,即可制作自己的图片词典了
% U7 V4 i2 X* ^. h4 V2 o& ]
! O r( q2 r3 t# n- V## 使用说明
9 P5 \( o& Z1 s# w. G2 q D; `& w! q. }8 J8 H
### 极简使用说明! w3 v8 q1 T- s# L4 e
3 c& i/ g& P, u E打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
) O3 y$ T I: p
) r2 s$ m o2 a7 x# U### 概要使用说明% M/ ~/ k" e: k' S3 I1 h
/ H! }. c; M! @4 c: j- d6 X
1. 按格式要求准备好词条文件; h; e. b# x( k9 \! U6 B" Q
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
& r' a; C1 X8 [6 m5 q, m3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。; s. L6 ]: y: k* l9 D! @
( y( J' o& ?) m/ h2 u
### 详细使用说明; s( k9 D7 z, K7 p
* ]9 ~$ C* U v. E f* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。0 b' P9 V: I, O+ E
* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。- h' ^& V I! B+ N! Q! _
* O4 v. [6 ~' V: g" P### Tips: 使用更便捷快速的命令2 V1 G0 U+ F$ }; w
: K; ?' y$ o6 C2 D) V) x7 [* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
, U2 X* N( ?6 h9 i) Q& e7 F6 ~ X" F" F- V2 K
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。! o2 U' F$ D4 n; a$ V' s s3 J
! d, w5 w% A2 E3 z+ |' Q
* 那么建议使用如下更快的方法(自动寻址):
' S. e: c& a7 U9 _0 `: t, ~2 J9 {6 L4 N
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`$ M+ `& }" I9 X' ?$ } d( t
2 F I" N& \- V" }8 L6 f0 O甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`
. a* E! q. b1 b) H! I; r+ S, t( Q% G% \: w0 s0 ^9 g
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。( e- {% X8 ~/ ?( X; I* e4 T' F! ]$ Q
& W) _* O. g; D9 d
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`, w- F- i/ b( t( C. H# X
; D/ k0 c; b% Y5 e: |" z/ o5 D
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。. ?. v3 v' t# B0 I: d
" D9 m+ i# P% o% f0 \, D" ^5 m/ p& Z
. d& k" d f6 T### 相关FAQ$ r. p- ?; v" |- D- E
! c, L/ k G* F7 }6 i1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
- Q! _- f' B% F
1 r5 f! M0 X7 O, M1 a: ]* Q: vim出现乱码/ J! J+ ?* [ |) k5 O
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`- L: p. L( h# A
8 _7 M- V. \% F' Q! |# j4 s. e, ?
其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验$ n `6 J3 \3 }/ [ N* N
8 U. N5 s& k7 H4 q7 W% q2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。) L) i7 X7 m) s. X6 v& l3 U% @
% J" w" o4 R2 R* T8 c1 H## 社区讨论与反馈
: u6 w5 z6 Y- ^/ y+ }
8 P; Q1 [$ U! \4 _* Github: https://github.com/VimWei/MdxSourceBuilder
/ o" U4 X( T' c m' X* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html& J8 ?' _; I( [% O: X6 G
$ P) Z7 w4 f5 B7 X! H& _## LICENSE
6 i. i0 L5 C: g& X( s1 [# s2 `1 x) j1 M
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
8 w5 n4 n! J: ]4 X
2 v$ |+ H9 }$ H4 I, ?3 w' u% K! | |
|