TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 1 M4 K" A3 b# [- s8 p/ j
$ O% f, L6 {1 |( r& L. K9 {( U
# MdxSourceBuilder
Y) g B: s$ {! \5 ?, {% N3 }7 d6 j
一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件# |' g) _, z* n3 s+ P$ W% a6 X' }, s
& _& `! o$ @& z, A1 }& r
& d6 m1 }& T" `: q7 n$ D& S
## 背景% B+ \8 V& l# h: i' C
5 J- O4 q6 F, _0 K3 h
### 需求背景( p s# N/ x( } f/ w
$ G: ~- _" v7 {. f3 T6 Y) C3 m0 K时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
( A# b0 p6 [, m8 X! l/ ^2 Y0 N% L6 o' L1 A z
但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:
) J7 S' h% _# S, z# ]5 N
. s5 k- n2 z3 B8 c# `! @* 导航不理想,极大降低了用户的使用体验! J4 G5 Q7 u% \$ d+ y8 Q1 l
* 制作修订过程复杂,极大干扰了制作者的热情
! n9 z6 w1 m: f1 D: L8 e9 p6 L2 i7 E7 ?! v1 g" ^7 v5 U/ E
这完全可以通过工具来解决。* t! h9 j& S6 R+ h0 ]
{+ R: ]4 X1 y6 C### 程序设计背景
; a0 o# J2 ?4 a8 U) y' \
/ r) s8 L/ L. r% d- M' i本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。 N$ a4 E$ A3 d* d
4 S+ G# _6 W v, w% [/ I. Y! v3 w, l本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。: B3 [( l7 L1 p. d6 ^
W, @' w, A6 p/ b5 }% [6 z
非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。5 A) _9 H) h9 [5 t- F5 O' J
d3 U! [! f, U! r3 c m7 k4 y3 I' P
## 解决方案
; D% K7 E* I$ C# S( _2 o
1 U: f: T( P# D6 d" H% c" x" r8 l# z基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件( @( ~8 ~5 S% Z" c% Q: U: r/ H
; o! H, O; c. }8 z, W1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
/ S3 s9 Q" s' b4 F' L1 S; e* `
" P) i3 m5 A) |4 z# g* r# X 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。
+ T* d. o1 t9 [! U' c! D; ]+ z! W/ B; R- s
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
8 F! ]# F& {1 Z4 z- i) Y2 W6 P; a5 X2 p s1 E k( B# K. r7 ]& C
目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
, w+ _6 H6 l* l$ M" C
: Z2 w; K7 i/ ^9 j- w- ^3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
8 P. {, v. M! } j( l( o3 _% G; j7 S9 I" L5 E
目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。
9 e6 N" Y& Q: N( Y& k( K* n" O7 d
4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
+ P8 E/ ~9 w& I" @# R
/ G0 K, \7 X) L4 f& `7 s## 程序文件及安装
4 P' O9 V+ i+ R- }+ @6 V1 C
5 Z- h; e3 t6 s/ e' K, `: f p% q根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
5 t- U& }/ G4 \7 r, i) f- J6 z7 @! {" g! W. k; t
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会
" [6 w4 H1 b' G9 i! A6 r* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会
- T2 C$ Y1 E; T! V% H% Z) u5 n7 b2 ^* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
4 i' D$ \0 |. f& c, |* n$ ~+ @' ^# ^8 d4 p8 O6 c
其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。$ k9 E0 }) h, G) P
$ u2 ^. T; |4 w7 y/ o2 e1 I## 体验案例“火星词典”9 L/ A6 l, j+ ?% T2 |% J- G
: n9 |$ _) P* y7 B
为展示程序的特点,特制作了“火星词典”,供观摩使用。! U/ _& |! m' ?
* z' f4 @/ ~& O0 ]: L/ g9 S
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式/ h, o! v) W2 I! q
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息% s- ^: t9 |. e/ C; y, [- S
0 u4 i( E. w9 _ j# ^8 L" @ L案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。; d* u# O: s# O9 d
$ P) p3 _: E4 |) x( _ D. f; J; C
* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx/ W; I. d. M" ?. @* A
* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
3 o2 j! b7 N( A: W2 \( F4 b* 之后你只要照猫画虎,即可制作自己的图片词典了
: A! B# Q/ x$ S p7 a; M" Y: _0 F: B T2 p7 t* M; c3 A, S
## 使用说明) D) t0 m+ s0 ~: m
+ W; S, [' _6 _
### 极简使用说明1 F9 j( {# m! R+ P$ k! c
8 i7 c* T4 N1 m7 X: s' P
打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。2 R( L4 Z1 x, H: t h3 L( K* `- F& K
# w( S! n4 K/ v### 概要使用说明
8 s; e6 r8 ^0 N+ N L5 r
3 G2 B, l6 I3 R1. 按格式要求准备好词条文件, o! ]; J7 w8 l- |' D6 r
2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数$ D1 D! z3 ]; ]1 \$ |) Z
3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
& {3 ]2 m3 J; ]7 y. t4 J& `4 ^ g0 Z* i/ K7 _5 x
### 详细使用说明+ [4 W3 @+ p# m% q$ t7 `
1 C& @* n) ? Z5 ?1 X* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。3 t9 b4 Z. J* u0 d6 w
* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。
( J! C# P) h; p$ ]$ `, j/ u) Y8 a$ J
### Tips: 使用更便捷快速的命令0 g5 [6 \ D/ v* r' A
" Y; d: Z: {/ W* G7 N* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
$ l' Z5 F7 {0 @/ I, S( a
& |+ P$ t# ~# w* B) ^打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
0 D1 b$ i% t; d) l3 c ^1 K2 ^
* 那么建议使用如下更快的方法(自动寻址):1 j9 w9 c- Y2 P6 S9 m3 f. ~
5 X$ k" U3 R8 o( P4 n! ~用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`
# y8 J" o9 i" w: g) ^1 ^+ s ]
1 n5 f: _; m- o. k/ D甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`3 Y; o2 J/ Y' n+ z3 s
+ W o# O0 S, e2 u# W' A& x
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。
- Q- B. z# E. o$ Y6 x: ^ m* R) R% E, F3 }+ W& U8 c1 ?) l8 j1 O, n
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`
+ ?9 q( X3 e8 |$ p0 p0 b# A7 M' D2 I6 l B: i$ B0 T- G
若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。$ ^) P( S- a5 H6 G* i1 K) u4 b
; v4 ?! L/ _, R1 ]$ D) y( V j
### 相关FAQ
3 \' z7 X% h# Q2 Z/ M7 ^4 Z; R5 r+ O; Y. Z: `; Z& ?. R3 c
1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
4 v' M/ q- p4 s' y5 F' r" I4 ]: U U* b- Y! u
* Q: vim出现乱码+ s7 d: P' b1 s# W, _# ^
* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`
& ^* J7 z0 T$ A2 L# J! p1 [- t; C. D2 ]
其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
5 b. v2 T5 ]0 }6 y/ h/ B/ z/ A& m0 {- x5 W: W; k
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
! M2 d: y+ R. T0 d+ m7 k
; V6 M; h* f S8 K## 社区讨论与反馈2 B8 @2 j, S9 R8 q; I2 X
* f& t$ ~% E4 E0 L$ P
* Github: https://github.com/VimWei/MdxSourceBuilder+ {4 ]/ ~& N# q1 M4 `3 k, X4 `
* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html4 R; B$ v( _* s! T! l5 N, x, S) |# E4 n
# [% b. J Q& Z1 X
## LICENSE
2 ]- f3 `8 I# m+ C$ `7 b, F$ p6 j
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html). E% J+ j5 a3 M% } J& L% M" \
, [- r! t' n$ Y; W |
|