TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 6 G% V: l# M3 _' F* V$ y
2 n9 S6 [) |1 F! `! J. `8 h- s# MdxSourceBuilder' e/ |) X6 {+ D* U
6 Q( g9 p0 Z4 L: Y3 z2 c一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件5 E( [, S. J4 m
. D7 h+ P* W2 @0 J' s' F+ a
& u! l2 f3 b8 H1 H: a5 }, H# w0 B## 背景! A7 v4 K9 H5 x2 }7 @& h" |( R
7 w, [1 a9 c$ I0 R1 h& u### 需求背景
! r" X5 o& z$ b+ n5 p( p. E7 e
3 v( Y- H& ~! x, W% E- Q" F时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
, q3 r R' Q4 J \, r4 z0 a' Y+ l# `7 U; u- n# J& K; G
但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:* L& u* y; U+ w" Y/ f$ Z
% t; n8 s1 x: o K* 导航不理想,极大降低了用户的使用体验9 k) s5 w7 |/ Z `5 i/ d
* 制作修订过程复杂,极大干扰了制作者的热情
9 H% j, Z; @4 }) p! v) |5 o
& ~7 i$ U; e; u+ }这完全可以通过工具来解决。- Y" V' i. O+ _7 u9 |
3 K( G$ R8 N5 [6 v7 f2 C
### 程序设计背景
/ Y7 S& I; z3 g: z1 ~9 b! B# E/ W7 ~2 z- @8 n' d
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。# Y# `. @0 t6 I/ o8 F
* y# t( ~3 E( E2 ?& [+ a: e本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。! s/ y% p' p! E) X9 b ^4 _, i
0 I1 K8 K0 N; p+ r. C非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。
: r, ^9 p3 H+ w( D: T: L9 c8 c& Z8 ]) b) f
## 解决方案
y) c: L l- G1 B
5 l9 }+ H; M5 p3 l2 e$ h; n0 j基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件+ [1 Y/ Y; q& `
6 @8 Z6 g9 {, P/ ?6 Q d
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。$ B" s6 y5 @* k" y( }2 p
4 u' g- w5 M! U 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。
; J" i0 d6 D* a5 d& O7 y' c3 Y6 \
0 F# ~! M4 ?7 |2 }& ?2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。0 s( T" l# m# T- g8 n
+ B1 a0 { P! c- u 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
' Q% l6 b& d7 e% |8 ~& }
^ h0 ?9 O3 w" C" M8 ]8 l3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
+ p; o( |/ H" X7 a* I
! H0 M+ K4 \. Y 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
; l# _, |4 v( z6 D/ n% E6 y+ B) |4 V3 N) e
4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
; z" j9 P9 z O1 _9 A# K/ N: T* b# |+ d! r0 G+ W* }2 A# X$ i5 T
## 程序文件及安装) I/ U6 d& d q
- ]3 G9 }8 E8 r) m. D
根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
6 Y2 ~ X( L+ O6 s2 p# k$ v) O( y; Q7 G* e- q. Q/ B7 T
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会7 H" M7 c- g/ `3 K' o
* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会! T: j, s V/ N: [$ s5 r7 S2 M3 k2 ~
* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
9 O' q* l w2 F0 j2 S& C) a3 v3 t; Y7 F: v1 R1 D7 q$ n( Y( y
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。1 p2 c4 X4 n0 t9 c+ H& S- f
5 v- |& ^* z( x% Q## 体验案例“火星词典”% [8 _" p/ ?' y7 I" J; n
. Q v4 ^' o6 j' o为展示程序的特点,特制作了“火星词典”,供观摩使用。
" \8 s9 ^3 G4 m2 a# A9 n, @4 d
/ h4 G# h4 a" Y2 P' o3 j* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
+ A# U/ K0 E! H' g h* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息1 B- s- }! H% E4 E3 Q8 q) c
2 ?1 V7 _( f/ v. q
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
5 f7 N1 k8 y4 b( r; V6 I9 t6 m m% G+ ?" _. z$ f' g6 p
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx# W, }# ?( v5 ]0 ~
* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决% z7 d1 ?: J; o& K* N: U$ x4 D
* 之后你只要照猫画虎,即可制作自己的图片词典了
) H2 J! a: P3 G) w2 v9 C8 y7 t& E8 X: h$ k3 n3 H
## 使用说明3 F- U" U4 i3 _: Z+ z) C5 y
( E, S2 o F& U! s. t& p
### 极简使用说明; C8 ~/ K q( }4 r" {
% }4 q, U! f: w$ B$ X5 }* }打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
6 n) v" C) @8 H( \# E5 ~; n- N2 _& f0 r0 j5 L
### 概要使用说明
* R1 q- g: Y6 ? c% O: {9 T' S! k) S! ~8 ^: x( |
1. 按格式要求准备好词条文件4 N& J4 d! d1 l5 f
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
" u3 M1 C8 F+ N; R3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
/ d) _4 P! m/ b$ q( I) J% l9 e& t1 r& U5 n/ q" r, F, O
### 详细使用说明$ W! k. K$ c/ B3 ~% @! J
9 v' e( R% X% ]( G( _2 W
* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
" V, r- A' \3 ]3 Z* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。9 G" m" V. f$ i1 W
. y8 t8 P9 M4 _% O4 c5 W9 S
### Tips: 使用更便捷快速的命令' W( A0 F$ t9 E
4 T. r: J6 g. n
* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦9 ]) o: t4 \: k* b
; e! b) R9 J8 n" r6 ^& N, ]打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
" ?4 D: O3 j% h( \- A, ?* J+ @ U! M& R* p2 i
* 那么建议使用如下更快的方法(自动寻址):! l4 M' J: Q& [2 A/ o* ]2 h% E( n
' M) O8 g; t% S8 n
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
& H: t p+ P3 n7 `
+ e1 V3 w+ y; o9 c甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`- K7 u, U: U9 U1 a' S2 j. E! q
: Z' E, \) Q' y& U a Q4 |- z
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
2 ~. B5 G0 ?* `
7 L( V) J, D) K$ F: M6 I9 {* s也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`3 @( `# |" S, {: _0 Q; W8 v
8 v2 B7 G9 S9 V1 [3 s5 T7 q3 p9 y若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。, M& r4 V. V# P" S/ i" s
" t" u3 Y f, R; _* w& @9 K. A& s) l/ O0 x' b ]4 p( d7 ^
### 相关FAQ
' {1 A& E* E& _' t3 x2 Y2 u* x) P( i2 x) I9 Q5 A+ r
1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
7 e# Q3 i6 E$ ~
5 T& }2 W/ ~6 K5 C1 x* Q: vim出现乱码- [5 }" i% u$ I2 D* o
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`- m5 f. q" N9 L0 V. E+ ]+ ^& ~- Y
8 i% U, G0 B& u' y" s3 {+ B
其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
D0 @% p4 {7 E7 D8 H$ q
0 m. x6 S1 U' U; y. z, o! F2 x2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
/ I& H* A: ?, R; ~. a( t+ P, ]1 ^1 C, M! G- Q- C
## 社区讨论与反馈2 p) E/ L; u, `0 D
0 i' {+ @, X8 j. O7 S5 h* Github: https://github.com/VimWei/MdxSourceBuilder
; X! [ f; R/ N3 k* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
7 ` B& U8 ^& r
$ S- B/ c6 O6 Y2 v) g6 G## LICENSE
4 r8 Q% a" T/ u6 p( E8 z
) t1 O$ @( `+ m0 H; D) t! c# `[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
/ p( Q) c. q! }" y2 w: h
/ r. {% g/ C6 ~# ]2 D |
|