TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑
9 N2 T, c6 x, `, T5 y& s$ ~- }( j* n6 b: \; {
# MdxSourceBuilder
3 q% x+ {# Z9 S) F2 A5 N) K9 C$ g3 ^; c3 b$ X8 \
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件2 g' F. o- W" _( I0 h* T, W
J) H7 I* N7 b+ I) t
. d$ p8 A/ I @- o4 l) \
## 背景' U6 Z/ K5 L" K9 w4 |
; T& s8 p% _ t. |. M
### 需求背景
5 K8 A0 b* E, Z4 J4 k# O( c, Z; x
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。8 m: ]" u* |3 o0 Q4 b
2 @5 t/ K$ N. c7 N; {# o9 j. y- v' _但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:
/ G a$ e/ \1 Z q$ r# J$ j" k; _# J% y' X, H+ ]% J# D) c" x4 W
* 导航不理想,极大降低了用户的使用体验
5 e+ e6 ~) u' X) Y* 制作修订过程复杂,极大干扰了制作者的热情
: l0 R2 `1 y, Z4 f6 z3 B
0 v z8 H q% Z& N2 w6 z- m这完全可以通过工具来解决。
) C" b3 G2 w* v# l' x# d
6 W u' ~0 t$ A6 |% a9 w: j### 程序设计背景
* R6 {1 \" h9 D3 V# \9 J1 |+ T% [) e7 }5 d( g0 y
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。& L8 \1 r+ L) i+ T) ]' l4 s
/ t, y: w( n; W% a本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。
1 X1 ^' m1 c& p- T5 t& H' ^! j/ h& a$ r) I" X( P
非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。 m# ]9 z9 ^& o* z2 N
6 k; M0 R+ |6 E3 i
## 解决方案
* @. z/ _5 @: T7 B+ i
6 s- c8 ^3 l$ P$ U0 P4 O" F1 _基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件
8 T& ?5 l' n! T1 ]9 c4 n0 s* u" T% T0 B, k) p% c6 l2 m, a- I
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。% `! w/ a5 s) H2 g2 [
+ X5 I# d' `* |8 m
目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。8 Z! ^% u6 c" P
$ W7 y- D5 E1 m* @: v" a2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
' M* t' o) F% D8 W" ^: \
# ]1 q. F5 i# m" k0 ]& C* [! G1 \ 目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。6 I. e( I! P- u$ t% z5 R* O% k2 \ ?" b
3 N" N; I# u+ {9 e- ^) ^! K3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
5 M* {% V+ ^, t" _4 B" e
' C/ W2 }+ ]( } 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
3 B- C. H7 f( P5 }6 p6 O5 P
' o5 d# }- p% ~6 p4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!2 D& y ~. Q5 |! _' l+ v# ~ T
$ w- q# Y7 Q% ^! k( _! g## 程序文件及安装
* _5 ^/ h9 x- G* H$ |
/ @6 `: ~/ I# F1 |0 R1 i1 y+ s! j- |. n根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。/ I+ C3 B$ n7 Z
: H0 S; \& w U1 U* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
% c" I8 L1 J9 g! Y0 r' o* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
" g5 A2 t' S- K* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会! P4 L5 s6 M! s( c; ?4 d1 z* A
7 k2 ?5 W& g, i8 l
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
( U; |# a. L' b1 M5 u( X3 e9 e4 B1 y- z& X5 l U3 R
## 体验案例“火星词典”
, w; e+ ]5 o' M: y! W; L( J- m( S! s* V( B! n; G' W+ f
为展示程序的特点,特制作了“火星词典”,供观摩使用。
7 L$ P: t2 j( J
7 t) ^% m: u0 ~2 w1 P4 @1 ]* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式
8 G/ r1 m7 _2 w3 ?5 ]0 ^6 k* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息0 ~( _$ \- I/ c" d: j/ o
& {1 q! w F: ?案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
! z+ S! E6 w( p* ]% o0 g
5 X+ L, G$ L5 `0 @; n, G' [" U- p* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
~& G* K$ H2 f# W" ?. ]* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决' H" |1 ^' u7 E
* 之后你只要照猫画虎,即可制作自己的图片词典了( N$ A0 ?* a" i+ x. n2 I$ K
* U0 o; y8 w: g# n9 u" P" o
## 使用说明
. X$ d5 U. k: Y4 V# G+ d* ^& n1 ?; P, K* x
### 极简使用说明
( F& |+ W1 J5 h5 ?) I
$ }; p# i# H9 ~打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
0 [( Q* i. T- o: H( W8 ?
) V7 ^. u' w6 N! x+ S9 \' Z# z9 ?### 概要使用说明
1 I& W& s& _+ S; I0 }. v" x: |2 v- a
1. 按格式要求准备好词条文件
5 q+ n1 O7 s2 }2 i3 i/ ]2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数
$ c3 Q6 U }4 v9 ]. B. I3 E* r3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。! [2 a) O9 A, F8 c- b
5 `# G, L5 Y) a3 H* \) F; k* A/ k
### 详细使用说明6 }9 T2 k: e# I+ ?$ J
$ R) F& t; r: n; T* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。' _) W! J2 Y" g% w# I" H
* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
+ U$ C6 d& X2 e; j( {
, m ~/ w7 Z1 m& I; l### Tips: 使用更便捷快速的命令
: x! S& ]1 I2 }& V* ]6 y/ Z' X
2 k) O& n5 U/ I9 K5 H' v; }" ?* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦" M' K& c9 s" u0 ?- e$ f% i
$ h& t9 X# i, @( C打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。& J" h. }1 `& W8 O8 X! H
3 \0 r' l3 ]% P& I9 G0 i* J+ k. i* 那么建议使用如下更快的方法(自动寻址):
/ b# N+ P" t' n5 J9 D. @4 ?% V: g1 Q
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`, g' p: F _6 k6 _) S
8 l" V, \5 V% G% t2 E6 R. g- y甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`+ C, x: O# Y3 |9 D/ {! U
+ z& C" E, \$ U! u+ j, @这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。3 {9 a Z' v( p/ L
, v( g$ u' N E# P; x
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`# o4 T' e: |3 Y0 y- F/ K. m# i
" p' h+ h8 ] s+ E I) k9 H" X3 R
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。
: }8 ~9 z/ I4 [7 l( a
! B4 n; ]1 H; c& e% I! d, I: s! H7 s E9 i0 _" Z8 t# N* M$ i2 ]3 n
### 相关FAQ3 v; A4 p1 {$ B! d4 D; b
( X1 P( `5 f' E/ }! O% _
1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
) ?+ E2 \4 W6 z- g0 z$ W' N0 a' u* y3 f; ?4 n8 |+ a
* Q: vim出现乱码
# T" ?: U5 K$ `( C* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`# O2 R* T9 b% P% z- K" S
" [) T. F/ S# H' R. S/ S 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
' I% e) T E3 G' h1 t! O
* W+ d( G5 A6 o: o/ |* _6 u2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
4 l. S; |$ w. S' T4 n) Y, f
) Y" v, x5 |1 S/ }* w* v1 |9 \## 社区讨论与反馈' J8 G: \! K5 e" m# d
- B# B8 X$ t F. f7 v$ e4 b, |- X$ e
* Github: https://github.com/VimWei/MdxSourceBuilder
! B2 k6 n2 I& q6 y% y* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html' B7 K- m" H* k0 i
3 `7 `+ T1 m$ a## LICENSE# h3 C: |4 J; d! u' ?
9 f8 `( X: S3 _6 l6 A[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
. d6 u, b$ a w' T) B! {" l2 |( a' H8 k6 x
|
|