TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 7 ?4 E. Z: Z# Q% U
/ R( p- \0 m0 T# f: P
# MdxSourceBuilder/ {7 C- h8 Y- E- v& O, c8 H
|7 Y9 D' F6 d( q一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件. L V! E9 i8 v: w
6 _ z# f. K/ A, H) c) [3 X' _7 C% O; p- Y9 F: S. a
## 背景0 ~" D# G9 X) c- P9 w. q
" s& n; K5 d) M J4 y' T( L### 需求背景: l8 C4 h$ y- k6 ~ m5 r
& l5 u7 g o2 l: m& Z P2 N
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。8 @4 Y. S7 w, C, k
/ b! d; o/ D' F1 D$ B+ P
但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:
+ m: K7 x% w9 j0 @6 M u. m: S0 q! _' _/ g5 x- ~0 V8 A
* 导航不理想,极大降低了用户的使用体验0 S% B/ {/ ?/ r I$ X) G+ ~* {
* 制作修订过程复杂,极大干扰了制作者的热情
" k$ L1 j( O1 }+ E6 a3 l+ u* K; y+ }) J- q
这完全可以通过工具来解决。/ B* x& ~. {6 T" H% E1 h Q" o$ L
- U |" C8 R9 X! ^( a" x5 k q### 程序设计背景
6 F5 }+ \6 j" g Q# r% x& [2 q' l, F5 V2 m, y- ?" Q# C
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。
) t) R: h2 A2 Q, D5 f
2 t" b( N6 ^2 t4 A% P, \7 v本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。0 Z7 q6 v7 X2 [. x- r! e! E1 M( _
6 G$ l* Y* Q. k K非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。7 ^- t+ \% ~8 f: m* ?: ^
. H% R# V: C2 a) \
## 解决方案
9 |: Z- Y! ]) T5 N+ h) V* W$ \ ]1 T+ U
基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件/ |" {; S; S9 w& Q8 _; {0 V# \
) U+ R4 U" L( s) Q6 P, m" v1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
! r; q# h" l) H6 Z9 n
+ [" ~2 j8 Z% N, x/ z+ j4 r 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。* l% E; j) i$ K
( K' E* J0 B" k( u0 ~0 A' v
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。: X% \0 @; S8 h- h. w
8 M4 V! C" v$ x6 ^
目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。3 x& c1 W4 K3 W* i2 a2 a
0 \# L. z- B Q$ |- ^" f. [" l3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。4 i9 z) J8 a0 r. J% \+ H
" {6 j, d7 B; Z/ c' B0 p5 O# Y
目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
% x3 Z# q* Q2 A2 `! t5 G* L
# r; @* t1 ?2 [4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!+ Z$ v5 p4 t; O; p& `" g8 g8 Y
# l6 n9 b- y }. a
## 程序文件及安装& c7 s8 \) L/ _) L9 A! Q
^' Q: t& t l# B" _: A根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。$ z$ g1 @/ P: T4 d+ _- Q
8 b. [1 o7 ~1 S8 a" k5 r0 A5 J
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会3 } k7 A+ R0 J$ L. V* P& R
* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
) C) {' \% e+ @* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
K, n, y$ W0 y6 F1 i9 A+ E" ?$ [- J- F5 d2 ^ c
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
" ]) T1 L, C! z; K4 ^% }5 I) b c p% `7 T, G
## 体验案例“火星词典”/ `4 z7 d$ [7 m( \; x. D% ] L2 F, M
# f; m# M" k! ~0 p" [% r# S5 b为展示程序的特点,特制作了“火星词典”,供观摩使用。/ c% c6 b1 O# r
) @ Z. U9 `, G* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
$ n, d3 @0 H! N# U5 ~9 x6 {* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息
" G7 K3 N v- N( G1 j) x: U6 ~7 b* j' H) p: z2 t
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。& A$ U) T8 O# |7 @. u2 W; e
6 v" U' p; q6 @( R* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx" C( o2 z5 M8 H9 G7 Y( @. C- y
* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决/ Y3 L* [7 ]( ]0 j( D+ u6 C* V! g
* 之后你只要照猫画虎,即可制作自己的图片词典了
/ @2 }! ?: P# ]( R7 [- F" O, f4 M! \" O( n
## 使用说明1 N! l/ h Y. b" A
3 e; v2 O- ~# n* F( C### 极简使用说明
2 T' ]: j: S& H( \: m. V9 N
" O% h* v7 R$ G$ i7 Q# r" [" [打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。/ m# H1 P' k' h8 S# i& d
( K$ E/ A5 s2 F- Z. B8 Z9 J+ k
### 概要使用说明
& p2 a# J1 d8 j. p) C$ o9 S: g6 ?* O, H3 H
1. 按格式要求准备好词条文件+ L9 U- i3 N8 V
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
7 |6 V' X0 T. G$ B( }9 Y5 [' E2 H3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。4 ]( |( ^+ w2 f4 |
& S( H. @, \+ Z' T' u
### 详细使用说明$ b& w7 K1 E& Z
& g: B7 Y9 w/ u* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
4 i- K5 Q4 R$ d- _" X# S ^0 N* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
% {7 N/ E& C1 S: q9 V( M7 D3 Y$ l2 Q3 C: ?1 Z: i4 ]/ U
### Tips: 使用更便捷快速的命令
/ u9 n7 _0 |, d6 }! E
& }" i" ?" y/ Q1 S0 e& w ~* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦( |* a+ k& ^# C3 B" C& }
' L7 \$ A3 B0 k2 G% h& D+ |打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
n% B* l# D( r! Z9 n* _$ L4 `' T+ Z# y( i
* 那么建议使用如下更快的方法(自动寻址):( Z" v! n5 g' N& |/ v9 K# ^8 A! n( f
5 H1 k1 U3 P2 m6 [- a用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`# n+ V( B9 x% f& M
" Z9 m( W- W ^8 H1 _0 F甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`
5 i8 z& P' _( _* K- r
! o" v7 G) S( Y6 S& ]这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
. h$ |9 y- @: @: M/ U0 ], p/ U$ g) f3 h+ l! s
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`
/ P# T, S6 j5 Y
! n; l5 P5 ?% K% D+ i若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。5 |( n/ s3 o- L) V- U& _
. q( i/ F: ]3 F; P1 g, }' V2 q- \5 Y; U
" |- d" Q. E% ?### 相关FAQ2 c8 ?6 e( K/ }& c/ @) T. G( V+ j
7 H, f/ I7 Y D i- T1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
9 g* ]9 G, h2 d: P6 a% v: t8 T5 b, p
* Q: vim出现乱码
, K" E2 E2 _) X' |# x) ]- Y* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`2 u' v8 q& C7 `, s6 a- n/ \
5 e4 T" I6 a1 Z' k9 a 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
% j: P* F; A( _5 U+ d! _- C0 ~$ i: [3 U1 a' w
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
& [2 j2 [- C/ ^" _2 e8 [; I. f$ U0 i% o |
## 社区讨论与反馈& H" U& |3 k6 n( i6 x! f0 S
) G& S& y5 Q0 f E* C" T3 a$ e" B$ n' i" L
* Github: https://github.com/VimWei/MdxSourceBuilder0 g! p# P* G' U9 L& ?' r
* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html6 `$ p0 A$ Z7 M# c, ^0 b
/ L- K9 f' {) I8 R; W7 Z0 e9 Z## LICENSE" B- J( A. ~2 q( `7 d
( y4 S1 {: K @5 W. n1 ]4 E$ i0 K
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
# d: `/ l# d9 C9 P- }8 Z- s1 Z* y# S7 j `% [0 c% F2 w
|
|