TA的每日心情 | 奋斗 2019-10-13 07:34 |
---|
签到天数: 209 天 [LV.7]常住居民III
|
楼主 |
发表于 2020-8-12 17:12:25
|
显示全部楼层
本帖最后由 VimVim 于 2020-8-14 11:29 编辑 2 n& j. A2 D9 y
4 w5 s" Z2 B. v6 j7 f. \# MdxSourceBuilder
+ e5 ~; `- H! W# l ]. d, u
* d; f2 z' J k' [: l一键制作图片词典:原始词条==> 标准化词条==> mdx源文件 ==> mdx词典文件2 E* Q: o) c0 y
% d3 Z$ I$ ^+ P+ b: F7 t1 B7 E0 E8 B# [
## 背景
! |& F. h7 ?; `$ p5 T$ G8 f0 }
2 l5 ]- L# G0 ] }### 需求背景
1 l' i# e, l- u- r0 a$ O! d0 e+ t2 G0 R0 m6 `% u: g! h
时常遇到一些好资料,怎奈只有纸质版或扫描版之类,希望将这些资料转换为可以检索的mdx词典,既方便使用,也提高利用率。
, Z' ]* G: E1 |/ M" S6 l1 _/ K
& L, V2 K) Y0 o, c4 I1 x但是,常常在辛苦整理好词条(这是纯苦力活)之后,使用过往技术方案实现的成品却不够理想,不理想之处有两大方面:" P, g# d# h7 \6 N; E5 N4 {
9 C# }( j; W! [' o
* 导航不理想,极大降低了用户的使用体验
{- {. ?3 G/ l3 _6 Q* 制作修订过程复杂,极大干扰了制作者的热情/ K6 @8 ?) R6 F4 m2 Z# n
! o- u/ X* d4 m9 C
这完全可以通过工具来解决。8 N- m( x: b5 }% E }( _
% S! k" E$ d) Y6 x4 E9 o2 |: Z### 程序设计背景
1 t. @# c# F) ]( Y; o' ?. p0 g! s: b, K( V5 D
本来我只是提出痛点,希望有高人能出手解决,怎奈高人大都不屑于处理。$ X( N: c, W+ H7 Y& V6 K
# J- l- M* A- f6 r9 f
本非码农,可鉴于实在痛的厉害,只好自己用三脚猫功夫倒腾了人生第一个具有完整功能的程序。在此之前,从来没用过list、dict之类的,连这个github发布,都是现学现卖,还望高人不要耻笑,多提点才是。若有高人能够弄个更好的程序或是python版的或是GUI版的,那大家就有福了,我这纯粹抛砖引玉。
& O3 A' O1 S' }2 m8 A+ |& I2 J: ]" A# w* e& t
非码农的好处,或许是可以有更好的用户视角:既考虑词典终端用户的使用体验,也考虑普通的词典制作者的使用体验。虽不能解决所有问题,但至少已能解决我自己的大部分诉求,希望也能解决众多mdx词典用户的些许痛点。# L/ I4 e% U9 v6 {
' h9 l7 R2 z) L5 ~
## 解决方案
; R( k% o( u$ ]
4 H9 S7 f: w% y4 x" r# ]1 F' Z基本思路: 1.原始词条==> 2.标准化词条==> 3.mdx源文件 ==> 4.mdx词典文件3 `) y O& } E$ }5 L9 X7 B
' U7 F+ ]& H- l" c
1. 原始词条:鉴于资料的多样性,原始词条的获取方式也是多种多样,有OCR来的,有手工输入的,也有从其他人的资料转编译来的,也有是因为制作人的喜好或用的工具不同,导致原始词条的格式完全不同。这个特点造就了解决方案必须:(1)兼容多样性,将最常见的词条样式纳入进来;(2)开放性,用户可以根据需要自定义更多个性化的原始词条样式。
, V3 T7 P* H: S; }9 \
8 l- z# u$ f3 e- d; p 目前,本程序已经实现了对三种原始词条样式的兼容,用户也可以根据需要自定义添加。5 h8 u" S0 S- M, M' ?" v* t, w
3 i$ D& @. H5 ?9 L+ a9 T
2. 标准化词条:若能将多样化的原始词条转化为标准化的词条,那么后续就可以标准化处理了。因此如何定义标准化词条就变得很重要,它是实现后续程序的基础。
0 N& |6 |* V) d2 D1 |9 p9 L3 m4 ~7 Q' \/ L
目前,本程序已经提出了一个1.0版的最基本词条标准:一行页码,之后跟随多行关键词,每行一个关键词,如此往复。之所以说1.0版仅仅是最基本的标准,是因为这个标准还未能兼容如分栏、多层级词条等更复杂的情形,这些都有待后续有高人继续升级完善。
+ |' w, z& {5 W/ M. v4 w+ h$ r$ h' E$ l
3. mdx源文件:这个txt文件与其他技术方案的最大区别是——包含了足够优良的页面导航、关键词导航以及用户自由定义的导航信息,极大提升用户对图片词典的使用体验。图片导航如何设计仁者见仁智者见智,因此,解决方案必须:(1)足够优良,不能太简陋,能用机器实现的定位,就不要浪费肉眼定位、繁琐操作定位等人类的精力;(2)兼容多样性,将最常见的导航样式纳入进来,比如封面附录等无需关键词导航、正文等需要关键词导航、拼音等则无需导航直接转链接到现有页面即可;(3)开放性,用户可以根据需要自定义CSS样式,或者添加更多个性化的导航样式。
+ f! _8 j. v, `, R7 L' ~
4 N' \+ p0 m: g+ B 目前,本程序已经实现了三种导航样式,满足一本常见词典的基本需求,同时本程序会输出配套的精细CSS,方便用户个性化定制,此外用户也可以自由添加、改造导航样式。" u. Q8 y s$ z( Z
; C3 ]5 E5 c3 H3 U0 g) y7 A4. mdx词典文件:这个步骤是可选项,但一步到位可以极大提升用户的体验,更重要的是使用这个工具可以实现跨平台制作mdx词典了,不必局限于Windows,Linux、Mac统统不在话下。当然要说明的是,这一环节用到了另一个开源工具, https://github.com/liuyug/mdict-utils ,功劳统统属于他!
! D' \# e o8 i/ ~0 W" X3 U5 o5 f3 Q: }3 u, N
## 程序文件及安装
1 @5 f* c+ e+ q' `0 _% p& O7 N! a$ L& A' u
根本谈不上安装,因为整个程序就是3个Vim脚本文件而已,下载后,直接将这些脚本文件放在与词条文件同一个目录即可。
$ G7 M' |/ Y# L) o4 u% E" b% c( F2 |0 W- ]1 y$ M: f3 s; ^
* MdxSourceBuilder.vim 这是入口文件:上半部分是配置文件,需要用户定义词典参数;下半部分是主程序,通常无需理会0 \$ J. G2 ?/ g3 p4 G7 @7 d9 H
* MdxSourceBuilderCore.vim 这是主程序调用的程序,仅当需要高级定制时修改,通常无需理会9 F2 [; V0 a( N
* MdxSourceBuilderCSS.vim 这是CSS文件,样式文件可以在这里定义,通常无需理会
/ j4 Y1 C y/ V: C" R
& d; G- T& Y; \4 ~其他文件,都是附带的Readme、动图演示、参考资料、案例词典之类,可以忽略。
! d# [( _) Y! l! W$ Y. Z4 O, _0 s3 X4 j$ s5 w; D' @6 K3 G+ ~( q
## 体验案例“火星词典”
0 {5 ^+ \; }& k, c) `( u& e( \, B1 z( d
为展示程序的特点,特制作了“火星词典”,供观摩使用。
6 V" p- y( r" F& ~8 P Z; s8 B8 f/ J: T
* 案例词条文件:以"火星词典"开头的所有.txt和.html文件,其中body.part1、body.part2、Pinyin三个文件展示了不同的词条格式7 w3 H/ O# v V7 w0 R
* 程序及词典配置文件:以"MdxSourceBuilder"开头的所有.vim文件,其中MdxSourceBuilder.vim已经包含了案例词典的配置信息
* {4 h& W$ G" x$ b0 [( R! u' @
4 p$ b9 U4 U1 @ X& ?+ k+ x+ L案例使用:打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
3 ?& |6 s* `8 D; X9 e+ B
$ q: m9 Y5 L! X! V1 n2 D: b* 你会看到,仅仅使用上述一个命令,就会输出3个成品文件:MarsDict.css,火星词典.txt,火星词典.mdx
( D- Z' d: X( c" H+ a% K- C* 你若没有复现上述效果,也别着急,可能是vim、python和mdict-utils没有安装配置好,继续往下看说明文件即可解决
" w: a# {; o/ E- x6 d3 }* 之后你只要照猫画虎,即可制作自己的图片词典了
7 R# V: g$ V8 x1 S( p
) N% f$ `+ X. j, I' |0 |## 使用说明: J& ?) J( g. x8 h+ `- l5 I
8 k0 q. R$ W/ L9 b# `' K8 L( g
### 极简使用说明
|" u0 u! E/ F8 O' j4 t: b* h
M; q4 k9 e9 ^% A打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。) [ w' k, \: Q# m* [$ l6 X
# d1 B) n9 L$ a. V9 [+ f! p
### 概要使用说明
q# _3 N% i- ?* T. @! K
6 S" q3 I; N" z/ |1. 按格式要求准备好词条文件
+ a4 P( j5 A5 X' ^& ^3 s2 v2. 使用任意文本编辑器配置好 MdxSourceBuilder.vim 中的词典参数- j5 C ~1 J+ e) v
3. 打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。8 U1 J2 j; q( D$ w/ O/ i
( r& I& b% N/ M$ k6 E
### 详细使用说明
+ v# Z4 H5 w8 a4 G$ c; _8 z6 ]
1 E3 k- }8 I2 z2 D( y$ N/ {* C* 直接打开查阅 MdxSourceBuilder.vim,其中“使用方法”及“词典参数配置”两个部分自带详细使用说明。
% o+ N3 l% D( e* 若想深度定制,把所有以"MdxSourceBuilder"开头的.vim文件看一遍就知道怎么处理了,即使不懂VimL语言,看注释也能猜个差不离。+ \ q$ ^' ^$ A" h) @
4 U& ?: |8 m/ ` e& z0 A### Tips: 使用更便捷快速的命令
& M; L( K) [2 a* X) l
4 Q& y$ C3 Q7 }% v! s" d& F' J* 若觉得如下步骤还要寻找MdxSourceBuilder.vim,有些麻烦
7 r- }+ B+ i+ N' P2 O Q( v4 ?
; ]( y6 t' X) ~0 w打开Vim,输入命令 `:bro so`,找到MdxSourceBuilder.vim,打开,结束。
$ `" P' A! q; A' p! [9 h0 a* ], s$ X
* 那么建议使用如下更快的方法(自动寻址):
8 Z/ }4 ~& }! A8 f- v5 W* E5 N& V* G1 R2 I5 z f- [5 N
用 Vim 打开 MdxSourceBuilder.vim,新建文档`:new`,输入命令`:so MdxSourceBuilder.vim`/ P4 `2 J" R! k, a# S$ y, z+ R' D
3 H" H% s0 W# _2 o6 C4 l+ T甚至输入`:so mdx` 之后,按Tab键即可自动补全命令 `:so MdxSourceBuilder.vim`
6 j l, X% i3 r4 K' j7 T: c5 L2 S6 r' G6 i0 o9 [5 t2 Y
这个新方法的逻辑,其实是利用Vim首次打开一个文件时,会将该文件所在目录设置为Vim当前工作目录。3 ~9 [* K" @% o
5 u/ Z/ c, n3 B) X" K# o7 R
也可以使用系统命令 `:cd` 来更换Vim的工作目录,如 `:cd d:\火星词典`- D U. ~' W& _) F) @( e
4 A) R T" K% G+ o若您使用附带的`_vimrc`,还可以直接使用自定义的命令 `:CD` 将Vim的工作目录切换为当前文件所在目录。3 ]( k, ?% B5 {4 M7 w
( ?8 `5 \! g+ e2 s
5 R Y8 [( z5 @/ ^; G7 c2 u: J### 相关FAQ
2 e6 f+ _! Y) k! p
$ Q r$ C8 ^# S0 A: g* o" F1. 关于Vim的使用:号称编辑器之神,要想完全掌握确实有难度,但本程序要用到的Vim知识则少的可怜,不必顾虑。
" h* b; u- L @; d
3 m0 p5 f4 t& g& Z6 ~* Q: vim出现乱码
; J; v1 y6 e+ p/ i8 b7 C! Y& h* A: 请将`_vimrc`文件复制到`$HOME`目录下,Windows下即是`c:\Users\YourName\`2 A5 p' p% H: z7 E" }# y
3 T$ P5 D; J+ G' c6 C# ]. O$ z) I 其中必备行是 set encoding=utf-8,其他可选,用于提升Vim使用体验
- O# v( @% u* E6 n5 g9 p0 N; x% h }& F+ x
2. 关于mdict-utils的使用:除了打包,还有很多其他解包、读取等功能,大家可以尽情挖掘改造。
# K" G! J) ~# o
3 U( k. C2 Q1 {7 ~## 社区讨论与反馈9 s; H% J; z4 O: Z7 b
7 C" O$ ?/ f [* Github: https://github.com/VimWei/MdxSourceBuilder
1 g8 H: s& `* y! j C* 讨论社区: https://www.pdawiki.com/forum/thread-41287-1-1.html
; b5 U, @* X* Q- ]$ ^6 i/ C" \, V/ D d- T$ ?. Y5 ~' }
## LICENSE2 s6 G: e& @1 t0 s: |6 m7 u
3 o8 L j4 i1 G8 d# h- k
[GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)
9 v! R$ k+ f. s, K4 e' Z* [) ?) h0 C# W/ b8 U7 n# R) a4 k5 x
|
|