TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑
5 ^# [, x8 B7 ?$ U5 T: D0 ~9 c, K' G
# MdxSourceBuilder! K# D* s, m- }( e# D; i& t9 E
, p3 e9 R# j# c h0 u* m& g+ e- j一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件( {% @: r4 N, i8 t+ n
+ G4 x7 P# r/ n4 c8 K3 [) z& w5 u) r3 D* i/ T! p
## 背景$ N5 }$ g, [9 i. e
) P! \" n, u: P- r: g0 w: S( Q
### 需求背景. ~' Y; s$ r6 y4 e: {* v, E
: e( ^$ |: ] w) _- h$ e, t时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
5 Q a! ?/ e/ q; S0 c9 e+ K4 |. X
2 f& ^2 a' I" q8 k6 Y$ F, y但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:
; G7 j( r5 a( \3 W. Q. t5 q' ~3 \: l4 _# {. o, }" o/ l- p
* 导航不理想,极大降低了用户的使用体验. M" M& g' A- K3 F
* 制作修订过程复杂,极大干扰了制作者的热情8 A4 J. k" i1 H
; h `$ F( A, O" Y, a9 K% S这完全可以通过工具来解决。4 k# A& f, [) r7 ?/ @" E- N: l0 g, R
( L! q5 ^. E/ [8 T+ a9 r### 程序设计背景
) i5 h8 r' u' U1 ~/ {: D+ j; S t( j+ D1 R6 f0 {6 L
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。" F* U, L2 I2 g0 ]2 v
4 c/ q& X) X8 G
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。
- E$ z. }+ U+ o+ U
$ c) {' Z( L2 h: |非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。( ^" j% Z/ l S; b4 @* k# l" H5 S
+ L; n9 o; r1 s5 Z* [: y9 H( Z
## 解决方案
4 D8 v) G% s- v* Q& w# g7 F( c& F' K% e, q
基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件
" B! i1 p. ?6 ^
2 C$ ~; I2 X9 E4 @7 w2 v1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
& u6 U4 o5 A. r* b w* w
/ e* G, s2 Y5 E7 {9 d" Z! ? 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。' G n; e& @6 P8 J2 H+ o
1 t" N9 e9 |% K! N- ` ?2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。. [+ A' R0 U4 `9 m# H5 ` e/ L
4 d2 F" S+ [! p5 Y# P, P' f: R
目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。. W1 P6 G5 s4 @ z& s1 s$ W6 c% ?/ n
$ j- o; ~9 [. x0 P
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
: H4 ~0 c: G3 ?: t% w/ B) c& Z2 P/ A3 Y @: T
目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。 F% ?) a% _: Q" Y
) n9 S& M( l$ h7 E9 @# j
4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
/ o3 e/ s$ I* ?" B8 K0 C# _& {# x" F' ?6 }
## 程序文件及安装
! Z8 }6 L* A( E
8 L7 v+ u' Z+ t& w5 ] B9 d {5 m) v. z根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
9 J4 I3 }9 F0 q: ^9 s+ h$ l8 H6 u
2 U" k5 c3 i9 L! }. G5 n* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
! P: O m; o7 B/ M3 s) R; ]* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会) K5 ^2 m" @! y- ^; Y
* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会' G2 b1 Q, |0 q& [
* x; z: N j. u1 e其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
) u9 _) p0 X8 z& `# ?: B0 I& @ R) [7 x8 n# ?
## 体验案例“火星词典”
3 \' d. m& m& z, a: C
& F* M3 K/ p- V- ]' R5 W为展示程序的特点,特制作了“火星词典”,供观摩使用。
8 V+ s# n2 X! ]8 u, y t
: q+ P# I# v4 h* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式/ y7 P; }. _: R: e9 h+ ]0 R
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息" F3 V# W% g9 b A" |
; ?( m! U" F/ C \* i
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。; T2 C% x) y* h0 n% b% a
8 k$ a# T) Y! X6 N* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
7 @9 V5 ]: e% t$ I6 `) O" l* d* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
4 |3 ~ _$ j- B7 o1 i* 之后你只要照猫画虎,即可制作自己的图片词典了+ K' E9 p6 ?0 R6 d" N/ O9 F
2 H* h% Y# b! C0 t/ M# y9 q- y## 使用说明
1 u) t; H/ e. m. |, {7 c9 n% p" J- m# {
### 极简使用说明
& z- x6 ^. e) _+ U( R5 R( j% \2 \
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。4 o8 z! x: A$ [& Y
, F r" ?# Q6 A9 {
### 概要使用说明
) B" l l: G0 ]3 S7 u& L( i4 d. f; b& g* w3 C
1. 按格式要求准备好词条文件6 k. K) r: b. [
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数, V# k4 ^. P" W( J% s7 b% o6 T4 B" q
3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
5 F: o! K" ~! R; k- |
6 A, N( O, H7 A6 b### 详细使用说明" {8 D7 B8 b5 ]) r, X
& x6 j/ C$ b2 Q: i7 \- \* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
; @; x8 b. {* K, Y4 x* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
$ p' g; \9 k8 c, {2 R
' K! m2 E I+ W7 M" a### Tips: 使用更便捷快速的命令% O2 F) {- v4 z9 F; G
* S8 @, M; _3 X* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
+ G# m& v$ c: s! c g
- w g# h" s# v5 N3 Q5 A# ]. D打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
1 u. s# b& T. {: m( |7 ]" {2 O7 `, O7 H: k: C( [6 ~
* 那么建议使用如下更快的方法(自动寻址):; X1 {$ y* }( ]4 ?6 d+ B( p
7 h' ]( O& L T用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
Q+ U1 Q- B0 h; [+ O4 S8 t# K" _: X9 l4 a- O8 f; [# ]
甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`
- \: V) D! {+ d8 d) A2 k8 R3 c5 j
- s' ]- l( S8 v: d9 ~6 x) u6 o这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
2 D H/ T- w: o7 k! V; ]' `2 w. d# Q: { C+ \
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`
/ P# h+ M6 S- H" M4 O+ w3 W' ^% ^( o
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。( }- s; z, l; |" T4 u9 V
. Y5 [: |" M$ a# R
7 ]$ u: M* E8 d$ A1 D& Q
### 相关FAQ; y& F) `& V8 A- {9 ?
2 }; d2 c: C A. j5 m$ i1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
' H o: b6 w6 \ e
1 l2 n0 z8 o- {3 h" X' Y( Q9 c* Q: vim出现乱码$ T. t. r I4 |; q# D5 X
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`! B+ J1 ?0 ~& Z
9 P: l8 J7 h% Z+ C, o! x o 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
" I! J+ H* }# d
- \4 ?7 k s! Z$ h" J6 g1 v2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
' X |0 S: X/ X; E& a( F0 B1 |, V! A) t) ^; c
## 社区讨论与反馈
! D, F( g1 U7 ?9 [# @! e; B+ O- u$ S2 ^! B+ V6 E6 [
* Github: https://github.com/VimWei/MdxSourceBuilder6 o5 S N7 Q2 n6 [" L0 W
* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
- }1 A3 T) t5 i, ` {
4 _& F* t) ~" w' T( r0 u## LICENSE
. y4 S4 e3 | d2 t5 h5 l3 v2 o7 J# q8 c/ W2 b+ r
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
9 P+ f) z+ L0 R% C; R7 s' w6 e4 C- q7 S) z
|
|