分享

电子书转mdx

 弘护正法 2019-10-18

   rayman老大发明的mdx格式,不仅是一种词典格式,用来做手机上的电子书同样很有优势。它有以下几个优点,一是压缩率高,一般只有纯文本文件的一半或更小;二是支持html的标签,可以实现字体样式、图片、链接等效果;三是即使文件很大,打开的速度仍然很快,它并不是把整个文件都加入到内存里,可以节省内存。另外,他自带的收藏功能当作书签用,也很方便。

我之前将几本电子书转成了mdx格式,下面将我的一些方法分享一下,希望没有制作过mdx的人可以从中学会,把自己喜欢的电子书转成mdx,与大家分享。

  这里说的电子书主指基于html即网页的电子书,一般是chmexe格式。


  首先第一步是把电子书反编译,就是还原出其中的网页、图片等内容。建议尽量从chm格式的电子书来转,因为这种电子书反编译比较容易,用一个chmFBY就可以了,很快,而且反编译出来的内容很完整(其他反编译chm的软件还有很多,比如老马的unEBook,制作chm的软件往往也自带反编译的功能,如easychmhtm2chm)。exe格式的电子书由各种不同的软件做成,要找专门的反编译工具,老马的minikillbook虽然可以从所有基于网页的电子书转出网页或文本,但速度要慢很多,文件很大的时候还可能不太稳定,可以作为备用。
  转出来的内容一般包括网页(htmhtml)、图片(gifjpgpngico等格式)、css样式表、jsjavascript)文件等。图片很多时候是都是背景或是效果,可以将它们全部删掉。如果反编译出来的文件有多个子文件夹,可以使用windows的搜索,比如输入*.gif将所有的gif图片搜索出来,然后全选、删除。如果转出来的文件很多,有数千甚至上万个文件的话,可以将下面几行:
@echo off
rem 正在搜索...6 I' q0 x8 Y8 J% f
rem 删除文件
for /f "delims=" %%i in ('dir /b /a-d /s "*.gif"') do del %%i
rem 删除完毕6 ^$ q/ U5 ~* U  A
pause. y' q5 b, g- b
复制到一个新建的文本文件,另存为.bat(批处理文件)格式,然后把这个bat文件放到要处理的文件夹中双击运行即可,它可以删除该文件夹及子文件夹中所有的gif文件。jpgpngicocssjs文件可以用同样的方法删除。如果是网页制作高手的话,可以把css留着,做些改编运用,mdict是支持css的。我不是高手,所以没这方面的经验。
  如果图片是书中的内容,而你想留着的话,可以把这些图片保存到一个文件夹里。后来编辑mdx源文件的时候,要注意图片路径与实际位置的一致。如果图片分散在很多的子文件夹,而且又有重名的话,处理起来会很麻烦。


  接下来是处理网页文件,如果网页都在同一个文件夹,我一般是将目录(一般是index.htm000.htm)单独编辑,留下其中的链接,其他的全部用老马TextForever中的html>txt转为文本文件。这样做网页中的链接、表格、图片都会丢失,如果想保留这些东西的话,可以在用TextForever之前,用Ultrareplace5.02(支持正则、多项同时、批量替换)将其中的<a href="…"></a><img src="…"><table …><tr><td></td></table>全都转成诸如####a href="…"&&&&的样子,用TextForever将网页转成文本之后,再把其中的####替换成<&&&&替换成>
  网页全部转成文本之后,接着用TextForevr的文件合并功能,将转出的文本文件合并成一个文件,注意要选中在文件内容前加注文件名这个选项。
  接下来是编辑mdx源文本。源文件的格式很简单,就是形如:


条目
内容……
……
……
</>"
条目
内容……
……"
……"
</>
  其中的条目就是显示在索引里的名字,不会显示在正文中。内容里支持支持html标签(具体支持到什么程度我不清楚,我都是用最简单的),比如
“<br>”是换行;
“<a href="entry://链接到的条目">显示的内容</a> ”是链接;
“<h1>…</h1>”之类是标题,一共有六级标题,<h1>最大;
“<font color=blue size=5>…</font>”是字体样式;
“<p align=center>…</p>”是定义段落的显示位置。
有一点要说明的是连续的半角空格在显示时只会显示一个,文本中的换行在显示时也是一个半角空格,所以要注意加<br>
  不要用记事本或word,因为文件稍大点它们就会罢工,更重要的是它们不支持正则表达式。你可以用UltraEditNotepad++EditplusEmEditor(我常用这个),还有一个专注于查找替换的文本工具EditPad Pro,与PowerGrepwindows下最强大的文本查找处理工具)是同一家公司出品。关于正则表达式,你可看一篇名为《正则表达式30分钟入门教程》的文章,说是入门,其实所有的功能基本都在里面了,入门指的是熟悉规则,提高则需要熟用生巧。需要注意的是,各个文本编辑工具中的正则表达式版本并不相同(UltraEdit自身就提供了三种版本),使用的时候要留心,在这些工具中,如果你在查找替换对话框里选中了正则表达式这个选项的话,查找框的后面有一个向下的小箭头,点一下,就会列出正则表达式的元字符。EmEditor中的正则表达式与30分钟教程里介绍的基本是一致的。以上提到的这些文本编辑工具,都支持较大的文件,200M应该都是没有问题的,如果很大的话,可以使用终极工具PowerGrep,它不光可以替换,还可以收集数据、分割文件,据说支持上G的文件,虽然我没试过,但我信。它的价值还体现的它的价格上,要200多美元,注意是美元!不过网上有破解的,你可以搜“PowerGREP.v4.2.0.retail-iOTA”,下载后解压,直接运行里面的安装程序就行,它本身就是破解的,你不用再输序列号,或是运行keygen之类的东西。它是全英文的,目前还没有汉化版,我是用灵格斯摸索着用的。
  合并后的文件中会有很多空行,在EmEditor中你可以用“^\s*(<br>)?\n”替换为“”(替换框里什么都不填)将空行去掉,你可用“\n”替换为“<br>\n”在所有的段落结尾加<br>,这两个步骤不分先后。然后,你可用“\n\s*”替换为“\n  把所有段落替换为首行缩进两个中文字符(这两个中文空格一般输不出来,你可以找个地方复制过来)。然后你可以把合并文件时插入的文件名,比如  D\chm\001.txt<br>”(经过前两步多了段前空格和<br>)之类用  D\\chm\\(.+?)\.txt<br>”替换为“</>\n史记\1”,替换出来的结果是:
</>
史记001 
  以上提到的那些编辑工具都支持录制宏,就是把步骤录下来,以后直接使用。可以把上面几个步骤录下来,编辑另外一本书的时候直接调用。(步骤必须是一模一样的才行,比如上面的替换名字,必须名字一样,这个宏才有用。)


  替换后将第一个</>删掉,然后在最后一行加一个</></>要在独立的一行,前后不能有其他东西。把单独编辑好的目录复制到这个文本里(你可以找一个有目录的mdx,在电脑上用mdict查看,右键查看源代码就能看到它的源文件),一般粘贴在最前面,它的最后也要有一个</>。这样一个mdx源文本就编辑好了,保存之后,用mdxbuilder编译就行了。这个过程很快,1M2M的源文本就是一贬眼的事,200M的源文本也只要1-2分钟。注意要在mdxbuilder中选择对应的编码类型,否则编译出来的会是乱码,源文本的编码类型在文本编辑器最下面的状态栏里可以看到,一般是GB2312UTF-8无签名,在mdxbuilder中分别选GBKUTF-8

  如果反编译出来的网页在很多个子文夹中,并且都是001.htm,002.htm……这样的样子,可以用批量重命名的工具,在这些文件名前面加上其文件夹的名字。推荐使用灵者更名(RenGod5.03,这个工具漂亮、直观、功能强大,比论坛里介绍的菲菲更名要好用。(这是一个年纪不大的男孩写的软件,到5.03的时候,源代码丢了,他正在重写。)
批量命名之后,因为Textforever的合并不支持子文件夹,可以把
md htm
for /r %%i in (*.htm*) do move "%%i" "htm\%%~nxi"
另存为bat批处理文件,放在文件夹下运行,可以把文件夹及其子文件夹中所有的htm文件,转移到一个名为htm的文件夹中。然后用TextForever转化成文本,合并,再用文本编辑器编辑。

对于己有的mdx文件,如果想要修改的,可以用GetDict转出源文本,编辑之后,用mdxbuilder重新编译。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多