TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 y' \8 B7 b9 H5 @( J6 N
0 y; j, J% m8 l( E n6 c$ S
# MdxSourceBuilder6 E' M( X ~/ W( b- A! O
- n6 Y, `. e# R" w t/ F7 Y* Y- g
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件
. x: z- I4 g. f# p6 a) C+ K) J% h6 C6 x8 o6 e- t
/ j1 @3 Y% _: q6 q7 U% F, a
## 背景
* A; D% ^. b: |. K. k2 F7 s7 w, A7 S2 h
### 需求背景
# M4 f2 u" G* j/ m6 W- Z5 v5 `9 V0 R0 y
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
2 {4 ]8 |6 K2 U9 F8 ]
" a# Z4 R4 p7 |& s但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:
# i; T% C, w$ @7 {* a6 L) {! V- i$ Z- j! e
* 导航不理想,极大降低了用户的使用体验( g# _5 g1 Z O- x! v( d6 r7 X
* 制作修订过程复杂,极大干扰了制作者的热情
' P, _% n4 e3 D0 X8 q9 p! p d* o4 G1 a4 ^' |; g; {- ]0 z& A
这完全可以通过工具来解决。
$ U4 W0 h) k# x/ X0 B& J! H- `- w
+ s& [: s' c3 [" ]; e% l2 S### 程序设计背景' B; }$ I- O5 J- |2 n
+ ^. k5 q4 E3 V" ]+ R4 [) F# j- c本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。
" ?0 `. \( k. Y& m& w, Z6 U1 h- E }; h" h
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。: r8 s; z& I6 e, Z B
* B/ F q7 Y1 h5 S& C/ d
非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。8 f% [ B0 D1 D7 z r4 B& I' w
6 G1 X9 M3 _. A3 K6 J
## 解决方案2 h1 W3 f. o, w
1 S: D: `2 `3 H! n
基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件! a1 b! K: W; s
3 j B; d# \1 |, g H, k
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。* ^! T3 ^( M5 r
1 M T9 [% b) y 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。
, j5 M8 I6 F8 f" t4 j! o3 U( Y9 C7 F8 \! O4 o3 m
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。% z8 A: s5 k# d; x
& i% w4 p' V$ ], I* p
目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。% c* k2 t7 ]! x, Y
1 y' g7 \6 c& `4 e" |; n1 \# j
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
" p8 D8 m: m2 n' I, j: x' T4 j0 D( J5 ]+ }9 s3 Z t6 G
目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
5 ~8 E+ x8 r9 W6 U
3 J8 S" L% [) `4 m1 n/ ~4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
+ \" k6 ]: I+ ^6 t- X0 T0 T& {, [' V: Q
## 程序文件及安装 J. W( D; }2 t
- B8 |, s M \
根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。* k# `. v* C) }3 B+ p
# u6 }3 k* ~: O7 g6 a# X* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
% ?1 _3 p; B/ P9 Q* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会+ E" N; X3 Q1 F7 F0 w2 E4 l
* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会5 {7 M$ B$ [4 `; ^
- q& ]1 \% m/ T" M* [3 E
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。1 Y% @9 i3 D) B6 ? S; H/ v, ~
9 k' k( x& C" }! I) i
## 体验案例“火星词典”0 @3 B, G) T7 q1 o& N7 ]
1 k: d1 C X0 ]1 W) ~
为展示程序的特点,特制作了“火星词典”,供观摩使用。5 x4 V* S5 m7 W8 V; W
. b- t: q; N7 `* a; p
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式' Q( b2 j1 I8 }+ t4 d
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息2 D- E! {. c9 w
. P e( g# l! g3 f: [' d/ y/ \案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。 `& H* o" r6 C0 n9 b
0 P/ t* J' K7 q8 T2 l6 l
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
7 O. ?( F, ?6 t5 _: m/ ~ K* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决! a! b1 j& M# \' `! J& z9 l
* 之后你只要照猫画虎,即可制作自己的图片词典了
7 h2 G$ i( l$ N" } u, r/ Z( S$ u
3 _5 T- @5 x% Z, D* M% F* L2 Q9 O## 使用说明
$ m6 r0 ]1 w) u+ o; Z1 w. m" {6 n/ A+ j a: P
### 极简使用说明
( n- E1 q6 K8 m J. f" E8 Q; y5 p
& s: H4 Q6 {( f* u$ B打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
5 u4 Y$ C8 ~+ l6 _0 K9 V8 Y1 F# [. P2 c5 U3 ^& ?- U$ X7 J6 }
### 概要使用说明& r9 I' A/ r8 X) \% u {+ S F
+ X4 ~% O/ f/ W) H8 E* r
1. 按格式要求准备好词条文件" j+ W' K% C! ~2 H7 b! q% y
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数9 ?8 O7 ` f, R5 A9 f- o
3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。# L( L/ N2 w) T* ~
: M; E6 ]7 e/ z. g# C, F### 详细使用说明
% G" G+ Z9 t0 M" ^- s% d- p J
) u) }: H. ]$ {+ z* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
) c9 w2 t- M: X6 W5 B* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
* t5 l( W$ s6 U0 G
* Z* U9 G) n9 [. S### Tips: 使用更便捷快速的命令
3 _# j; @5 M4 U3 m z1 U2 ?: o4 `: q2 v8 s
* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦* V p# m& i2 I
/ Q- q0 U/ H" A$ Y9 ]/ ?7 s+ {6 R
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
+ ^+ ^, ~5 a; P5 n; f2 a+ N0 G; V5 T/ |. @8 {* r
* 那么建议使用如下更快的方法(自动寻址):
. N$ H1 s; s/ b# g& z+ H) K3 |1 t% L: ?$ T T1 v
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`0 L& q8 L; Y& `/ y6 ]5 @
5 n$ B+ S; ^; g- H$ n
甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`& ~ s- Z0 N/ i+ }% i5 X
2 O) G4 `: F7 j4 P6 @& [这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。" m0 C: H0 C3 ]4 S. L S
1 v9 i8 E" [9 _1 i/ \
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`* z# _0 _, s0 j
# ?8 t& M! C; j若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。% ?. |( O, g2 q; V) Z" e% D
, x% p# S3 [# a- F4 k- \' l
3 H2 S! B6 O6 _) D( k### 相关FAQ
! Y8 G4 ]: ~4 U' D3 s7 T9 h
* z: K6 V5 Z" c9 S) F! a0 P& f1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。1 T5 [5 ?0 v" R( O5 {. Y! s
7 b0 ^! b; E; t
* Q: vim出现乱码! q2 H0 y. S0 _
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`
& _# u4 @# j N* Z
$ J3 \4 s5 J' W8 c9 i- `7 b* V$ h 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
7 f* e% \) q! Y# N9 ?, J# h* \) V
4 D2 u: e9 W8 o8 e" S G1 s2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。6 I9 t! Z& u' x4 x: q
- Y9 w2 o9 L! R## 社区讨论与反馈
/ g8 ^. a- U2 x. a! x5 d' P( p' G" ?: o& l3 @8 J( j+ N7 |
* Github: https://github.com/VimWei/MdxSourceBuilder* i% N& G! S+ }7 n7 o9 R3 H- K
* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html* u8 q0 ^- [( Z$ [1 V
+ ^* _# e* `1 L6 ~
## LICENSE) R& L# E- J: U* G# v3 s5 c3 A* H
( J% D1 v" j" @5 Y9 [ g
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
4 D& Q, R; P" y2 B% j$ P) }6 u7 I- X, K* Q) b7 T/ O; P
|
|