TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 ; O' d; ~0 B9 i9 E: n1 A" r0 n8 \
2 P* X b7 u2 ]7 g- R7 T {# MdxSourceBuilder7 \8 r8 |2 m$ A" i4 }# O' `
) A9 G$ l8 L9 w( |
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件: X5 h; C+ w* j
7 b0 p( f$ @4 G: R0 `( J
4 |* i; d6 \) d5 a## 背景
8 ]& ?3 T" P# P r4 S5 @7 Z' L5 v4 {
& _; f& i, w: b9 ^* j3 |# \### 需求背景
0 r1 ~6 G" b. Q( x! @! W" v
2 D7 x! Y% [7 ~6 U5 k; e时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。6 ]6 L) @; p" n3 n1 V
& D% m. Z9 ?0 D k
但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:
7 T5 D0 R# j4 A/ m6 v: B
- ]5 b* c ]. T$ F) A% Q! `* 导航不理想,极大降低了用户的使用体验
5 ^, U2 M5 z4 ~* 制作修订过程复杂,极大干扰了制作者的热情
1 V) K& z9 y7 H/ d6 Q# v' g6 {
8 _. j; k5 w! J# o1 i: f1 [( Z! E$ s这完全可以通过工具来解决。, H9 E# i4 q+ }
\3 @8 A. N9 O5 {( E### 程序设计背景7 n4 f7 T2 K! d( n! Q8 U: `
- T( p0 d, W' T4 A7 N+ y5 h
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。1 M6 C, u1 i$ h6 R) x
0 ` S) \+ S7 ?% B1 g, p& T. Z本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。- T9 |" b: z9 ]- O
) M) n. x* H! `" Q! h2 ~% H
非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。 O& D L7 E8 J
4 o9 d: X+ F" W# p [
## 解决方案# U- [5 ^. \" N1 q; u$ [
/ Q; R( ^/ T/ w. ^3 h基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件) Z; c6 A( z* m' d6 W) I
c; d+ f" W& q, `- T1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
: o& X! k% N. I. X1 n+ P
9 \& R; _ m7 n 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。
" q s! j- i, H, K+ t$ k) ~5 a1 A" E9 n* W- L# ~7 F" D, ?
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。6 u4 ?2 l# r j
! c* K+ p& _* {# | 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。' L1 `. _- m' t% O* k
7 A. S9 n: m- `4 T! z1 M- p
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
; Z+ s& _; B* O( i: p
! ?) I- g+ N/ ~3 `3 ^ 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
9 O+ `) [, l7 k6 \: b; ]4 l: I- ]* P" \: X& e8 I, `5 n
4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
5 r: W, j3 n& v) H& W9 Z J* v9 f9 K2 ]& y. X5 Q
## 程序文件及安装8 E0 Y6 I7 x4 y1 ^- \; |
- I' g1 Z- }0 U根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
" H/ x# G3 a# Z4 L% E8 z: \- ~' Y
7 P L6 s% ^& B5 @' A4 P/ i& F* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会. S. H( j) [8 x
* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会, `% z8 h! K: O) o% q/ E4 Y% T
* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
! g) `3 F/ F, l/ M+ a" y1 t; { j, l; B3 }) P! |. r
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。) }) _1 Z7 d9 w1 z( h, i' W
" u% Q7 d$ Y6 \# H! R$ G## 体验案例“火星词典”
6 O: s1 G3 J. D& i% b; \9 G$ V4 t6 j6 O. c8 `
为展示程序的特点,特制作了“火星词典”,供观摩使用。
7 k# S4 G, [" Q4 {; Y6 Y3 l% p
9 q7 i9 j, Y0 d0 F: o6 U* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
. U1 s/ D& @5 b+ i* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息5 c& ]# q% k, _- T9 {- Q
9 b5 \1 U' f4 M5 m K0 i: r4 q$ x+ m
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
2 g5 h% a% d& Q, p' n$ s9 q# R6 {) u4 s1 ^) d; b$ G$ E/ Z
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx! [5 M1 {) P* n$ O+ {. B
* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
6 @) L; Z5 _7 c( q9 F* 之后你只要照猫画虎,即可制作自己的图片词典了
& o8 r. R# S- t/ ~; r* q; `0 k& I \8 l1 D- q5 l6 l
## 使用说明
% C+ j% e2 z4 Q8 _6 X2 z/ P' d8 B/ k4 R5 Q( ]5 a9 l
### 极简使用说明
7 `8 a4 R0 _! m5 o0 `/ b' j# A. X- P2 p+ w
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
6 }, \& j3 U3 `8 h7 ^" L' N: `& c0 t: U
### 概要使用说明1 c2 L y) |5 ]2 n- o$ _
5 M, ^7 U7 Z2 O3 E' ?1 e3 y( b1. 按格式要求准备好词条文件
7 B+ O: \- Y! b% k2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
+ \ h+ Q1 m: n+ t4 u( H5 c3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。0 y9 S; O9 j( } K9 T6 {4 o: {
3 U+ l6 m- W1 s. Y% k9 [5 u" r### 详细使用说明
; ?: Y; o; [4 c( f6 ^* `6 R, p3 K( A+ a8 r \
* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。7 U" B4 U& ?0 P: f7 H& Q
* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
) x( V6 O+ s2 Q$ y) N$ ~% b; D# s. L9 M1 w% \& Z
### Tips: 使用更便捷快速的命令
; {0 f# V9 z" K: C# T! q2 A$ N: q9 ~% x: S4 C5 g
* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦+ ~0 R& U7 j' h6 u. ^$ @
3 l0 i' A& L2 d7 l3 z5 D+ e7 A打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
! }' ] X* C5 _7 t( l$ Q. A
" g1 U) b' C6 K* 那么建议使用如下更快的方法(自动寻址):) f5 J5 Y# R. ^
1 j/ z# z& N* [0 P$ O用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
7 _4 z0 K2 t: P0 m* B; Z/ u+ R, x$ Q& P' e1 Z, ?
甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`
9 B, P8 Y0 L* ?: Y6 }9 U, n$ z: C! w7 M2 r2 X
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。' c* O( E4 x" d5 T
* s% x3 y2 g; a% G' o" L也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`
# p% c' x" C3 J- C9 z
0 j+ g1 n7 _" M# p, N# R% w若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。5 n5 g; q5 a- ?: }
6 H) [( ~& B( q4 c
" \' R( z. U. f9 o: t8 t }
### 相关FAQ5 h$ d; r) W! O$ Z3 { E9 i
) Q$ K. q! _% j
1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
: u' M8 s7 C7 E3 Y6 c& y4 x9 g# L0 M/ Y/ C9 ^: ~, {
* Q: vim出现乱码1 |+ c! |4 X% l' h' b2 }1 C
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`; I; D' m! O+ ~ d7 w" R
+ v4 j- z: M8 i7 @& G
其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
/ Z0 K; |2 F% h6 _5 n& ]2 X+ w
A- d; d8 ^9 N f) I. L E2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
% P; Z S/ x! f. L
" h. m5 X& b2 g2 P/ V## 社区讨论与反馈6 o4 R9 n9 O3 L; e6 R7 a: G) `
6 A9 Q* [' {/ U2 e2 ~! L+ W3 ?
* Github: https://github.com/VimWei/MdxSourceBuilder- P0 [7 s- |5 q/ S2 {+ x
* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
$ e' I/ [; _0 v2 H* s! |( P" i+ g) g2 ^" Z% \1 I
## LICENSE5 T4 N. `/ @% ~0 C; B" K
" I6 j& V* B; U& J
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)2 ^; w5 P2 K2 F: p
C8 ~' B) ^2 }+ g. x! j+ a7 o0 D
|
|