TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 7 e9 J: b+ V9 r; B, W+ h
/ U) O: K- T' |: B
# MdxSourceBuilder( d9 y( I, E, o2 a/ K& u
. g( L' m2 L& f8 z2 r* w
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件( e0 R/ a9 [! ~" H6 X
/ F4 _2 X5 \+ [6 |* z4 [( J/ T' k( i+ e% ]
## 背景% v* p. ]6 F- O5 I: F
( q/ g# ^ I6 B' a
### 需求背景
2 _. X2 N# C+ ?4 J
4 h! m3 }0 Q: ` D: b时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。% _5 |! ~) B# F& e
9 @6 u" J* D. I+ B8 |: Q( ~- q但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:) g) S* W2 L8 |7 S8 Y$ U
8 f9 C, v3 y! a$ k$ B* z, O
* 导航不理想,极大降低了用户的使用体验
( }; G+ |5 a$ y; Y0 {( @* 制作修订过程复杂,极大干扰了制作者的热情+ [; y' X$ d& }! v$ u
5 v2 Y! ]- g5 h3 O9 A3 C1 Z9 R这完全可以通过工具来解决。6 J/ p: ]; V7 G5 m0 _" L' [. C0 q; Z
0 `, i! d" x8 J+ t
### 程序设计背景0 O0 ^( ^6 S& T
4 W: ]6 m- b) D
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。8 H: _- |* _( P4 P* U0 {6 ~7 g. h4 |
* Q6 S' T# N+ D% H本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。: ?. m' I: ]6 m% F. f' c6 {
4 n* C* ] Y) u+ v, U% u非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。
" h9 d, t* P O8 |' C* P6 p! v$ r$ X( l0 i E
## 解决方案) `+ F* h6 G+ g. z9 k0 A
, K' S/ V, w" {7 I5 s基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件" _/ u' G( }; ?# E1 o
7 q9 ~! X, `6 {6 _8 [
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
$ ^% U" p- b' {( Q" e& }# s# G" J. M' t, M! v4 X/ g" \
目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。# |. W M% V" ~( V1 L) Q
% q% h3 i6 h! {; h- g8 G I
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
8 v2 h! ?' C) T
A! O/ m" G; v" H3 N1 { 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
" v- f. h( g7 c7 E5 f( G0 a# B& Y6 z2 E* h
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
/ Y: h1 |, D+ M
) e9 t( z6 E8 k 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
) p, ~! }8 {3 l s p0 M6 \: V4 m, `( l# n
4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!/ s& b( e, z1 n5 c( Q5 ^/ i
* C4 s! ?: \. |" W& t## 程序文件及安装3 H: k1 T( W5 k- G
; c, o4 A/ g" D! W; \, Q. R根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
0 g& r4 @& Q3 M, o) w6 j6 \
: L' x I; F, V# m" L3 n* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会6 Z6 k6 {. I# {. {% q/ h4 i
* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
- b6 K% L. B" I* y! Z; T* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
, G! G* |4 G! ] P6 ^* {8 k0 T5 r
- X" K u; C/ i) ?+ c其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
1 S* R/ f$ o6 S' W M- W+ @2 t$ W8 e8 p3 h" g- Z$ T
## 体验案例“火星词典”
1 O& J, W; Z* e0 I6 l% K9 A% V+ k0 c' o/ X$ M
为展示程序的特点,特制作了“火星词典”,供观摩使用。
: ]- X8 ` ~# R# }8 g+ i& e* y5 @7 d/ \, @: ~& f3 I
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式7 e7 S5 [2 b+ G6 k
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息* f& k& X$ }/ U, A/ ?( c
$ n7 g/ D0 d U. O
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
9 D& F# `$ ^0 O1 P& ?. Z" G* R: e6 p6 m2 z5 R2 |
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx3 O" o3 k2 ~, G$ e4 v( z
* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决7 u5 S; \; }) W- c. y9 e
* 之后你只要照猫画虎,即可制作自己的图片词典了
5 s+ G+ C# J$ _. l
+ y* n' V7 @" k8 s* Y2 S$ s## 使用说明" [! [, j4 _7 [1 y& U. O3 a: e9 E% |) p
: r% b3 I! v/ ~7 d+ {! K### 极简使用说明
% u" O5 G9 W1 X
7 ~5 w9 v( T! X. Z4 w打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。 m3 z, j" J+ j' K& d- v' z. s/ l
: M4 Z ~; V5 {1 ?, w( R# C: R### 概要使用说明3 D+ L1 x6 A P4 ]6 T
! m* K8 W+ W0 o
1. 按格式要求准备好词条文件
, a$ Z' `+ o9 i* ]% \( g0 b2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数9 m5 \- R+ ^* R
3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。; E9 D' s- [6 q$ ]3 v
! j s+ @# K8 n; O( r
### 详细使用说明 i7 M! X6 a3 K! b/ z
9 K4 M$ m5 r) b! a+ n' @2 z
* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。# ^9 A) G% X4 W% ^6 w0 _
* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
- \, r/ e& h* B- H. w
`$ D( z( I/ |$ r### Tips: 使用更便捷快速的命令
1 \ j2 |2 K2 H" W) {; G0 \% z
$ c7 k9 F$ [ c5 }0 P+ L( C* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
9 \4 |+ ?& y. ]. k; x- {" W8 S4 i9 h& C" @% B5 L) v1 k- r
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
$ B. W5 Q; z" [- J. d& [( c% d5 n& {8 w. T" |8 U
* 那么建议使用如下更快的方法(自动寻址):) p6 g, H* H+ J# Z# ~* m; E# f
! Z& h) l1 x2 e
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
1 P# A1 e, a0 b1 o/ t, F% n+ o. D2 |' w9 e- ?
甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`
! x6 r6 q" Y( E- E0 h
. R/ L1 X* M2 ]. j* n这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。, t7 Y; J. `6 a3 J* s
+ l8 h; Y* U) _
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`
% _8 y! `2 ^2 _* ^. i9 ]& Y7 K! D" [, _. |$ f) @; m7 p
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
9 N3 p) s7 i, l
' ^) {3 j. l7 R/ R8 t6 L, Z/ g8 _) o) i
### 相关FAQ
9 }9 R* p. o3 {8 G6 M$ |6 v; N4 G
5 S! U) Z7 T# s0 a. s% |1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
; T+ e4 i1 r& Q( U) C5 ?! L/ q0 J: ~+ A
* Q: vim出现乱码
, M: M; N* `. h( l+ R4 v" l* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`
+ g! `3 {% y3 {- Y$ Q
4 H7 G5 P* W4 o q: i* f; G 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验; Q% I1 y) q9 h
. ?$ O- {. Y6 g `( ^' E8 ^, U2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。6 {* z+ M; r) B# b" l3 Q8 b% e8 J8 M* M
+ b6 W$ e' l" Y+ m
## 社区讨论与反馈
3 w% f& p, Z' ]7 d: _7 r2 _7 D* n6 _- e' {8 o! p# x
* Github: https://github.com/VimWei/MdxSourceBuilder
- n1 Q" f% {9 X% v) ?* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html, W9 Y, c8 T+ B6 [; P
( x* E& P9 A6 S3 S
## LICENSE3 v- u+ B' N" k8 @8 C% f
- ~- W( o, v" F2 {5 G
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)( b( X; w$ u& f/ }) Q
" @8 V; F: b4 L; s' _4 b
|
|