TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 : U7 F1 E1 j$ s
. p( x* p& p/ U9 j0 U
# MdxSourceBuilder- y6 s0 m% Y, E5 ^; z0 v
) R9 A# u9 J8 F; X( S* F2 G
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件0 m% M8 q I' F) p
& j" z; s7 x& X! c+ C
8 E, V2 v+ p! `) r' w
## 背景) o& K6 N4 G, h: V/ B
+ m' J2 z$ ~/ f
### 需求背景; v9 Y0 \) w! @$ v. |5 R
9 z& ?* Y5 k1 o! M) t
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
9 G* E9 c5 ~1 v. Q$ k
6 J$ Z5 X, `7 E1 w但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:; v4 \- A: g0 [. A2 N
* \( K( R" Y. a; b l
* 导航不理想,极大降低了用户的使用体验
$ J# z& @7 K: O0 A* 制作修订过程复杂,极大干扰了制作者的热情
- u8 [7 W n9 b9 Y
/ u2 p" I* v- a7 N: [这完全可以通过工具来解决。2 v$ B" J0 U: d# I6 U& |+ u! ~
. n8 B( _6 L8 @### 程序设计背景
`( g: n. e2 f( b: R" |9 `3 ]( c3 @' s
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。0 ` R5 m% ]+ T9 V
L& W6 I7 T) q w# z+ o本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。
/ ]3 G7 b* a/ r, G
. b; I$ }1 K% d$ J# Y. L+ U非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。3 Y& O* d8 Y7 w3 `1 {0 A
7 M; H% V* i' E/ I+ \! p## 解决方案9 B t( H/ A5 [* _/ m J1 v0 p
; E# i0 r4 F. y* i) M* Q
基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件8 W d' r0 Y' N/ \# ~/ n. T
9 ^: u0 w9 F. f: h6 H# L+ x- k1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。1 S* d' m6 `3 G6 J h7 K
" s. o; y; ~& r: p 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。$ Q4 s% x( ~* F2 `
/ l9 @$ P0 T7 {8 S2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
6 k( K0 `$ a5 w+ m) J6 x
! U+ A! x% @8 [8 V! a* @7 e 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
6 S, I6 ^- Y }" ]
4 @4 I1 y& i9 ?: k& C3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
~+ J8 {" t. r4 S( @6 ^
2 z: I& l/ c, n3 k2 h# E: \& B 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
& k0 }) ~0 ~, Y# k7 m0 } _
; w0 P$ N @1 u) J7 D1 d9 S3 F) v) {4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!. w( a) h1 g# _$ @* J
% V* w0 f' G+ I( g, ?## 程序文件及安装
: a2 {" p6 G$ B( }( Q8 f/ s+ p! F$ z4 \& m! Z6 `( ]- s9 `
根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
, K9 \$ Q! L5 K1 q4 V7 W; \, p0 |, N1 D5 `1 g5 b+ k
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
' s/ p0 m/ \$ T; T( ~, m* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
- W6 U3 Z* d" Q) V) O" G* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会5 U7 l; W, P5 Q( y' s, o
2 S: Y& A$ z6 U* U9 k) w* r) P
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
' e! j" M9 y$ }+ l1 J- J( ~: q3 g+ {8 U: `; t/ i
## 体验案例“火星词典”
, Y/ I! j" C- E8 y
0 H4 V+ V: Z/ A0 s为展示程序的特点,特制作了“火星词典”,供观摩使用。 g/ t, r* @' W6 G% _& B% E/ E/ t
2 M3 b) b9 v1 E' k1 F% l* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
+ _4 k- f$ K. ~) d5 {' |6 m: q* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息0 ^* H$ G& p5 O' W' U- I; Z0 B* d
( }' n y% v" x3 R# P" c; u
案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
& A y) {' B) z7 R
2 {6 m1 c$ R- i) C$ l* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx4 A/ j, ^% f/ W$ _- e
* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
4 o! w& a' I; i8 I. ?* 之后你只要照猫画虎,即可制作自己的图片词典了' }7 m8 O+ u+ X z
# z- W ?% H1 ~9 B## 使用说明4 p8 o; v* o/ {
9 l6 d# J$ q3 c% u# r6 s- N. S### 极简使用说明
4 g( @/ F4 b; o3 l' L6 j4 X0 a, Q+ [7 i- L( Y5 j
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
! q; ^8 A& S+ n$ A7 x" O) Z2 B( [. D& w4 s1 h8 j# E
### 概要使用说明
, u* M- w/ Q: C5 S+ t: n4 G$ D+ A
1. 按格式要求准备好词条文件
- V3 F" U/ X0 V2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
( H0 x6 c; m/ B3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
% ?) F7 _& P/ _: E' ^1 Q- T/ d @$ o9 y; H; C' G
### 详细使用说明
' P8 H+ \0 l1 O, [& e
2 Q U# u; A. o$ t _* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
- N Y/ W$ y3 R! S. P* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。3 E' A) K1 {+ p! C: H& v& m/ u4 G
- J5 G/ E8 ^, o: {
### Tips: 使用更便捷快速的命令: J! m1 h& \/ B1 A+ v
! K$ H. k- w3 W8 {' B% ]* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦* R1 @; p& A( I2 W' D
j5 s1 d) e" ?7 j1 z8 U打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。 ~" m$ [/ d- F% s. h. ]* L- l5 g
: @( `: p9 ?% Z- J# j/ N1 R5 U- z* 那么建议使用如下更快的方法(自动寻址):
1 g6 z6 {1 n: B! E3 e0 a! r! j; y# B' H3 k
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
a& ~" ^# x) |8 B9 g% o
9 n: A) R8 `( R/ J% w甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`5 l; I: U& J0 {7 j8 G6 P
' ]: U- B) J2 b0 O5 R+ K
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
' K8 v/ x) p$ g7 n
) l( S- E: k1 \8 C也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`
3 R9 {! l7 D9 q: N# W z( V# `4 P" m) M" ~. O6 J
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
' C# ]* y5 j& ]1 V6 p+ y/ S/ [' n8 l y( D C3 Y
3 C% X. O. w, k
### 相关FAQ
3 {2 V5 |0 x9 V* H: n& }; M. t
0 y/ d2 Q3 p! O# A( _3 M1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
- q6 }' S( e+ p1 A8 u5 W+ ?, w( s. e& F7 }7 |
* Q: vim出现乱码
" j# b& W' r: f4 E% R J6 d2 q; h* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`9 }+ T0 ?6 S$ i! n/ `0 d0 ^
# }( e% T) g! Y5 O* ] 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验/ N; A8 x' _: q ]% x/ `8 T& a7 R
& c/ ?/ o m. W1 i: e, m! z2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
9 U F U; [1 J& z6 u/ i" u* s* z0 W1 U: z6 t& w
## 社区讨论与反馈/ n1 Q4 D+ K2 {2 C8 e+ Y
" d$ v5 \- {, Y8 {* Github: https://github.com/VimWei/MdxSourceBuilder
# a" G8 B; T3 p* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
6 d. A( U( ^2 d0 V; m% b* l3 U" ]" ]
' n$ f* w# x9 \( C## LICENSE: t- T" a. i: q
9 \( x _7 g o' r8 ?( J) ~[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
7 x4 q, e% P) ^ O- z) [9 Y5 [0 A7 [% v
|
|