public void SaveTranslateFiles() { //TODO int translatedCount = translateMap.Keys.Count; while (startPoint < translatedCount) { int stepCount = fictionObject.GetPreviousStepCount(); stepCount += (int)(translatedCount / mergeLimit) + 1; StringBuilder contentBuilder = new StringBuilder(); int nextStop = startPoint + mergeLimit; // if next stop larger than translated limit so nextstop is that limit if (nextStop > translatedCount) { nextStop = translatedCount; } for (int i = startPoint; i < nextStop; i++) { contentBuilder.Append(chapterTranslateMap[i] + "\r\n"); contentBuilder.Append(translateMap[i] + "\r\n"); } SaveToDisk(contentBuilder.ToString(), stepCount); if (SaveChinese) { StringBuilder originalBuilder = new StringBuilder(); for (int i = startPoint; i < nextStop; i++) { originalBuilder.Append(originalStrings[i]); } SaveChineseToDisk(originalBuilder.ToString(), stepCount); } startPoint = nextStop; } fictionObject.FilesList.AddRange(ProcessedLinkList); ProcessedLinkList.Clear(); if (SingleFile) { string dir = Setting.Default.Workspace + "\\" + fictionObject.Location; String zipFile = dir + @"\" + fictionObject.Name + ".zip"; String txtFile = dir + @"\" + fictionObject.Name + ".txt"; int step = fictionObject.GetPreviousStepCount() < 1 ? 1 : fictionObject.GetPreviousStepCount(); string path = dir + "\\" + string.Format("{0:000}", step) + ".txt"; if (File.Exists(path)) { if (File.Exists(zipFile)) { File.Delete(zipFile); } using (ZipFile zip = new ZipFile()) { zip.AddFile(path, ""); zip.Save(zipFile); } File.Copy(path, txtFile, true); File.Delete(path); } } Stop(); }
public void SaveEpub() { // copy template file string dir = Setting.Default.Workspace + "\\" + fictionObject.Location; Boolean formatFileExists = true; if (!File.Exists(dir + "\\mykindlebook.opf")) { formatFileExists = false; File.Copy(GlobalCache.TemplatePath + "mykindlebook.html", dir + "\\mykindlebook.html", true); File.Copy(GlobalCache.TemplatePath + "mykindlebook.opf", dir + "\\mykindlebook.opf", true); File.Copy(GlobalCache.TemplatePath + "style.css", dir + "\\style.css", true); File.Copy(GlobalCache.TemplatePath + "toc.html", dir + "\\toc.html", true); File.Copy(GlobalCache.TemplatePath + "toc.ncx", dir + "\\toc.ncx", true); } // generate content mykindlebook.html and generate content toc.html HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument(); htmlDocument.Load(dir + "\\mykindlebook.html"); HtmlAgilityPack.HtmlDocument tocDocument = new HtmlAgilityPack.HtmlDocument(); tocDocument.Load(dir + "\\toc.html"); XmlDocument tocXml = new XmlDocument(); tocXml.Load(dir + "\\toc.ncx"); var ns = new XmlNamespaceManager(tocXml.NameTable); ns.AddNamespace("ns", "http://www.daisy.org/z3986/2005/ncx/"); tocXml.SelectSingleNode("/ns:ncx/ns:docTitle/ns:text", ns).InnerText = fictionObject.Name; tocXml.SelectSingleNode("/ns:ncx/ns:docAuthor/ns:text", ns).InnerText = fictionObject.Author; XmlDocument opfXml = new XmlDocument(); opfXml.Load(dir + "\\mykindlebook.opf"); var nsmgr = new XmlNamespaceManager(opfXml.NameTable); nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/"); nsmgr.AddNamespace("ns", "http://www.idpf.org/2007/opf"); opfXml.SelectSingleNode("/ns:package/ns:metadata/dc:title", nsmgr).InnerText = fictionObject.Name; opfXml.SelectSingleNode("/ns:package/ns:metadata/dc:creator", nsmgr).InnerText = fictionObject.Author; opfXml.SelectSingleNode("/ns:package/ns:metadata/dc:date", nsmgr).InnerText = DateTime.Now.ToString("dd/MM/yyyy"); opfXml.Save(dir + "\\mykindlebook.opf"); var links = htmlDocument.DocumentNode.SelectNodes("//a"); int step = 0; if (links != null && links.Count > 0) { step = links.Count; } htmlDocument.DocumentNode.SelectSingleNode("/html/head/title").InnerHtml = fictionObject.Name; HtmlNode bodyNode = htmlDocument.DocumentNode.SelectSingleNode("/html/body"); HtmlNode tocNode = tocDocument.DocumentNode.SelectSingleNode("/html/body/div"); XmlNode tocXmlNode = tocXml.SelectSingleNode("/ns:ncx/ns:navMap", ns); int translatedCount = translateMap.Keys.Count; for (int i = 0; i < translatedCount; i++) { step++; HtmlNode htmlNode = HtmlNode.CreateNode("<div><a name=\"chapter" + step + "\"><h1>" + step + ": " + chapterTranslateMap[i] + "</h1></a></div>"); string formattedContent = translateMap[i] != null ? translateMap[i].Replace("\r\n", "<br />") : "NO_CONTENT_HERE"; htmlNode.AppendChild(HtmlNode.CreateNode("<br />")); HtmlNode contentNode = HtmlNode.CreateNode("<span>temp</span"); contentNode.InnerHtml = formattedContent; htmlNode.AppendChild(contentNode); bodyNode.AppendChild(htmlNode); // generate toc.html tocNode.AppendChild(HtmlNode.CreateNode("<div><a href=\"mykindlebook.html#chapter" + step + "\">" + step + ": " + chapterTranslateMap[i] + " </a></div>")); // generate content toc.ncx XmlNode navPoint = tocXml.CreateNode(XmlNodeType.Element, "navPoint", "http://www.daisy.org/z3986/2005/ncx/"); XmlNode navLabel = tocXml.CreateNode(XmlNodeType.Element, "navLabel", "http://www.daisy.org/z3986/2005/ncx/"); XmlNode text = tocXml.CreateNode(XmlNodeType.Element, "text", "http://www.daisy.org/z3986/2005/ncx/"); text.InnerText = chapterTranslateMap[i]; navLabel.AppendChild(text); navPoint.AppendChild(navLabel); XmlNode content = tocXml.CreateNode(XmlNodeType.Element, "content", "http://www.daisy.org/z3986/2005/ncx/"); ((XmlElement)content).SetAttribute("src", "mykindlebook.html#chapter" + step); navPoint.AppendChild(content); // navPoint.InnerXml = "<navLabel><text>" + chapterTranslateMap[i] + "</text></navLabel><content src=\"mykindlebook.html#chapter" + step + "\"/>"; ((XmlElement)navPoint).SetAttribute("class", "book"); ((XmlElement)navPoint).SetAttribute("id", "level" + step); ((XmlElement)navPoint).SetAttribute("playOrder", (step + 1).ToString()); tocXmlNode.AppendChild(navPoint); // generate content mykindlebook.opf } htmlDocument.Save(dir + "\\mykindlebook.html"); tocDocument.Save(dir + "\\toc.html"); tocXml.Save(dir + "\\toc.ncx"); fictionObject.FilesList.AddRange(ProcessedLinkList); ProcessedLinkList.Clear(); }