diff --git a/src/chapter_type.h b/src/chapter_type.h index 84d0f11..1cc9532 100644 --- a/src/chapter_type.h +++ b/src/chapter_type.h @@ -114,7 +114,7 @@ evaluate_chapter_type(volume vol, constexpr auto map_yurgenschmidt_href_regex = ctre::search<"map2.xhtml", ctre::case_insensitive>; constexpr auto map_royal_academy_href_regex = ctre::search<"map3.xhtml", ctre::case_insensitive>; constexpr auto family_tree_regex = ctre::search<"tree.xhtml", ctre::case_insensitive>; - constexpr auto afterword_regex = ctre::search<"afterword.xhtml", ctre::case_insensitive>; + constexpr auto afterword_regex = ctre::search<"(afterword.xhtml|final[0-9][_]*[0-9]*)", ctre::case_insensitive>; constexpr auto manga_regex = ctre::search<"text/manga", ctre::case_insensitive>; constexpr auto poll_regex = ctre::search<"text/poll", ctre::case_insensitive>; constexpr auto bonus_regex = ctre::search<"text/bonus", ctre::case_insensitive>; diff --git a/src/part5_defs.h b/src/part5_defs.h index 67ef24e..5bb4a5d 100644 --- a/src/part5_defs.h +++ b/src/part5_defs.h @@ -986,6 +986,114 @@ constexpr std::array vol_11 = std::to_array({ { volume::P5V11, /* COPYRIGHT */ "Text/copyright.xhtml", "application/xhtml+xml", "Copyright", true }, }); + constexpr std::array vol_12 = std::to_array({ + { volume::P5V12, /* NCX */ "toc.ncx", "application/x-dtbncx+xml", std::nullopt, false }, +{ volume::P5V12, /* STYLESHEET */ "Styles/stylesheet.css", "text/css", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/jnovelclubCMYK.png", "image/png", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Color3.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Color1.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Final2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Final1.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Bonus3.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Bonus1.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Characters1.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Characters2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Characters3.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Characters4.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Manga1.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Manga2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Poll1.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Poll2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert15.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert13.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert14.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert12.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert11.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Cover.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert9.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert1.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert8.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert7.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert10.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert4.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert6.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert3.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Insert5.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Map.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Map2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Bonus2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* IMAGE */ "Images/Color2.jpg", "image/jpeg", std::nullopt, false }, +{ volume::P5V12, /* COVER */ "Text/cover.xhtml", "application/xhtml+xml", "Cover", true }, +{ volume::P5V12, /* FRONTMATTER */ "Text/frontmatter1.xhtml", "application/xhtml+xml", "Color Illustrations", true }, +{ volume::P5V12, /* FRONTMATTER */ "Text/frontmatter2.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* FRONTMATTER */ "Text/frontmatter3.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHARACTERS */ "Text/characters1.xhtml", "application/xhtml+xml", "Characters", true }, +{ volume::P5V12, /* CHARACTERS */ "Text/characters2.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHARACTERS */ "Text/characters3.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHARACTERS */ "Text/characters4.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* TOC */ "Text/toc.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/prologue.xhtml", "application/xhtml+xml", "Prologue", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/prologue_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter1.xhtml", "application/xhtml+xml", "Memories", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter2.xhtml", "application/xhtml+xml", "A Future Chosen", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert2.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter2_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter3.xhtml", "application/xhtml+xml", "Busy Days", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter4.xhtml", "application/xhtml+xml", "Entwickeln", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert3.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter4_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter5.xhtml", "application/xhtml+xml", "Eglantine’s Visit", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter6.xhtml", "application/xhtml+xml", "Engagement Ceremony", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert4.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter6_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter7.xhtml", "application/xhtml+xml", "Proclamations as the Aub", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter8.xhtml", "application/xhtml+xml", "Library and Laboratory", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter9.xhtml", "application/xhtml+xml", "Back to Ehrenfest", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert5.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter9_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter10.xhtml", "application/xhtml+xml", "Brewing the Base Color", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter11.xhtml", "application/xhtml+xml", "Aurelia’s Situation", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert6.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter11_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter12.xhtml", "application/xhtml+xml", "A Mother’s Encouragement", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter13.xhtml", "application/xhtml+xml", "Temple Attendants", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert7.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter14.xhtml", "application/xhtml+xml", "Meeting with the Merchants", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter15.xhtml", "application/xhtml+xml", "Inauguration Attire and Closing the Library", true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter16.xhtml", "application/xhtml+xml", "Farewell, Ehrenfest", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert8.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter16_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter17.xhtml", "application/xhtml+xml", "The Morning of the Inauguration Ceremony", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert9.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter17_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/chapter18.xhtml", "application/xhtml+xml", "The Inauguration Ceremony", true }, +{ volume::P5V12, /* CHAPTER */ "Text/epilogue.xhtml", "application/xhtml+xml", "Epilogue", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert10.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* MAP_EHRENFEST_DUCHY */ "Text/map.xhtml", "application/xhtml+xml", "Map of Ehrenfest Duchy", true }, +{ volume::P5V12, /* MAP_YURGENSCHMIDT */ "Text/map2.xhtml", "application/xhtml+xml", "Map of Yurgenschmidt", true }, +{ volume::P5V12, /* AFTERWORD */ "Text/afterword.xhtml", "application/xhtml+xml", "Afterword", true }, +{ volume::P5V12, /* MANGA */ "Text/manga1.xhtml", "application/xhtml+xml", "A Comfy Life with My Family by You Shiina", true }, +{ volume::P5V12, /* MANGA */ "Text/manga2.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert_manga1.xhtml", "application/xhtml+xml", "Alexandria ~On a Sunny Balcony~ by You Shiina", true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert_manga2.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert_manga3.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert_manga4.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* CHAPTER */ "Text/insert_manga5.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* POLL */ "Text/poll1.xhtml", "application/xhtml+xml", "Character Poll", true }, +{ volume::P5V12, /* POLL */ "Text/poll2.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* AFTERWORD */ "Text/final1.xhtml", "application/xhtml+xml", "A Message From Miya Kazuki", true }, +{ volume::P5V12, /* AFTERWORD */ "Text/final1_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* AFTERWORD */ "Text/final2.xhtml", "application/xhtml+xml", "A Message From You Shiina", true }, +{ volume::P5V12, /* AFTERWORD */ "Text/final2_1.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* BONUS */ "Text/bonus1.xhtml", "application/xhtml+xml", "Bonus High Resolution Illustrations", true }, +{ volume::P5V12, /* BONUS */ "Text/bonus2.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* BONUS */ "Text/bonus3.xhtml", "application/xhtml+xml", std::nullopt, true }, +{ volume::P5V12, /* SIGNUP */ "Text/signup.xhtml", "application/xhtml+xml", "About J-Novel Club", true }, +{ volume::P5V12, /* COPYRIGHT */ "Text/copyright.xhtml", "application/xhtml+xml", "Copyright", true }, + }); + constexpr definition_span_view_t vol_1_def { std::span(vol_1), volume::P5V1 }; constexpr definition_span_view_t vol_2_def { std::span(vol_2), volume::P5V2 }; constexpr definition_span_view_t vol_3_def { std::span(vol_3), volume::P5V3 }; @@ -997,9 +1105,10 @@ constexpr definition_span_view_t vol_1_def { std::span(vol_9), volume::P5V9 }; constexpr definition_span_view_t vol_10_def { std::span(vol_10), volume::P5V10 }; constexpr definition_span_view_t vol_11_def { std::span(vol_11), volume::P5V11 }; + constexpr definition_span_view_t vol_12_def { std::span(vol_12), volume::P5V12 }; constexpr std::array part_5_arr { std::to_array({ - vol_1_def, vol_2_def, vol_3_def, vol_4_def, vol_5_def, vol_6_def, vol_7_def, vol_8_def, vol_9_def, vol_10_def, vol_11_def, + vol_1_def, vol_2_def, vol_3_def, vol_4_def, vol_5_def, vol_6_def, vol_7_def, vol_8_def, vol_9_def, vol_10_def, vol_11_def, vol_12_def }) }; constexpr definition_view_t part_5_def { std::span(part_5_arr), omnibus::PART5 }; diff --git a/src/volumes.cpp b/src/volumes.cpp index 61e22b7..8b8bdb3 100644 --- a/src/volumes.cpp +++ b/src/volumes.cpp @@ -51,6 +51,7 @@ namespace { {"ascendance-of-a-bookworm-part-5-volume-9"sv, volume::P5V9}, {"ascendance-of-a-bookworm-part-5-volume-10"sv, volume::P5V10}, {"ascendance-of-a-bookworm-part-5-volume-11"sv, volume::P5V11}, + {"ascendance-of-a-bookworm-part-5-volume-12"sv, volume::P5V12}, }; using namespace std::string_view_literals; @@ -93,6 +94,7 @@ namespace { {"9781718346598"sv, volume::P5V9}, {"9781718346611"sv, volume::P5V10}, {"9781718346635"sv, volume::P5V11}, + {"9781718346659"sv, volume::P5V12}, {"9781718338005"sv, volume::M1V1}, {"9781718338029"sv, volume::M1V2}, {"9781718338043"sv, volume::M1V3}, diff --git a/src/volumes.h b/src/volumes.h index 1cb08fc..8e6587a 100644 --- a/src/volumes.h +++ b/src/volumes.h @@ -48,6 +48,7 @@ enum class volume P5V9, P5V10, P5V11, + P5V12, FB1, FB2, FB3,