private void GenerateLinks(Link link, string rangeStartExpression, string rangeEndExpression)
 {
     for (uint i = Convert.ToUInt32(rangeStartExpression); i < Convert.ToUInt32(rangeEndExpression) + 1; i++)
     {
         Match match = Regex.Match(link.Url, @"(\s+\[\d+-\d+\])$");
         if (match.Success)
         {
             string url             = link.Url.Replace(match.Groups[1].Value, string.Empty);
             int    precedingZeroes = NumberHelper.GetPrecedingZeroes(rangeStartExpression);
             url = url.Replace("*", i.ToString().PadLeft(precedingZeroes + 1, '0'));
             string linkTitle = link.Title + i.ToString();
             ProcessedLinkList.Add(new Link
             {
                 Title = linkTitle,
                 Url   = url
             });
         }
     }
 }
예제 #2
0
        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();
        }
예제 #3
0
        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();
        }