コード例 #1
0
 protected virtual void PassPagesToEpubFile(IEpubFile epubFile)
 {
     foreach (var xhtmlFile in StructureManager)
     {
         epubFile.AddXHTMLFile(xhtmlFile);
     }
 }
コード例 #2
0
        public void Save(string outFileName)
        {
            Logger.Log.DebugFormat("Saving {0}", outFileName);
            try
            {
                Logger.Log.DebugFormat("Saving totally {0} file(s)", _fb2Files.Count);
                foreach (var fb2File in _fb2Files)
                {
                    IEpubFile epubFile = CreateEpub();

                    PassEPubSettings(epubFile);

                    // do it first (before actual conversion) as if there is a problem with generating file name - we do not spend time here on generation
                    string outFile = GenerateOutputFileName(epubFile, outFileName);

                    LoadImagesInMemory(fb2File);

                    ConvertContent(fb2File, epubFile);

                    PassPagesToEpubFile(epubFile);

                    epubFile.Generate(outFile);
                }
            }
            catch (Exception ex)
            {
                Logger.Log.ErrorFormat("Error saving file {0} : {1} - {2}", outFileName, ex.StackTrace, ex);
                throw;
            }
        }
コード例 #3
0
 protected override void ConvertContent(FB2File fb2File, IEpubFile epubFile)
 {
     var epubFileV3 = epubFile as EPubFileV3;
     if (epubFileV3 == null)
     {
         throw new ArrayTypeMismatchException(string.Format("Invalid ePub object type passed, expected EPubFileV3, got {0}",epubFile.GetType()));
     }
    
     PassHeaderDataFromFb2ToEpub(fb2File,epubFile.BookInformation);
     PassCoverImageFromFB2(fb2File.TitleInfo.Cover, epubFileV3);
     ConvertAnnotation(fb2File.TitleInfo, epubFileV3);
     SetupCSS(epubFileV3);
     SetupFonts(epubFileV3);
     PassTextFromFb2ToEpub(epubFileV3, fb2File);
     PassFb2InfoToEpub(epubFileV3, fb2File);
     UpdateInternalLinks(epubFileV3, fb2File);
     PassImagesDataFromFb2ToEpub(epubFileV3, fb2File);
     AddAboutInformation(epubFileV3);
 }
コード例 #4
0
        private string GenerateOutputFileName(IEpubFile epubFile, string outFileName)
        {
            int count = 0;

            string outFolder = Path.GetDirectoryName(outFileName);

            if (string.IsNullOrEmpty(outFolder))
            {
                Logger.Log.DebugFormat("Using output folder : {0}", Settings.OutPutPath);
                outFolder = Settings.OutPutPath;
            }

            string outFile = Path.GetFileNameWithoutExtension(outFileName);

            Logger.Log.DebugFormat("Transliteration of file names set to : {0}", Settings.ConversionSettings.TransliterateFileName);
            if (Settings.ConversionSettings.TransliterateFileName &&
                !string.IsNullOrEmpty(outFile))
            {
                outFile = Rus2Lat.Instance.Translate(outFileName, epubFile.TranslitMode);
                Logger.Log.DebugFormat("New transliterated file name : {0}", outFile);
            }

            if (string.IsNullOrEmpty(outFile))
            {
                outFile = "converted_file";
            }


            string resultFilePath = Path.Combine(outFolder, outFile + ".epub");

            while (File.Exists(resultFilePath))
            {
                Logger.Log.DebugFormat("{0} file exists , incrementing", resultFilePath);
                resultFilePath = Path.Combine(outFolder, string.Format(@"{0}_{1}.epub", outFile, count++));
                if (count == int.MaxValue)
                {
                    throw new IndexOutOfRangeException(@"File name counter reached maximum possible limit - consider to clean up the folder");
                }
            }
            Logger.Log.DebugFormat("Final output file name : {0}", resultFilePath);
            return(resultFilePath);
        }
コード例 #5
0
        protected override void ConvertContent(FB2File fb2File, IEpubFile epubFile)
        {
            var epubFileV3 = epubFile as EPubFileV3;

            if (epubFileV3 == null)
            {
                throw new ArrayTypeMismatchException(string.Format("Invalid ePub object type passed, expected EPubFileV3, got {0}", epubFile.GetType()));
            }

            PassHeaderDataFromFb2ToEpub(fb2File, epubFile.BookInformation);
            PassCoverImageFromFB2(fb2File.TitleInfo.Cover, epubFileV3);
            ConvertAnnotation(fb2File.TitleInfo, epubFileV3);
            SetupCSS(epubFileV3);
            SetupFonts(epubFileV3);
            PassTextFromFb2ToEpub(epubFileV3, fb2File);
            PassFb2InfoToEpub(epubFileV3, fb2File);
            UpdateInternalLinks(epubFileV3, fb2File);
            PassImagesDataFromFb2ToEpub(epubFileV3, fb2File);
            AddAboutInformation(epubFileV3);
        }
コード例 #6
0
 protected override void ConvertContent(FB2File fb2File, IEpubFile epubFile)
 {
     var epubFileV2 = epubFile as EPubFileV2;
     if (epubFileV2 == null)
     {
         throw new ArrayTypeMismatchException(string.Format("Invalid ePub object type passed, expected EPubFileV2, got {0}", epubFile.GetType()));
     }
     _referencesManager.FlatStructure = Settings.CommonSettings.FlatStructure;
     PassHeaderDataFromFb2ToEpub(fb2File, epubFileV2);
     var titlePage = new TitlePageFileV2(epubFileV2.BookInformation);
     StructureManager.AddTitlePage(titlePage);
     PassCoverImageFromFB2(fb2File.TitleInfo.Cover, epubFileV2);
     ConvertAnnotation(fb2File.TitleInfo, epubFileV2);
     SetupCSS(epubFileV2);
     SetupFonts(epubFileV2);
     PassTextFromFb2ToEpub(fb2File);
     PassFb2InfoToEpub(epubFileV2, fb2File);
     PassImagesDataFromFb2ToEpub(epubFileV2, fb2File);
     AddAboutInformation(epubFileV2);
     UpdateInternalLinks(fb2File);
 }
コード例 #7
0
        protected override void ConvertContent(FB2File fb2File, IEpubFile epubFile)
        {
            var epubFileV2 = epubFile as EPubFileV2;

            if (epubFileV2 == null)
            {
                throw new ArrayTypeMismatchException(string.Format("Invalid ePub object type passed, expected EPubFileV2, got {0}", epubFile.GetType()));
            }
            _referencesManager.FlatStructure = Settings.CommonSettings.FlatStructure;
            PassHeaderDataFromFb2ToEpub(fb2File, epubFileV2);
            var titlePage = new TitlePageFileV2(epubFileV2.BookInformation);

            StructureManager.AddTitlePage(titlePage);
            PassCoverImageFromFB2(fb2File.TitleInfo.Cover, epubFileV2);
            ConvertAnnotation(fb2File.TitleInfo, epubFileV2);
            SetupCSS(epubFileV2);
            SetupFonts(epubFileV2);
            PassTextFromFb2ToEpub(fb2File);
            PassFb2InfoToEpub(epubFileV2, fb2File);
            PassImagesDataFromFb2ToEpub(epubFileV2, fb2File);
            AddAboutInformation(epubFileV2);
            UpdateInternalLinks(fb2File);
        }
コード例 #8
0
        private void SetTransliterationOptions(IEpubFile epubFile)
        {
            var setting = new TransliterationSettingsImp
            {
                FileName = string.IsNullOrEmpty(Settings.ResourcesPath) ? @".\Translit\translit.xml" : string.Format(@"{0}\Translit\translit.xml", Settings.ResourcesPath),
            };

            Logger.Log.DebugFormat("Using transliteration rule file : {0}", setting.FileName);
            if (Settings.ConversionSettings.TransliterationSettings.Transliterate)
            {
                setting.Mode = TranslitModeEnum.ExternalRuleFile;
                if (!File.Exists(setting.FileName))
                {
                    Logger.Log.ErrorFormat(@"Unable to locate translation file {0}, switching transliteration off", setting.FileName);
                    setting.Mode = TranslitModeEnum.None;
                }
            }
            else
            {
                setting.Mode = TranslitModeEnum.None;
            }
            Logger.Log.DebugFormat("Transliteration mode : {0}", setting.Mode);
            epubFile.TranslitMode = setting;
        }
コード例 #9
0
 private void SetTransliterationOptions(IEpubFile epubFile)
 {
     var setting = new TransliterationSettingsImp
     {
         FileName = string.IsNullOrEmpty(Settings.ResourcesPath) ? @".\Translit\translit.xml" : string.Format(@"{0}\Translit\translit.xml", Settings.ResourcesPath),
     };
     Logger.Log.DebugFormat("Using transliteration rule file : {0}", setting.FileName);
     if (Settings.ConversionSettings.TransliterationSettings.Transliterate)
     {
         setting.Mode = TranslitModeEnum.ExternalRuleFile;
         if (!File.Exists(setting.FileName))
         {
             Logger.Log.ErrorFormat(@"Unable to locate translation file {0}, switching transliteration off", setting.FileName);
             setting.Mode = TranslitModeEnum.None;
         }
     }
     else
     {
         setting.Mode = TranslitModeEnum.None;
     }
     Logger.Log.DebugFormat("Transliteration mode : {0}", setting.Mode);
     epubFile.TranslitMode = setting;
 }
コード例 #10
0
        private string GenerateOutputFileName(IEpubFile epubFile, string outFileName)
        {
            int count = 0;

            string outFolder = Path.GetDirectoryName(outFileName);
            if (string.IsNullOrEmpty(outFolder))
            {
                Logger.Log.DebugFormat("Using output folder : {0}", Settings.OutPutPath);
                outFolder = Settings.OutPutPath;
            }

            string outFile = Path.GetFileNameWithoutExtension(outFileName);

            Logger.Log.DebugFormat("Transliteration of file names set to : {0}", Settings.ConversionSettings.TransliterateFileName);
            if (Settings.ConversionSettings.TransliterateFileName &&
                !string.IsNullOrEmpty(outFile))
            {
                outFile = Rus2Lat.Instance.Translate(outFileName, epubFile.TranslitMode);
                Logger.Log.DebugFormat("New transliterated file name : {0}", outFile);
            }

            if (string.IsNullOrEmpty(outFile))
            {
                outFile = "converted_file";
            }


            string resultFilePath = Path.Combine(outFolder,outFile + ".epub");
            while (File.Exists(resultFilePath) )
            {
                Logger.Log.DebugFormat("{0} file exists , incrementing", resultFilePath);
                resultFilePath = Path.Combine(outFolder,string.Format(@"{0}_{1}.epub",  outFile, count++));
                if (count == int.MaxValue)
                {
                    throw new IndexOutOfRangeException(@"File name counter reached maximum possible limit - consider to clean up the folder"); 
                }
            }
            Logger.Log.DebugFormat("Final output file name : {0}", resultFilePath);
            return resultFilePath;
        }
コード例 #11
0
 private void PassEPubSettings(IEpubFile epubFile)
 {
     SetTransliterationOptions(epubFile);
 }
コード例 #12
0
 /// <summary>
 /// Saves the loaded FB2 file(s) to the destination as ePub
 /// </summary>
 /// <param name="fb2File"></param>
 /// <param name="epubFile"></param>
 protected abstract void ConvertContent(FB2File fb2File, IEpubFile epubFile);
コード例 #13
0
 private void PassEPubSettings(IEpubFile epubFile)
 {
     SetTransliterationOptions(epubFile);
 }
コード例 #14
0
 /// <summary>
 /// Saves the loaded FB2 file(s) to the destination as ePub
 /// </summary>
 /// <param name="fb2File"></param>
 /// <param name="epubFile"></param>
 protected abstract void ConvertContent(FB2File fb2File, IEpubFile epubFile);
コード例 #15
0
 protected override void PassPagesToEpubFile(IEpubFile epubFile)
 {
     foreach (var xhtmlFile in StructureManager)
     {
          epubFile.AddXHTMLFile(xhtmlFile);
     }
 }