- UID
- 9360
- 积分
- 8
- 回帖
- 11
- 主题
- 2
- 在线时间
- 11 小时
- 贡献
- 0
- 威望
- 1
- 发书数
- 0
伴读
- UID
- 9360
- 积分
- 8
- 回帖
- 11
- 主题
- 2
- 铜币
- 29
- 威望
- 1
- 银币
- 0
- 贡献
- 0
- 发书数
- 0
- 注册时间
- 2015-9-10
- 最后登录
- 2023-9-24
- 在线时间
- 11 小时
|
以前做过一个HP卷章分行排版转卷章一行排版的脚本,不过不算通用,最近重新整理成通用版分享出来。
先闲扯几句,用HP制作电子书,有两种排版方式,一种是卷章一行,一种是卷章分行。我个人更喜欢用卷章一行,因为这样排版用手机看txt文本的时候,不至于疑惑看到哪一卷了,卷数多的时候,这是个烦恼的问题。而且,HP用卷章分行的文本制作电子书,会有个很奇怪的问题,pages.js里的章节名称中的全角符号会变成半角,对于我等强迫症,不能忍。
但是卷章一行的排版很耗人力,因为下载到的文本大部分章节名前都不带卷名,当卷数多的时候,就是件痛苦的事。下面分享一个卷章分行排版转卷章一行排版的脚本。
使用前,请先规范文本,满足以下要求:
1、规范行首,统一为两个全角空格,这样做是为了排除文中“第一部电影”,“课文第一章”等的干扰。
2、每卷除开头有卷名外,章节名前不能再有卷名,否则排版后的文本会删除该行,且后面的排版全部会出错。
3、章节编号和章节名中间一定要有半角空格,若没有章节名,则章节编号后不能再有别的内容。
排版后的格式如下:
第一卷 卷名
第一章 章名
……
第二章 章名
……
第二卷 卷名
第一章 章名
……
有没有空行无所谓。
接下来介绍下脚本的原理,本脚本会将文本按卷分割成多个txt文本,以数字为编号保存,在每个分割文本中自动将每卷的内容,从卷章分行的排版转换成卷章一行,然后再将处理完的文件合并成一个文件。
运行脚本后,有三个需要输入的地方:
1、 匹配卷名的的正则表达式:默认为:" (第[0-9一二三四五六七八九十两百零〇]{1,3}[册集部卷]$|第[0-9一二三四五六七八九十两百零〇]{1,3}[册集部卷] .+)"
由于有些书的卷名会出现:最终卷,第XX卷(最后一卷),番外篇等特殊卷名,请自行在表达式里添加:最终卷.+,第XX卷(最后一卷).+,番外篇.+,以“|”分隔。
2、 需要添加卷名的章节的正则表达式:默认为:" (第[0-9一二三四五六七八九十两百零〇]{1,3}[章节回]$|第[0-9一二三四五六七八九十两百零〇]{1,5}[章节回] .+)"
3、 输出文件夹地址:默认地址在桌面wfolder文件夹,分割文本以及合并文本都在该文件夹,可以自行更改地址。
接下来,等着脚本运行结束就好,会自动打开合并后的文件,够简单吧?
代码在下面,怎么用就不用问了,不会的自己百度。
- var sFindSplitFlag = prompt("请输入匹配卷名的的正则表达式:"," (第[0-9一二三四五六七八九十两百零〇]{1,3}[册集部卷]$|第[0-9一二三四五六七八九十两百零〇]{1,3}[册集部卷] .+)");
- var chapterstr = prompt("请输入需要添加卷名的章节的正则表达式:"," (第[0-9一二三四五六七八九十两百零〇]{1,3}[章节回]$|第[0-9一二三四五六七八九十两百零〇]{1,5}[章节回] .+)");
- var GetSpecialPath = function(sFolderName) {
- var WshShell = new ActiveXObject("WScript.Shell");
- var ss = WshShell.SpecialFolders(sFolderName);
- return(ss);
- }
- var CreatePath = function(sNewPath) {
- var WshShell = new ActiveXObject("WScript.Shell");
- var sCD = WshShell.CurrentDirectory;
- if(sNewPath.match("^.:") != null) {
- var aPathName = sNewPath.split("\");
- WshShell.CurrentDirectory = aPathName[0] + "\";
- }
- WshShell.Run("cmd /k md "" + sNewPath + "" & exit", 0, true);
- var nn = WshShell.Run("cmd /k dir "" + sNewPath + "" & exit", 0, true);
- WshShell.CurrentDirectory = sCD;
- return(nn);
- }
- var sOutDocPath = prompt("请指定输出文件夹地址:",GetSpecialPath("Desktop") + "\\wfolder\");
- if(sOutDocPath.charAt(sOutDocPath.length) != "\") sOutDocPath += "\";
- var sBookpath =document.FullName;
- var sBookName = sBookpath.split("\");
- document.selection.StartOfDocument();
- document.selection.Replace( sFindSplitFlag ,"【mark】\\0", eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
- document.selection.SelectAll();
- var sText = document.selection.Text;
- var aSplitedText = sText.split("【mark】");
- var nEncoding = document.Encoding;
- document.Undo();
- CreatePath(sOutDocPath);
- for(var i = 0; i < aSplitedText.length; i++)
- {
- editor.NewFile();
- document.Encoding = nEncoding;
- var sTemp = document.selection.Text = aSplitedText[i];
- document.selection.StartOfDocument();
- document.selection.SelectLine();
- sTemp = document.selection.Text.replace(/\s*\r\n/g, "");
- var regex=new RegExp(sFindSplitFlag,"gim");
- if( regex.test( sTemp ) ) document.selection.Delete();
- document.selection.Replace(chapterstr, sTemp + " \\1", eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
- document.Save(sOutDocPath + (i+1) + ".txt");
- document.close();
- }
- WshShell = new ActiveXObject( "WScript.Shell" );
- var sCD = WshShell.CurrentDirectory;
- WshShell.CurrentDirectory = sOutDocPath;
- WshShell.Run("cmd /k dir /b *.txt > output.tmp & exit", 0, true);
- editor.OpenFile(sOutDocPath + "output.tmp", eeEncodingSystemDefault, eeOpenAllowNewWindow);
- if(document.selection.Text == "") document.selection.SelectAll();
- var s = document.selection.Text;
- var ss = s.split("\r\n");
- document.selection.Delete();
- editor.ExecuteCommandByID(4099);
- function sortNumber(a, b)
- {
- var a2d = a.match(/\d+/g);
- var b2d = b.match(/\d+/g);
- if (a2d == null || b2d == null)
- if (a == b) return 0;
- else return a > b ? 1 : -1;
- var nFlag = a2d.slice(0,1) - b2d.slice(0,1);
- if (nFlag == 0) nFlag = a2d.slice(1,2) - b2d.slice(1,2);
- return nFlag;
- }
- ss.sort(sortNumber);
- var out = ss.join("\r\n");
- for(var i = 0; i < ss.length; i++)
- {
- if(ss[i] == "") continue;
- document.selection.InsertFromFile(sOutDocPath + ss[i], eeEncodingSystemDefault, eeOpenAllowNewWindow);
- }
- editor.ExecuteCommandByID(4116);
- WshShell.Run("cmd /k ren output.tmp \x22"+sBookName[sBookName.length-1]+"\x22 & exit", 0, true);
- WshShell.CurrentDirectory = sCD;
- editor.OpenFile(sOutDocPath + sBookName[sBookName.length-1], eeEncodingSystemDefault, eeOpenAllowNewWindow);
复制代码 |
|