From 82850ae1fdc273292d603bf6e31fcd014976ba06 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 10:25:26 +0200 Subject: [PATCH 01/15] Use prefix for JSON imports And remove RS__ from properties --- css/postcss.config.js | 4 +++- css/vars/colors.json | 12 ++++++------ css/vars/fontStacks.json | 10 +++++----- css/vars/pagination.json | 12 ++++++------ 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/css/postcss.config.js b/css/postcss.config.js index 174b186f..a7e48d88 100644 --- a/css/postcss.config.js +++ b/css/postcss.config.js @@ -51,7 +51,9 @@ module.exports = (ctx) => ({ root: ctx.file.dirname }), require("postcss-custom-selectors")({}), - require("@daltontan/postcss-import-json")({}), + require("@daltontan/postcss-import-json")({ + prefix: "--RS__" + }), require("postcss-discard-comments")({}), require("stylelint")({ "fix": true, diff --git a/css/vars/colors.json b/css/vars/colors.json index b17a8065..b6a5e2e7 100644 --- a/css/vars/colors.json +++ b/css/vars/colors.json @@ -1,8 +1,8 @@ { - "RS__backgroundColor": "#FFFFFF", - "RS__textColor": "#121212", - "RS__linkColor": "#0000EE", - "RS__visitedColor": "#551A8B", - "RS__selectionBackgroundColor": "#b4d8fe", - "RS__selectionTextColor": "inherit" + "backgroundColor": "#FFFFFF", + "textColor": "#121212", + "linkColor": "#0000EE", + "visitedColor": "#551A8B", + "selectionBackgroundColor": "#b4d8fe", + "selectionTextColor": "inherit" } \ No newline at end of file diff --git a/css/vars/fontStacks.json b/css/vars/fontStacks.json index eb04703e..167d0ff3 100644 --- a/css/vars/fontStacks.json +++ b/css/vars/fontStacks.json @@ -1,7 +1,7 @@ { - "RS__oldStyleTf": "'Iowan Old Style', Sitka, 'Sitka Text', Palatino, 'Book Antiqua', 'URW Palladio L', P052, serif", - "RS__modernTf": "Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif", - "RS__sansTf": "-ui-sans-serif, -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI Variable', 'Segoe UI', Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Liberation Sans', Arial, sans-serif", - "RS__humanistTf": "Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif", - "RS__monospaceTf": "ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace" + "oldStyleTf": "'Iowan Old Style', Sitka, 'Sitka Text', Palatino, 'Book Antiqua', 'URW Palladio L', P052, serif", + "modernTf": "Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif", + "sansTf": "-ui-sans-serif, -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI Variable', 'Segoe UI', Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Liberation Sans', Arial, sans-serif", + "humanistTf": "Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif", + "monospaceTf": "ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace" } \ No newline at end of file diff --git a/css/vars/pagination.json b/css/vars/pagination.json index 1f9c5e65..5c0507b4 100644 --- a/css/vars/pagination.json +++ b/css/vars/pagination.json @@ -1,8 +1,8 @@ { - "RS__colWidth": "100vw", - "RS__colCount": 1, - "RS__colGap": 0, - "RS__defaultLineLength": "100%", - "RS__pageGutter": 0, - "RS__viewportWidth": "100%" + "colWidth": "100vw", + "colCount": 1, + "colGap": 0, + "defaultLineLength": "100%", + "pageGutter": 0, + "viewportWidth": "100%" } \ No newline at end of file From bd2c271d0055d38bff72ec0098ea69cb04a64e6e Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 10:32:16 +0200 Subject: [PATCH 02/15] Move Japanese font stacks in vars --- css/dist/ReadiumCSS-before.css | 12 ++++++++---- css/dist/cjk-horizontal/ReadiumCSS-before.css | 12 ++++++++---- css/dist/cjk-vertical/ReadiumCSS-before.css | 12 ++++++++---- css/dist/rtl/ReadiumCSS-before.css | 12 ++++++++---- css/src/modules/ReadiumCSS-base.css | 6 +----- css/vars/fontStacks.json | 6 +++++- 6 files changed, 38 insertions(+), 22 deletions(-) diff --git a/css/dist/ReadiumCSS-before.css b/css/dist/ReadiumCSS-before.css index 54eb3bb2..213ea7c1 100644 --- a/css/dist/ReadiumCSS-before.css +++ b/css/dist/ReadiumCSS-before.css @@ -32,6 +32,14 @@ :root{ + --RS__sans-serif-ja-v:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDGothic', 'Yu Gothic', 'MSゴシック', 'MS Gothic', sans-serif; + + --RS__serif-ja-v:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDMincho', 'Yu Mincho', 'MS明朝', 'MS Mincho', serif; + + --RS__sans-serif-ja:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDPGothic', 'Yu Gothic', 'MS Pゴシック', 'MS PGothic', sans-serif; + + --RS__serif-ja:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDPMincho', 'Yu Mincho', 'MS P明朝', 'MS PMincho', serif; + --RS__monospaceTf:ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace; --RS__humanistTf:Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif; @@ -150,10 +158,6 @@ math{ :lang(ja){ --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; --RS__lineHeightCompensation:1.167; - --RS__serif-ja:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDPMincho", "Yu Mincho", "MS P明朝", "MS PMincho", serif; - --RS__sans-serif-ja:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDPGothic", "Yu Gothic", "MS Pゴシック", "MS PGothic", sans-serif; - --RS__serif-ja-v:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDMincho", "Yu Mincho", "MS明朝", "MS Mincho", serif; - --RS__sans-serif-ja-v:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDGothic", "Yu Gothic", "MSゴシック", "MS Gothic", sans-serif; } :lang(km){ diff --git a/css/dist/cjk-horizontal/ReadiumCSS-before.css b/css/dist/cjk-horizontal/ReadiumCSS-before.css index 54eb3bb2..213ea7c1 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-before.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-before.css @@ -32,6 +32,14 @@ :root{ + --RS__sans-serif-ja-v:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDGothic', 'Yu Gothic', 'MSゴシック', 'MS Gothic', sans-serif; + + --RS__serif-ja-v:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDMincho', 'Yu Mincho', 'MS明朝', 'MS Mincho', serif; + + --RS__sans-serif-ja:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDPGothic', 'Yu Gothic', 'MS Pゴシック', 'MS PGothic', sans-serif; + + --RS__serif-ja:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDPMincho', 'Yu Mincho', 'MS P明朝', 'MS PMincho', serif; + --RS__monospaceTf:ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace; --RS__humanistTf:Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif; @@ -150,10 +158,6 @@ math{ :lang(ja){ --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; --RS__lineHeightCompensation:1.167; - --RS__serif-ja:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDPMincho", "Yu Mincho", "MS P明朝", "MS PMincho", serif; - --RS__sans-serif-ja:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDPGothic", "Yu Gothic", "MS Pゴシック", "MS PGothic", sans-serif; - --RS__serif-ja-v:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDMincho", "Yu Mincho", "MS明朝", "MS Mincho", serif; - --RS__sans-serif-ja-v:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDGothic", "Yu Gothic", "MSゴシック", "MS Gothic", sans-serif; } :lang(km){ diff --git a/css/dist/cjk-vertical/ReadiumCSS-before.css b/css/dist/cjk-vertical/ReadiumCSS-before.css index 8c2cc058..eaba718d 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-before.css +++ b/css/dist/cjk-vertical/ReadiumCSS-before.css @@ -32,6 +32,14 @@ :root{ + --RS__sans-serif-ja-v:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDGothic', 'Yu Gothic', 'MSゴシック', 'MS Gothic', sans-serif; + + --RS__serif-ja-v:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDMincho', 'Yu Mincho', 'MS明朝', 'MS Mincho', serif; + + --RS__sans-serif-ja:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDPGothic', 'Yu Gothic', 'MS Pゴシック', 'MS PGothic', sans-serif; + + --RS__serif-ja:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDPMincho', 'Yu Mincho', 'MS P明朝', 'MS PMincho', serif; + --RS__monospaceTf:ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace; --RS__humanistTf:Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif; @@ -150,10 +158,6 @@ math{ :lang(ja){ --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; --RS__lineHeightCompensation:1.167; - --RS__serif-ja:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDPMincho", "Yu Mincho", "MS P明朝", "MS PMincho", serif; - --RS__sans-serif-ja:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDPGothic", "Yu Gothic", "MS Pゴシック", "MS PGothic", sans-serif; - --RS__serif-ja-v:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDMincho", "Yu Mincho", "MS明朝", "MS Mincho", serif; - --RS__sans-serif-ja-v:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDGothic", "Yu Gothic", "MSゴシック", "MS Gothic", sans-serif; } :lang(km){ diff --git a/css/dist/rtl/ReadiumCSS-before.css b/css/dist/rtl/ReadiumCSS-before.css index 54eb3bb2..213ea7c1 100644 --- a/css/dist/rtl/ReadiumCSS-before.css +++ b/css/dist/rtl/ReadiumCSS-before.css @@ -32,6 +32,14 @@ :root{ + --RS__sans-serif-ja-v:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDGothic', 'Yu Gothic', 'MSゴシック', 'MS Gothic', sans-serif; + + --RS__serif-ja-v:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDMincho', 'Yu Mincho', 'MS明朝', 'MS Mincho', serif; + + --RS__sans-serif-ja:'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDPGothic', 'Yu Gothic', 'MS Pゴシック', 'MS PGothic', sans-serif; + + --RS__serif-ja:'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDPMincho', 'Yu Mincho', 'MS P明朝', 'MS PMincho', serif; + --RS__monospaceTf:ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace; --RS__humanistTf:Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif; @@ -150,10 +158,6 @@ math{ :lang(ja){ --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; --RS__lineHeightCompensation:1.167; - --RS__serif-ja:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDPMincho", "Yu Mincho", "MS P明朝", "MS PMincho", serif; - --RS__sans-serif-ja:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDPGothic", "Yu Gothic", "MS Pゴシック", "MS PGothic", sans-serif; - --RS__serif-ja-v:"Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDMincho", "Yu Mincho", "MS明朝", "MS Mincho", serif; - --RS__sans-serif-ja-v:"Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDGothic", "Yu Gothic", "MSゴシック", "MS Gothic", sans-serif; } :lang(km){ diff --git a/css/src/modules/ReadiumCSS-base.css b/css/src/modules/ReadiumCSS-base.css index f3c5e1b7..58fd57b2 100644 --- a/css/src/modules/ReadiumCSS-base.css +++ b/css/src/modules/ReadiumCSS-base.css @@ -136,12 +136,8 @@ math { /* For CJK, the line-height is usually 15–20% more than for Latin */ --RS__lineHeightCompensation: 1.167; - /* Extra variables for Japanese font-stacks as we may want to reuse them for user settings + default */ + /* See extra variables for Japanese font-stacks in vars as we may want to reuse them for user settings + default */ /* This setting uses the BIZ UD font for serif and the Yu font for sans serif on Windows. Note: When using the BIZ UD font for vertical writing display, if you set half-width (ASCII) characters to stand upright with `text-orientation: upright`, the width of these characters is narrow. By specifying `font-variant-east-asian: full-width;` at the same time, you can display the characters with the width of one full-width character. */ - --RS__serif-ja: "Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDPMincho", "Yu Mincho", "MS P明朝", "MS PMincho", serif; - --RS__sans-serif-ja: "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDPGothic", "Yu Gothic", "MS Pゴシック", "MS PGothic", sans-serif; - --RS__serif-ja-v: "Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho", "BIZ UDMincho", "Yu Mincho", "MS明朝", "MS Mincho", serif; - --RS__sans-serif-ja-v: "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ W3", "YuGothic", "Yu Gothic Medium", "BIZ UDGothic", "Yu Gothic", "MSゴシック", "MS Gothic", sans-serif; } :lang(km) { diff --git a/css/vars/fontStacks.json b/css/vars/fontStacks.json index 167d0ff3..c7cda3a4 100644 --- a/css/vars/fontStacks.json +++ b/css/vars/fontStacks.json @@ -3,5 +3,9 @@ "modernTf": "Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif", "sansTf": "-ui-sans-serif, -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI Variable', 'Segoe UI', Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Liberation Sans', Arial, sans-serif", "humanistTf": "Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif", - "monospaceTf": "ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace" + "monospaceTf": "ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace", + "serif-ja": "'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDPMincho', 'Yu Mincho', 'MS P明朝', 'MS PMincho', serif", + "sans-serif-ja": "'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDPGothic', 'Yu Gothic', 'MS Pゴシック', 'MS PGothic', sans-serif", + "serif-ja-v": "'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDMincho', 'Yu Mincho', 'MS明朝', 'MS Mincho', serif", + "sans-serif-ja-v": "'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDGothic', 'Yu Gothic', 'MSゴシック', 'MS Gothic', sans-serif" } \ No newline at end of file From 6e0646b3956506074b82988a7d872df03cb29acc Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 10:45:08 +0200 Subject: [PATCH 03/15] Create i18n json --- css/dist/ReadiumCSS-before.css | 198 +++++++++++++----- css/dist/cjk-horizontal/ReadiumCSS-before.css | 198 +++++++++++++----- css/dist/cjk-vertical/ReadiumCSS-before.css | 198 +++++++++++++----- css/dist/rtl/ReadiumCSS-before.css | 198 +++++++++++++----- css/src/modules/ReadiumCSS-base.css | 120 +++++------ css/vars/i18n.json | 107 ++++++++++ 6 files changed, 760 insertions(+), 259 deletions(-) create mode 100644 css/vars/i18n.json diff --git a/css/dist/ReadiumCSS-before.css b/css/dist/ReadiumCSS-before.css index 213ea7c1..398220ec 100644 --- a/css/dist/ReadiumCSS-before.css +++ b/css/dist/ReadiumCSS-before.css @@ -49,9 +49,106 @@ --RS__modernTf:Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif; --RS__oldStyleTf:'Iowan Old Style', Sitka, 'Sitka Text', Palatino, 'Book Antiqua', 'URW Palladio L', P052, serif; - --RS__baseFontFamily:var(--RS__oldStyleTf); - --RS__lineHeightCompensation:1; + --RS__zh-HK-lineHeightCompensation:1.167; + + --RS__zh-HK-baseFontFamily:'方體', 'PingFang HK', '方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-TW-lineHeightCompensation:1.167; + + --RS__zh-TW-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-Hant-lineHeightCompensation:1.167; + + --RS__zh-Hant-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-lineHeightCompensation:1.167; + + --RS__zh-baseFontFamily:'方体', 'PingFang SC', '黑体', 'Heiti SC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK SC', sans-serif; + + --RS__th-lineHeightCompensation:1.067; + + --RS__th-baseFontFamily:Thonburi, 'Leelawadee UI', 'Cordia New', Roboto, Noto, 'Noto Sans Thai', sans-serif; + + --RS__te-baseFontFamily:'Kohinoor Telugu', 'Telugu Sangam MN', 'Nirmala UI', Gautami, Roboto, Noto, 'Noto Sans Telugu', sans-serif; + + --RS__ta-lineHeightCompensation:1.067; + + --RS__ta-baseFontFamily:'Tamil Sangam MN', 'Nirmala UI', Latha, Roboto, Noto, 'Noto Sans Tamil', sans-serif; + + --RS__si-lineHeightCompensation:1.167; + + --RS__si-baseFontFamily:'Sinhala Sangam MN', 'Nirmala UI', 'Iskoola Pota', Roboto, Noto, 'Noto Sans Sinhala', sans-serif; + + --RS__pa-lineHeightCompensation:1.1; + + --RS__pa-baseFontFamily:'Gurmukhi MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Gurmukhi', sans-serif; + + --RS__or-lineHeightCompensation:1.167; + + --RS__or-baseFontFamily:'Oriya Sangam MN', 'Nirmala UI', Kalinga, Roboto, Noto, 'Noto Sans Oriya', sans-serif; + + --RS__ml-lineHeightCompensation:1.067; + + --RS__ml-baseFontFamily:'Malayalam Sangam MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Malayalam', sans-serif; + + --RS__lo-baseFontFamily:'Lao Sangam MN', 'Leelawadee UI', 'Lao UI', Roboto, Noto, 'Noto Sans Lao', sans-serif; + + --RS__ko-lineHeightCompensation:1.167; + + --RS__ko-baseFontFamily:'Nanum Gothic', 'Apple SD Gothic Neo', 'Malgun Gothic', Roboto, Noto, 'Noto Sans CJK KR', sans-serif; + + --RS__kn-lineHeightCompensation:1.1; + + --RS__kn-baseFontFamily:'Kannada Sangam MN', 'Nirmala UI', Tunga, Roboto, Noto, 'Noto Sans Kannada', sans-serif; + + --RS__km-lineHeightCompensation:1.067; + + --RS__km-baseFontFamily:'Khmer Sangam MN', 'Leelawadee UI', 'Khmer UI', Roboto, Noto, 'Noto Sans Khmer', sans-serif; + + --RS__ja-lineHeightCompensation:1.167; + + --RS__ja-baseFontFamily:YuGothic, 'Hiragino Maru Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo UI', 'MS Gothic', Roboto, Noto, 'Noto Sans CJK JP', sans-serif; + + --RS__iu-baseFontFamily:'Euphemia UCAS', Euphemia, Roboto, Noto, 'Noto Sans Canadian Aboriginal', sans-serif; + + --RS__hy-baseFontFamily:Mshtakan, Sylfaen, Roboto, Noto, 'Noto Serif Armenian', serif; + + --RS__hi-lineHeightCompensation:1.1; + + --RS__hi-baseFontFamily:'Kohinoor Devanagari', 'Devanagari Sangam MN', Kokila, 'Nirmala UI', Roboto, Noto, 'Noto Sans Devanagari', sans-serif; + + --RS__he-lineHeightCompensation:1.1; + + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + + --RS__gu-lineHeightCompensation:1.167; + + --RS__gu-baseFontFamily:'Gujarati Sangam MN', 'Nirmala UI', Shruti, Roboto, Noto, 'Noto Sans Gujarati', sans-serif; + + --RS__fa-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__chr-lineHeightCompensation:1.167; + + --RS__chr-baseFontFamily:'Plantagenet Cherokee', Roboto, Noto, 'Noto Sans Cherokee'; + + --RS__bo-baseFontFamily:Kailasa, 'Microsoft Himalaya', Roboto, Noto, 'Noto Sans Tibetan', sans-serif; + + --RS__bn-lineHeightCompensation:1.067; + + --RS__bn-baseFontFamily:'Kohinoor Bangla', 'Bangla Sangam MN', Vrinda, Roboto, Noto, 'Noto Sans Bengali', sans-serif; + + --RS__ar-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__am-lineHeightCompensation:1.167; + + --RS__am-baseFontFamily:Kefa, Nyala, Roboto, Noto, 'Noto Sans Ethiopic', serif; + + --RS__default-lineHeightCompensation:1; + + --RS__default-baseFontFamily:var(--RS__oldStyleTf); + --RS__baseFontFamily:var(--RS__default-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__default-lineHeightCompensation); --RS__baseLineHeight:calc(1.5 * var(--RS__lineHeightCompensation)); --RS__selectionTextColor:inherit; @@ -105,128 +202,131 @@ math{ } :lang(am){ - --RS__baseFontFamily:kefa, nyala, roboto, noto, "Noto Sans Ethiopic", serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__am-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__am-lineHeightCompensation); } :lang(ar){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__ar-baseFontFamily); } :lang(bn){ - --RS__baseFontFamily:"Kohinoor Bangla", "Bangla Sangam MN", vrinda, roboto, noto, "Noto Sans Bengali", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__bn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__bn-lineHeightCompensation); } :lang(bo){ - --RS__baseFontFamily:kailasa, "Microsoft Himalaya", roboto, noto, "Noto Sans Tibetan", sans-serif; + --RS__baseFontFamily:var(--RS__bo-baseFontFamily); } :lang(chr){ - --RS__baseFontFamily:"Plantagenet Cherokee", roboto, noto, "Noto Sans Cherokee"; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__chr-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__chr-lineHeightCompensation); } :lang(fa){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__fa-baseFontFamily); } :lang(gu){ - --RS__baseFontFamily:"Gujarati Sangam MN", "Nirmala UI", shruti, roboto, noto, "Noto Sans Gujarati", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__gu-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__gu-lineHeightCompensation); } :lang(he){ - --RS__baseFontFamily:"New Peninim MT", "Arial Hebrew", gisha, "Times New Roman", roboto, noto, "Noto Sans Hebrew" sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__he-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__he-lineHeightCompensation); } :lang(hi){ - --RS__baseFontFamily:"Kohinoor Devanagari", "Devanagari Sangam MN", kokila, "Nirmala UI", roboto, noto, "Noto Sans Devanagari", sans-serif; - - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__hi-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__hi-lineHeightCompensation); } :lang(hy){ - --RS__baseFontFamily:mshtakan, sylfaen, roboto, noto, "Noto Serif Armenian", serif; + --RS__baseFontFamily:var(--RS__hy-baseFontFamily); } :lang(iu){ - --RS__baseFontFamily:"Euphemia UCAS", euphemia, roboto, noto, "Noto Sans Canadian Aboriginal", sans-serif; + --RS__baseFontFamily:var(--RS__iu-baseFontFamily); } :lang(ja){ - --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ja-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ja-lineHeightCompensation); } :lang(km){ - --RS__baseFontFamily:"Khmer Sangam MN", "Leelawadee UI", "Khmer UI", roboto, noto, "Noto Sans Khmer", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__km-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__km-lineHeightCompensation); } :lang(kn){ - --RS__baseFontFamily:"Kannada Sangam MN", "Nirmala UI", tunga, roboto, noto, "Noto Sans Kannada", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__kn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__kn-lineHeightCompensation); } :lang(ko){ - --RS__baseFontFamily:"Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", roboto, noto, "Noto Sans CJK KR", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ko-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ko-lineHeightCompensation); } :lang(lo){ - --RS__baseFontFamily:"Lao Sangam MN", "Leelawadee UI", "Lao UI", roboto, noto, "Noto Sans Lao", sans-serif; + --RS__baseFontFamily:var(--RS__lo-baseFontFamily); } :lang(ml){ - --RS__baseFontFamily:"Malayalam Sangam MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Malayalam", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ml-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ml-lineHeightCompensation); } :lang(or){ - --RS__baseFontFamily:"Oriya Sangam MN", "Nirmala UI", kalinga, roboto, noto, "Noto Sans Oriya", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__or-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__or-lineHeightCompensation); } :lang(pa){ - --RS__baseFontFamily:"Gurmukhi MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Gurmukhi", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__pa-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__pa-lineHeightCompensation); } :lang(si){ - --RS__baseFontFamily:"Sinhala Sangam MN", "Nirmala UI", "Iskoola Pota", roboto, noto, "Noto Sans Sinhala", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__si-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__si-lineHeightCompensation); } :lang(ta){ - --RS__baseFontFamily:"Tamil Sangam MN", "Nirmala UI", latha, roboto, noto, "Noto Sans Tamil", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ta-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ta-lineHeightCompensation); } :lang(te){ - --RS__baseFontFamily:"Kohinoor Telugu", "Telugu Sangam MN", "Nirmala UI", gautami, roboto, noto, "Noto Sans Telugu", sans-serif; + --RS__baseFontFamily:var(--RS__te-baseFontFamily); } :lang(th){ - --RS__baseFontFamily:"Thonburi", "Leelawadee UI", "Cordia New", roboto, noto, "Noto Sans Thai", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__th-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__th-lineHeightCompensation); } :lang(zh){ - --RS__baseFontFamily:"方体", "PingFang SC", "黑体", "Heiti SC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK SC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-lineHeightCompensation); +} + +:lang(zh-Hant){ + --RS__baseFontFamily:var(--RS__zh-Hant-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-Hant-lineHeightCompensation); } -: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; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-TW-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-TW-lineHeightCompensation); } :lang(zh-HK){ - --RS__baseFontFamily:"方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK TC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-HK-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-HK-lineHeightCompensation); } body{ diff --git a/css/dist/cjk-horizontal/ReadiumCSS-before.css b/css/dist/cjk-horizontal/ReadiumCSS-before.css index 213ea7c1..398220ec 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-before.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-before.css @@ -49,9 +49,106 @@ --RS__modernTf:Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif; --RS__oldStyleTf:'Iowan Old Style', Sitka, 'Sitka Text', Palatino, 'Book Antiqua', 'URW Palladio L', P052, serif; - --RS__baseFontFamily:var(--RS__oldStyleTf); - --RS__lineHeightCompensation:1; + --RS__zh-HK-lineHeightCompensation:1.167; + + --RS__zh-HK-baseFontFamily:'方體', 'PingFang HK', '方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-TW-lineHeightCompensation:1.167; + + --RS__zh-TW-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-Hant-lineHeightCompensation:1.167; + + --RS__zh-Hant-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-lineHeightCompensation:1.167; + + --RS__zh-baseFontFamily:'方体', 'PingFang SC', '黑体', 'Heiti SC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK SC', sans-serif; + + --RS__th-lineHeightCompensation:1.067; + + --RS__th-baseFontFamily:Thonburi, 'Leelawadee UI', 'Cordia New', Roboto, Noto, 'Noto Sans Thai', sans-serif; + + --RS__te-baseFontFamily:'Kohinoor Telugu', 'Telugu Sangam MN', 'Nirmala UI', Gautami, Roboto, Noto, 'Noto Sans Telugu', sans-serif; + + --RS__ta-lineHeightCompensation:1.067; + + --RS__ta-baseFontFamily:'Tamil Sangam MN', 'Nirmala UI', Latha, Roboto, Noto, 'Noto Sans Tamil', sans-serif; + + --RS__si-lineHeightCompensation:1.167; + + --RS__si-baseFontFamily:'Sinhala Sangam MN', 'Nirmala UI', 'Iskoola Pota', Roboto, Noto, 'Noto Sans Sinhala', sans-serif; + + --RS__pa-lineHeightCompensation:1.1; + + --RS__pa-baseFontFamily:'Gurmukhi MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Gurmukhi', sans-serif; + + --RS__or-lineHeightCompensation:1.167; + + --RS__or-baseFontFamily:'Oriya Sangam MN', 'Nirmala UI', Kalinga, Roboto, Noto, 'Noto Sans Oriya', sans-serif; + + --RS__ml-lineHeightCompensation:1.067; + + --RS__ml-baseFontFamily:'Malayalam Sangam MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Malayalam', sans-serif; + + --RS__lo-baseFontFamily:'Lao Sangam MN', 'Leelawadee UI', 'Lao UI', Roboto, Noto, 'Noto Sans Lao', sans-serif; + + --RS__ko-lineHeightCompensation:1.167; + + --RS__ko-baseFontFamily:'Nanum Gothic', 'Apple SD Gothic Neo', 'Malgun Gothic', Roboto, Noto, 'Noto Sans CJK KR', sans-serif; + + --RS__kn-lineHeightCompensation:1.1; + + --RS__kn-baseFontFamily:'Kannada Sangam MN', 'Nirmala UI', Tunga, Roboto, Noto, 'Noto Sans Kannada', sans-serif; + + --RS__km-lineHeightCompensation:1.067; + + --RS__km-baseFontFamily:'Khmer Sangam MN', 'Leelawadee UI', 'Khmer UI', Roboto, Noto, 'Noto Sans Khmer', sans-serif; + + --RS__ja-lineHeightCompensation:1.167; + + --RS__ja-baseFontFamily:YuGothic, 'Hiragino Maru Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo UI', 'MS Gothic', Roboto, Noto, 'Noto Sans CJK JP', sans-serif; + + --RS__iu-baseFontFamily:'Euphemia UCAS', Euphemia, Roboto, Noto, 'Noto Sans Canadian Aboriginal', sans-serif; + + --RS__hy-baseFontFamily:Mshtakan, Sylfaen, Roboto, Noto, 'Noto Serif Armenian', serif; + + --RS__hi-lineHeightCompensation:1.1; + + --RS__hi-baseFontFamily:'Kohinoor Devanagari', 'Devanagari Sangam MN', Kokila, 'Nirmala UI', Roboto, Noto, 'Noto Sans Devanagari', sans-serif; + + --RS__he-lineHeightCompensation:1.1; + + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + + --RS__gu-lineHeightCompensation:1.167; + + --RS__gu-baseFontFamily:'Gujarati Sangam MN', 'Nirmala UI', Shruti, Roboto, Noto, 'Noto Sans Gujarati', sans-serif; + + --RS__fa-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__chr-lineHeightCompensation:1.167; + + --RS__chr-baseFontFamily:'Plantagenet Cherokee', Roboto, Noto, 'Noto Sans Cherokee'; + + --RS__bo-baseFontFamily:Kailasa, 'Microsoft Himalaya', Roboto, Noto, 'Noto Sans Tibetan', sans-serif; + + --RS__bn-lineHeightCompensation:1.067; + + --RS__bn-baseFontFamily:'Kohinoor Bangla', 'Bangla Sangam MN', Vrinda, Roboto, Noto, 'Noto Sans Bengali', sans-serif; + + --RS__ar-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__am-lineHeightCompensation:1.167; + + --RS__am-baseFontFamily:Kefa, Nyala, Roboto, Noto, 'Noto Sans Ethiopic', serif; + + --RS__default-lineHeightCompensation:1; + + --RS__default-baseFontFamily:var(--RS__oldStyleTf); + --RS__baseFontFamily:var(--RS__default-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__default-lineHeightCompensation); --RS__baseLineHeight:calc(1.5 * var(--RS__lineHeightCompensation)); --RS__selectionTextColor:inherit; @@ -105,128 +202,131 @@ math{ } :lang(am){ - --RS__baseFontFamily:kefa, nyala, roboto, noto, "Noto Sans Ethiopic", serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__am-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__am-lineHeightCompensation); } :lang(ar){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__ar-baseFontFamily); } :lang(bn){ - --RS__baseFontFamily:"Kohinoor Bangla", "Bangla Sangam MN", vrinda, roboto, noto, "Noto Sans Bengali", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__bn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__bn-lineHeightCompensation); } :lang(bo){ - --RS__baseFontFamily:kailasa, "Microsoft Himalaya", roboto, noto, "Noto Sans Tibetan", sans-serif; + --RS__baseFontFamily:var(--RS__bo-baseFontFamily); } :lang(chr){ - --RS__baseFontFamily:"Plantagenet Cherokee", roboto, noto, "Noto Sans Cherokee"; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__chr-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__chr-lineHeightCompensation); } :lang(fa){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__fa-baseFontFamily); } :lang(gu){ - --RS__baseFontFamily:"Gujarati Sangam MN", "Nirmala UI", shruti, roboto, noto, "Noto Sans Gujarati", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__gu-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__gu-lineHeightCompensation); } :lang(he){ - --RS__baseFontFamily:"New Peninim MT", "Arial Hebrew", gisha, "Times New Roman", roboto, noto, "Noto Sans Hebrew" sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__he-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__he-lineHeightCompensation); } :lang(hi){ - --RS__baseFontFamily:"Kohinoor Devanagari", "Devanagari Sangam MN", kokila, "Nirmala UI", roboto, noto, "Noto Sans Devanagari", sans-serif; - - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__hi-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__hi-lineHeightCompensation); } :lang(hy){ - --RS__baseFontFamily:mshtakan, sylfaen, roboto, noto, "Noto Serif Armenian", serif; + --RS__baseFontFamily:var(--RS__hy-baseFontFamily); } :lang(iu){ - --RS__baseFontFamily:"Euphemia UCAS", euphemia, roboto, noto, "Noto Sans Canadian Aboriginal", sans-serif; + --RS__baseFontFamily:var(--RS__iu-baseFontFamily); } :lang(ja){ - --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ja-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ja-lineHeightCompensation); } :lang(km){ - --RS__baseFontFamily:"Khmer Sangam MN", "Leelawadee UI", "Khmer UI", roboto, noto, "Noto Sans Khmer", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__km-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__km-lineHeightCompensation); } :lang(kn){ - --RS__baseFontFamily:"Kannada Sangam MN", "Nirmala UI", tunga, roboto, noto, "Noto Sans Kannada", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__kn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__kn-lineHeightCompensation); } :lang(ko){ - --RS__baseFontFamily:"Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", roboto, noto, "Noto Sans CJK KR", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ko-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ko-lineHeightCompensation); } :lang(lo){ - --RS__baseFontFamily:"Lao Sangam MN", "Leelawadee UI", "Lao UI", roboto, noto, "Noto Sans Lao", sans-serif; + --RS__baseFontFamily:var(--RS__lo-baseFontFamily); } :lang(ml){ - --RS__baseFontFamily:"Malayalam Sangam MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Malayalam", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ml-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ml-lineHeightCompensation); } :lang(or){ - --RS__baseFontFamily:"Oriya Sangam MN", "Nirmala UI", kalinga, roboto, noto, "Noto Sans Oriya", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__or-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__or-lineHeightCompensation); } :lang(pa){ - --RS__baseFontFamily:"Gurmukhi MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Gurmukhi", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__pa-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__pa-lineHeightCompensation); } :lang(si){ - --RS__baseFontFamily:"Sinhala Sangam MN", "Nirmala UI", "Iskoola Pota", roboto, noto, "Noto Sans Sinhala", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__si-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__si-lineHeightCompensation); } :lang(ta){ - --RS__baseFontFamily:"Tamil Sangam MN", "Nirmala UI", latha, roboto, noto, "Noto Sans Tamil", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ta-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ta-lineHeightCompensation); } :lang(te){ - --RS__baseFontFamily:"Kohinoor Telugu", "Telugu Sangam MN", "Nirmala UI", gautami, roboto, noto, "Noto Sans Telugu", sans-serif; + --RS__baseFontFamily:var(--RS__te-baseFontFamily); } :lang(th){ - --RS__baseFontFamily:"Thonburi", "Leelawadee UI", "Cordia New", roboto, noto, "Noto Sans Thai", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__th-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__th-lineHeightCompensation); } :lang(zh){ - --RS__baseFontFamily:"方体", "PingFang SC", "黑体", "Heiti SC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK SC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-lineHeightCompensation); +} + +:lang(zh-Hant){ + --RS__baseFontFamily:var(--RS__zh-Hant-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-Hant-lineHeightCompensation); } -: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; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-TW-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-TW-lineHeightCompensation); } :lang(zh-HK){ - --RS__baseFontFamily:"方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK TC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-HK-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-HK-lineHeightCompensation); } body{ diff --git a/css/dist/cjk-vertical/ReadiumCSS-before.css b/css/dist/cjk-vertical/ReadiumCSS-before.css index eaba718d..1bf1dee3 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-before.css +++ b/css/dist/cjk-vertical/ReadiumCSS-before.css @@ -49,9 +49,106 @@ --RS__modernTf:Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif; --RS__oldStyleTf:'Iowan Old Style', Sitka, 'Sitka Text', Palatino, 'Book Antiqua', 'URW Palladio L', P052, serif; - --RS__baseFontFamily:var(--RS__oldStyleTf); - --RS__lineHeightCompensation:1; + --RS__zh-HK-lineHeightCompensation:1.167; + + --RS__zh-HK-baseFontFamily:'方體', 'PingFang HK', '方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-TW-lineHeightCompensation:1.167; + + --RS__zh-TW-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-Hant-lineHeightCompensation:1.167; + + --RS__zh-Hant-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-lineHeightCompensation:1.167; + + --RS__zh-baseFontFamily:'方体', 'PingFang SC', '黑体', 'Heiti SC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK SC', sans-serif; + + --RS__th-lineHeightCompensation:1.067; + + --RS__th-baseFontFamily:Thonburi, 'Leelawadee UI', 'Cordia New', Roboto, Noto, 'Noto Sans Thai', sans-serif; + + --RS__te-baseFontFamily:'Kohinoor Telugu', 'Telugu Sangam MN', 'Nirmala UI', Gautami, Roboto, Noto, 'Noto Sans Telugu', sans-serif; + + --RS__ta-lineHeightCompensation:1.067; + + --RS__ta-baseFontFamily:'Tamil Sangam MN', 'Nirmala UI', Latha, Roboto, Noto, 'Noto Sans Tamil', sans-serif; + + --RS__si-lineHeightCompensation:1.167; + + --RS__si-baseFontFamily:'Sinhala Sangam MN', 'Nirmala UI', 'Iskoola Pota', Roboto, Noto, 'Noto Sans Sinhala', sans-serif; + + --RS__pa-lineHeightCompensation:1.1; + + --RS__pa-baseFontFamily:'Gurmukhi MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Gurmukhi', sans-serif; + + --RS__or-lineHeightCompensation:1.167; + + --RS__or-baseFontFamily:'Oriya Sangam MN', 'Nirmala UI', Kalinga, Roboto, Noto, 'Noto Sans Oriya', sans-serif; + + --RS__ml-lineHeightCompensation:1.067; + + --RS__ml-baseFontFamily:'Malayalam Sangam MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Malayalam', sans-serif; + + --RS__lo-baseFontFamily:'Lao Sangam MN', 'Leelawadee UI', 'Lao UI', Roboto, Noto, 'Noto Sans Lao', sans-serif; + + --RS__ko-lineHeightCompensation:1.167; + + --RS__ko-baseFontFamily:'Nanum Gothic', 'Apple SD Gothic Neo', 'Malgun Gothic', Roboto, Noto, 'Noto Sans CJK KR', sans-serif; + + --RS__kn-lineHeightCompensation:1.1; + + --RS__kn-baseFontFamily:'Kannada Sangam MN', 'Nirmala UI', Tunga, Roboto, Noto, 'Noto Sans Kannada', sans-serif; + + --RS__km-lineHeightCompensation:1.067; + + --RS__km-baseFontFamily:'Khmer Sangam MN', 'Leelawadee UI', 'Khmer UI', Roboto, Noto, 'Noto Sans Khmer', sans-serif; + + --RS__ja-lineHeightCompensation:1.167; + + --RS__ja-baseFontFamily:YuGothic, 'Hiragino Maru Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo UI', 'MS Gothic', Roboto, Noto, 'Noto Sans CJK JP', sans-serif; + + --RS__iu-baseFontFamily:'Euphemia UCAS', Euphemia, Roboto, Noto, 'Noto Sans Canadian Aboriginal', sans-serif; + + --RS__hy-baseFontFamily:Mshtakan, Sylfaen, Roboto, Noto, 'Noto Serif Armenian', serif; + + --RS__hi-lineHeightCompensation:1.1; + + --RS__hi-baseFontFamily:'Kohinoor Devanagari', 'Devanagari Sangam MN', Kokila, 'Nirmala UI', Roboto, Noto, 'Noto Sans Devanagari', sans-serif; + + --RS__he-lineHeightCompensation:1.1; + + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + + --RS__gu-lineHeightCompensation:1.167; + + --RS__gu-baseFontFamily:'Gujarati Sangam MN', 'Nirmala UI', Shruti, Roboto, Noto, 'Noto Sans Gujarati', sans-serif; + + --RS__fa-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__chr-lineHeightCompensation:1.167; + + --RS__chr-baseFontFamily:'Plantagenet Cherokee', Roboto, Noto, 'Noto Sans Cherokee'; + + --RS__bo-baseFontFamily:Kailasa, 'Microsoft Himalaya', Roboto, Noto, 'Noto Sans Tibetan', sans-serif; + + --RS__bn-lineHeightCompensation:1.067; + + --RS__bn-baseFontFamily:'Kohinoor Bangla', 'Bangla Sangam MN', Vrinda, Roboto, Noto, 'Noto Sans Bengali', sans-serif; + + --RS__ar-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__am-lineHeightCompensation:1.167; + + --RS__am-baseFontFamily:Kefa, Nyala, Roboto, Noto, 'Noto Sans Ethiopic', serif; + + --RS__default-lineHeightCompensation:1; + + --RS__default-baseFontFamily:var(--RS__oldStyleTf); + --RS__baseFontFamily:var(--RS__default-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__default-lineHeightCompensation); --RS__baseLineHeight:calc(1.5 * var(--RS__lineHeightCompensation)); --RS__selectionTextColor:inherit; @@ -105,128 +202,131 @@ math{ } :lang(am){ - --RS__baseFontFamily:kefa, nyala, roboto, noto, "Noto Sans Ethiopic", serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__am-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__am-lineHeightCompensation); } :lang(ar){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__ar-baseFontFamily); } :lang(bn){ - --RS__baseFontFamily:"Kohinoor Bangla", "Bangla Sangam MN", vrinda, roboto, noto, "Noto Sans Bengali", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__bn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__bn-lineHeightCompensation); } :lang(bo){ - --RS__baseFontFamily:kailasa, "Microsoft Himalaya", roboto, noto, "Noto Sans Tibetan", sans-serif; + --RS__baseFontFamily:var(--RS__bo-baseFontFamily); } :lang(chr){ - --RS__baseFontFamily:"Plantagenet Cherokee", roboto, noto, "Noto Sans Cherokee"; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__chr-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__chr-lineHeightCompensation); } :lang(fa){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__fa-baseFontFamily); } :lang(gu){ - --RS__baseFontFamily:"Gujarati Sangam MN", "Nirmala UI", shruti, roboto, noto, "Noto Sans Gujarati", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__gu-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__gu-lineHeightCompensation); } :lang(he){ - --RS__baseFontFamily:"New Peninim MT", "Arial Hebrew", gisha, "Times New Roman", roboto, noto, "Noto Sans Hebrew" sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__he-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__he-lineHeightCompensation); } :lang(hi){ - --RS__baseFontFamily:"Kohinoor Devanagari", "Devanagari Sangam MN", kokila, "Nirmala UI", roboto, noto, "Noto Sans Devanagari", sans-serif; - - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__hi-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__hi-lineHeightCompensation); } :lang(hy){ - --RS__baseFontFamily:mshtakan, sylfaen, roboto, noto, "Noto Serif Armenian", serif; + --RS__baseFontFamily:var(--RS__hy-baseFontFamily); } :lang(iu){ - --RS__baseFontFamily:"Euphemia UCAS", euphemia, roboto, noto, "Noto Sans Canadian Aboriginal", sans-serif; + --RS__baseFontFamily:var(--RS__iu-baseFontFamily); } :lang(ja){ - --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ja-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ja-lineHeightCompensation); } :lang(km){ - --RS__baseFontFamily:"Khmer Sangam MN", "Leelawadee UI", "Khmer UI", roboto, noto, "Noto Sans Khmer", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__km-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__km-lineHeightCompensation); } :lang(kn){ - --RS__baseFontFamily:"Kannada Sangam MN", "Nirmala UI", tunga, roboto, noto, "Noto Sans Kannada", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__kn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__kn-lineHeightCompensation); } :lang(ko){ - --RS__baseFontFamily:"Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", roboto, noto, "Noto Sans CJK KR", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ko-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ko-lineHeightCompensation); } :lang(lo){ - --RS__baseFontFamily:"Lao Sangam MN", "Leelawadee UI", "Lao UI", roboto, noto, "Noto Sans Lao", sans-serif; + --RS__baseFontFamily:var(--RS__lo-baseFontFamily); } :lang(ml){ - --RS__baseFontFamily:"Malayalam Sangam MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Malayalam", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ml-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ml-lineHeightCompensation); } :lang(or){ - --RS__baseFontFamily:"Oriya Sangam MN", "Nirmala UI", kalinga, roboto, noto, "Noto Sans Oriya", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__or-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__or-lineHeightCompensation); } :lang(pa){ - --RS__baseFontFamily:"Gurmukhi MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Gurmukhi", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__pa-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__pa-lineHeightCompensation); } :lang(si){ - --RS__baseFontFamily:"Sinhala Sangam MN", "Nirmala UI", "Iskoola Pota", roboto, noto, "Noto Sans Sinhala", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__si-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__si-lineHeightCompensation); } :lang(ta){ - --RS__baseFontFamily:"Tamil Sangam MN", "Nirmala UI", latha, roboto, noto, "Noto Sans Tamil", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ta-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ta-lineHeightCompensation); } :lang(te){ - --RS__baseFontFamily:"Kohinoor Telugu", "Telugu Sangam MN", "Nirmala UI", gautami, roboto, noto, "Noto Sans Telugu", sans-serif; + --RS__baseFontFamily:var(--RS__te-baseFontFamily); } :lang(th){ - --RS__baseFontFamily:"Thonburi", "Leelawadee UI", "Cordia New", roboto, noto, "Noto Sans Thai", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__th-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__th-lineHeightCompensation); } :lang(zh){ - --RS__baseFontFamily:"方体", "PingFang SC", "黑体", "Heiti SC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK SC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-lineHeightCompensation); +} + +:lang(zh-Hant){ + --RS__baseFontFamily:var(--RS__zh-Hant-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-Hant-lineHeightCompensation); } -: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; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-TW-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-TW-lineHeightCompensation); } :lang(zh-HK){ - --RS__baseFontFamily:"方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK TC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-HK-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-HK-lineHeightCompensation); } body{ diff --git a/css/dist/rtl/ReadiumCSS-before.css b/css/dist/rtl/ReadiumCSS-before.css index 213ea7c1..398220ec 100644 --- a/css/dist/rtl/ReadiumCSS-before.css +++ b/css/dist/rtl/ReadiumCSS-before.css @@ -49,9 +49,106 @@ --RS__modernTf:Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif; --RS__oldStyleTf:'Iowan Old Style', Sitka, 'Sitka Text', Palatino, 'Book Antiqua', 'URW Palladio L', P052, serif; - --RS__baseFontFamily:var(--RS__oldStyleTf); - --RS__lineHeightCompensation:1; + --RS__zh-HK-lineHeightCompensation:1.167; + + --RS__zh-HK-baseFontFamily:'方體', 'PingFang HK', '方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-TW-lineHeightCompensation:1.167; + + --RS__zh-TW-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-Hant-lineHeightCompensation:1.167; + + --RS__zh-Hant-baseFontFamily:'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif; + + --RS__zh-lineHeightCompensation:1.167; + + --RS__zh-baseFontFamily:'方体', 'PingFang SC', '黑体', 'Heiti SC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK SC', sans-serif; + + --RS__th-lineHeightCompensation:1.067; + + --RS__th-baseFontFamily:Thonburi, 'Leelawadee UI', 'Cordia New', Roboto, Noto, 'Noto Sans Thai', sans-serif; + + --RS__te-baseFontFamily:'Kohinoor Telugu', 'Telugu Sangam MN', 'Nirmala UI', Gautami, Roboto, Noto, 'Noto Sans Telugu', sans-serif; + + --RS__ta-lineHeightCompensation:1.067; + + --RS__ta-baseFontFamily:'Tamil Sangam MN', 'Nirmala UI', Latha, Roboto, Noto, 'Noto Sans Tamil', sans-serif; + + --RS__si-lineHeightCompensation:1.167; + + --RS__si-baseFontFamily:'Sinhala Sangam MN', 'Nirmala UI', 'Iskoola Pota', Roboto, Noto, 'Noto Sans Sinhala', sans-serif; + + --RS__pa-lineHeightCompensation:1.1; + + --RS__pa-baseFontFamily:'Gurmukhi MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Gurmukhi', sans-serif; + + --RS__or-lineHeightCompensation:1.167; + + --RS__or-baseFontFamily:'Oriya Sangam MN', 'Nirmala UI', Kalinga, Roboto, Noto, 'Noto Sans Oriya', sans-serif; + + --RS__ml-lineHeightCompensation:1.067; + + --RS__ml-baseFontFamily:'Malayalam Sangam MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Malayalam', sans-serif; + + --RS__lo-baseFontFamily:'Lao Sangam MN', 'Leelawadee UI', 'Lao UI', Roboto, Noto, 'Noto Sans Lao', sans-serif; + + --RS__ko-lineHeightCompensation:1.167; + + --RS__ko-baseFontFamily:'Nanum Gothic', 'Apple SD Gothic Neo', 'Malgun Gothic', Roboto, Noto, 'Noto Sans CJK KR', sans-serif; + + --RS__kn-lineHeightCompensation:1.1; + + --RS__kn-baseFontFamily:'Kannada Sangam MN', 'Nirmala UI', Tunga, Roboto, Noto, 'Noto Sans Kannada', sans-serif; + + --RS__km-lineHeightCompensation:1.067; + + --RS__km-baseFontFamily:'Khmer Sangam MN', 'Leelawadee UI', 'Khmer UI', Roboto, Noto, 'Noto Sans Khmer', sans-serif; + + --RS__ja-lineHeightCompensation:1.167; + + --RS__ja-baseFontFamily:YuGothic, 'Hiragino Maru Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo UI', 'MS Gothic', Roboto, Noto, 'Noto Sans CJK JP', sans-serif; + + --RS__iu-baseFontFamily:'Euphemia UCAS', Euphemia, Roboto, Noto, 'Noto Sans Canadian Aboriginal', sans-serif; + + --RS__hy-baseFontFamily:Mshtakan, Sylfaen, Roboto, Noto, 'Noto Serif Armenian', serif; + + --RS__hi-lineHeightCompensation:1.1; + + --RS__hi-baseFontFamily:'Kohinoor Devanagari', 'Devanagari Sangam MN', Kokila, 'Nirmala UI', Roboto, Noto, 'Noto Sans Devanagari', sans-serif; + + --RS__he-lineHeightCompensation:1.1; + + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + + --RS__gu-lineHeightCompensation:1.167; + + --RS__gu-baseFontFamily:'Gujarati Sangam MN', 'Nirmala UI', Shruti, Roboto, Noto, 'Noto Sans Gujarati', sans-serif; + + --RS__fa-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__chr-lineHeightCompensation:1.167; + + --RS__chr-baseFontFamily:'Plantagenet Cherokee', Roboto, Noto, 'Noto Sans Cherokee'; + + --RS__bo-baseFontFamily:Kailasa, 'Microsoft Himalaya', Roboto, Noto, 'Noto Sans Tibetan', sans-serif; + + --RS__bn-lineHeightCompensation:1.067; + + --RS__bn-baseFontFamily:'Kohinoor Bangla', 'Bangla Sangam MN', Vrinda, Roboto, Noto, 'Noto Sans Bengali', sans-serif; + + --RS__ar-baseFontFamily:'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif; + + --RS__am-lineHeightCompensation:1.167; + + --RS__am-baseFontFamily:Kefa, Nyala, Roboto, Noto, 'Noto Sans Ethiopic', serif; + + --RS__default-lineHeightCompensation:1; + + --RS__default-baseFontFamily:var(--RS__oldStyleTf); + --RS__baseFontFamily:var(--RS__default-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__default-lineHeightCompensation); --RS__baseLineHeight:calc(1.5 * var(--RS__lineHeightCompensation)); --RS__selectionTextColor:inherit; @@ -105,128 +202,131 @@ math{ } :lang(am){ - --RS__baseFontFamily:kefa, nyala, roboto, noto, "Noto Sans Ethiopic", serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__am-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__am-lineHeightCompensation); } :lang(ar){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__ar-baseFontFamily); } :lang(bn){ - --RS__baseFontFamily:"Kohinoor Bangla", "Bangla Sangam MN", vrinda, roboto, noto, "Noto Sans Bengali", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__bn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__bn-lineHeightCompensation); } :lang(bo){ - --RS__baseFontFamily:kailasa, "Microsoft Himalaya", roboto, noto, "Noto Sans Tibetan", sans-serif; + --RS__baseFontFamily:var(--RS__bo-baseFontFamily); } :lang(chr){ - --RS__baseFontFamily:"Plantagenet Cherokee", roboto, noto, "Noto Sans Cherokee"; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__chr-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__chr-lineHeightCompensation); } :lang(fa){ - --RS__baseFontFamily:"Geeza Pro", "Arabic Typesetting", roboto, noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily:var(--RS__fa-baseFontFamily); } :lang(gu){ - --RS__baseFontFamily:"Gujarati Sangam MN", "Nirmala UI", shruti, roboto, noto, "Noto Sans Gujarati", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__gu-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__gu-lineHeightCompensation); } :lang(he){ - --RS__baseFontFamily:"New Peninim MT", "Arial Hebrew", gisha, "Times New Roman", roboto, noto, "Noto Sans Hebrew" sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__he-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__he-lineHeightCompensation); } :lang(hi){ - --RS__baseFontFamily:"Kohinoor Devanagari", "Devanagari Sangam MN", kokila, "Nirmala UI", roboto, noto, "Noto Sans Devanagari", sans-serif; - - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__hi-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__hi-lineHeightCompensation); } :lang(hy){ - --RS__baseFontFamily:mshtakan, sylfaen, roboto, noto, "Noto Serif Armenian", serif; + --RS__baseFontFamily:var(--RS__hy-baseFontFamily); } :lang(iu){ - --RS__baseFontFamily:"Euphemia UCAS", euphemia, roboto, noto, "Noto Sans Canadian Aboriginal", sans-serif; + --RS__baseFontFamily:var(--RS__iu-baseFontFamily); } :lang(ja){ - --RS__baseFontFamily:yugothic, "Hiragino Maru Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Meiryo UI", "MS Gothic", roboto, noto, "Noto Sans CJK JP", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ja-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ja-lineHeightCompensation); } :lang(km){ - --RS__baseFontFamily:"Khmer Sangam MN", "Leelawadee UI", "Khmer UI", roboto, noto, "Noto Sans Khmer", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__km-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__km-lineHeightCompensation); } :lang(kn){ - --RS__baseFontFamily:"Kannada Sangam MN", "Nirmala UI", tunga, roboto, noto, "Noto Sans Kannada", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__kn-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__kn-lineHeightCompensation); } :lang(ko){ - --RS__baseFontFamily:"Nanum Gothic", "Apple SD Gothic Neo", "Malgun Gothic", roboto, noto, "Noto Sans CJK KR", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__ko-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ko-lineHeightCompensation); } :lang(lo){ - --RS__baseFontFamily:"Lao Sangam MN", "Leelawadee UI", "Lao UI", roboto, noto, "Noto Sans Lao", sans-serif; + --RS__baseFontFamily:var(--RS__lo-baseFontFamily); } :lang(ml){ - --RS__baseFontFamily:"Malayalam Sangam MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Malayalam", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ml-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ml-lineHeightCompensation); } :lang(or){ - --RS__baseFontFamily:"Oriya Sangam MN", "Nirmala UI", kalinga, roboto, noto, "Noto Sans Oriya", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__or-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__or-lineHeightCompensation); } :lang(pa){ - --RS__baseFontFamily:"Gurmukhi MN", "Nirmala UI", kartika, roboto, noto, "Noto Sans Gurmukhi", sans-serif; - --RS__lineHeightCompensation:1.1; + --RS__baseFontFamily:var(--RS__pa-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__pa-lineHeightCompensation); } :lang(si){ - --RS__baseFontFamily:"Sinhala Sangam MN", "Nirmala UI", "Iskoola Pota", roboto, noto, "Noto Sans Sinhala", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__si-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__si-lineHeightCompensation); } :lang(ta){ - --RS__baseFontFamily:"Tamil Sangam MN", "Nirmala UI", latha, roboto, noto, "Noto Sans Tamil", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__ta-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__ta-lineHeightCompensation); } :lang(te){ - --RS__baseFontFamily:"Kohinoor Telugu", "Telugu Sangam MN", "Nirmala UI", gautami, roboto, noto, "Noto Sans Telugu", sans-serif; + --RS__baseFontFamily:var(--RS__te-baseFontFamily); } :lang(th){ - --RS__baseFontFamily:"Thonburi", "Leelawadee UI", "Cordia New", roboto, noto, "Noto Sans Thai", sans-serif; - --RS__lineHeightCompensation:1.067; + --RS__baseFontFamily:var(--RS__th-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__th-lineHeightCompensation); } :lang(zh){ - --RS__baseFontFamily:"方体", "PingFang SC", "黑体", "Heiti SC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK SC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-lineHeightCompensation); +} + +:lang(zh-Hant){ + --RS__baseFontFamily:var(--RS__zh-Hant-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-Hant-lineHeightCompensation); } -: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; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-TW-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-TW-lineHeightCompensation); } :lang(zh-HK){ - --RS__baseFontFamily:"方體", "PingFang HK", "方體", "PingFang TC", "黑體", "Heiti TC", "Microsoft JhengHei UI", "Microsoft JhengHei", roboto, noto, "Noto Sans CJK TC", sans-serif; - --RS__lineHeightCompensation:1.167; + --RS__baseFontFamily:var(--RS__zh-HK-baseFontFamily); + --RS__lineHeightCompensation:var(--RS__zh-HK-lineHeightCompensation); } body{ diff --git a/css/src/modules/ReadiumCSS-base.css b/css/src/modules/ReadiumCSS-base.css index 58fd57b2..5163c838 100644 --- a/css/src/modules/ReadiumCSS-base.css +++ b/css/src/modules/ReadiumCSS-base.css @@ -19,12 +19,14 @@ /* Default font-stacks */ @import-json "../../vars/fontStacks.json"; - /* Config */ - --RS__baseFontFamily: var(--RS__oldStyleTf); + /* i18n data (language-specific font stacks and line-height compensations) */ + @import-json "../../vars/i18n.json"; - /* 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; + /* Config */ + --RS__baseFontFamily: var(--RS__default-baseFontFamily); + /* For square-ish fonts (CJK, Indic, etc.), we must apply some compensation in leading. Default is 1 i.e. no compensation */ + --RS__lineHeightCompensation: var(--RS__default-lineHeightCompensation); --RS__baseLineHeight: calc(1.5 * var(--RS__lineHeightCompensation)); /* Default colors (previously implemented as day mode) */ @@ -80,140 +82,132 @@ math { That will only work if either html or body have a (xml:)lang attribute, not for inline overrides */ :lang(am) { - --RS__baseFontFamily: Kefa, Nyala, Roboto, Noto, "Noto Sans Ethiopic", serif; - --RS__lineHeightCompensation: 1.167; + --RS__baseFontFamily: var(--RS__am-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__am-lineHeightCompensation); } :lang(ar) { - --RS__baseFontFamily: "Geeza Pro", "Arabic Typesetting", Roboto, Noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily: var(--RS__ar-baseFontFamily); } :lang(bn) { - --RS__baseFontFamily: "Kohinoor Bangla", "Bangla Sangam MN", Vrinda, Roboto, Noto, "Noto Sans Bengali", sans-serif; - --RS__lineHeightCompensation: 1.067; + --RS__baseFontFamily: var(--RS__bn-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__bn-lineHeightCompensation); } :lang(bo) { - --RS__baseFontFamily: Kailasa, "Microsoft Himalaya", Roboto, Noto, "Noto Sans Tibetan", sans-serif; + --RS__baseFontFamily: var(--RS__bo-baseFontFamily); } :lang(chr) { - --RS__baseFontFamily: "Plantagenet Cherokee", Roboto, Noto, "Noto Sans Cherokee"; - --RS__lineHeightCompensation: 1.167; + --RS__baseFontFamily: var(--RS__chr-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__chr-lineHeightCompensation); } :lang(fa) { - --RS__baseFontFamily: "Geeza Pro", "Arabic Typesetting", Roboto, Noto, "Noto Naskh Arabic", "Times New Roman", serif; + --RS__baseFontFamily: var(--RS__fa-baseFontFamily); } :lang(gu) { - --RS__baseFontFamily: "Gujarati Sangam MN", "Nirmala UI", Shruti, Roboto, Noto, "Noto Sans Gujarati", sans-serif; - --RS__lineHeightCompensation: 1.167; + --RS__baseFontFamily: var(--RS__gu-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__gu-lineHeightCompensation); } :lang(he) { - --RS__baseFontFamily: "New Peninim MT", "Arial Hebrew", Gisha, "Times New Roman", Roboto, Noto, "Noto Sans Hebrew" sans-serif; - --RS__lineHeightCompensation: 1.1; + --RS__baseFontFamily: var(--RS__he-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__he-lineHeightCompensation); } :lang(hi) { - --RS__baseFontFamily: "Kohinoor Devanagari", "Devanagari Sangam MN", Kokila, "Nirmala UI", Roboto, Noto, "Noto Sans Devanagari", sans-serif; - - --RS__lineHeightCompensation: 1.1; + --RS__baseFontFamily: var(--RS__hi-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__hi-lineHeightCompensation); } :lang(hy) { - --RS__baseFontFamily: Mshtakan, Sylfaen, Roboto, Noto, "Noto Serif Armenian", serif; + --RS__baseFontFamily: var(--RS__hy-baseFontFamily); } :lang(iu) { - --RS__baseFontFamily: "Euphemia UCAS", Euphemia, Roboto, Noto, "Noto Sans Canadian Aboriginal", sans-serif; + --RS__baseFontFamily: var(--RS__iu-baseFontFamily); } +/* See also extra variables for Japanese font-stacks in vars folder as we may want to reuse them for user settings + default */ +/* This setting uses the BIZ UD font for serif and the Yu font for sans serif on Windows. Note: When using the BIZ UD font for vertical writing display, if you set half-width (ASCII) characters to stand upright with `text-orientation: upright`, the width of these characters is narrow. By specifying `font-variant-east-asian: full-width;` at the same time, you can display the characters with the width of one full-width character. */ :lang(ja) { - --RS__baseFontFamily: YuGothic, "Hiragino Maru Gothic ProN", "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; - - /* See extra variables for Japanese font-stacks in vars as we may want to reuse them for user settings + default */ - /* This setting uses the BIZ UD font for serif and the Yu font for sans serif on Windows. Note: When using the BIZ UD font for vertical writing display, if you set half-width (ASCII) characters to stand upright with `text-orientation: upright`, the width of these characters is narrow. By specifying `font-variant-east-asian: full-width;` at the same time, you can display the characters with the width of one full-width character. */ + --RS__baseFontFamily: var(--RS__ja-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__ja-lineHeightCompensation); } :lang(km) { - --RS__baseFontFamily: "Khmer Sangam MN", "Leelawadee UI", "Khmer UI", Roboto, Noto, "Noto Sans Khmer", sans-serif; - --RS__lineHeightCompensation: 1.067; + --RS__baseFontFamily: var(--RS__km-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__km-lineHeightCompensation); } :lang(kn) { - --RS__baseFontFamily: "Kannada Sangam MN", "Nirmala UI", Tunga, Roboto, Noto, "Noto Sans Kannada", sans-serif; - --RS__lineHeightCompensation: 1.1; + --RS__baseFontFamily: var(--RS__kn-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__kn-lineHeightCompensation); } :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; + --RS__baseFontFamily: var(--RS__ko-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__ko-lineHeightCompensation); } :lang(lo) { - --RS__baseFontFamily: "Lao Sangam MN", "Leelawadee UI", "Lao UI", Roboto, Noto, "Noto Sans Lao", sans-serif; + --RS__baseFontFamily: var(--RS__lo-baseFontFamily); } :lang(ml) { - --RS__baseFontFamily: "Malayalam Sangam MN", "Nirmala UI", Kartika, Roboto, Noto, "Noto Sans Malayalam", sans-serif; - --RS__lineHeightCompensation: 1.067; + --RS__baseFontFamily: var(--RS__ml-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__ml-lineHeightCompensation); } :lang(or) { - --RS__baseFontFamily: "Oriya Sangam MN", "Nirmala UI", Kalinga, Roboto, Noto, "Noto Sans Oriya", sans-serif; - --RS__lineHeightCompensation: 1.167; + --RS__baseFontFamily: var(--RS__or-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__or-lineHeightCompensation); } :lang(pa) { - --RS__baseFontFamily: "Gurmukhi MN", "Nirmala UI", Kartika, Roboto, Noto, "Noto Sans Gurmukhi", sans-serif; - --RS__lineHeightCompensation: 1.1; + --RS__baseFontFamily: var(--RS__pa-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__pa-lineHeightCompensation); } :lang(si) { - --RS__baseFontFamily: "Sinhala Sangam MN", "Nirmala UI", "Iskoola Pota", Roboto, Noto, "Noto Sans Sinhala", sans-serif; - --RS__lineHeightCompensation: 1.167; + --RS__baseFontFamily: var(--RS__si-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__si-lineHeightCompensation); } :lang(ta) { - --RS__baseFontFamily: "Tamil Sangam MN", "Nirmala UI", Latha, Roboto, Noto, "Noto Sans Tamil", sans-serif; - --RS__lineHeightCompensation: 1.067; + --RS__baseFontFamily: var(--RS__ta-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__ta-lineHeightCompensation); } :lang(te) { - --RS__baseFontFamily: "Kohinoor Telugu", "Telugu Sangam MN", "Nirmala UI", Gautami, Roboto, Noto, "Noto Sans Telugu", sans-serif; + --RS__baseFontFamily: var(--RS__te-baseFontFamily); } :lang(th) { - --RS__baseFontFamily: "Thonburi", "Leelawadee UI", "Cordia New", Roboto, Noto, "Noto Sans Thai", sans-serif; - --RS__lineHeightCompensation: 1.067; + --RS__baseFontFamily: var(--RS__th-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__th-lineHeightCompensation); } /* The following will also work for zh-Hans */ :lang(zh) { - --RS__baseFontFamily: "方体", "PingFang SC", "黑体", "Heiti SC", "Microsoft JhengHei UI", "Microsoft JhengHei", Roboto, Noto, "Noto Sans CJK SC", sans-serif; + --RS__baseFontFamily: var(--RS__zh-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__zh-lineHeightCompensation); +} - /* For CJK, the line-height is usually 15–20% more than for Latin */ - --RS__lineHeightCompensation: 1.167; +:lang(zh-Hant) { + --RS__baseFontFamily: var(--RS__zh-Hant-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__zh-Hant-lineHeightCompensation); } -: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; + --RS__baseFontFamily: var(--RS__zh-TW-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__zh-TW-lineHeightCompensation); } :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; + --RS__baseFontFamily: var(--RS__zh-HK-baseFontFamily); + --RS__lineHeightCompensation: var(--RS__zh-HK-lineHeightCompensation); } \ No newline at end of file diff --git a/css/vars/i18n.json b/css/vars/i18n.json new file mode 100644 index 00000000..c4220136 --- /dev/null +++ b/css/vars/i18n.json @@ -0,0 +1,107 @@ +{ + "default": { + "baseFontFamily": "var(--RS__oldStyleTf)", + "lineHeightCompensation": 1 + }, + "am": { + "baseFontFamily": "Kefa, Nyala, Roboto, Noto, 'Noto Sans Ethiopic', serif", + "lineHeightCompensation": 1.167 + }, + "ar": { + "baseFontFamily": "'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif" + }, + "bn": { + "baseFontFamily": "'Kohinoor Bangla', 'Bangla Sangam MN', Vrinda, Roboto, Noto, 'Noto Sans Bengali', sans-serif", + "lineHeightCompensation": 1.067 + }, + "bo": { + "baseFontFamily": "Kailasa, 'Microsoft Himalaya', Roboto, Noto, 'Noto Sans Tibetan', sans-serif" + }, + "chr": { + "baseFontFamily": "'Plantagenet Cherokee', Roboto, Noto, 'Noto Sans Cherokee'", + "lineHeightCompensation": 1.167 + }, + "fa": { + "baseFontFamily": "'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif" + }, + "gu": { + "baseFontFamily": "'Gujarati Sangam MN', 'Nirmala UI', Shruti, Roboto, Noto, 'Noto Sans Gujarati', sans-serif", + "lineHeightCompensation": 1.167 + }, + "he": { + "baseFontFamily": "'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif", + "lineHeightCompensation": 1.1 + }, + "hi": { + "baseFontFamily": "'Kohinoor Devanagari', 'Devanagari Sangam MN', Kokila, 'Nirmala UI', Roboto, Noto, 'Noto Sans Devanagari', sans-serif", + "lineHeightCompensation": 1.1 + }, + "hy": { + "baseFontFamily": "Mshtakan, Sylfaen, Roboto, Noto, 'Noto Serif Armenian', serif" + }, + "iu": { + "baseFontFamily": "'Euphemia UCAS', Euphemia, Roboto, Noto, 'Noto Sans Canadian Aboriginal', sans-serif" + }, + "ja": { + "baseFontFamily": "YuGothic, 'Hiragino Maru Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo UI', 'MS Gothic', Roboto, Noto, 'Noto Sans CJK JP', sans-serif", + "lineHeightCompensation": 1.167 + }, + "km": { + "baseFontFamily": "'Khmer Sangam MN', 'Leelawadee UI', 'Khmer UI', Roboto, Noto, 'Noto Sans Khmer', sans-serif", + "lineHeightCompensation": 1.067 + }, + "kn": { + "baseFontFamily": "'Kannada Sangam MN', 'Nirmala UI', Tunga, Roboto, Noto, 'Noto Sans Kannada', sans-serif", + "lineHeightCompensation": 1.1 + }, + "ko": { + "baseFontFamily": "'Nanum Gothic', 'Apple SD Gothic Neo', 'Malgun Gothic', Roboto, Noto, 'Noto Sans CJK KR', sans-serif", + "lineHeightCompensation": 1.167 + }, + "lo": { + "baseFontFamily": "'Lao Sangam MN', 'Leelawadee UI', 'Lao UI', Roboto, Noto, 'Noto Sans Lao', sans-serif" + }, + "ml": { + "baseFontFamily": "'Malayalam Sangam MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Malayalam', sans-serif", + "lineHeightCompensation": 1.067 + }, + "or": { + "baseFontFamily": "'Oriya Sangam MN', 'Nirmala UI', Kalinga, Roboto, Noto, 'Noto Sans Oriya', sans-serif", + "lineHeightCompensation": 1.167 + }, + "pa": { + "baseFontFamily": "'Gurmukhi MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Gurmukhi', sans-serif", + "lineHeightCompensation": 1.1 + }, + "si": { + "baseFontFamily": "'Sinhala Sangam MN', 'Nirmala UI', 'Iskoola Pota', Roboto, Noto, 'Noto Sans Sinhala', sans-serif", + "lineHeightCompensation": 1.167 + }, + "ta": { + "baseFontFamily": "'Tamil Sangam MN', 'Nirmala UI', Latha, Roboto, Noto, 'Noto Sans Tamil', sans-serif", + "lineHeightCompensation": 1.067 + }, + "te": { + "baseFontFamily": "'Kohinoor Telugu', 'Telugu Sangam MN', 'Nirmala UI', Gautami, Roboto, Noto, 'Noto Sans Telugu', sans-serif" + }, + "th": { + "baseFontFamily": "Thonburi, 'Leelawadee UI', 'Cordia New', Roboto, Noto, 'Noto Sans Thai', sans-serif", + "lineHeightCompensation": 1.067 + }, + "zh": { + "baseFontFamily": "'方体', 'PingFang SC', '黑体', 'Heiti SC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK SC', sans-serif", + "lineHeightCompensation": 1.167 + }, + "zh-Hant": { + "baseFontFamily": "'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif", + "lineHeightCompensation": 1.167 + }, + "zh-TW": { + "baseFontFamily": "'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif", + "lineHeightCompensation": 1.167 + }, + "zh-HK": { + "baseFontFamily": "'方體', 'PingFang HK', '方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif", + "lineHeightCompensation": 1.167 + } +} From da160d8d4ef971f2648985132699511f489877c2 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 10:53:03 +0200 Subject: [PATCH 04/15] Script for MD --- css/vars/CSS-Variables.md | 84 +++++++++++++++++++++++++++++++++++ package.json | 3 +- scripts/generate-vars-doc.js | 85 ++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 css/vars/CSS-Variables.md create mode 100644 scripts/generate-vars-doc.js diff --git a/css/vars/CSS-Variables.md b/css/vars/CSS-Variables.md new file mode 100644 index 00000000..5e67a676 --- /dev/null +++ b/css/vars/CSS-Variables.md @@ -0,0 +1,84 @@ +# CSS Variables Reference + +## Pagination + +| Variable | Value | +| --- | --- | +| `--RS__colWidth` | `100vw` | +| `--RS__colCount` | `1` | +| `--RS__colGap` | `0` | +| `--RS__defaultLineLength` | `100%` | +| `--RS__pageGutter` | `0` | +| `--RS__viewportWidth` | `100%` | + +## Colors + +| Variable | Value | +| --- | --- | +| `--RS__backgroundColor` | `#FFFFFF` | +| `--RS__textColor` | `#121212` | +| `--RS__linkColor` | `#0000EE` | +| `--RS__visitedColor` | `#551A8B` | +| `--RS__selectionBackgroundColor` | `#b4d8fe` | +| `--RS__selectionTextColor` | `inherit` | + +## Font Stacks + +| Variable | Value | +| --- | --- | +| `--RS__oldStyleTf` | `'Iowan Old Style', Sitka, 'Sitka Text', Palatino, 'Book Antiqua', 'URW Palladio L', P052, serif` | +| `--RS__modernTf` | `Athelas, Constantia, Charter, 'Bitstream Charter', Cambria, 'Georgia Pro', Georgia, serif` | +| `--RS__sansTf` | `-ui-sans-serif, -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI Variable', 'Segoe UI', Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Liberation Sans', Arial, sans-serif` | +| `--RS__humanistTf` | `Seravek, Calibri, 'Gill Sans Nova', Roboto, Ubuntu, 'DejaVu Sans', source-sans-pro, sans-serif` | +| `--RS__monospaceTf` | `ui-monospace, 'Andale Mono', 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace` | +| `--RS__serif-ja` | `'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDPMincho', 'Yu Mincho', 'MS P明朝', 'MS PMincho', serif` | +| `--RS__sans-serif-ja` | `'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDPGothic', 'Yu Gothic', 'MS Pゴシック', 'MS PGothic', sans-serif` | +| `--RS__serif-ja-v` | `'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'YuMincho', 'BIZ UDMincho', 'Yu Mincho', 'MS明朝', 'MS Mincho', serif` | +| `--RS__sans-serif-ja-v` | `'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ W3', 'YuGothic', 'Yu Gothic Medium', 'BIZ UDGothic', 'Yu Gothic', 'MSゴシック', 'MS Gothic', sans-serif` | + +## i18n + +| Language | Base Font Family | Line Height Compensation | +| --- | --- | --- | +| `default` | `var(--RS__oldStyleTf)` | `1` | +| `am` | `Kefa, Nyala, Roboto, Noto, 'Noto Sans Ethiopic', serif` | `1.167` | +| `ar` | `'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif` | — | +| `bn` | `'Kohinoor Bangla', 'Bangla Sangam MN', Vrinda, Roboto, Noto, 'Noto Sans Bengali', sans-serif` | `1.067` | +| `bo` | `Kailasa, 'Microsoft Himalaya', Roboto, Noto, 'Noto Sans Tibetan', sans-serif` | — | +| `chr` | `'Plantagenet Cherokee', Roboto, Noto, 'Noto Sans Cherokee'` | `1.167` | +| `fa` | `'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif` | — | +| `gu` | `'Gujarati Sangam MN', 'Nirmala UI', Shruti, Roboto, Noto, 'Noto Sans Gujarati', sans-serif` | `1.167` | +| `he` | `'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif` | `1.1` | +| `hi` | `'Kohinoor Devanagari', 'Devanagari Sangam MN', Kokila, 'Nirmala UI', Roboto, Noto, 'Noto Sans Devanagari', sans-serif` | `1.1` | +| `hy` | `Mshtakan, Sylfaen, Roboto, Noto, 'Noto Serif Armenian', serif` | — | +| `iu` | `'Euphemia UCAS', Euphemia, Roboto, Noto, 'Noto Sans Canadian Aboriginal', sans-serif` | — | +| `ja` | `YuGothic, 'Hiragino Maru Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo UI', 'MS Gothic', Roboto, Noto, 'Noto Sans CJK JP', sans-serif` | `1.167` | +| `km` | `'Khmer Sangam MN', 'Leelawadee UI', 'Khmer UI', Roboto, Noto, 'Noto Sans Khmer', sans-serif` | `1.067` | +| `kn` | `'Kannada Sangam MN', 'Nirmala UI', Tunga, Roboto, Noto, 'Noto Sans Kannada', sans-serif` | `1.1` | +| `ko` | `'Nanum Gothic', 'Apple SD Gothic Neo', 'Malgun Gothic', Roboto, Noto, 'Noto Sans CJK KR', sans-serif` | `1.167` | +| `lo` | `'Lao Sangam MN', 'Leelawadee UI', 'Lao UI', Roboto, Noto, 'Noto Sans Lao', sans-serif` | — | +| `ml` | `'Malayalam Sangam MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Malayalam', sans-serif` | `1.067` | +| `or` | `'Oriya Sangam MN', 'Nirmala UI', Kalinga, Roboto, Noto, 'Noto Sans Oriya', sans-serif` | `1.167` | +| `pa` | `'Gurmukhi MN', 'Nirmala UI', Kartika, Roboto, Noto, 'Noto Sans Gurmukhi', sans-serif` | `1.1` | +| `si` | `'Sinhala Sangam MN', 'Nirmala UI', 'Iskoola Pota', Roboto, Noto, 'Noto Sans Sinhala', sans-serif` | `1.167` | +| `ta` | `'Tamil Sangam MN', 'Nirmala UI', Latha, Roboto, Noto, 'Noto Sans Tamil', sans-serif` | `1.067` | +| `te` | `'Kohinoor Telugu', 'Telugu Sangam MN', 'Nirmala UI', Gautami, Roboto, Noto, 'Noto Sans Telugu', sans-serif` | — | +| `th` | `Thonburi, 'Leelawadee UI', 'Cordia New', Roboto, Noto, 'Noto Sans Thai', sans-serif` | `1.067` | +| `zh` | `'方体', 'PingFang SC', '黑体', 'Heiti SC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK SC', sans-serif` | `1.167` | +| `zh-Hant` | `'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif` | `1.167` | +| `zh-TW` | `'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif` | `1.167` | +| `zh-HK` | `'方體', 'PingFang HK', '方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif` | `1.167` | + +## Experiments + +### experimentalHeaderFiltering + +Attempts to filter out paragraphs that are implicitly headings or part of headers + +**Value:** `readium-experimentalHeaderFiltering-on` + +### experimentalZoom + +Attemps to filter out elements that are sized using viewport units and should not be scaled directly e.g. tables, images, iframes, etc. + +**Value:** `readium-experimentalZoom-on` diff --git a/package.json b/package.json index 6d3bf2f1..f82a0226 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,8 @@ "stylelint": "^16.4.0" }, "scripts": { - "build": "npm run build:ltr && npm run build:rtl && npm run build:cjk && npm run build:vertical && npm run build:web && npm run copyPatches", + "build": "npm run build:vars-doc && npm run build:ltr && npm run build:rtl && npm run build:cjk && npm run build:vertical && npm run build:web && npm run copyPatches", + "build:vars-doc": "node scripts/generate-vars-doc.js", "build:web": "postcss css/src/ReadiumCSS-webPub.css -o css/dist/webPub/ReadiumCSS-webPub.css", "build:ltr": "postcss css/src/ReadiumCSS-before.css -o css/dist/ReadiumCSS-before.css && postcss css/src/ReadiumCSS-default.css -o css/dist/ReadiumCSS-default.css && postcss css/src/ReadiumCSS-after.css -o css/dist/ReadiumCSS-after.css", "build:rtl": "postcss css/src/ReadiumCSS-before-rtl.css -o css/dist/rtl/ReadiumCSS-before.css && postcss css/src/ReadiumCSS-default-rtl.css -o css/dist/rtl/ReadiumCSS-default.css && postcss css/src/ReadiumCSS-after-rtl.css -o css/dist/rtl/ReadiumCSS-after.css", diff --git a/scripts/generate-vars-doc.js b/scripts/generate-vars-doc.js new file mode 100644 index 00000000..8a959829 --- /dev/null +++ b/scripts/generate-vars-doc.js @@ -0,0 +1,85 @@ +#!/usr/bin/env node + +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +const VARS_DIR = path.join(__dirname, "../css/vars"); +const OUTPUT = path.join(VARS_DIR, "CSS-Variables.md"); +const PREFIX = "--RS__"; + +const FILES = [ + { file: "pagination.json", heading: "Pagination", type: "flat" }, + { file: "colors.json", heading: "Colors", type: "flat" }, + { file: "fontStacks.json", heading: "Font Stacks", type: "flat" }, + { file: "i18n.json", heading: "i18n", type: "i18n" }, + { file: "experiments.json", heading: "Experiments", type: "experiments" }, +]; + +function camelToWords(str) { + return str + .replace(/([A-Z])/g, " $1") + .replace(/^./, (c) => c.toUpperCase()) + .trim(); +} + +function mdCode(val) { + return val !== undefined && val !== null ? `\`${val}\`` : "—"; +} + +function flatSection(heading, data) { + const rows = Object.entries(data) + .map(([key, val]) => `| ${mdCode(PREFIX + key)} | ${mdCode(val)} |`) + .join("\n"); + + return `## ${heading}\n\n| Variable | Value |\n| --- | --- |\n${rows}\n`; +} + +function i18nSection(heading, data) { + const langKeys = Object.keys(data); + const propKeys = [...new Set(langKeys.flatMap((lang) => Object.keys(data[lang])))]; + + const header = `| Language | ${propKeys.map(camelToWords).join(" | ")} |`; + const divider = `| --- |${propKeys.map(() => " --- |").join("")}`; + + const rows = langKeys.map((lang) => { + const cols = propKeys.map((prop) => { + const val = data[lang][prop]; + return val !== undefined ? mdCode(val) : "—"; + }); + return `| ${mdCode(lang)} | ${cols.join(" | ")} |`; + }).join("\n"); + + return `## ${heading}\n\n${header}\n${divider}\n${rows}\n`; +} + +function experimentsSection(heading, data) { + const sections = Object.entries(data).map(([key, entry]) => { + return `### ${key}\n\n${entry.description}\n\n**Value:** ${mdCode(entry.value)}\n`; + }).join("\n"); + + return `## ${heading}\n\n${sections}`; +} + +function generate() { + const parts = ["# CSS Variables Reference\n"]; + + for (const { file, heading, type } of FILES) { + const src = path.join(VARS_DIR, file); + const data = JSON.parse(fs.readFileSync(src, "utf8")); + + if (type === "flat") { + parts.push(flatSection(heading, data)); + } else if (type === "i18n") { + parts.push(i18nSection(heading, data)); + } else if (type === "experiments") { + parts.push(experimentsSection(heading, data)); + } + } + + fs.writeFileSync(OUTPUT, parts.join("\n")); + console.log(`Generated ${path.relative(process.cwd(), OUTPUT)}`); +} + +generate(); From 84f0cb76e00f1a28d2b7674ea2b2bc45df2d73df Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 12:46:19 +0200 Subject: [PATCH 05/15] Add lookup strategy in md --- css/vars/CSS-Variables.md | 6 ++++++ scripts/generate-vars-doc.js | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/css/vars/CSS-Variables.md b/css/vars/CSS-Variables.md index 5e67a676..d3384c18 100644 --- a/css/vars/CSS-Variables.md +++ b/css/vars/CSS-Variables.md @@ -38,6 +38,12 @@ ## i18n +To determine which `lineHeightCompensation` value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: + +1. Match the full tag including region or script subtag (e.g. `zh-Hant`, `zh-HK`). +2. If no match, strip the subtag and match on the primary language code alone (e.g. `zh`, `ja`). +3. If still no match, fall back to `default` (compensation of `1`, i.e. no adjustment). + | Language | Base Font Family | Line Height Compensation | | --- | --- | --- | | `default` | `var(--RS__oldStyleTf)` | `1` | diff --git a/scripts/generate-vars-doc.js b/scripts/generate-vars-doc.js index 8a959829..04b3249e 100644 --- a/scripts/generate-vars-doc.js +++ b/scripts/generate-vars-doc.js @@ -36,6 +36,15 @@ function flatSection(heading, data) { return `## ${heading}\n\n| Variable | Value |\n| --- | --- |\n${rows}\n`; } +const I18N_STRATEGY = `\ +To determine which \`lineHeightCompensation\` value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: + +1. Match the full tag including region or script subtag (e.g. \`zh-Hant\`, \`zh-HK\`). +2. If no match, strip the subtag and match on the primary language code alone (e.g. \`zh\`, \`ja\`). +3. If still no match, fall back to \`default\` (compensation of \`1\`, i.e. no adjustment). + +`; + function i18nSection(heading, data) { const langKeys = Object.keys(data); const propKeys = [...new Set(langKeys.flatMap((lang) => Object.keys(data[lang])))]; @@ -51,7 +60,7 @@ function i18nSection(heading, data) { return `| ${mdCode(lang)} | ${cols.join(" | ")} |`; }).join("\n"); - return `## ${heading}\n\n${header}\n${divider}\n${rows}\n`; + return `## ${heading}\n\n${I18N_STRATEGY}${header}\n${divider}\n${rows}\n`; } function experimentsSection(heading, data) { From d4391597f2699986de581b3bd29fdbe93071a2c5 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 13:01:59 +0200 Subject: [PATCH 06/15] Update for non-latin apps Abstract the rule for app/publication instead of treating non-latin-based apps as outliers. --- css/vars/CSS-Variables.md | 19 ++++++++++++++++--- scripts/generate-vars-doc.js | 19 ++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/css/vars/CSS-Variables.md b/css/vars/CSS-Variables.md index d3384c18..b94f67ec 100644 --- a/css/vars/CSS-Variables.md +++ b/css/vars/CSS-Variables.md @@ -38,11 +38,24 @@ ## i18n -To determine which `lineHeightCompensation` value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: +Different scripts require different amounts of line height. These compensation factors allow a Reading System to adjust a line-height value when the publication's language differs from its own, so that the result feels consistent across scripts rather than too tight or too loose. + +``` +adjustedLineHeight = lineHeight * (publicationCompensation / appCompensation) +``` + +| App language | Publication language | Effect | +| --- | --- | --- | +| Latin (`1.0`) | CJK (`1.167`) | line-height increases | +| CJK (`1.167`) | Latin (`1.0`) | line-height decreases | +| CJK (`1.167`) | CJK (`1.167`) | no change | +| Latin (`1.0`) | Latin (`1.0`) | no change | + +To resolve a compensation factor for a BCP-47 language tag: 1. Match the full tag including region or script subtag (e.g. `zh-Hant`, `zh-HK`). -2. If no match, strip the subtag and match on the primary language code alone (e.g. `zh`, `ja`). -3. If still no match, fall back to `default` (compensation of `1`, i.e. no adjustment). +2. If no match, match on the primary language code alone (e.g. `zh`, `ja`). +3. If still no match, use `default` (`1`). | Language | Base Font Family | Line Height Compensation | | --- | --- | --- | diff --git a/scripts/generate-vars-doc.js b/scripts/generate-vars-doc.js index 04b3249e..5f3efff5 100644 --- a/scripts/generate-vars-doc.js +++ b/scripts/generate-vars-doc.js @@ -37,11 +37,24 @@ function flatSection(heading, data) { } const I18N_STRATEGY = `\ -To determine which \`lineHeightCompensation\` value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: +Different scripts require different amounts of line height. These compensation factors allow a Reading System to adjust a line-height value when the publication's language differs from its own, so that the result feels consistent across scripts rather than too tight or too loose. + +\`\`\` +adjustedLineHeight = lineHeight * (publicationCompensation / appCompensation) +\`\`\` + +| App language | Publication language | Effect | +| --- | --- | --- | +| Latin (\`1.0\`) | CJK (\`1.167\`) | line-height increases | +| CJK (\`1.167\`) | Latin (\`1.0\`) | line-height decreases | +| CJK (\`1.167\`) | CJK (\`1.167\`) | no change | +| Latin (\`1.0\`) | Latin (\`1.0\`) | no change | + +To resolve a compensation factor for a BCP-47 language tag: 1. Match the full tag including region or script subtag (e.g. \`zh-Hant\`, \`zh-HK\`). -2. If no match, strip the subtag and match on the primary language code alone (e.g. \`zh\`, \`ja\`). -3. If still no match, fall back to \`default\` (compensation of \`1\`, i.e. no adjustment). +2. If no match, match on the primary language code alone (e.g. \`zh\`, \`ja\`). +3. If still no match, use \`default\` (\`1\`). `; From 649c211be65f613dbfaa9f5e698650ae6a7882ed Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 14:49:11 +0200 Subject: [PATCH 07/15] Add JSON For disabled/added settings --- css/vars/CSS-Variables.md | 11 +++++++ css/vars/settings.json | 18 ++++++++++++ scripts/generate-vars-doc.js | 57 ++++++++++++++++++++++++------------ 3 files changed, 67 insertions(+), 19 deletions(-) create mode 100644 css/vars/settings.json diff --git a/css/vars/CSS-Variables.md b/css/vars/CSS-Variables.md index b94f67ec..d8c26455 100644 --- a/css/vars/CSS-Variables.md +++ b/css/vars/CSS-Variables.md @@ -88,6 +88,17 @@ To resolve a compensation factor for a BCP-47 language tag: | `zh-TW` | `'方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif` | `1.167` | | `zh-HK` | `'方體', 'PingFang HK', '方體', 'PingFang TC', '黑體', 'Heiti TC', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Roboto, Noto, 'Noto Sans CJK TC', sans-serif` | `1.167` | +## Settings + +User settings vary by stylesheet variant. Each name below maps to a `--USER__` CSS variable. + +| Variant | Disabled | Added | +| --- | --- | --- | +| `default` | — | — | +| `rtl` | `--USER__bodyHyphens`, `--USER__letterSpacing` | — | +| `cjk-horizontal` | `--USER__textAlign`, `--USER__bodyHyphens`, `--USER__ligatures`, `--USER__paraIndent`, `--USER__wordSpacing` | `--USER__noRuby` | +| `cjk-vertical` | `--USER__colCount`, `--USER__textAlign`, `--USER__bodyHyphens`, `--USER__ligatures`, `--USER__paraIndent`, `--USER__wordSpacing` | `--USER__noRuby` | + ## Experiments ### experimentalHeaderFiltering diff --git a/css/vars/settings.json b/css/vars/settings.json new file mode 100644 index 00000000..37f02ca4 --- /dev/null +++ b/css/vars/settings.json @@ -0,0 +1,18 @@ +{ + "default": { + "disabled": [], + "added": [] + }, + "rtl": { + "disabled": ["bodyHyphens", "letterSpacing"], + "added": [] + }, + "cjk-horizontal": { + "disabled": ["textAlign", "bodyHyphens", "ligatures", "paraIndent", "wordSpacing"], + "added": ["noRuby"] + }, + "cjk-vertical": { + "disabled": ["colCount", "textAlign", "bodyHyphens", "ligatures", "paraIndent", "wordSpacing"], + "added": ["noRuby"] + } +} diff --git a/scripts/generate-vars-doc.js b/scripts/generate-vars-doc.js index 5f3efff5..0cd1a1fe 100644 --- a/scripts/generate-vars-doc.js +++ b/scripts/generate-vars-doc.js @@ -7,34 +7,18 @@ const path = require("path"); const VARS_DIR = path.join(__dirname, "../css/vars"); const OUTPUT = path.join(VARS_DIR, "CSS-Variables.md"); -const PREFIX = "--RS__"; const FILES = [ { file: "pagination.json", heading: "Pagination", type: "flat" }, { file: "colors.json", heading: "Colors", type: "flat" }, { file: "fontStacks.json", heading: "Font Stacks", type: "flat" }, { file: "i18n.json", heading: "i18n", type: "i18n" }, + { file: "settings.json", heading: "Settings", type: "settings" }, { file: "experiments.json", heading: "Experiments", type: "experiments" }, ]; -function camelToWords(str) { - return str - .replace(/([A-Z])/g, " $1") - .replace(/^./, (c) => c.toUpperCase()) - .trim(); -} - -function mdCode(val) { - return val !== undefined && val !== null ? `\`${val}\`` : "—"; -} - -function flatSection(heading, data) { - const rows = Object.entries(data) - .map(([key, val]) => `| ${mdCode(PREFIX + key)} | ${mdCode(val)} |`) - .join("\n"); - - return `## ${heading}\n\n| Variable | Value |\n| --- | --- |\n${rows}\n`; -} +const PREFIX = "--RS__"; +const USER_PREFIX = "--USER__"; const I18N_STRATEGY = `\ Different scripts require different amounts of line height. These compensation factors allow a Reading System to adjust a line-height value when the publication's language differs from its own, so that the result feels consistent across scripts rather than too tight or too loose. @@ -58,6 +42,25 @@ To resolve a compensation factor for a BCP-47 language tag: `; +function camelToWords(str) { + return str + .replace(/([A-Z])/g, " $1") + .replace(/^./, (c) => c.toUpperCase()) + .trim(); +} + +function mdCode(val) { + return val !== undefined && val !== null ? `\`${val}\`` : "—"; +} + +function flatSection(heading, data) { + const rows = Object.entries(data) + .map(([key, val]) => `| ${mdCode(PREFIX + key)} | ${mdCode(val)} |`) + .join("\n"); + + return `## ${heading}\n\n| Variable | Value |\n| --- | --- |\n${rows}\n`; +} + function i18nSection(heading, data) { const langKeys = Object.keys(data); const propKeys = [...new Set(langKeys.flatMap((lang) => Object.keys(data[lang])))]; @@ -76,6 +79,20 @@ function i18nSection(heading, data) { return `## ${heading}\n\n${I18N_STRATEGY}${header}\n${divider}\n${rows}\n`; } +function settingsSection(heading, data) { + const rows = Object.entries(data).map(([variant, { disabled, added }]) => { + const disabledCol = disabled.length + ? disabled.map((s) => mdCode(USER_PREFIX + s)).join(", ") + : "—"; + const addedCol = added.length + ? added.map((s) => mdCode(USER_PREFIX + s)).join(", ") + : "—"; + return `| ${mdCode(variant)} | ${disabledCol} | ${addedCol} |`; + }).join("\n"); + + return `## ${heading}\n\nUser settings vary by stylesheet variant. Each name below maps to a \`${USER_PREFIX}\` CSS variable.\n\n| Variant | Disabled | Added |\n| --- | --- | --- |\n${rows}\n`; +} + function experimentsSection(heading, data) { const sections = Object.entries(data).map(([key, entry]) => { return `### ${key}\n\n${entry.description}\n\n**Value:** ${mdCode(entry.value)}\n`; @@ -95,6 +112,8 @@ function generate() { parts.push(flatSection(heading, data)); } else if (type === "i18n") { parts.push(i18nSection(heading, data)); + } else if (type === "settings") { + parts.push(settingsSection(heading, data)); } else if (type === "experiments") { parts.push(experimentsSection(heading, data)); } From b53d1de19d1548af24f8fc9313219fbdf5d9c011 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Thu, 30 Apr 2026 15:12:23 +0200 Subject: [PATCH 08/15] Try improving i18n explanation --- css/vars/CSS-Variables.md | 21 ++++----------------- scripts/generate-vars-doc.js | 21 ++++----------------- 2 files changed, 8 insertions(+), 34 deletions(-) diff --git a/css/vars/CSS-Variables.md b/css/vars/CSS-Variables.md index d8c26455..e1fb341d 100644 --- a/css/vars/CSS-Variables.md +++ b/css/vars/CSS-Variables.md @@ -38,24 +38,11 @@ ## i18n -Different scripts require different amounts of line height. These compensation factors allow a Reading System to adjust a line-height value when the publication's language differs from its own, so that the result feels consistent across scripts rather than too tight or too loose. +`lineHeightCompensation` factors account for the different line-height needs of scripts, **Latin being the default and the reference for other scripts**. To determine which value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: -``` -adjustedLineHeight = lineHeight * (publicationCompensation / appCompensation) -``` - -| App language | Publication language | Effect | -| --- | --- | --- | -| Latin (`1.0`) | CJK (`1.167`) | line-height increases | -| CJK (`1.167`) | Latin (`1.0`) | line-height decreases | -| CJK (`1.167`) | CJK (`1.167`) | no change | -| Latin (`1.0`) | Latin (`1.0`) | no change | - -To resolve a compensation factor for a BCP-47 language tag: - -1. Match the full tag including region or script subtag (e.g. `zh-Hant`, `zh-HK`). -2. If no match, match on the primary language code alone (e.g. `zh`, `ja`). -3. If still no match, use `default` (`1`). +1. Find the key matching the publication's full BCP-47 language + region code. +2. If no match, find the key after removing the region code (only BCP-47 language code). +3. If no match, use `default` (or ignore, because the line-height compensation should be `1`). | Language | Base Font Family | Line Height Compensation | | --- | --- | --- | diff --git a/scripts/generate-vars-doc.js b/scripts/generate-vars-doc.js index 0cd1a1fe..205a3182 100644 --- a/scripts/generate-vars-doc.js +++ b/scripts/generate-vars-doc.js @@ -21,24 +21,11 @@ const PREFIX = "--RS__"; const USER_PREFIX = "--USER__"; const I18N_STRATEGY = `\ -Different scripts require different amounts of line height. These compensation factors allow a Reading System to adjust a line-height value when the publication's language differs from its own, so that the result feels consistent across scripts rather than too tight or too loose. +\`lineHeightCompensation\` factors account for the different line-height needs of scripts, **Latin being the default and the reference for other scripts**. To determine which value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: -\`\`\` -adjustedLineHeight = lineHeight * (publicationCompensation / appCompensation) -\`\`\` - -| App language | Publication language | Effect | -| --- | --- | --- | -| Latin (\`1.0\`) | CJK (\`1.167\`) | line-height increases | -| CJK (\`1.167\`) | Latin (\`1.0\`) | line-height decreases | -| CJK (\`1.167\`) | CJK (\`1.167\`) | no change | -| Latin (\`1.0\`) | Latin (\`1.0\`) | no change | - -To resolve a compensation factor for a BCP-47 language tag: - -1. Match the full tag including region or script subtag (e.g. \`zh-Hant\`, \`zh-HK\`). -2. If no match, match on the primary language code alone (e.g. \`zh\`, \`ja\`). -3. If still no match, use \`default\` (\`1\`). +1. Find the key matching the publication's full BCP-47 language + region code. +2. If no match, find the key after removing the region code (only BCP-47 language code). +3. If no match, use \`default\` (or ignore, because the line-height compensation should be \`1\`). `; From 38dc216d599cc645636282dca179371c070c6439 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 4 May 2026 14:18:11 +0200 Subject: [PATCH 09/15] Bump version --- docs/CSS28-migration_guide.md | 8 +++++++- docs/ReadiumCSS_docs.epub | Bin 3689618 -> 3689830 bytes .../OEBPS/Text/Section-028.xhtml | 10 +++++++++- docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml | 3 +++ docs/ReadiumCSS_docs/OEBPS/content.opf | 2 +- docs/ReadiumCSS_docs/OEBPS/toc.ncx | 6 ++++++ package.json | 2 +- 7 files changed, 27 insertions(+), 4 deletions(-) diff --git a/docs/CSS28-migration_guide.md b/docs/CSS28-migration_guide.md index eafc5faa..0e42e39c 100644 --- a/docs/CSS28-migration_guide.md +++ b/docs/CSS28-migration_guide.md @@ -280,4 +280,10 @@ If you need to apply padding to the scroll view, you can use the `--RS__scrollPa As of version `2.0.0` (stable), the default line-length when none is set by the user is `100%` instead of `40rem`. This is to prevent conflicts with the zoom factor. -The custom property has been kept so that consumers of ReadiumCSS can still customize the value if they wish, especially as they can opt out of the new font-size implementation. \ No newline at end of file +The custom property has been kept so that consumers of ReadiumCSS can still customize the value if they wish, especially as they can opt out of the new font-size implementation. + +## Exposition of i18n stacks and compensation + +As of version `2.0.3`, font-stacks and line-height compensation are exposed for languages e.g. `am`, `ja`, `zh`, etc. so that host apps can import the JSON and consume the data. `default` being our reference, Latin scripts, and can be used as a fallback on parsing the mapping. + +A markdown document with tables generated from the JSON files in `vars` has also been added. \ No newline at end of file diff --git a/docs/ReadiumCSS_docs.epub b/docs/ReadiumCSS_docs.epub index 8be2d0de136fa121d29203c69977864d471f7b28..2c3cff2063fdeb4dd73c65a7daf17db9b0087417 100644 GIT binary patch delta 9143 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 delta 8957 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 diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml index 6b570aab..d7ea5777 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml @@ -330,7 +330,7 @@ const backgroundColor = defaultColors.RS__backgroundColor;

If you need to apply padding to the scroll view, you can use the --RS__scrollPadding properties instead. This can be useful to get around safe area insets, or to add whitespace so that contents are not hidden behind UI elements.

- +

Default line-length value has changed

@@ -338,6 +338,14 @@ const backgroundColor = defaultColors.RS__backgroundColor;

The custom property has been kept so that consumers of ReadiumCSS can still customize the value if they wish, especially as they can opt out of the new font-size implementation.

+ +
+

Exposition of i18n stacks and compensation

+ +

As of version 2.0.3, font-stacks and line-height compensation are exposed for languages e.g. am, ja, zh, etc. so that host apps can import the JSON and consume the data. default being our reference, Latin scripts, and can be used as a fallback on parsing the mapping.

+ +

A markdown document with tables generated from the JSON files in vars has also been added.

+
\ No newline at end of file diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml index 04379ce6..459af296 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml @@ -782,6 +782,9 @@
  • Default line-length value has changed
  • +
  • + Exposition of i18n stacks and compensation +
  • diff --git a/docs/ReadiumCSS_docs/OEBPS/content.opf b/docs/ReadiumCSS_docs/OEBPS/content.opf index ff8b62e0..7480079a 100644 --- a/docs/ReadiumCSS_docs/OEBPS/content.opf +++ b/docs/ReadiumCSS_docs/OEBPS/content.opf @@ -8,7 +8,7 @@ en urn:uuid:527D093B-9C0A-4C83-8AF6-0A40E91D30FC - 2026-02-19T10:52:18Z + 2026-05-04T14:17:00Z displayTransformability readingOrder diff --git a/docs/ReadiumCSS_docs/OEBPS/toc.ncx b/docs/ReadiumCSS_docs/OEBPS/toc.ncx index 3aa3b550..7ef1be63 100644 --- a/docs/ReadiumCSS_docs/OEBPS/toc.ncx +++ b/docs/ReadiumCSS_docs/OEBPS/toc.ncx @@ -1431,6 +1431,12 @@ + + + Exposition of i18n stacks and compensation + + + diff --git a/package.json b/package.json index f82a0226..553fc040 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@readium/css", "description": "A set of reference stylesheets for EPUB Reading Systems", - "version": "2.0.2", + "version": "2.0.3", "homepage": "https://github.com/readium/css", "license": "BSD-3-Clause", "keywords": [ From 3a30ed5288d9686106989a68e76fb3479f8df7c3 Mon Sep 17 00:00:00 2001 From: JayPanoz <12599652+JayPanoz@users.noreply.github.com> Date: Mon, 4 May 2026 12:18:56 +0000 Subject: [PATCH 10/15] Update dist --- css/dist/ReadiumCSS-after.css | 2 +- css/dist/ReadiumCSS-before.css | 2 +- css/dist/ReadiumCSS-default.css | 2 +- css/dist/cjk-horizontal/ReadiumCSS-after.css | 2 +- css/dist/cjk-horizontal/ReadiumCSS-before.css | 2 +- css/dist/cjk-horizontal/ReadiumCSS-default.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-after.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-before.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-default.css | 2 +- css/dist/rtl/ReadiumCSS-after.css | 2 +- css/dist/rtl/ReadiumCSS-before.css | 2 +- css/dist/rtl/ReadiumCSS-default.css | 2 +- css/dist/webPub/ReadiumCSS-webPub.css | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/css/dist/ReadiumCSS-after.css b/css/dist/ReadiumCSS-after.css index aa4403e9..fd6453b6 100644 --- a/css/dist/ReadiumCSS-after.css +++ b/css/dist/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/ReadiumCSS-before.css b/css/dist/ReadiumCSS-before.css index 398220ec..6bf39b60 100644 --- a/css/dist/ReadiumCSS-before.css +++ b/css/dist/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/ReadiumCSS-default.css b/css/dist/ReadiumCSS-default.css index 71589e7e..b132bcbc 100644 --- a/css/dist/ReadiumCSS-default.css +++ b/css/dist/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/cjk-horizontal/ReadiumCSS-after.css b/css/dist/cjk-horizontal/ReadiumCSS-after.css index 3d1ececd..47face3d 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-after.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/cjk-horizontal/ReadiumCSS-before.css b/css/dist/cjk-horizontal/ReadiumCSS-before.css index 398220ec..6bf39b60 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-before.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/cjk-horizontal/ReadiumCSS-default.css b/css/dist/cjk-horizontal/ReadiumCSS-default.css index f7165839..4f5d77d2 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-default.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/cjk-vertical/ReadiumCSS-after.css b/css/dist/cjk-vertical/ReadiumCSS-after.css index 621d7366..db61ce76 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-after.css +++ b/css/dist/cjk-vertical/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/cjk-vertical/ReadiumCSS-before.css b/css/dist/cjk-vertical/ReadiumCSS-before.css index 1bf1dee3..192f8924 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-before.css +++ b/css/dist/cjk-vertical/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/cjk-vertical/ReadiumCSS-default.css b/css/dist/cjk-vertical/ReadiumCSS-default.css index 580e1e8a..dd9f306b 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-default.css +++ b/css/dist/cjk-vertical/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/rtl/ReadiumCSS-after.css b/css/dist/rtl/ReadiumCSS-after.css index 7789af3a..4ad7865c 100644 --- a/css/dist/rtl/ReadiumCSS-after.css +++ b/css/dist/rtl/ReadiumCSS-after.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/rtl/ReadiumCSS-before.css b/css/dist/rtl/ReadiumCSS-before.css index 398220ec..6bf39b60 100644 --- a/css/dist/rtl/ReadiumCSS-before.css +++ b/css/dist/rtl/ReadiumCSS-before.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/rtl/ReadiumCSS-default.css b/css/dist/rtl/ReadiumCSS-default.css index b7ffbb25..e90c38a6 100644 --- a/css/dist/rtl/ReadiumCSS-default.css +++ b/css/dist/rtl/ReadiumCSS-default.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. diff --git a/css/dist/webPub/ReadiumCSS-webPub.css b/css/dist/webPub/ReadiumCSS-webPub.css index 20ed3d57..9a5d8716 100644 --- a/css/dist/webPub/ReadiumCSS-webPub.css +++ b/css/dist/webPub/ReadiumCSS-webPub.css @@ -1,5 +1,5 @@ /*! - * Readium CSS v.2.0.2 + * Readium CSS v.2.0.3 * Copyright (c) 2017–2026. Readium Foundation. All rights reserved. * Use of this source code is governed by a BSD-style license which is detailed in the * LICENSE file present in the project repository where this source code is maintained. From ef53fadc84bba150a9c6fd0c814e5db0f01b57a8 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 4 May 2026 14:23:51 +0200 Subject: [PATCH 11/15] Remove Android Font Patch in Readme --- css/dist/ReadMe.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/css/dist/ReadMe.md b/css/dist/ReadMe.md index a5588f55..db113283 100644 --- a/css/dist/ReadMe.md +++ b/css/dist/ReadMe.md @@ -111,8 +111,4 @@ This is currently an edge case as we still have to see whether we want to suppor - 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. - -## Android Fonts Patch - -See [the specific ReadMe](android-fonts-patch/ReadMe.md) for further information. \ No newline at end of file +- 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. \ No newline at end of file From 7a2fad74967feb85b19f6a3d2878e1cd72e53f55 Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 4 May 2026 14:38:18 +0200 Subject: [PATCH 12/15] Fix hebrew font-stack --- css/vars/i18n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/vars/i18n.json b/css/vars/i18n.json index c4220136..5fcadf15 100644 --- a/css/vars/i18n.json +++ b/css/vars/i18n.json @@ -29,7 +29,7 @@ "lineHeightCompensation": 1.167 }, "he": { - "baseFontFamily": "'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif", + "baseFontFamily": "'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew', sans-serif", "lineHeightCompensation": 1.1 }, "hi": { From 8dc003424c2ffdcce6c6da688a38ee167c911c4b Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 4 May 2026 14:56:01 +0200 Subject: [PATCH 13/15] Update docs --- css/vars/CSS-Variables.md | 6 +++--- docs/CSS28-migration_guide.md | 16 ++++++++++++++-- docs/ReadiumCSS_docs.epub | Bin 3689830 -> 3690003 bytes .../OEBPS/Text/Section-028.xhtml | 14 +++++++++++++- docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml | 3 +++ docs/ReadiumCSS_docs/OEBPS/toc.ncx | 6 ++++++ scripts/generate-vars-doc.js | 4 ++-- 7 files changed, 41 insertions(+), 8 deletions(-) diff --git a/css/vars/CSS-Variables.md b/css/vars/CSS-Variables.md index e1fb341d..5b8ad0a5 100644 --- a/css/vars/CSS-Variables.md +++ b/css/vars/CSS-Variables.md @@ -40,8 +40,8 @@ `lineHeightCompensation` factors account for the different line-height needs of scripts, **Latin being the default and the reference for other scripts**. To determine which value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: -1. Find the key matching the publication's full BCP-47 language + region code. -2. If no match, find the key after removing the region code (only BCP-47 language code). +1. Find the key matching the publication's full BCP-47 language tag. +2. If no match, strip the region subtag and try again. 3. If no match, use `default` (or ignore, because the line-height compensation should be `1`). | Language | Base Font Family | Line Height Compensation | @@ -54,7 +54,7 @@ | `chr` | `'Plantagenet Cherokee', Roboto, Noto, 'Noto Sans Cherokee'` | `1.167` | | `fa` | `'Geeza Pro', 'Arabic Typesetting', Roboto, Noto, 'Noto Naskh Arabic', 'Times New Roman', serif` | — | | `gu` | `'Gujarati Sangam MN', 'Nirmala UI', Shruti, Roboto, Noto, 'Noto Sans Gujarati', sans-serif` | `1.167` | -| `he` | `'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif` | `1.1` | +| `he` | `'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew', sans-serif` | `1.1` | | `hi` | `'Kohinoor Devanagari', 'Devanagari Sangam MN', Kokila, 'Nirmala UI', Roboto, Noto, 'Noto Sans Devanagari', sans-serif` | `1.1` | | `hy` | `Mshtakan, Sylfaen, Roboto, Noto, 'Noto Serif Armenian', serif` | — | | `iu` | `'Euphemia UCAS', Euphemia, Roboto, Noto, 'Noto Sans Canadian Aboriginal', sans-serif` | — | diff --git a/docs/CSS28-migration_guide.md b/docs/CSS28-migration_guide.md index 0e42e39c..8cc2a138 100644 --- a/docs/CSS28-migration_guide.md +++ b/docs/CSS28-migration_guide.md @@ -284,6 +284,18 @@ The custom property has been kept so that consumers of ReadiumCSS can still cust ## Exposition of i18n stacks and compensation -As of version `2.0.3`, font-stacks and line-height compensation are exposed for languages e.g. `am`, `ja`, `zh`, etc. so that host apps can import the JSON and consume the data. `default` being our reference, Latin scripts, and can be used as a fallback on parsing the mapping. +As of version `2.0.3`, font-stacks and line-height compensation are exposed for languages e.g. `am`, `ja`, `zh`, etc. so that host apps can import the JSON and consume the data. `default` (Latin) is our reference for all other scripts, and can also be used as a fallback when using the map. -A markdown document with tables generated from the JSON files in `vars` has also been added. \ No newline at end of file +A markdown document with tables generated from the JSON files in `vars` has also been added. + +## JSON properties do not longer have a prefix + +As of version `2.0.3`, vars are no longer prefixed with `RS__` in JSON files (colors, fontStacks, pagination). This prefix has to be removed from code if you were already using this data. + +``` +// Before +const backgroundColor = defaultColors.RS__backgroundColor; + +// After +const backgroundColor = defaultColors.backgroundColor; +``` \ No newline at end of file diff --git a/docs/ReadiumCSS_docs.epub b/docs/ReadiumCSS_docs.epub index 2c3cff2063fdeb4dd73c65a7daf17db9b0087417..fe04ff5bf0bb586392aca7a0e0b4b1ca7d4a69c4 100644 GIT binary patch delta 7686 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 diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml index d7ea5777..0b357784 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/Section-028.xhtml @@ -342,10 +342,22 @@ const backgroundColor = defaultColors.RS__backgroundColor;

    Exposition of i18n stacks and compensation

    -

    As of version 2.0.3, font-stacks and line-height compensation are exposed for languages e.g. am, ja, zh, etc. so that host apps can import the JSON and consume the data. default being our reference, Latin scripts, and can be used as a fallback on parsing the mapping.

    +

    As of version 2.0.3, font-stacks and line-height compensation are exposed for languages e.g. am, ja, zh, etc. so that host apps can import the JSON and consume the data. default (Latin) is our reference for all other scripts, and can also be used as a fallback when using the map.

    A markdown document with tables generated from the JSON files in vars has also been added.

    + +
    +

    JSON properties no longer have a prefix

    + +

    As of version 2.0.3, vars are no longer prefixed with RS__ in JSON files (colors, fontStacks, pagination). This prefix has to be removed from code if you were already using this data.

    + +
    // Before
    +const backgroundColor = defaultColors.RS__backgroundColor;
    +
    +// After
    +const backgroundColor = defaultColors.backgroundColor;
    +
    \ No newline at end of file diff --git a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml index 459af296..ffc73afc 100644 --- a/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml +++ b/docs/ReadiumCSS_docs/OEBPS/Text/nav.xhtml @@ -785,6 +785,9 @@
  • Exposition of i18n stacks and compensation
  • +
  • + JSON properties no longer have a prefix +
  • diff --git a/docs/ReadiumCSS_docs/OEBPS/toc.ncx b/docs/ReadiumCSS_docs/OEBPS/toc.ncx index 7ef1be63..accc9ceb 100644 --- a/docs/ReadiumCSS_docs/OEBPS/toc.ncx +++ b/docs/ReadiumCSS_docs/OEBPS/toc.ncx @@ -1437,6 +1437,12 @@ + + + JSON properties no longer have a prefix + + + diff --git a/scripts/generate-vars-doc.js b/scripts/generate-vars-doc.js index 205a3182..5a2a3c34 100644 --- a/scripts/generate-vars-doc.js +++ b/scripts/generate-vars-doc.js @@ -23,8 +23,8 @@ const USER_PREFIX = "--USER__"; const I18N_STRATEGY = `\ \`lineHeightCompensation\` factors account for the different line-height needs of scripts, **Latin being the default and the reference for other scripts**. To determine which value to apply, a Reading System should use the following lookup against the publication's BCP-47 language tag: -1. Find the key matching the publication's full BCP-47 language + region code. -2. If no match, find the key after removing the region code (only BCP-47 language code). +1. Find the key matching the publication's full BCP-47 language tag. +2. If no match, strip the region subtag and try again. 3. If no match, use \`default\` (or ignore, because the line-height compensation should be \`1\`). `; From 5af3462317d74840fb78ab967742859e2d825c8c Mon Sep 17 00:00:00 2001 From: JayPanoz <12599652+JayPanoz@users.noreply.github.com> Date: Mon, 4 May 2026 12:58:32 +0000 Subject: [PATCH 14/15] Update dist --- css/dist/ReadiumCSS-before.css | 2 +- css/dist/cjk-horizontal/ReadiumCSS-before.css | 2 +- css/dist/cjk-vertical/ReadiumCSS-before.css | 2 +- css/dist/rtl/ReadiumCSS-before.css | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/css/dist/ReadiumCSS-before.css b/css/dist/ReadiumCSS-before.css index 6bf39b60..c9c02ff4 100644 --- a/css/dist/ReadiumCSS-before.css +++ b/css/dist/ReadiumCSS-before.css @@ -120,7 +120,7 @@ --RS__he-lineHeightCompensation:1.1; - --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew', sans-serif; --RS__gu-lineHeightCompensation:1.167; diff --git a/css/dist/cjk-horizontal/ReadiumCSS-before.css b/css/dist/cjk-horizontal/ReadiumCSS-before.css index 6bf39b60..c9c02ff4 100644 --- a/css/dist/cjk-horizontal/ReadiumCSS-before.css +++ b/css/dist/cjk-horizontal/ReadiumCSS-before.css @@ -120,7 +120,7 @@ --RS__he-lineHeightCompensation:1.1; - --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew', sans-serif; --RS__gu-lineHeightCompensation:1.167; diff --git a/css/dist/cjk-vertical/ReadiumCSS-before.css b/css/dist/cjk-vertical/ReadiumCSS-before.css index 192f8924..cbef3ced 100644 --- a/css/dist/cjk-vertical/ReadiumCSS-before.css +++ b/css/dist/cjk-vertical/ReadiumCSS-before.css @@ -120,7 +120,7 @@ --RS__he-lineHeightCompensation:1.1; - --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew', sans-serif; --RS__gu-lineHeightCompensation:1.167; diff --git a/css/dist/rtl/ReadiumCSS-before.css b/css/dist/rtl/ReadiumCSS-before.css index 6bf39b60..c9c02ff4 100644 --- a/css/dist/rtl/ReadiumCSS-before.css +++ b/css/dist/rtl/ReadiumCSS-before.css @@ -120,7 +120,7 @@ --RS__he-lineHeightCompensation:1.1; - --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew' sans-serif; + --RS__he-baseFontFamily:'New Peninim MT', 'Arial Hebrew', Gisha, 'Times New Roman', Roboto, Noto, 'Noto Sans Hebrew', sans-serif; --RS__gu-lineHeightCompensation:1.167; From 02e779f68c5b27e70660660934421c2fd58abdba Mon Sep 17 00:00:00 2001 From: Jiminy Panoz Date: Mon, 4 May 2026 15:09:27 +0200 Subject: [PATCH 15/15] Correct typing error in experiments --- css/vars/CSS-Variables.md | 2 +- css/vars/experiments.json | 2 +- docs/CSS28-migration_guide.md | 2 +- docs/ReadiumCSS_docs.epub | Bin 3690003 -> 3690001 bytes .../OEBPS/Text/Section-028.xhtml | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/css/vars/CSS-Variables.md b/css/vars/CSS-Variables.md index 5b8ad0a5..c6fe3bb2 100644 --- a/css/vars/CSS-Variables.md +++ b/css/vars/CSS-Variables.md @@ -96,6 +96,6 @@ Attempts to filter out paragraphs that are implicitly headings or part of header ### experimentalZoom -Attemps to filter out elements that are sized using viewport units and should not be scaled directly e.g. tables, images, iframes, etc. +Attempts to filter out elements that are sized using viewport units and should not be scaled directly e.g. tables, images, iframes, etc. **Value:** `readium-experimentalZoom-on` diff --git a/css/vars/experiments.json b/css/vars/experiments.json index e601d731..74baab42 100644 --- a/css/vars/experiments.json +++ b/css/vars/experiments.json @@ -5,7 +5,7 @@ "value": "readium-experimentalHeaderFiltering-on" }, "experimentalZoom": { - "description": "Attemps to filter out elements that are sized using viewport units and should not be scaled directly e.g. tables, images, iframes, etc.", + "description": "Attempts to filter out elements that are sized using viewport units and should not be scaled directly e.g. tables, images, iframes, etc.", "scope": "RS", "value": "readium-experimentalZoom-on" } diff --git a/docs/CSS28-migration_guide.md b/docs/CSS28-migration_guide.md index 8cc2a138..9fd844c8 100644 --- a/docs/CSS28-migration_guide.md +++ b/docs/CSS28-migration_guide.md @@ -256,7 +256,7 @@ Typically, you would use zoom for all web publications, and the rest of the styl As of version `2.0.0-beta.23`, ReadiumCSS provides flags as a way to opt-in to and test improvements to existing features. That way they can also be disabled without having to wait on a quickfix in case they are creating new issues. - `--RS__experimentalHeaderFiltering: readium-experimentalHeaderFiltering-on`: attempts to filter out paragraphs that are implicitly headings or part of headers -- `--RS__experimentalZoom: readium-experimentalZoom-on`: attemps to filter out elements that are sized using viewport units and should not be scaled directly +- `--RS__experimentalZoom: readium-experimentalZoom-on`: attempts to filter out elements that are sized using viewport units and should not be scaled directly These flags are expected to be found on `:root`. diff --git a/docs/ReadiumCSS_docs.epub b/docs/ReadiumCSS_docs.epub index fe04ff5bf0bb586392aca7a0e0b4b1ca7d4a69c4..405709fa59c7dbf0aa2aea1c679a0d8ef3e48dfd 100644 GIT binary patch delta 1329 zcmY+DeKgcr7{_OZjWW!jMn(;xOe66dHGbJ>n!L;y)1;TJ`G@b*960V)RVM>lA|#2EJuQubXO(tUPX;ZV>$)qxh_LQ=3fiuzOGyv75IiFy zuQ^;~VOg4Z#yyQIm&^){~>4;A0<^iOwmUX%4&UepVN(5aT4rM7i! zHwenlo#z_Hm#CA5I7dCz#oV@|txhH0ruL!B+9x_Y<=2w?LVeonTRf|E2a?=2d?oyc z*3679X-(6WQ;N1Nd9Jl$CC_fH9KW}m>4}7|<7o6zx^j@B8#}#WO}55! zPX*el=Gz_2=LY<^$zZj+?AxxhgAEf8T!%{*@_K};CNeDxN}tx3m%9A*?B|?Pe^hhb zR35L-AL$G!NIBwch38`8i<>L_uZ#$7U&>jN{k=b^)j5n>;}i4W{u^oVU6`-fRww|Sk3B> zq#aBs98S3$n(S`ti_N-GaYt9nq+aI!a%xLd)>!6@x8quNbL9Argt}wW0+mepIPBKF z7x=G}w=?hJ>-1Nnk*xs(%X1FJ2Z~0uBEGfnT&LF^ zd2L(Q%r85|Nqdh)L}bK@99<3WLm3Tnvy`9qdf3S2D)kNQ(&SucEyKQ*t2)v-vEPD! zv~kohqFG1D{rkzBJ}-|CMr))-#^|Fz&Q9-$5okJMyaqcz{S2ttAKyZ|9)sfja2qrh zBQQbYAe@QbBnX&v3bClfE>r3gNJClxj?qq^m=Y}XAOPpnmQ|9Kos~p1QAR|0O`k;B zO{78IL>OWMaUSj107)(d;uuwn`T}tYEz>~utTPBqkwi?mnwSU+CQiu^<9wGboC}#xVM)nx+%eVR2|Yw@KvN++iBU I8z(0JAAPquVgLXD delta 1283 zcmY+@Z8Vf=7zc1OW15LDrI?wJ*O25T%{<-~O~wqPnTDeb{_(7Reqp|p}SE3GxN#fs#m%{s(B&a+?k!~NlRUHAXKulvJYT%jhEU@Hd* zKm-zK0~yu;1*otVbU+u@fgb3C0nlJQYyd;p2%EqNjDZdeV8UiF0aGx8Enp57UsW$IP^}+}oN2EIX5I z@2-@hGM@A>RV2@epbf{~F!I}ejjTCO`70#HVZTUK-8w&BI;FB_U*uPpNi{=_T}^{g>9f?H$LWbGw;KM=Qgd_b>!B9%fLnF@7iJUz0$t|dx*n`0HWmE`R3 z+DUziD!hH*aQYR$(@Qt6&f080RcM{vO81I?Q#;h=(RWL!Xep^pB#3%z_J++RML#LI z=u^LxVjVdX(|X#m+p&8vjCZeR(Mu-0RIm`|BN~0bS$8Z++(6PBO>?{Z^Bs~UwX*8a zonIoayEzUwcTAnjmCUTj@4tHxvX%DbZO<;xW@NUtH%j>Wjq`m@A4jZvzf4BX-q&w7 zZdb2x3W~4LF4XBrZg4u3E1_60kRIAf`-$I;Plk!*yMJ2zBtBT``nOC`9DPQqDx{5P zYz}=MQn;M?y~-=i0OaAK5{d6wPAm)%Z8c$nN{xr~0PVOJke*f8A)9tfrX{N?TlY|$>Ne1Gb8n^Tjt$76`ggxU6(qJ>^PW^ zX_6?5;l@`qq`f@mWa-D>EoIY>eLdaor|{+Q2g=E=606io-o17!b$Xnse4(<4cJk=e zQRmCg`vP@2OLXTZGRxv@=||()hia7EG3=37P+#ArdPNUk*4NkM8b~g5J(yhbrZD!z zeOR6wvLAW;PrUxLA$^4)3L>CIA9eOMXNAEpK=jbf@fI(!Y7(M!u!FGSQPX~0J4o(pusDR0a!vgi{s-e ziaz0SA0FaL?4qHc2VuA5^AHyjm%&D38Eg~uB@a8HjfuBR`B=z)=PHa)2_FkNdf;fn zK==*)laFwS7yR(uK7oh}!5d8tL;{Jy;do6J&ZeM4f!LYzF?iB62umiRq9AN`_IbS4 zjMa$TRve3~NL1qR7hnkaV-?2eIRQ3~^Bmq0&#~8{^Zp18ofRNVQk@Qh#
    • --RS__experimentalHeaderFiltering: readium-experimentalHeaderFiltering-on: attempts to filter out paragraphs that are implicitly headings or part of headers
    • -
    • --RS__experimentalZoom: readium-experimentalZoom-on: attemps to filter out elements that are sized using viewport units and should not be scaled directly
    • +
    • --RS__experimentalZoom: readium-experimentalZoom-on: attempts to filter out elements that are sized using viewport units and should not be scaled directly