From 87ee420a36fa9e5e2d4e30845bd0dd5f1e484255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Fri, 22 May 2020 17:38:03 +0200 Subject: [PATCH] Upgrade Readium CSS to version 1.0.0-beta.1 (commit 5830114) --- .../EPUB/EPUBNavigatorViewController.swift | 2 +- .../EPUB/EPUBReflowableSpreadView.swift | 35 +++- .../EPUB/Resources/Scripts/css.js | 2 +- .../Resources/Static/readium-css/ReadMe.md | 112 +++++++++++ .../ltr => readium-css}/ReadiumCSS-after.css | 188 ++++++++++-------- .../ltr => readium-css}/ReadiumCSS-before.css | 118 +++++++---- .../ReadiumCSS-default.css | 37 +++- .../ReadiumCSS-ebpaj_fonts_patch.css | 80 ++++++++ .../cjk-horizontal/ReadiumCSS-after.css | 155 ++++++++------- .../cjk-horizontal/ReadiumCSS-before.css | 100 +++++++--- .../cjk-horizontal/ReadiumCSS-default.css | 38 +++- .../cjk-vertical/ReadiumCSS-after.css | 136 ++++++++----- .../cjk-vertical/ReadiumCSS-before.css | 100 +++++++--- .../cjk-vertical/ReadiumCSS-default.css | 31 ++- .../readium-css/fonts/AccessibleDfA.otf | Bin 0 -> 145384 bytes .../readium-css/fonts/LICENSE-AccessibleDfa | 95 +++++++++ .../fonts/LICENSE-IaWriterDuospace.md | 110 ++++++++++ .../fonts/iAWriterDuospace-Regular.ttf | Bin 0 -> 81636 bytes .../rtl/ReadiumCSS-after.css | 161 ++++++++------- .../rtl/ReadiumCSS-before.css | 100 +++++++--- .../rtl/ReadiumCSS-default.css | 36 +++- r2-navigator-swift/EPUB/UserSettings.swift | 2 +- 22 files changed, 1196 insertions(+), 442 deletions(-) create mode 100644 r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadMe.md rename r2-navigator-swift/EPUB/Resources/Static/{styles/ltr => readium-css}/ReadiumCSS-after.css (91%) rename r2-navigator-swift/EPUB/Resources/Static/{styles/ltr => readium-css}/ReadiumCSS-before.css (94%) rename r2-navigator-swift/EPUB/Resources/Static/{styles/ltr => readium-css}/ReadiumCSS-default.css (83%) create mode 100644 r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-ebpaj_fonts_patch.css rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/cjk-horizontal/ReadiumCSS-after.css (90%) rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/cjk-horizontal/ReadiumCSS-before.css (95%) rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/cjk-horizontal/ReadiumCSS-default.css (87%) rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/cjk-vertical/ReadiumCSS-after.css (90%) rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/cjk-vertical/ReadiumCSS-before.css (95%) rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/cjk-vertical/ReadiumCSS-default.css (88%) create mode 100755 r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/AccessibleDfA.otf create mode 100755 r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-AccessibleDfa create mode 100755 r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-IaWriterDuospace.md create mode 100755 r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/iAWriterDuospace-Regular.ttf rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/rtl/ReadiumCSS-after.css (91%) rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/rtl/ReadiumCSS-before.css (95%) rename r2-navigator-swift/EPUB/Resources/Static/{styles => readium-css}/rtl/ReadiumCSS-default.css (84%) diff --git a/r2-navigator-swift/EPUB/EPUBNavigatorViewController.swift b/r2-navigator-swift/EPUB/EPUBNavigatorViewController.swift index 316bcf25..2b2f15d9 100644 --- a/r2-navigator-swift/EPUB/EPUBNavigatorViewController.swift +++ b/r2-navigator-swift/EPUB/EPUBNavigatorViewController.swift @@ -82,7 +82,7 @@ open class EPUBNavigatorViewController: UIViewController, VisualNavigator, Logga } /// Base URL on the resources server to the files in Static/ - /// Used to serve the ReadiumCSS files. + /// Used to serve Readium CSS. private let resourcesURL: URL? public init(publication: Publication, license: DRMLicense? = nil, initialLocation: Locator? = nil, resourcesServer: ResourcesServer, config: Configuration = .init()) { diff --git a/r2-navigator-swift/EPUB/EPUBReflowableSpreadView.swift b/r2-navigator-swift/EPUB/EPUBReflowableSpreadView.swift index c146fb3c..780e7ed2 100644 --- a/r2-navigator-swift/EPUB/EPUBReflowableSpreadView.swift +++ b/r2-navigator-swift/EPUB/EPUBReflowableSpreadView.swift @@ -302,18 +302,18 @@ final class EPUBReflowableSpreadView: EPUBSpreadView { scripts.append(WKUserScript(source: EPUBReflowableSpreadView.reflowableScript, injectionTime: .atDocumentStart, forMainFrameOnly: true)) - // Injects ReadiumCSS stylesheets. + // Injects Readium CSS's stylesheets. if let resourcesURL = resourcesURL { // When a publication is served from an HTTPS server, then WKWebView forbids accessing the stylesheets from the local, unsecured GCDWebServer instance. In this case we will inject directly the full content of the CSS in the JavaScript. if publication.baseURL?.scheme?.lowercased() == "https" { func loadCSS(_ name: String) -> String { - return loadResource(at: "styles/\(contentLayout.rawValue)/\(name).css") + return loadResource(at: contentLayout.readiumCSSPath(for: name)) .replacingOccurrences(of: "\\", with: "\\\\") .replacingOccurrences(of: "`", with: "\\`") } - let beforeCSS = loadCSS("ReadiumCSS-before") - let afterCSS = loadCSS("ReadiumCSS-after") + let beforeCSS = loadCSS("before") + let afterCSS = loadCSS("after") scripts.append(WKUserScript( source: EPUBReflowableSpreadView.cssInlineScript .replacingOccurrences(of: "${css-before}", with: beforeCSS) @@ -325,8 +325,7 @@ final class EPUBReflowableSpreadView: EPUBSpreadView { } else { scripts.append(WKUserScript( source: EPUBReflowableSpreadView.cssScript - .replacingOccurrences(of: "${resourcesURL}", with: resourcesURL.absoluteString) - .replacingOccurrences(of: "${contentLayout}", with: contentLayout.rawValue), + .replacingOccurrences(of: "${readiumCSSBaseURL}", with: resourcesURL.appendingPathComponent(contentLayout.readiumCSSBasePath).absoluteString), injectionTime: .atDocumentStart, forMainFrameOnly: false )) @@ -349,3 +348,27 @@ final class EPUBReflowableSpreadView: EPUBSpreadView { } } + +private extension ContentLayout { + + var readiumCSSBasePath: String { + let folder: String = { + switch self { + case .ltr: + return "" + case .rtl: + return "rtl/" + case .cjkVertical: + return "cjk-vertical/" + case .cjkHorizontal: + return "cjk-horizontal/" + } + }() + return "readium-css/\(folder)" + } + + func readiumCSSPath(for name: String) -> String { + return "\(readiumCSSBasePath)ReadiumCSS-\(name).css" + } + +} diff --git a/r2-navigator-swift/EPUB/Resources/Scripts/css.js b/r2-navigator-swift/EPUB/Resources/Scripts/css.js index 61eb6d50..791c5216 100644 --- a/r2-navigator-swift/EPUB/Resources/Scripts/css.js +++ b/r2-navigator-swift/EPUB/Resources/Scripts/css.js @@ -7,7 +7,7 @@ var link = document.createElement('link'); link.setAttribute('rel', 'stylesheet'); link.setAttribute('type', 'text/css'); - link.setAttribute('href', '${resourcesURL}/styles/${contentLayout}/' + name + '.css'); + link.setAttribute('href', '${readiumCSSBaseURL}' + name + '.css'); return link; } diff --git a/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadMe.md b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadMe.md new file mode 100644 index 00000000..b9d6ef6e --- /dev/null +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadMe.md @@ -0,0 +1,112 @@ +# Dealing with Languages/scripts + +You’ll find default stylesheets at the root of this folder, and languages/script-specific ones in their dedicated folder. + +This is a temporary solution to a complex issue (i18n), which is aligned with our current implementation so that we can start testing those specific styles as soon as possible. + +## Right to Left + +If the publication has: + +- a `page-progression-direction` with the value set to `rtl`; +- and language is either Arabic (`ar`), Farsi (`fa`) or Hebrew (`he`). + +Then stylesheets in the `rtl` folder should be used. + +It is also important the `dir` attribute and `xml:lang` be appended to the `html` element of each document if needed. + +Finally, page progression is impacted: + +- previous page is `right`; +- next page is `left`. + +### User settings + +Disabled user settings: + +- `hyphens`; +- `word-spacing`; +- `letter-spacing`. + +Added user settings: + +- `font-variant-ligatures` (mapped to `--USER__ligatures` CSS variable). + +## CJK + +Chinese, Japanese, Korean, and Mongolian can be either written `horizontal-tb` or `vertical-*`. Consequently, there are stylesheets for horizontal and vertical writing modes. + +### Horizontal + +If the publication has: + +- a `page-progression-direction` with the value set to `ltr` – or no attribute –; +- and (at least one) language item is either Chinese (`zh`), Japanese (`ja`), or Korean (`ko`). + +Then stylesheets in the `cjk/horizontal` subfolder should be used. + +It is also important the `xml:lang` be appended to the `html` element of each document if needed. + +#### User settings + +Disabled user settings: + +- `text-align`; +- `hyphens`; +- paragraphs’ indent; +- `word-spacing`; +- `letter-spacing`. + +### Vertical + +If the publication has: + +- a `page-progression-direction` with the value set to `rtl`; +- and (at least one) language item is either Chinese (`zh`), Japanese (`ja`), or Korean (`ko`). + +Then stylesheets in the `cjk/vertical` subfolder should be used. + +It is also important the `xml:lang` be appended to the `html` element of each document if needed. You MUST NOT append a `dir` attribute. + +Please note the `vertical-rl` writing mode will be enforced in this case. + +Finally, page progression is impacted: + +- previous page (`right`) goes up; +- next page (`left`) goes down. + +This means that taps/swipes should behave as usual in horizontal writing i.e. `x-axis` but the app programmatically handles the progression on the `y-axis`. You might therefore want to disable page-transition animations in this case. + +This is consistent with the Readium 1 implementation so the same logic can apply. + +#### User settings + +Disabled user settings: + +- `column-count` (number of columns); +- `text-align`; +- `hyphens`; +- paragraphs’ indent; +- `word-spacing`; +- `letter-spacing`. + +### EBPAJ Polyfill + +The EBPAJ template only references fonts from MS Windows so we must reference fonts from other platforms and override authors’ stylesheets. What we do in this polyfill is keeping their default value and providing fallbacks. + +You might want to load this polyfill (at the end, after `ReadiumCSS-after-cjk(-*)?.css`) only if you find one of the following metadata items in the OPF package: + +- version 1: `ebpaj-guide-1.0` +- version 1.1: `1.1` + +Since we must use `@font-face` to align with their specific implementation (we have to go through 9–11 `local` sources in the worst-case scenario), expect a “rendering debt” though. Do not hesitate to report performance issues for this polyfill. + +### Mongolian + +This is currently an edge case as we still have to see whether we want to support it and how we can support it. Indeed, the situation is the following: + +- Traditional is written `vertical-lr` so we can’t use `page-progression-direction` as an hint, and we must check if the language item (`mn`) is enough: + - if `mn-Mong` is set, then `vertical-lr` must be used; + - if `mn-Cyrl` is set, then the publication is in cyrillic and it is `horizontal-tb`. +- We don’t currently support the `mn` language, and we can’t rely on system fonts to do so, we’ll have to embed one. + diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-after.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-after.css similarity index 91% rename from r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-after.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-after.css index bca0ebdb..7950ef54 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-after.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-after.css @@ -39,7 +39,22 @@ /* Direction i.e. ltr and rtl */ -/* Readium CSS +/* Readium CSS + Namespaces module + + Namespaces to import in all 3 dist stylesheets + + Repo: https://github.com/readium/readium-css */ + +@namespace url("http://www.w3.org/1999/xhtml"); + +@namespace epub url("http://www.idpf.org/2007/ops"); + +@namespace m url("http://www.w3.org/1998/Math/MathML/"); + +@namespace svg url("http://www.w3.org/2000/svg"); + +/* Readium CSS Pagination module A set of styles to paginate ePublications @@ -48,9 +63,9 @@ /* Config */ -/* Columns are responsive by default, even if column-width is set in pixels, +/* Columns are responsive by default, even if column-width is set in pixels, which means two-page spread will switch to single page depending on current font-size. - If you want more control, I’m afraid you’ll have to update colWidth/colGap dynamically, + If you want more control, I’m afraid you’ll have to update colWidth/colGap dynamically, which is how a significant amount of RS do at the moment. */ /* Default for smartphone portrait (small screens) */ @@ -79,7 +94,7 @@ } /* :root selector has same specificity as a class i.e. 0010 - We might have to change that to html / context + We might have to change that to html / context -> https://css-tricks.com/almanac/selectors/r/root/ */ :root { @@ -187,7 +202,7 @@ body { } } -/* Readium CSS +/* Readium CSS Scroll module A set of styles to scroll ePublications @@ -196,7 +211,7 @@ body { Repo: https://github.com/readium/readium-css */ :root[style*="readium-scroll-on"] { - + /* Reset columns, auto + auto = columns can’t be created */ -webkit-columns: auto auto !important; -moz-columns: auto auto !important; @@ -207,57 +222,16 @@ body { max-height: none !important; /* Reset html size so that the user can scroll */ min-width: 0 !important; - min-height: 0 !important; + min-height: 0 !important; } /* Make sure line-length is limited in all configs */ :root[style*="readium-scroll-on"] body { - --RS__maxLineLength: 40rem !important; - - margin-top: var(--RS__pageGutter) !important; - margin-bottom: var(--RS__pageGutter) !important; -} - -/* Scroll mode horizontal */ - -/* Vertical writing needs body height set */ - -/* Do we add a top/bottom margin for body in vertical scroll or not? */ - -/* Readium CSS - Default highlights - - A stylesheet for user highlights - - Repo: https://github.com/readium/readium-css */ - -/* User Highlights */ - -.readiumCSS-yellow-highlight { - background-color: rgba(255, 255, 0, 0.5); -} - -.readiumCSS-green-highlight { - background-color: rgba(0, 255, 0, 0.5); -} - -.readiumCSS-orange-highlight { - background-color: rgba(255, 165, 0, 0.5); -} - -.readiumCSS-pink-highlight { - background-color: rgba(255, 105, 180, 0.5); + --RS__maxLineLength: 40rem !important; } -/* Media overlays */ - -.readiumCSS-mo-active-default { - color: black !important; - background-color: yellow !important; -} - -/* Readium CSS +/* Readium CSS Night mode A preset theme for night mode @@ -303,8 +277,11 @@ body { color: var(--RS__visitedColor) !important; } +/* For epub:type, in case the contents are served as text/html, namespaces won’t work hence why we’re using both syntax */ + :root[style*="readium-night-on"] img[class*="gaiji"], -:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { +:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, +:root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: invert(100%); filter: invert(100%); } @@ -330,7 +307,7 @@ body { filter: brightness(80%) invert(100%); } -/* Readium CSS +/* Readium CSS Sepia mode A preset theme for sepia mode @@ -355,11 +332,9 @@ body { /* we don’t need to redeclare bg-color and color for :root since we will inherit and update from day/default mode */ -:root[style*="readium-sepia-on"] body { - /* Should be transparent but Chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=711955&q=mix-blend-mode&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified */ - - color: inherit; - background-color: var(--RS__backgroundColor); +:root[style*="readium-sepia-on"] *:not(a) { + color: inherit !important; + background-color: transparent !important; } :root[style*="readium-sepia-on"] a:link, @@ -379,7 +354,7 @@ body { mix-blend-mode: multiply; } -/* Readium CSS +/* Readium CSS OS Accessibility Modes A stylesheet to deal with OS accessibility settings @@ -415,7 +390,8 @@ body { @media screen and (-ms-high-contrast: white-on-black) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -433,7 +409,8 @@ body { @media screen and (inverted-colors) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -456,7 +433,7 @@ body { /* If reduced motion is set on MacOS, in case we have animation/transition */ } -/* Readium CSS +/* Readium CSS Columns number pref A submodule managing columns number for user settings @@ -494,7 +471,7 @@ body { } } -/* Readium CSS +/* Readium CSS Page margins pref A submodule managing page margins for user settings @@ -508,7 +485,7 @@ body { padding: 0 calc(var(--RS__pageGutter) * var(--USER__pageMargins)) !important; } -/* Readium CSS +/* Readium CSS Custom colors pref A submodule managing custom colors for user settings @@ -532,7 +509,7 @@ body { color: inherit !important; } -/* Readium CSS +/* Readium CSS Text align pref A submodule managing text-align for user settings @@ -555,7 +532,7 @@ body { /* In case something goes wrong at the programmatic level + rtl for body + rtl in ltr */ -:root[style*="readium-advanced-on"][dir="rtl"][style*="--USER__textAlign:left"], +:root[style*="readium-advanced-on"][dir="rtl"][style*="--USER__textAlign: left"], :root[style*="readium-advanced-on"][dir="rtl"][style*="--USER__textAlign:left"], :root[style*="readium-advanced-on"][style*="--USER__textAlign: left"] *[dir="rtl"], :root[style*="readium-advanced-on"][style*="--USER__textAlign:left"] *[dir="rtl"] { @@ -564,12 +541,12 @@ body { /* Edge, if logical value is used, think of it as a polyfill. For LTR, it will fall back to the default, which is left */ -:root[style*="readium-advanced-on"][dir="rtl"][style*="--USER__textAlign:start"], +:root[style*="readium-advanced-on"][dir="rtl"][style*="--USER__textAlign: start"], :root[style*="readium-advanced-on"][dir="rtl"][style*="--USER__textAlign:start"] { text-align: right; } -/* Readium CSS +/* Readium CSS Hyphenation pref A submodule managing hyphens for user settings @@ -623,7 +600,7 @@ body { hyphens: inherit; } -/* Readium CSS +/* Readium CSS Font Family pref A submodule managing font-family for user settings @@ -659,7 +636,7 @@ body { font-family: inherit !important; } -/* Readium CSS +/* Readium CSS A11y font pref A submodule managing a11y text normalization for user settings @@ -667,11 +644,11 @@ body { Repo: https://github.com/readium/readium-css */ -/* For AccessibleDfa, we need to normalize font-weight and font-style since only the normal style is available */ +/* For AccessibleDfA, we need to normalize font-weight and font-style since only the normal style is available */ -:root[style*="readium-font-on"][style*="AccessibleDfa"] { +:root[style*="readium-font-on"][style*="AccessibleDfA"] { /* We won’t use the variable there since we need fallbacks for missing characters */ - font-family: AccessibleDfa, Verdana, Tahoma, "Trebuchet MS", sans-serif !important; + font-family: AccessibleDfA, Verdana, Tahoma, "Trebuchet MS", sans-serif !important; --RS__lineHeightCompensation: 1.167; } @@ -688,7 +665,7 @@ body { /* Maybe users want a setting to normalize any font offered so there is a “a11y Normalize” flag for it */ -:root[style*="readium-font-on"][style*="AccessibleDfa"], +:root[style*="readium-font-on"][style*="AccessibleDfA"], :root[style*="readium-font-on"][style*="IA Writer Duospace"], :root[style*="readium-font-on"][style*="readium-a11y-on"] { font-style: normal !important; @@ -697,7 +674,7 @@ body { /* Targeting everything except code. Note that Open Dyslexic has a monospaced font for code */ -:root[style*="readium-font-on"][style*="AccessibleDfa"] *:not(code):not(var):not(kbd):not(samp), +:root[style*="readium-font-on"][style*="AccessibleDfA"] *:not(code):not(var):not(kbd):not(samp), :root[style*="readium-font-on"][style*="IA Writer Duospace"] *:not(code):not(var):not(kbd):not(samp), :root[style*="readium-font-on"][style*="readium-a11y-on"] *:not(code):not(var):not(kbd):not(samp) { font-family: inherit !important; @@ -707,7 +684,7 @@ body { /* Normalizing text-decoration, subs and sups */ -:root[style*="readium-font-on"][style*="AccessibleDfa"] *, +:root[style*="readium-font-on"][style*="AccessibleDfA"] *, :root[style*="readium-font-on"][style*="IA Writer Duospace"] *, :root[style*="readium-font-on"][style*="readium-a11y-on"] * { text-decoration: none !important; @@ -716,17 +693,17 @@ body { font-variant-position: normal !important; } -:root[style*="readium-font-on"][style*="AccessibleDfa"] sup, +:root[style*="readium-font-on"][style*="AccessibleDfA"] sup, :root[style*="readium-font-on"][style*="IA Writer Duospace"] sup, :root[style*="readium-font-on"][style*="readium-a11y-on"] sup, -:root[style*="readium-font-on"][style*="AccessibleDfa"] sub, +:root[style*="readium-font-on"][style*="AccessibleDfA"] sub, :root[style*="readium-font-on"][style*="IA Writer Duospace"] sub, :root[style*="readium-font-on"][style*="readium-a11y-on"] sub { font-size: 1rem !important; vertical-align: baseline !important; } -/* Readium CSS +/* Readium CSS Font size pref A submodule managing font-size for user settings @@ -738,7 +715,7 @@ body { font-size: var(--USER__fontSize) !important; } -/* Readium CSS +/* Readium CSS Line height pref A submodule managing line-height for user settings @@ -757,7 +734,7 @@ body { line-height: inherit; } -/* Readium CSS +/* Readium CSS Para spacing pref A submodule managing paragraphs’ top and bottom margins for user settings @@ -770,7 +747,7 @@ body { margin-bottom: var(--USER__paraSpacing) !important; } -/* Readium CSS +/* Readium CSS Para indent pref A submodule managing paragraphs’ text-indent for user settings @@ -789,7 +766,7 @@ body { text-indent: 0 !important; } -/* Readium CSS +/* Readium CSS Word spacing pref A submodule managing word-spacing for user settings @@ -809,7 +786,7 @@ body { word-spacing: var(--USER__wordSpacing); } -/* Readium CSS +/* Readium CSS Letter spacing pref A submodule managing letter-spacing for user settings @@ -830,7 +807,7 @@ body { font-variant: none; } -/* Readium CSS +/* Readium CSS Font size normalize A stylesheet to normalize font-size @@ -889,7 +866,7 @@ body { font-size: 67.5% !important; } -/* The following styles kick in if you define the typeScale variable in the DOM. +/* The following styles kick in if you define the typeScale variable in the DOM. No need to repeat declarations which don’t make use of the variable */ :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h1 { @@ -903,3 +880,44 @@ body { :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h3 { font-size: calc(1rem * var(--USER__typeScale)) !important; } + +/* Readium CSS + Default highlights + + A stylesheet for user highlights + + Repo: https://github.com/readium/readium-css */ + +/* User Highlights */ + +.readiumCSS-yellow-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-yellow-highlight, +:root[style*="readium-night-on"] .readiumCSS-yellow-highlight { + background-color: rgba(255, 255, 0, 0.5) !important; +} + +.readiumCSS-green-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-green-highlight, +:root[style*="readium-night-on"] .readiumCSS-green-highlight { + background-color: rgba(0, 255, 0, 0.5) !important; +} + +.readiumCSS-orange-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-orange-highlight, +:root[style*="readium-night-on"] .readiumCSS-orange-highlight { + background-color: rgba(255, 165, 0, 0.5) !important; +} + +.readiumCSS-pink-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-pink-highlight, +:root[style*="readium-night-on"] .readiumCSS-pink-highlight { + background-color: rgba(255, 105, 180, 0.5) !important; +} + +/* Media overlays */ + +.readiumCSS-mo-active-default { + color: black !important; + background-color: yellow !important; +} +/*# sourceMappingURL=ReadiumCSS-after.css.map */ \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-before.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-before.css similarity index 94% rename from r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-before.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-before.css index 2c5a0fbb..6511e6d5 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-before.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-before.css @@ -39,10 +39,10 @@ /* Direction i.e. ltr and rtl */ -/* Readium CSS - Base module +/* Readium CSS + Namespaces module - A minimal stylesheet for all ebooks + Namespaces to import in all 3 dist stylesheets Repo: https://github.com/readium/readium-css */ @@ -54,6 +54,13 @@ @namespace svg url("http://www.w3.org/2000/svg"); +/* Readium CSS + Base module + + A minimal stylesheet for all ebooks + + Repo: https://github.com/readium/readium-css */ + /* Define viewport, HTML5-style */ @-ms-viewport { @@ -75,7 +82,7 @@ /* Config */ --RS__baseFontFamily: var(--RS__oldStyleTf); - + /* For square-ish fonts (CJK, Indic, etc.), we must apply some compensation in dynamic leading. Default is 1 i.e. no compensation */ --RS__lineHeightCompensation: 1; @@ -170,7 +177,7 @@ math { :lang(ja) { --RS__baseFontFamily: "游ゴシック体", YuGothic, "ヒラギノ丸ゴ", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", Roboto, Noto, "Noto Sans CJK JP", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; @@ -193,7 +200,7 @@ math { :lang(ko) { --RS__baseFontFamily: "Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", Roboto, Noto, "Noto Sans CJK KR", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } @@ -248,19 +255,19 @@ math { :lang(zh-Hant), :lang(zh-TW) { --RS__baseFontFamily: "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } :lang(zh-HK) { --RS__baseFontFamily: "方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } -/* Readium CSS +/* Readium CSS Day/Default mode A preset theme for day mode, which is the default @@ -295,7 +302,7 @@ math { background-color: var(--RS__selectionBackgroundColor); } -/* Readium CSS +/* Readium CSS Fonts module A stylesheet for embedded fonts @@ -305,10 +312,10 @@ math { /* /!\ Mind the path (relative to the folders in which you have stylesheets and the fonts) */ @font-face { - font-family: AccessibleDfa; + font-family: AccessibleDfA; font-style: normal; font-weight: normal; - src: local("AccessibleDfa"), + src: local("AccessibleDfA"), url("fonts/AccessibleDfA.otf") format("opentype"); } @@ -320,12 +327,12 @@ math { url("fonts/iAWriterDuospace-Regular.ttf") format("truetype"); } -/* If you have different weights/styles, - use `font-weight` and `font-style`, - not prefixes in the font-family name, +/* If you have different weights/styles, + use `font-weight` and `font-style`, + not prefixes in the font-family name, or else it will be a nightmare to manage in user settings. */ -/* Readium CSS +/* Readium CSS HTML5 SR Patch stylesheet A set of style to adjust HTML5 Suggested Rendering to paginated content @@ -344,15 +351,28 @@ figcaption, th, td { orphans: 1; } -h2, h3, h4, h5, h6, dt, -hr, caption { +h2, +h3, +h4, +h5, +h6, +dt, +hr, +caption { -webkit-column-break-after: avoid; page-break-after: avoid; break-after: avoid; } -h1, h2, h3, h4, h5, h6, dt, -figure, tr { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figure, +tr { -webkit-column-break-inside: avoid; page-break-inside: avoid; break-inside: avoid; @@ -370,9 +390,20 @@ body { hyphenate-limit-lines: 3; } -h1, h2, h3, h4, h5, h6, dt, -figcaption, pre, caption, address, -center, code, var { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figcaption, +pre, +caption, +address, +center, +code, +var { -ms-hyphens: none; -moz-hyphens: none; -webkit-hyphens: none; @@ -434,13 +465,13 @@ figure, blockquote { margin: 1em 5%; } -/* +/* :lang(ja) figure, :lang(ja) blockquote, :lang(zh-Hant) figure, :lang(zh-Hant) blockquote, :lang(zh-TW) figure, :lang(zh-TW) blockquote, :lang(mn) figure, :lang(mn) blockquote { - margin: 5% 1em; + margin: 5% 1em; } */ @@ -449,13 +480,13 @@ ul, ol { padding-left: 5%; } -/* +/* :lang(ja) ul, :lang(ja) ol, :lang(zh-Hant) ul, :lang(zh-Hant) ol, :lang(zh-TW) ul, :lang(zh-TW) ol, :lang(mn) ul, :lang(mn) ol { - padding-top: 5%; + padding-top: 5%; } */ @@ -464,13 +495,13 @@ dd { margin-left: 5%; } -/* +/* :lang(ja) dd, :lang(zh-Hant) dd, -:lang(zh-TW) dd, +:lang(zh-TW) dd, :lang(mn) dd { - margin-top: 5%; + margin-top: 5%; } */ @@ -507,19 +538,28 @@ ruby > rt, ruby > rp { *:lang(ja), *:lang(zh), *:lang(ko), -:lang(ja) cite, :lang(ja) dfn, :lang(ja) em, :lang(ja) i, -:lang(zh) cite, :lang(zh) dfn, :lang(zh) em, :lang(zh) i, -:lang(ko) cite, :lang(ko) dfn, :lang(ko) em, :lang(ko) i { +:lang(ja) cite, +:lang(ja) dfn, +:lang(ja) em, +:lang(ja) i, +:lang(zh) cite, +:lang(zh) dfn, +:lang(zh) em, +:lang(zh) i, +:lang(ko) cite, +:lang(ko) dfn, +:lang(ko) em, +:lang(ko) i { font-style: normal; } -:lang(ja) a, +:lang(ja) a, :lang(zh) a, :lang(ko) a { text-decoration: none; } -/* Readium CSS +/* Readium CSS Safeguards module A set of styles to prevent common issues in pagination @@ -534,7 +574,7 @@ ruby > rt, ruby > rp { /* max-width for media, you can override that via JS if not compiled to static */ --RS__maxMediaWidth: 100%; - /* max-height for media, you can override that via JS if not compiled to static + /* max-height for media, you can override that via JS if not compiled to static Please consider figures might have a figcaption, which is why 95vh in the first place */ --RS__maxMediaHeight: 95vh; @@ -597,9 +637,7 @@ img, svg, audio, video { /* Try preventing border being cut-off, webkit + blink have content-box by default */ table { - - /* We might want to set at least overflow-x to auto in case the table doesn't fit, - max-width is not necessarily the best solution there, but maybe we could investigate transform scale */ - overflow-x: auto; + max-width: var(--RS__maxMediaWidth); box-sizing: var(--RS__boxSizingTable); } +/*# sourceMappingURL=ReadiumCSS-before.css.map */ \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-default.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-default.css similarity index 83% rename from r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-default.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-default.css index 00b6269e..78aa0172 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/ltr/ReadiumCSS-default.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-default.css @@ -1,4 +1,19 @@ -/* Readium CSS +/* Readium CSS + Namespaces module + + Namespaces to import in all 3 dist stylesheets + + Repo: https://github.com/readium/readium-css */ + +@namespace url("http://www.w3.org/1999/xhtml"); + +@namespace epub url("http://www.idpf.org/2007/ops"); + +@namespace m url("http://www.w3.org/1998/Math/MathML/"); + +@namespace svg url("http://www.w3.org/2000/svg"); + +/* Readium CSS Default module A stylesheet for unstyled ebooks based on HTML5 Suggested Rendering @@ -40,19 +55,30 @@ h1, h2, h3, h4, h5, h6 { /* Flow content */ -blockquote, figure, p, pre, -aside, footer, form, hr { +blockquote, +figure, +p, +pre, +aside, +footer, +form, +hr { margin-top: var(--RS__flowSpacing); margin-bottom: var(--RS__flowSpacing); } p { margin-top: var(--RS__paraSpacing); - margin-bottom: var(--RS__paraSpacing); + margin-bottom: var(--RS__paraSpacing); text-indent: var(--RS__paraIndent); } -h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, +h1 + p, +h2 + p, +h3 + p, +h4 + p, +h5 + p, +h6 + p, hr + p { text-indent: 0; } @@ -160,3 +186,4 @@ th, td { padding: 4px; border: 1px solid currentColor; } +/*# sourceMappingURL=ReadiumCSS-default.css.map */ \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-ebpaj_fonts_patch.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-ebpaj_fonts_patch.css new file mode 100644 index 00000000..b73eb674 --- /dev/null +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/ReadiumCSS-ebpaj_fonts_patch.css @@ -0,0 +1,80 @@ +/* Readium CSS + EBPAJ Fonts Patch module + + A stylesheet improving EBPAJ @font-face declarations to cover all platforms + + Repo: https://github.com/readium/readium-css */ + +/* EBPAJ template only references fonts from MS Windows… + so we must reference fonts from other platforms + and override authors’ stylesheets. + What we do there is keeping their default value and providing fallbacks. + + /!\ /!\ /!\ /!\ /!\ + FYI, you might want to load this polyfill only if you find + one of the following metadata items in the OPF package: + - version 1: + ebpaj-guide-1.0 + - version 1.1: + 1.1 + */ + +/* 横組み用 (horizontal writing) */ + +@font-face { + font-family: "serif-ja"; + src: local("MS P明朝"), + local("MS PMincho"), + local("Hiragino Mincho Pro"), + local("ヒラギノ明朝 Pro W3"), + local("游明朝"), + local("YuMincho"), + local("MS 明朝"), + local("MS Mincho"), + local("Hiragino Mincho ProN"); +} + +@font-face { + font-family: "sans-serif-ja"; + src: local("MS Pゴシック"), + local("MS PGothic"), + local("Hiragino Kaku Gothic Pro W3"), + local("ヒラギノ角ゴ Pro W3"), + local("Hiragino Sans GB"), + local("ヒラギノ角ゴシック W3"), + local("游ゴシック"), + local("YuGothic"), + local("MS ゴシック"), + local("MS Gothic"), + local("Hiragino Sans"); +} + +/* 縦組み用 (vertical writing) */ + +@font-face { + font-family: "serif-ja-v"; + src: local("MS 明朝"), + local("MS Mincho"), + local("Hiragino Mincho Pro"), + local("ヒラギノ明朝 Pro W3"), + local("游明朝"), + local("YuMincho"), + local("MS P明朝"), + local("MS PMincho"), + local("Hiragino Mincho ProN"); +} + +@font-face { + font-family: "sans-serif-ja-v"; + src: local("MS ゴシック"), + local("MS Gothic"), + local("Hiragino Kaku Gothic Pro W3"), + local("ヒラギノ角ゴ Pro W3"), + local("Hiragino Sans GB"), + local("ヒラギノ角ゴシック W3"), + local("游ゴシック"), + local("YuGothic"), + local("MS Pゴシック"), + local("MS PGothic"), + local("Hiragino Sans"); +} \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-after.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-after.css similarity index 90% rename from r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-after.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-after.css index 020c57c7..47867bfd 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-after.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-after.css @@ -39,7 +39,22 @@ /* Direction i.e. ltr and rtl */ -/* Readium CSS +/* Readium CSS + Namespaces module + + Namespaces to import in all 3 dist stylesheets + + Repo: https://github.com/readium/readium-css */ + +@namespace url("http://www.w3.org/1999/xhtml"); + +@namespace epub url("http://www.idpf.org/2007/ops"); + +@namespace m url("http://www.w3.org/1998/Math/MathML/"); + +@namespace svg url("http://www.w3.org/2000/svg"); + +/* Readium CSS Pagination module A set of styles to paginate ePublications @@ -48,9 +63,9 @@ /* Config */ -/* Columns are responsive by default, even if column-width is set in pixels, +/* Columns are responsive by default, even if column-width is set in pixels, which means two-page spread will switch to single page depending on current font-size. - If you want more control, I’m afraid you’ll have to update colWidth/colGap dynamically, + If you want more control, I’m afraid you’ll have to update colWidth/colGap dynamically, which is how a significant amount of RS do at the moment. */ /* Default for smartphone portrait (small screens) */ @@ -79,7 +94,7 @@ } /* :root selector has same specificity as a class i.e. 0010 - We might have to change that to html / context + We might have to change that to html / context -> https://css-tricks.com/almanac/selectors/r/root/ */ :root { @@ -187,7 +202,7 @@ body { } } -/* Readium CSS +/* Readium CSS Scroll module A set of styles to scroll ePublications @@ -196,7 +211,7 @@ body { Repo: https://github.com/readium/readium-css */ :root[style*="readium-scroll-on"] { - + /* Reset columns, auto + auto = columns can’t be created */ -webkit-columns: auto auto !important; -moz-columns: auto auto !important; @@ -207,57 +222,16 @@ body { max-height: none !important; /* Reset html size so that the user can scroll */ min-width: 0 !important; - min-height: 0 !important; + min-height: 0 !important; } /* Make sure line-length is limited in all configs */ :root[style*="readium-scroll-on"] body { - --RS__maxLineLength: 40rem !important; - - margin-top: var(--RS__pageGutter) !important; - margin-bottom: var(--RS__pageGutter) !important; -} - -/* Scroll mode horizontal */ - -/* Vertical writing needs body height set */ - -/* Do we add a top/bottom margin for body in vertical scroll or not? */ - -/* Readium CSS - Default highlights - - A stylesheet for user highlights - - Repo: https://github.com/readium/readium-css */ - -/* User Highlights */ - -.readiumCSS-yellow-highlight { - background-color: rgba(255, 255, 0, 0.5); -} - -.readiumCSS-green-highlight { - background-color: rgba(0, 255, 0, 0.5); -} - -.readiumCSS-orange-highlight { - background-color: rgba(255, 165, 0, 0.5); -} - -.readiumCSS-pink-highlight { - background-color: rgba(255, 105, 180, 0.5); -} - -/* Media overlays */ - -.readiumCSS-mo-active-default { - color: black !important; - background-color: yellow !important; + --RS__maxLineLength: 40rem !important; } -/* Readium CSS +/* Readium CSS Night mode A preset theme for night mode @@ -303,8 +277,11 @@ body { color: var(--RS__visitedColor) !important; } +/* For epub:type, in case the contents are served as text/html, namespaces won’t work hence why we’re using both syntax */ + :root[style*="readium-night-on"] img[class*="gaiji"], -:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { +:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, +:root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: invert(100%); filter: invert(100%); } @@ -330,7 +307,7 @@ body { filter: brightness(80%) invert(100%); } -/* Readium CSS +/* Readium CSS Sepia mode A preset theme for sepia mode @@ -355,11 +332,9 @@ body { /* we don’t need to redeclare bg-color and color for :root since we will inherit and update from day/default mode */ -:root[style*="readium-sepia-on"] body { - /* Should be transparent but Chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=711955&q=mix-blend-mode&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified */ - - color: inherit; - background-color: var(--RS__backgroundColor); +:root[style*="readium-sepia-on"] *:not(a) { + color: inherit !important; + background-color: transparent !important; } :root[style*="readium-sepia-on"] a:link, @@ -379,7 +354,7 @@ body { mix-blend-mode: multiply; } -/* Readium CSS +/* Readium CSS OS Accessibility Modes A stylesheet to deal with OS accessibility settings @@ -415,7 +390,8 @@ body { @media screen and (-ms-high-contrast: white-on-black) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -433,7 +409,8 @@ body { @media screen and (inverted-colors) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -456,7 +433,7 @@ body { /* If reduced motion is set on MacOS, in case we have animation/transition */ } -/* Readium CSS +/* Readium CSS Columns number pref A submodule managing columns number for user settings @@ -494,7 +471,7 @@ body { } } -/* Readium CSS +/* Readium CSS Page margins pref A submodule managing page margins for user settings @@ -508,7 +485,7 @@ body { padding: 0 calc(var(--RS__pageGutter) * var(--USER__pageMargins)) !important; } -/* Readium CSS +/* Readium CSS Custom colors pref A submodule managing custom colors for user settings @@ -532,7 +509,7 @@ body { color: inherit !important; } -/* Readium CSS +/* Readium CSS Font Family pref A submodule managing font-family for user settings @@ -568,7 +545,7 @@ body { font-family: inherit !important; } -/* Readium CSS +/* Readium CSS Font size pref A submodule managing font-size for user settings @@ -580,7 +557,7 @@ body { font-size: var(--USER__fontSize) !important; } -/* Readium CSS +/* Readium CSS Line height pref A submodule managing line-height for user settings @@ -599,7 +576,7 @@ body { line-height: inherit; } -/* Readium CSS +/* Readium CSS Para spacing pref A submodule managing paragraphs’ top and bottom margins for user settings @@ -612,7 +589,7 @@ body { margin-bottom: var(--USER__paraSpacing) !important; } -/* Readium CSS +/* Readium CSS Font size normalize A stylesheet to normalize font-size @@ -671,7 +648,7 @@ body { font-size: 67.5% !important; } -/* The following styles kick in if you define the typeScale variable in the DOM. +/* The following styles kick in if you define the typeScale variable in the DOM. No need to repeat declarations which don’t make use of the variable */ :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h1 { @@ -685,4 +662,44 @@ body { :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h3 { font-size: calc(1rem * var(--USER__typeScale)) !important; } + +/* Readium CSS + Default highlights + + A stylesheet for user highlights + + Repo: https://github.com/readium/readium-css */ + +/* User Highlights */ + +.readiumCSS-yellow-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-yellow-highlight, +:root[style*="readium-night-on"] .readiumCSS-yellow-highlight { + background-color: rgba(255, 255, 0, 0.5) !important; +} + +.readiumCSS-green-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-green-highlight, +:root[style*="readium-night-on"] .readiumCSS-green-highlight { + background-color: rgba(0, 255, 0, 0.5) !important; +} + +.readiumCSS-orange-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-orange-highlight, +:root[style*="readium-night-on"] .readiumCSS-orange-highlight { + background-color: rgba(255, 165, 0, 0.5) !important; +} + +.readiumCSS-pink-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-pink-highlight, +:root[style*="readium-night-on"] .readiumCSS-pink-highlight { + background-color: rgba(255, 105, 180, 0.5) !important; +} + +/* Media overlays */ + +.readiumCSS-mo-active-default { + color: black !important; + background-color: yellow !important; +} /*# sourceMappingURL=ReadiumCSS-after.css.map */ \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-before.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-before.css similarity index 95% rename from r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-before.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-before.css index 28778589..dcb79fff 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-before.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-before.css @@ -39,10 +39,10 @@ /* Direction i.e. ltr and rtl */ -/* Readium CSS - Base module +/* Readium CSS + Namespaces module - A minimal stylesheet for all ebooks + Namespaces to import in all 3 dist stylesheets Repo: https://github.com/readium/readium-css */ @@ -54,6 +54,13 @@ @namespace svg url("http://www.w3.org/2000/svg"); +/* Readium CSS + Base module + + A minimal stylesheet for all ebooks + + Repo: https://github.com/readium/readium-css */ + /* Define viewport, HTML5-style */ @-ms-viewport { @@ -75,7 +82,7 @@ /* Config */ --RS__baseFontFamily: var(--RS__oldStyleTf); - + /* For square-ish fonts (CJK, Indic, etc.), we must apply some compensation in dynamic leading. Default is 1 i.e. no compensation */ --RS__lineHeightCompensation: 1; @@ -170,7 +177,7 @@ math { :lang(ja) { --RS__baseFontFamily: "游ゴシック体", YuGothic, "ヒラギノ丸ゴ", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", Roboto, Noto, "Noto Sans CJK JP", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; @@ -193,7 +200,7 @@ math { :lang(ko) { --RS__baseFontFamily: "Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", Roboto, Noto, "Noto Sans CJK KR", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } @@ -248,19 +255,19 @@ math { :lang(zh-Hant), :lang(zh-TW) { --RS__baseFontFamily: "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } :lang(zh-HK) { --RS__baseFontFamily: "方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } -/* Readium CSS +/* Readium CSS Day/Default mode A preset theme for day mode, which is the default @@ -297,7 +304,7 @@ math { /* @import "modules/ReadiumCSS-fonts.css"; */ -/* Readium CSS +/* Readium CSS HTML5 SR Patch stylesheet A set of style to adjust HTML5 Suggested Rendering to paginated content @@ -316,15 +323,28 @@ figcaption, th, td { orphans: 1; } -h2, h3, h4, h5, h6, dt, -hr, caption { +h2, +h3, +h4, +h5, +h6, +dt, +hr, +caption { -webkit-column-break-after: avoid; page-break-after: avoid; break-after: avoid; } -h1, h2, h3, h4, h5, h6, dt, -figure, tr { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figure, +tr { -webkit-column-break-inside: avoid; page-break-inside: avoid; break-inside: avoid; @@ -342,9 +362,20 @@ body { hyphenate-limit-lines: 3; } -h1, h2, h3, h4, h5, h6, dt, -figcaption, pre, caption, address, -center, code, var { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figcaption, +pre, +caption, +address, +center, +code, +var { -ms-hyphens: none; -moz-hyphens: none; -webkit-hyphens: none; @@ -406,13 +437,13 @@ figure, blockquote { margin: 1em 5%; } -/* +/* :lang(ja) figure, :lang(ja) blockquote, :lang(zh-Hant) figure, :lang(zh-Hant) blockquote, :lang(zh-TW) figure, :lang(zh-TW) blockquote, :lang(mn) figure, :lang(mn) blockquote { - margin: 5% 1em; + margin: 5% 1em; } */ @@ -421,13 +452,13 @@ ul, ol { padding-left: 5%; } -/* +/* :lang(ja) ul, :lang(ja) ol, :lang(zh-Hant) ul, :lang(zh-Hant) ol, :lang(zh-TW) ul, :lang(zh-TW) ol, :lang(mn) ul, :lang(mn) ol { - padding-top: 5%; + padding-top: 5%; } */ @@ -436,13 +467,13 @@ dd { margin-left: 5%; } -/* +/* :lang(ja) dd, :lang(zh-Hant) dd, -:lang(zh-TW) dd, +:lang(zh-TW) dd, :lang(mn) dd { - margin-top: 5%; + margin-top: 5%; } */ @@ -479,19 +510,28 @@ ruby > rt, ruby > rp { *:lang(ja), *:lang(zh), *:lang(ko), -:lang(ja) cite, :lang(ja) dfn, :lang(ja) em, :lang(ja) i, -:lang(zh) cite, :lang(zh) dfn, :lang(zh) em, :lang(zh) i, -:lang(ko) cite, :lang(ko) dfn, :lang(ko) em, :lang(ko) i { +:lang(ja) cite, +:lang(ja) dfn, +:lang(ja) em, +:lang(ja) i, +:lang(zh) cite, +:lang(zh) dfn, +:lang(zh) em, +:lang(zh) i, +:lang(ko) cite, +:lang(ko) dfn, +:lang(ko) em, +:lang(ko) i { font-style: normal; } -:lang(ja) a, +:lang(ja) a, :lang(zh) a, :lang(ko) a { text-decoration: none; } -/* Readium CSS +/* Readium CSS Safeguards module A set of styles to prevent common issues in pagination @@ -506,7 +546,7 @@ ruby > rt, ruby > rp { /* max-width for media, you can override that via JS if not compiled to static */ --RS__maxMediaWidth: 100%; - /* max-height for media, you can override that via JS if not compiled to static + /* max-height for media, you can override that via JS if not compiled to static Please consider figures might have a figcaption, which is why 95vh in the first place */ --RS__maxMediaHeight: 95vh; diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-default.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-default.css similarity index 87% rename from r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-default.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-default.css index d7877db9..37530d83 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-horizontal/ReadiumCSS-default.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-horizontal/ReadiumCSS-default.css @@ -1,4 +1,19 @@ -/* Readium CSS +/* Readium CSS + Namespaces module + + Namespaces to import in all 3 dist stylesheets + + Repo: https://github.com/readium/readium-css */ + +@namespace url("http://www.w3.org/1999/xhtml"); + +@namespace epub url("http://www.idpf.org/2007/ops"); + +@namespace m url("http://www.w3.org/1998/Math/MathML/"); + +@namespace svg url("http://www.w3.org/2000/svg"); + +/* Readium CSS Default module for CJK horizontal writing A stylesheet for unstyled ebooks based on HTML5 Suggested Rendering @@ -32,6 +47,10 @@ --RS__secondaryColor: ; } +:root:lang(zh) { + --RS__paraIndent: 2em; +} + /* STYLES */ /* Typo */ @@ -54,23 +73,24 @@ h1, h2, h3, h4, h5, h6 { /* Flow content */ -blockquote, figure, p, pre, -aside, footer, form, hr { +blockquote, +figure, +p, +pre, +aside, +footer, +form, +hr { margin-top: var(--RS__flowSpacing); margin-bottom: var(--RS__flowSpacing); } p { margin-top: var(--RS__paraSpacing); - margin-bottom: var(--RS__paraSpacing); + margin-bottom: var(--RS__paraSpacing); text-indent: var(--RS__paraIndent); } -h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, -hr + p { - text-indent: 0; -} - pre { font-family: var(--RS__codeFontFamily); } diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-after.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-after.css similarity index 90% rename from r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-after.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-after.css index cb34fa28..d60d264d 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-after.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-after.css @@ -39,7 +39,22 @@ /* Direction i.e. ltr and rtl */ -/* Readium CSS +/* Readium CSS + Namespaces module + + Namespaces to import in all 3 dist stylesheets + + Repo: https://github.com/readium/readium-css */ + +@namespace url("http://www.w3.org/1999/xhtml"); + +@namespace epub url("http://www.idpf.org/2007/ops"); + +@namespace m url("http://www.w3.org/1998/Math/MathML/"); + +@namespace svg url("http://www.w3.org/2000/svg"); + +/* Readium CSS Pagination module for vertical writing A set of styles to paginate ePublications in “writing-mode: vertical-*” @@ -76,7 +91,7 @@ } /* :root selector has same specificity as a class i.e. 0010 - We might have to change that to html / context + We might have to change that to html / context -> https://css-tricks.com/almanac/selectors/r/root/ */ :root { @@ -197,7 +212,7 @@ body { /* At this point (80em or so), constraining line length must be done at the web view/iframe level, or by limiting the size of :root itself */ -/* Readium CSS +/* Readium CSS Scroll module for vertical-writing A set of styles to scroll ePublications in “writing-mode: vertical-*” @@ -206,7 +221,7 @@ body { Repo: https://github.com/readium/readium-css */ :root[style*="readium-scroll-on"] { - + /* Reset columns, auto + auto = columns can’t be created */ /* There is a weird gap in Safari/Webkit, as if overflow paged-x… */ -webkit-columns: auto auto !important; @@ -229,39 +244,7 @@ body { /* Do we add a top/bottom margin for body in vertical scroll or not? */ -/* Readium CSS - Default highlights - - A stylesheet for user highlights - - Repo: https://github.com/readium/readium-css */ - -/* User Highlights */ - -.readiumCSS-yellow-highlight { - background-color: rgba(255, 255, 0, 0.5); -} - -.readiumCSS-green-highlight { - background-color: rgba(0, 255, 0, 0.5); -} - -.readiumCSS-orange-highlight { - background-color: rgba(255, 165, 0, 0.5); -} - -.readiumCSS-pink-highlight { - background-color: rgba(255, 105, 180, 0.5); -} - -/* Media overlays */ - -.readiumCSS-mo-active-default { - color: black !important; - background-color: yellow !important; -} - -/* Readium CSS +/* Readium CSS Night mode A preset theme for night mode @@ -307,8 +290,11 @@ body { color: var(--RS__visitedColor) !important; } +/* For epub:type, in case the contents are served as text/html, namespaces won’t work hence why we’re using both syntax */ + :root[style*="readium-night-on"] img[class*="gaiji"], -:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { +:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, +:root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: invert(100%); filter: invert(100%); } @@ -334,7 +320,7 @@ body { filter: brightness(80%) invert(100%); } -/* Readium CSS +/* Readium CSS Sepia mode A preset theme for sepia mode @@ -359,11 +345,9 @@ body { /* we don’t need to redeclare bg-color and color for :root since we will inherit and update from day/default mode */ -:root[style*="readium-sepia-on"] body { - /* Should be transparent but Chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=711955&q=mix-blend-mode&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified */ - - color: inherit; - background-color: var(--RS__backgroundColor); +:root[style*="readium-sepia-on"] *:not(a) { + color: inherit !important; + background-color: transparent !important; } :root[style*="readium-sepia-on"] a:link, @@ -383,7 +367,7 @@ body { mix-blend-mode: multiply; } -/* Readium CSS +/* Readium CSS OS Accessibility Modes A stylesheet to deal with OS accessibility settings @@ -419,7 +403,8 @@ body { @media screen and (-ms-high-contrast: white-on-black) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -437,7 +422,8 @@ body { @media screen and (inverted-colors) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -460,7 +446,7 @@ body { /* If reduced motion is set on MacOS, in case we have animation/transition */ } -/* Readium CSS +/* Readium CSS Page margins pref A submodule managing page margins for user settings @@ -474,7 +460,7 @@ body { padding: calc(var(--RS__pageGutter) * var(--USER__pageMargins)) 0 !important; } -/* Readium CSS +/* Readium CSS Custom colors pref A submodule managing custom colors for user settings @@ -498,7 +484,7 @@ body { color: inherit !important; } -/* Readium CSS +/* Readium CSS Font Family pref A submodule managing font-family for user settings @@ -534,7 +520,7 @@ body { font-family: inherit !important; } -/* Readium CSS +/* Readium CSS Font size pref A submodule managing font-size for user settings @@ -546,7 +532,7 @@ body { font-size: var(--USER__fontSize) !important; } -/* Readium CSS +/* Readium CSS Line height pref A submodule managing line-height for user settings @@ -565,7 +551,7 @@ body { line-height: inherit; } -/* Readium CSS +/* Readium CSS Para spacing pref A submodule managing paragraphs’ top and bottom margins for user settings @@ -578,7 +564,7 @@ body { margin-left: var(--USER__paraSpacing) !important; } -/* Readium CSS +/* Readium CSS Font size normalize A stylesheet to normalize font-size @@ -637,7 +623,7 @@ body { font-size: 67.5% !important; } -/* The following styles kick in if you define the typeScale variable in the DOM. +/* The following styles kick in if you define the typeScale variable in the DOM. No need to repeat declarations which don’t make use of the variable */ :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h1 { @@ -651,4 +637,44 @@ body { :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h3 { font-size: calc(1rem * var(--USER__typeScale)) !important; } + +/* Readium CSS + Default highlights + + A stylesheet for user highlights + + Repo: https://github.com/readium/readium-css */ + +/* User Highlights */ + +.readiumCSS-yellow-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-yellow-highlight, +:root[style*="readium-night-on"] .readiumCSS-yellow-highlight { + background-color: rgba(255, 255, 0, 0.5) !important; +} + +.readiumCSS-green-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-green-highlight, +:root[style*="readium-night-on"] .readiumCSS-green-highlight { + background-color: rgba(0, 255, 0, 0.5) !important; +} + +.readiumCSS-orange-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-orange-highlight, +:root[style*="readium-night-on"] .readiumCSS-orange-highlight { + background-color: rgba(255, 165, 0, 0.5) !important; +} + +.readiumCSS-pink-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-pink-highlight, +:root[style*="readium-night-on"] .readiumCSS-pink-highlight { + background-color: rgba(255, 105, 180, 0.5) !important; +} + +/* Media overlays */ + +.readiumCSS-mo-active-default { + color: black !important; + background-color: yellow !important; +} /*# sourceMappingURL=ReadiumCSS-after.css.map */ \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-before.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-before.css similarity index 95% rename from r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-before.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-before.css index 100b3202..2c8d03df 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-before.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-before.css @@ -39,10 +39,10 @@ /* Direction i.e. ltr and rtl */ -/* Readium CSS - Base module +/* Readium CSS + Namespaces module - A minimal stylesheet for all ebooks + Namespaces to import in all 3 dist stylesheets Repo: https://github.com/readium/readium-css */ @@ -54,6 +54,13 @@ @namespace svg url("http://www.w3.org/2000/svg"); +/* Readium CSS + Base module + + A minimal stylesheet for all ebooks + + Repo: https://github.com/readium/readium-css */ + /* Define viewport, HTML5-style */ @-ms-viewport { @@ -75,7 +82,7 @@ /* Config */ --RS__baseFontFamily: var(--RS__oldStyleTf); - + /* For square-ish fonts (CJK, Indic, etc.), we must apply some compensation in dynamic leading. Default is 1 i.e. no compensation */ --RS__lineHeightCompensation: 1; @@ -170,7 +177,7 @@ math { :lang(ja) { --RS__baseFontFamily: "游ゴシック体", YuGothic, "ヒラギノ丸ゴ", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", Roboto, Noto, "Noto Sans CJK JP", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; @@ -193,7 +200,7 @@ math { :lang(ko) { --RS__baseFontFamily: "Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", Roboto, Noto, "Noto Sans CJK KR", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } @@ -248,19 +255,19 @@ math { :lang(zh-Hant), :lang(zh-TW) { --RS__baseFontFamily: "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } :lang(zh-HK) { --RS__baseFontFamily: "方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } -/* Readium CSS +/* Readium CSS Day/Default mode A preset theme for day mode, which is the default @@ -297,7 +304,7 @@ math { /* @import "modules/ReadiumCSS-fonts.css"; */ -/* Readium CSS +/* Readium CSS HTML5 SR Patch stylesheet A set of style to adjust HTML5 Suggested Rendering to paginated content @@ -316,15 +323,28 @@ figcaption, th, td { orphans: 1; } -h2, h3, h4, h5, h6, dt, -hr, caption { +h2, +h3, +h4, +h5, +h6, +dt, +hr, +caption { -webkit-column-break-after: avoid; page-break-after: avoid; break-after: avoid; } -h1, h2, h3, h4, h5, h6, dt, -figure, tr { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figure, +tr { -webkit-column-break-inside: avoid; page-break-inside: avoid; break-inside: avoid; @@ -342,9 +362,20 @@ body { hyphenate-limit-lines: 3; } -h1, h2, h3, h4, h5, h6, dt, -figcaption, pre, caption, address, -center, code, var { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figcaption, +pre, +caption, +address, +center, +code, +var { -ms-hyphens: none; -moz-hyphens: none; -webkit-hyphens: none; @@ -406,13 +437,13 @@ figure, blockquote { margin: 1em 5%; } -/* +/* :lang(ja) figure, :lang(ja) blockquote, :lang(zh-Hant) figure, :lang(zh-Hant) blockquote, :lang(zh-TW) figure, :lang(zh-TW) blockquote, :lang(mn) figure, :lang(mn) blockquote { - margin: 5% 1em; + margin: 5% 1em; } */ @@ -421,13 +452,13 @@ ul, ol { padding-left: 5%; } -/* +/* :lang(ja) ul, :lang(ja) ol, :lang(zh-Hant) ul, :lang(zh-Hant) ol, :lang(zh-TW) ul, :lang(zh-TW) ol, :lang(mn) ul, :lang(mn) ol { - padding-top: 5%; + padding-top: 5%; } */ @@ -436,13 +467,13 @@ dd { margin-left: 5%; } -/* +/* :lang(ja) dd, :lang(zh-Hant) dd, -:lang(zh-TW) dd, +:lang(zh-TW) dd, :lang(mn) dd { - margin-top: 5%; + margin-top: 5%; } */ @@ -479,19 +510,28 @@ ruby > rt, ruby > rp { *:lang(ja), *:lang(zh), *:lang(ko), -:lang(ja) cite, :lang(ja) dfn, :lang(ja) em, :lang(ja) i, -:lang(zh) cite, :lang(zh) dfn, :lang(zh) em, :lang(zh) i, -:lang(ko) cite, :lang(ko) dfn, :lang(ko) em, :lang(ko) i { +:lang(ja) cite, +:lang(ja) dfn, +:lang(ja) em, +:lang(ja) i, +:lang(zh) cite, +:lang(zh) dfn, +:lang(zh) em, +:lang(zh) i, +:lang(ko) cite, +:lang(ko) dfn, +:lang(ko) em, +:lang(ko) i { font-style: normal; } -:lang(ja) a, +:lang(ja) a, :lang(zh) a, :lang(ko) a { text-decoration: none; } -/* Readium CSS +/* Readium CSS Safeguards module for vertical writing A set of styles to prevent common issues in pagination @@ -507,7 +547,7 @@ ruby > rt, ruby > rp { --RS__maxMediaWidth: 100%; /* max-height for media, you can override that via JS if not compiled to static */ - --RS__maxMediaHeight: 100%; + --RS__maxMediaHeight: 100vw; /* value for medias’ box-sizing */ --RS__boxSizingMedia: border-box; diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-default.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-default.css similarity index 88% rename from r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-default.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-default.css index 6f9d326e..7122cfa6 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/cjk-vertical/ReadiumCSS-default.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/cjk-vertical/ReadiumCSS-default.css @@ -1,4 +1,19 @@ -/* Readium CSS +/* Readium CSS + Namespaces module + + Namespaces to import in all 3 dist stylesheets + + Repo: https://github.com/readium/readium-css */ + +@namespace url("http://www.w3.org/1999/xhtml"); + +@namespace epub url("http://www.idpf.org/2007/ops"); + +@namespace m url("http://www.w3.org/1998/Math/MathML/"); + +@namespace svg url("http://www.w3.org/2000/svg"); + +/* Readium CSS Default module for CJK vertical writing A stylesheet for unstyled ebooks based on HTML5 Suggested Rendering @@ -32,6 +47,10 @@ --RS__secondaryColor: ; } +:root:lang(zh) { + --RS__paraIndent: 2em; +} + :lang("mn-Mong") { --RS__baseFontSize: 100%; } @@ -54,8 +73,14 @@ h1, h2, h3, h4, h5, h6 { /* Flow content */ -blockquote, figure, p, pre, -aside, footer, form, hr { +blockquote, +figure, +p, +pre, +aside, +footer, +form, +hr { margin-right: var(--RS__flowSpacing); margin-left: var(--RS__flowSpacing); } diff --git a/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/AccessibleDfA.otf b/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/AccessibleDfA.otf new file mode 100755 index 0000000000000000000000000000000000000000..69c02218a5ab163c634edcc34b14e8a735513f82 GIT binary patch literal 145384 zcmeFa2Y40L);GS-^hxi%ob+DK%$yXlkaC79AWgvnAqgZB5=fybSU^R z|DYmc{zIECVa!!b{K(pIHRHRjy_I&e@);Aq8&lIZo<*?~D(_0l3~8vZsmpu(>{!}= zm9~-w$_RD`Tu9eT#HTlmYo9##nimffPlaUMHLhmzc>S3HbjX!WUrKY$xcaC&GhbmW zFM%=X-0>}K?Wa6!GL=vFz}(E`oEp1$rS;gkBZANV$?ei8gRxzUE-!cJyCa)NozQ+i z?vBf?y|!s=~DSkB5r5j zHPiVPlNb};VNSa+`8{^E_=+o3dY64E-@%fklWd%JGaIIy$Hs}f**3{?rAsy&DsN*i zDc`UU#0BgkX)60d9Le61R2g07D!p*( zki7ELJK_pUZH3mGKR$mwU2jq}i-d&SnkLAvQ`J&C2CqHbx%L zHVbF7DPrKMC!~Yyd7*)AQ{Q3t$!@krj%DNJGPYihptjn>?w9J>7;4nfatK=??PMNh zHR~m9WTx~qE0PwlP&#kDxWYA+=q6<@ZL6s-GT9Gw&&z15p>4K2pSAOIqS!h)%H`I} zU4hc2>`uC`Rdmf;H0qpl4@yJXV&dN>`nt0TKe29dD%(QGZWInuUq-p!k%qd`=-MfC z?SpjP+Rkk*xVy`kBT@6njce;M*)YoM;qlp!R%9 zT}d>6ZIafp3#ILBp0pQKyox<3&Z7HR%|gUMY>2dvT~6)%wDd8JN7|@AnmhNeb=ryc zFQwy;oViKQuydr}=^CQ)cU0e48oN$AB(PaZJg8H5>0-8t)4NzRZwtB~PUF}%C70^_ zA#39GpUawf8^y94IgMnuJJh-Nzf#3RbM=y{*x8bso})SJH7e(Mr%dSx+aY{HW6z=Kr+#**G?3bs zs94HYOGi!(5DZs0ryuE>r=4q@PZuwbKlK=LNQY5>O6@HBuT;B*O;$gmzWA2P+{kX| zI^W?XgWBO0wqA;67t0Gc?Qxn%{wR4Zs}r}en;j}20VVztK5m@;bH>oWLA5%zg8F@^ zyo1J=)6X>4NY7Ntk*wce=tW8kyQAwq{}pxm_+K4&j*$-e^B?Wv z>ACoak4pOH%uK2Se@^6??6IzKeCF}4ePQpZ6J7iNC(_g7ymNea-6OThpPsd@{4Uzn z#$EcOE5D0&wRsmWPr-Qa;vITs+wk&Mk}h_1>LTWM=6Qd&FOeSlyL@>ws}eVoZkob| z((_gJcjx@C%%kU~n^T_fBpdqglq>aM3;vz+{#TqM?`3EIJLO1jc5T;rQrI8+;@f}U z#$D(BJ5)T#RyyYi5iCyliZ#)8pTkRiT|Be@LB5Z4C{=z(VldzK23Cr0oVG$#H z{lEU9c3{HDQ^%xWRz>x?k+#MEsuXD$yXvpU#VM>8mGh?PX3r@-r4HH}{(8>e@xmU~ zEY|)pR)zQ2gI(tdSFzs05T-D8^0dyxu@hvvQGdL}CK1M7Kz%ey8u;h_AiHyXS2_Q? zsj&3V?JlgQzMwp+8{Nh~|B#*PjH7>f&Og8UKS%zjT0maICj3vy`j4Fdw7`E_;QzfA zaD24?TWc+iWhpB8H7dg~dwU+4a&Gc9!xM@}()Pl3(*7 z%Xg?ekSUIT?d*4b&MZTUB0KL0>(_P6p;9YrRECm`(4TqE%>O@eziWP_>)vQSatF=P zoc2MT`Ia+z=R9YA6}mb2RoB|sU41Q-$|eR z>($B@wnN>)o>of!OleM&`+r^Zuh;!6-kE>-XUEAu7-rx|5KFYPb8i2PyMQYHn;KD`|I+b|C;~*Do^8`&!7Ew>;HH23;*4+{&U@b zTHrq|@PAJW(7cWxZHs7fVo?BN`(@`{g!4{qD$Uc(_+yjDGJj|8=JXcD7SMGY=sncw zcMeXgsJj?{V;PXo<~zKQ$y&%hYEg!>7KcCc(=~79psngo}S-PcF?

!C0KHonOXtp~cd3Rl*L5LL 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%0A_=a#T64x>QXKCd^D! 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 literal 0 HcmV?d00001 diff --git a/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-AccessibleDfa b/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-AccessibleDfa new file mode 100755 index 00000000..bf56c051 --- /dev/null +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-AccessibleDfa @@ -0,0 +1,95 @@ +Copyright (c) Orange 2015, www.orange.com +with Reserved Font Name Accessible-Dfa. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + diff --git a/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-IaWriterDuospace.md b/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-IaWriterDuospace.md new file mode 100755 index 00000000..3261f95c --- /dev/null +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/LICENSE-IaWriterDuospace.md @@ -0,0 +1,110 @@ +# IBM Plex Typeface + +Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + + +# IBM Type Code + +Copyright 2017 IBM +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/iAWriterDuospace-Regular.ttf b/r2-navigator-swift/EPUB/Resources/Static/readium-css/fonts/iAWriterDuospace-Regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..7e75aa351cf4ce6a8f31d1b8126491e0d12b4c74 GIT binary patch literal 81636 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

(*R-QJxnMdh<8^9 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 https://css-tricks.com/almanac/selectors/r/root/ */ :root { @@ -187,7 +202,7 @@ body { } } -/* Readium CSS +/* Readium CSS Scroll module A set of styles to scroll ePublications @@ -196,7 +211,7 @@ body { Repo: https://github.com/readium/readium-css */ :root[style*="readium-scroll-on"] { - + /* Reset columns, auto + auto = columns can’t be created */ -webkit-columns: auto auto !important; -moz-columns: auto auto !important; @@ -207,57 +222,16 @@ body { max-height: none !important; /* Reset html size so that the user can scroll */ min-width: 0 !important; - min-height: 0 !important; + min-height: 0 !important; } /* Make sure line-length is limited in all configs */ :root[style*="readium-scroll-on"] body { - --RS__maxLineLength: 40rem !important; - - margin-top: var(--RS__pageGutter) !important; - margin-bottom: var(--RS__pageGutter) !important; -} - -/* Scroll mode horizontal */ - -/* Vertical writing needs body height set */ - -/* Do we add a top/bottom margin for body in vertical scroll or not? */ - -/* Readium CSS - Default highlights - - A stylesheet for user highlights - - Repo: https://github.com/readium/readium-css */ - -/* User Highlights */ - -.readiumCSS-yellow-highlight { - background-color: rgba(255, 255, 0, 0.5); -} - -.readiumCSS-green-highlight { - background-color: rgba(0, 255, 0, 0.5); -} - -.readiumCSS-orange-highlight { - background-color: rgba(255, 165, 0, 0.5); + --RS__maxLineLength: 40rem !important; } -.readiumCSS-pink-highlight { - background-color: rgba(255, 105, 180, 0.5); -} - -/* Media overlays */ - -.readiumCSS-mo-active-default { - color: black !important; - background-color: yellow !important; -} - -/* Readium CSS +/* Readium CSS Night mode A preset theme for night mode @@ -303,8 +277,11 @@ body { color: var(--RS__visitedColor) !important; } +/* For epub:type, in case the contents are served as text/html, namespaces won’t work hence why we’re using both syntax */ + :root[style*="readium-night-on"] img[class*="gaiji"], -:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { +:root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, +:root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: invert(100%); filter: invert(100%); } @@ -330,7 +307,7 @@ body { filter: brightness(80%) invert(100%); } -/* Readium CSS +/* Readium CSS Sepia mode A preset theme for sepia mode @@ -355,11 +332,9 @@ body { /* we don’t need to redeclare bg-color and color for :root since we will inherit and update from day/default mode */ -:root[style*="readium-sepia-on"] body { - /* Should be transparent but Chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=711955&q=mix-blend-mode&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified */ - - color: inherit; - background-color: var(--RS__backgroundColor); +:root[style*="readium-sepia-on"] *:not(a) { + color: inherit !important; + background-color: transparent !important; } :root[style*="readium-sepia-on"] a:link, @@ -379,7 +354,7 @@ body { mix-blend-mode: multiply; } -/* Readium CSS +/* Readium CSS OS Accessibility Modes A stylesheet to deal with OS accessibility settings @@ -415,7 +390,8 @@ body { @media screen and (-ms-high-contrast: white-on-black) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -433,7 +409,8 @@ body { @media screen and (inverted-colors) { :root[style*="readium-night-on"] img[class*="gaiji"], - :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child { + :root[style*="readium-night-on"] *[epub\:type~="titlepage"] img:only-child, + :root[style*="readium-night-on"] *[epub|type~="titlepage"] img:only-child { -webkit-filter: none !important; filter: none !important; } @@ -456,7 +433,7 @@ body { /* If reduced motion is set on MacOS, in case we have animation/transition */ } -/* Readium CSS +/* Readium CSS Columns number pref A submodule managing columns number for user settings @@ -494,7 +471,7 @@ body { } } -/* Readium CSS +/* Readium CSS Page margins pref A submodule managing page margins for user settings @@ -508,7 +485,7 @@ body { padding: 0 calc(var(--RS__pageGutter) * var(--USER__pageMargins)) !important; } -/* Readium CSS +/* Readium CSS Custom colors pref A submodule managing custom colors for user settings @@ -532,7 +509,7 @@ body { color: inherit !important; } -/* Readium CSS +/* Readium CSS Text align pref A submodule managing text-align for user settings @@ -569,7 +546,7 @@ body { text-align: right; } -/* Readium CSS +/* Readium CSS Font Family pref A submodule managing font-family for user settings @@ -605,7 +582,7 @@ body { font-family: inherit !important; } -/* Readium CSS +/* Readium CSS Font size pref A submodule managing font-size for user settings @@ -617,7 +594,7 @@ body { font-size: var(--USER__fontSize) !important; } -/* Readium CSS +/* Readium CSS Line height pref A submodule managing line-height for user settings @@ -636,7 +613,7 @@ body { line-height: inherit; } -/* Readium CSS +/* Readium CSS Para spacing pref A submodule managing paragraphs’ top and bottom margins for user settings @@ -649,7 +626,7 @@ body { margin-bottom: var(--USER__paraSpacing) !important; } -/* Readium CSS +/* Readium CSS Para indent pref A submodule managing paragraphs’ text-indent for user settings @@ -668,7 +645,7 @@ body { text-indent: 0 !important; } -/* Readium CSS +/* Readium CSS Ligatures pref A submodule managing ligatures for user settings in the Arabic Script (can help with a11y) @@ -684,7 +661,7 @@ body { font-variant-ligatures: inherit !important; } -/* Readium CSS +/* Readium CSS Font size normalize A stylesheet to normalize font-size @@ -743,7 +720,7 @@ body { font-size: 67.5% !important; } -/* The following styles kick in if you define the typeScale variable in the DOM. +/* The following styles kick in if you define the typeScale variable in the DOM. No need to repeat declarations which don’t make use of the variable */ :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h1 { @@ -757,4 +734,44 @@ body { :root[style*="readium-advanced-on"][style*="--USER__typeScale"] h3 { font-size: calc(1rem * var(--USER__typeScale)) !important; } + +/* Readium CSS + Default highlights + + A stylesheet for user highlights + + Repo: https://github.com/readium/readium-css */ + +/* User Highlights */ + +.readiumCSS-yellow-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-yellow-highlight, +:root[style*="readium-night-on"] .readiumCSS-yellow-highlight { + background-color: rgba(255, 255, 0, 0.5) !important; +} + +.readiumCSS-green-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-green-highlight, +:root[style*="readium-night-on"] .readiumCSS-green-highlight { + background-color: rgba(0, 255, 0, 0.5) !important; +} + +.readiumCSS-orange-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-orange-highlight, +:root[style*="readium-night-on"] .readiumCSS-orange-highlight { + background-color: rgba(255, 165, 0, 0.5) !important; +} + +.readiumCSS-pink-highlight, +:root[style*="readium-sepia-on"] .readiumCSS-pink-highlight, +:root[style*="readium-night-on"] .readiumCSS-pink-highlight { + background-color: rgba(255, 105, 180, 0.5) !important; +} + +/* Media overlays */ + +.readiumCSS-mo-active-default { + color: black !important; + background-color: yellow !important; +} /*# sourceMappingURL=ReadiumCSS-after.css.map */ \ No newline at end of file diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/rtl/ReadiumCSS-before.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/rtl/ReadiumCSS-before.css similarity index 95% rename from r2-navigator-swift/EPUB/Resources/Static/styles/rtl/ReadiumCSS-before.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/rtl/ReadiumCSS-before.css index 28778589..dcb79fff 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/rtl/ReadiumCSS-before.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/rtl/ReadiumCSS-before.css @@ -39,10 +39,10 @@ /* Direction i.e. ltr and rtl */ -/* Readium CSS - Base module +/* Readium CSS + Namespaces module - A minimal stylesheet for all ebooks + Namespaces to import in all 3 dist stylesheets Repo: https://github.com/readium/readium-css */ @@ -54,6 +54,13 @@ @namespace svg url("http://www.w3.org/2000/svg"); +/* Readium CSS + Base module + + A minimal stylesheet for all ebooks + + Repo: https://github.com/readium/readium-css */ + /* Define viewport, HTML5-style */ @-ms-viewport { @@ -75,7 +82,7 @@ /* Config */ --RS__baseFontFamily: var(--RS__oldStyleTf); - + /* For square-ish fonts (CJK, Indic, etc.), we must apply some compensation in dynamic leading. Default is 1 i.e. no compensation */ --RS__lineHeightCompensation: 1; @@ -170,7 +177,7 @@ math { :lang(ja) { --RS__baseFontFamily: "游ゴシック体", YuGothic, "ヒラギノ丸ゴ", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", Roboto, Noto, "Noto Sans CJK JP", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; @@ -193,7 +200,7 @@ math { :lang(ko) { --RS__baseFontFamily: "Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", Roboto, Noto, "Noto Sans CJK KR", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } @@ -248,19 +255,19 @@ math { :lang(zh-Hant), :lang(zh-TW) { --RS__baseFontFamily: "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } :lang(zh-HK) { --RS__baseFontFamily: "方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK TC", sans-serif; - + /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; } -/* Readium CSS +/* Readium CSS Day/Default mode A preset theme for day mode, which is the default @@ -297,7 +304,7 @@ math { /* @import "modules/ReadiumCSS-fonts.css"; */ -/* Readium CSS +/* Readium CSS HTML5 SR Patch stylesheet A set of style to adjust HTML5 Suggested Rendering to paginated content @@ -316,15 +323,28 @@ figcaption, th, td { orphans: 1; } -h2, h3, h4, h5, h6, dt, -hr, caption { +h2, +h3, +h4, +h5, +h6, +dt, +hr, +caption { -webkit-column-break-after: avoid; page-break-after: avoid; break-after: avoid; } -h1, h2, h3, h4, h5, h6, dt, -figure, tr { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figure, +tr { -webkit-column-break-inside: avoid; page-break-inside: avoid; break-inside: avoid; @@ -342,9 +362,20 @@ body { hyphenate-limit-lines: 3; } -h1, h2, h3, h4, h5, h6, dt, -figcaption, pre, caption, address, -center, code, var { +h1, +h2, +h3, +h4, +h5, +h6, +dt, +figcaption, +pre, +caption, +address, +center, +code, +var { -ms-hyphens: none; -moz-hyphens: none; -webkit-hyphens: none; @@ -406,13 +437,13 @@ figure, blockquote { margin: 1em 5%; } -/* +/* :lang(ja) figure, :lang(ja) blockquote, :lang(zh-Hant) figure, :lang(zh-Hant) blockquote, :lang(zh-TW) figure, :lang(zh-TW) blockquote, :lang(mn) figure, :lang(mn) blockquote { - margin: 5% 1em; + margin: 5% 1em; } */ @@ -421,13 +452,13 @@ ul, ol { padding-left: 5%; } -/* +/* :lang(ja) ul, :lang(ja) ol, :lang(zh-Hant) ul, :lang(zh-Hant) ol, :lang(zh-TW) ul, :lang(zh-TW) ol, :lang(mn) ul, :lang(mn) ol { - padding-top: 5%; + padding-top: 5%; } */ @@ -436,13 +467,13 @@ dd { margin-left: 5%; } -/* +/* :lang(ja) dd, :lang(zh-Hant) dd, -:lang(zh-TW) dd, +:lang(zh-TW) dd, :lang(mn) dd { - margin-top: 5%; + margin-top: 5%; } */ @@ -479,19 +510,28 @@ ruby > rt, ruby > rp { *:lang(ja), *:lang(zh), *:lang(ko), -:lang(ja) cite, :lang(ja) dfn, :lang(ja) em, :lang(ja) i, -:lang(zh) cite, :lang(zh) dfn, :lang(zh) em, :lang(zh) i, -:lang(ko) cite, :lang(ko) dfn, :lang(ko) em, :lang(ko) i { +:lang(ja) cite, +:lang(ja) dfn, +:lang(ja) em, +:lang(ja) i, +:lang(zh) cite, +:lang(zh) dfn, +:lang(zh) em, +:lang(zh) i, +:lang(ko) cite, +:lang(ko) dfn, +:lang(ko) em, +:lang(ko) i { font-style: normal; } -:lang(ja) a, +:lang(ja) a, :lang(zh) a, :lang(ko) a { text-decoration: none; } -/* Readium CSS +/* Readium CSS Safeguards module A set of styles to prevent common issues in pagination @@ -506,7 +546,7 @@ ruby > rt, ruby > rp { /* max-width for media, you can override that via JS if not compiled to static */ --RS__maxMediaWidth: 100%; - /* max-height for media, you can override that via JS if not compiled to static + /* max-height for media, you can override that via JS if not compiled to static Please consider figures might have a figcaption, which is why 95vh in the first place */ --RS__maxMediaHeight: 95vh; diff --git a/r2-navigator-swift/EPUB/Resources/Static/styles/rtl/ReadiumCSS-default.css b/r2-navigator-swift/EPUB/Resources/Static/readium-css/rtl/ReadiumCSS-default.css similarity index 84% rename from r2-navigator-swift/EPUB/Resources/Static/styles/rtl/ReadiumCSS-default.css rename to r2-navigator-swift/EPUB/Resources/Static/readium-css/rtl/ReadiumCSS-default.css index 83a5dd84..18bb8931 100644 --- a/r2-navigator-swift/EPUB/Resources/Static/styles/rtl/ReadiumCSS-default.css +++ b/r2-navigator-swift/EPUB/Resources/Static/readium-css/rtl/ReadiumCSS-default.css @@ -1,4 +1,19 @@ -/* Readium CSS +/* Readium CSS + Namespaces module + + Namespaces to import in all 3 dist stylesheets + + Repo: https://github.com/readium/readium-css */ + +@namespace url("http://www.w3.org/1999/xhtml"); + +@namespace epub url("http://www.idpf.org/2007/ops"); + +@namespace m url("http://www.w3.org/1998/Math/MathML/"); + +@namespace svg url("http://www.w3.org/2000/svg"); + +/* Readium CSS Default module for RTL scripts A stylesheet for unstyled ebooks based on HTML5 Suggested Rendering @@ -42,19 +57,30 @@ h1, h2, h3, h4, h5, h6 { /* Flow content */ -blockquote, figure, p, pre, -aside, footer, form, hr { +blockquote, +figure, +p, +pre, +aside, +footer, +form, +hr { margin-top: var(--RS__flowSpacing); margin-bottom: var(--RS__flowSpacing); } p { margin-top: var(--RS__paraSpacing); - margin-bottom: var(--RS__paraSpacing); + margin-bottom: var(--RS__paraSpacing); text-indent: var(--RS__paraIndent); } -h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, +h1 + p, +h2 + p, +h3 + p, +h4 + p, +h5 + p, +h6 + p, hr + p { text-indent: 0; } diff --git a/r2-navigator-swift/EPUB/UserSettings.swift b/r2-navigator-swift/EPUB/UserSettings.swift index b420c05d..4a70cef6 100644 --- a/r2-navigator-swift/EPUB/UserSettings.swift +++ b/r2-navigator-swift/EPUB/UserSettings.swift @@ -18,7 +18,7 @@ public class UserSettings { // WARNING: String values must not contain any single or double quotes characters, otherwise it breaks the streamer's injection. private let appearanceValues = ["readium-default-on", "readium-sepia-on","readium-night-on"] - private let fontFamilyValues = ["Original", "Helvetica Neue", "Iowan Old Style", "Athelas", "Seravek", "OpenDyslexic"] + private let fontFamilyValues = ["Original", "Helvetica Neue", "Iowan Old Style", "Athelas", "Seravek", "OpenDyslexic", "AccessibleDfA", "IA Writer Duospace"] private let textAlignmentValues = ["justify", "start"] private let columnCountValues = ["auto", "1", "2"]