From b25e4e65b04cd57e68f22f3b40a50842269fdcd5 Mon Sep 17 00:00:00 2001 From: Peter Wetzel Date: Fri, 1 Feb 2019 19:11:12 -0500 Subject: [PATCH] Now uses WetzUtilities. Nuget update. Version bumped to 2.0.1.0 --- KindleBookHelper.Core/Book.cs | 9 +- KindleBookHelper.Core/BookProcessor.cs | 17 +- KindleBookHelper.Core/FileUtilities.cs | 69 -------- .../KindleBookHelper.Core.csproj | 11 +- KindleBookHelper.Core/Poem.cs | 5 +- .../Properties/AssemblyInfo.cs | 6 +- KindleBookHelper.Core/StringExtensions.cs | 148 ------------------ KindleBookHelper.Core/packages.config | 5 +- KindleBookHelper.Test/BookTester.cs | 5 +- .../KindleBookHelper.Test.csproj | 11 +- .../Properties/AssemblyInfo.cs | 6 +- KindleBookHelper.Test/packages.config | 5 +- KindleBookHelper/KindleBookHelper.csproj | 38 ++--- KindleBookHelper/Properties/AssemblyInfo.cs | 6 +- KindleBookHelper/packages.config | 28 ++-- 15 files changed, 87 insertions(+), 282 deletions(-) delete mode 100644 KindleBookHelper.Core/FileUtilities.cs delete mode 100644 KindleBookHelper.Core/StringExtensions.cs diff --git a/KindleBookHelper.Core/Book.cs b/KindleBookHelper.Core/Book.cs index cdd0f3d..3e9ae4a 100644 --- a/KindleBookHelper.Core/Book.cs +++ b/KindleBookHelper.Core/Book.cs @@ -1,6 +1,6 @@ /* KindleBookHelper - Converts raw text file to html format that can be consumed by KindleGen. - Copyright (C) 2018 Peter Wetzel + Copyright (C) 2019 Peter Wetzel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ using Serilog; using System; using System.Collections.Generic; +using WetzUtilities; namespace KindleBookHelper.Core { @@ -39,10 +40,10 @@ public class Book public string Forward { get; set; } [JsonIgnore] - public string TitleFileSafe { get { return Title.URLFriendly(); } } + public string TitleFileSafe => Title.URLFriendly(); [JsonIgnore] - public int EndNavPlayOrder { get { return 3 + Poems.Count; } } + public int EndNavPlayOrder => 3 + Poems.Count; // TODO Pre-work free-form content [JsonIgnore] public List Poems { get; set; } @@ -51,7 +52,7 @@ public class Book public string OriginalText { get; set; } [JsonIgnore] - public int Copyright { get { return DateTime.Now.Year; } } + public int Copyright => DateTime.Now.Year; [JsonIgnore] public string EndPlaceholder { get; set; } diff --git a/KindleBookHelper.Core/BookProcessor.cs b/KindleBookHelper.Core/BookProcessor.cs index 4bdef88..bc5acae 100644 --- a/KindleBookHelper.Core/BookProcessor.cs +++ b/KindleBookHelper.Core/BookProcessor.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json; using Nustache.Core; using Serilog; +using WetzUtilities; namespace KindleBookHelper.Core { @@ -73,13 +74,25 @@ public Book Process() var cssFilePath = Path.Combine(targetDirectoryPath, "poetry.css"); if (!File.Exists(cssFilePath)) { - var css = FileUtilities.LoadTextResource(_assembly, "KindleBookHelper.Core.templates.poetry.css"); - FileUtilities.WriteTextFile(cssFilePath, css); + var css = LoadTextResource(_assembly, "KindleBookHelper.Core.templates.poetry.css"); + FileUtilities.WriteTextFile(targetDirectoryPath, "poetry.css", css); } Log.Information("Finished processing book {Title}", book.Title); return book; } + private string LoadTextResource(Assembly assembly, string resourceName) + { + var data = ""; + using (var sr = new StreamReader(assembly.GetManifestResourceStream(resourceName))) + { + data = sr.ReadToEnd(); + sr.DiscardBufferedData(); + sr.Close(); + } + return data; + } + private void RenderTemplate(string targetDirectoryPath, string template, Book book) { var targetFilePath = Path.Combine(targetDirectoryPath, $"{book.TitleFileSafe}.{template}"); diff --git a/KindleBookHelper.Core/FileUtilities.cs b/KindleBookHelper.Core/FileUtilities.cs deleted file mode 100644 index a2c5c22..0000000 --- a/KindleBookHelper.Core/FileUtilities.cs +++ /dev/null @@ -1,69 +0,0 @@ -/* - KindleBookHelper - Converts raw text file to html format that can be consumed by KindleGen. - Copyright (C) 2018 Peter Wetzel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -using System.IO; -using System.Reflection; - -namespace KindleBookHelper.Core -{ - public static class FileUtilities - { - public static string LoadTextFile(string filePath) - { - var data = ""; - using (StreamReader sr = File.OpenText(filePath)) - { - data = sr.ReadToEnd(); - sr.DiscardBufferedData(); - sr.Close(); - } - return data; - } - - public static string LoadTextResource(Assembly assembly, string resourceName) - { - var data = ""; - using (var sr = new StreamReader(assembly.GetManifestResourceStream(resourceName))) - { - data = sr.ReadToEnd(); - sr.DiscardBufferedData(); - sr.Close(); - } - return data; - } - - public static void CreateDirectoryIfMissing(string directoryPath) - { - if (!Directory.Exists(directoryPath)) - { - Directory.CreateDirectory(directoryPath); - } - } - - public static void WriteTextFile(string filePath, string data) - { - var dirName = Path.GetDirectoryName(filePath); - CreateDirectoryIfMissing(dirName); - using (StreamWriter sw = File.CreateText(filePath)) - { - sw.Write(data); - sw.Flush(); - sw.Close(); - } - } - } -} \ No newline at end of file diff --git a/KindleBookHelper.Core/KindleBookHelper.Core.csproj b/KindleBookHelper.Core/KindleBookHelper.Core.csproj index 17e7344..4b52574 100644 --- a/KindleBookHelper.Core/KindleBookHelper.Core.csproj +++ b/KindleBookHelper.Core/KindleBookHelper.Core.csproj @@ -31,14 +31,14 @@ 4 - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll ..\packages\Nustache.1.16.0.8\lib\net20\Nustache.Core.dll - ..\packages\Serilog.2.7.1\lib\net46\Serilog.dll + ..\packages\Serilog.2.8.0\lib\net46\Serilog.dll @@ -47,15 +47,16 @@ + + ..\packages\WetzUtilities.1.0.0\lib\netstandard2.0\WetzUtilities.dll + - - diff --git a/KindleBookHelper.Core/Poem.cs b/KindleBookHelper.Core/Poem.cs index 1ba5f71..b8a3ec0 100644 --- a/KindleBookHelper.Core/Poem.cs +++ b/KindleBookHelper.Core/Poem.cs @@ -1,6 +1,6 @@ /* KindleBookHelper - Converts raw text file to html format that can be consumed by KindleGen. - Copyright (C) 2018 Peter Wetzel + Copyright (C) 2019 Peter Wetzel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,13 +18,14 @@ using System; using System.Collections.Generic; using System.Linq; +using WetzUtilities; namespace KindleBookHelper.Core { public class Poem { public string Title { get; set; } - public string TitleUrlSafe { get { return Title.URLFriendly(); } } + public string TitleUrlSafe => Title.URLFriendly(); public List Stanzas { get; set; } public Poem(string text) diff --git a/KindleBookHelper.Core/Properties/AssemblyInfo.cs b/KindleBookHelper.Core/Properties/AssemblyInfo.cs index 16ace7a..d23288e 100644 --- a/KindleBookHelper.Core/Properties/AssemblyInfo.cs +++ b/KindleBookHelper.Core/Properties/AssemblyInfo.cs @@ -6,12 +6,12 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("KindleBookHelper")] -[assembly: AssemblyCopyright("Copyright © 2018 Peter Wetzel")] +[assembly: AssemblyCopyright("Copyright © 2019 Peter Wetzel")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("3b63a76a-c55e-4cae-84c4-d07a2cbc1afe")] -[assembly: AssemblyVersion("2.0.0.0")] -[assembly: AssemblyFileVersion("2.0.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.0.1.0")] +[assembly: AssemblyFileVersion("2.0.1.0")] \ No newline at end of file diff --git a/KindleBookHelper.Core/StringExtensions.cs b/KindleBookHelper.Core/StringExtensions.cs deleted file mode 100644 index ce85cdd..0000000 --- a/KindleBookHelper.Core/StringExtensions.cs +++ /dev/null @@ -1,148 +0,0 @@ -using System.Text; - -namespace KindleBookHelper.Core -{ - public static class StringExtensions - { - /// - /// Produces optional, URL-friendly version of a title, "like-this-one". hand-tuned for speed, reflects performance refactoring contributed - /// by John Gietzen (user otac0n) - /// Source: - /// http://stackoverflow.com/a/25486/21865 - /// (Creative Commons Attribution Share Alike) - /// - public static string URLFriendly(this string title) - { - if (title == null) return ""; - - const int maxlen = 80; - int len = title.Length; - bool prevdash = false; - var sb = new StringBuilder(len); - char c; - - for (int i = 0; i < len; i++) - { - c = title[i]; - if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) - { - sb.Append(c); - prevdash = false; - } - else if (c >= 'A' && c <= 'Z') - { - // tricky way to convert to lowercase - sb.Append((char)(c | 32)); - prevdash = false; - } - else if (c == ' ' || c == ',' || c == '.' || c == '/' || - c == '\\' || c == '-' || c == '_' || c == '=') - { - if (!prevdash && sb.Length > 0) - { - sb.Append('-'); - prevdash = true; - } - } - else if ((int)c >= 128) - { - int prevlen = sb.Length; - sb.Append(RemapInternationalCharToAscii(c)); - if (prevlen != sb.Length) prevdash = false; - } - if (i == maxlen) break; - } - - if (prevdash) - return sb.ToString().Substring(0, sb.Length - 1); - else - return sb.ToString(); - } - - /// - /// Source: - /// http://meta.stackoverflow.com/a/7696 - /// (Creative Commons Attribution Share Alike) - /// - public static string RemapInternationalCharToAscii(char c) - { - string s = c.ToString().ToLowerInvariant(); - if ("àåáâäãåą".Contains(s)) - { - return "a"; - } - else if ("èéêëę".Contains(s)) - { - return "e"; - } - else if ("ìíîïı".Contains(s)) - { - return "i"; - } - else if ("òóôõöøőð".Contains(s)) - { - return "o"; - } - else if ("ùúûüŭů".Contains(s)) - { - return "u"; - } - else if ("çćčĉ".Contains(s)) - { - return "c"; - } - else if ("żźž".Contains(s)) - { - return "z"; - } - else if ("śşšŝ".Contains(s)) - { - return "s"; - } - else if ("ñń".Contains(s)) - { - return "n"; - } - else if ("ýÿ".Contains(s)) - { - return "y"; - } - else if ("ğĝ".Contains(s)) - { - return "g"; - } - else if (c == 'ř') - { - return "r"; - } - else if (c == 'ł') - { - return "l"; - } - else if (c == 'đ') - { - return "d"; - } - else if (c == 'ß') - { - return "ss"; - } - else if (c == 'Þ') - { - return "th"; - } - else if (c == 'ĥ') - { - return "h"; - } - else if (c == 'ĵ') - { - return "j"; - } - else - { - return ""; - } - } - } -} \ No newline at end of file diff --git a/KindleBookHelper.Core/packages.config b/KindleBookHelper.Core/packages.config index 0679d83..be3d19b 100644 --- a/KindleBookHelper.Core/packages.config +++ b/KindleBookHelper.Core/packages.config @@ -1,6 +1,7 @@  - + - + + \ No newline at end of file diff --git a/KindleBookHelper.Test/BookTester.cs b/KindleBookHelper.Test/BookTester.cs index f35f057..9403096 100644 --- a/KindleBookHelper.Test/BookTester.cs +++ b/KindleBookHelper.Test/BookTester.cs @@ -21,6 +21,7 @@ using System; using System.IO; using System.Reflection; +using WetzUtilities; namespace KindleHelper.Test { @@ -53,7 +54,7 @@ public void process() Author = "Test Author", AuthorAlphabetical = "Author, Test", }); - FileUtilities.WriteTextFile(_sourceFilePath, settings.ToString()); + FileUtilities.WriteTextFile(directoryPath, Path.GetFileName(_sourceFilePath), settings.ToString()); string endPlaceholder = "--end--"; string sample = $@" A Title @@ -73,7 +74,7 @@ Another line {endPlaceholder} "; - FileUtilities.WriteTextFile(rawFilePath, sample); + FileUtilities.WriteTextFile(directoryPath, "raw.txt", sample); var p = new BookProcessor(_sourceFilePath, endPlaceholder); var book = p.Process(); diff --git a/KindleBookHelper.Test/KindleBookHelper.Test.csproj b/KindleBookHelper.Test/KindleBookHelper.Test.csproj index ad311cb..415ce5d 100644 --- a/KindleBookHelper.Test/KindleBookHelper.Test.csproj +++ b/KindleBookHelper.Test/KindleBookHelper.Test.csproj @@ -1,6 +1,6 @@  - + @@ -35,8 +35,8 @@ 4 - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll ..\packages\NUnit.3.11.0\lib\net45\nunit.framework.dll @@ -48,6 +48,9 @@ + + ..\packages\WetzUtilities.1.0.0\lib\netstandard2.0\WetzUtilities.dll + @@ -71,7 +74,7 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - +