Гоогл Плей Букс
Nov. 26th, 2020 11:37Гоогл Плей Букс є найідіотський epub рідер. Щоб перевірити рендеринг книжки, треба спочатку завантажити epub файла до гооглової хмари. Щоб перевірити оновлений варіянт, треба не тільки видалити попередній, а зупинити аплікацію методом 'force stop' та видалити кеш, інакше андроїдна аплікація нового варіянту не побачить.
Коли у будь-якому epub рідер ви вибираєте подивитися Table of Contents, рідер малює вміст спеціяльного nav файлу всередині книжки.
Напр, фрагмента
<ol>
<li><a href="preface.xhtml">Preface</a></li>
<li><a href="ch1.xhtml">1. The Tax on Income</a></li>
...
</ol>
виглядає як звичайна html розмітка, але насправді є дуже обмеженим
DSL. Всередині <li>
дозволені лише <a>
та <ol>
.
Звичайно, краще не писати ToC вручну, а генерувати--скануючи xhtml файли з текстом книжки. Напр, якщо book.xhtml має
<h1 class="title unnumbered" id="preface">Preface</h1>
<h1 class="title" id="ch1">The Tax on Income</h1>
<h1 class="title" id="ch2">Ancient and Modern</h1>
і ми хочемо
Preface
1. The Tax on Income
2. Ancient and Modern
так щоб текст з h1.unnumbered були без цифрового префіксу, то за допомогою nokogiri та erb:
<nav epub:type="toc">
<ol>
<% start = 0; doc.css('h1.title').each do |v| %>
<li>
<a href="book.xhtml#<%= v.attr 'id' %>">
<%= v.classes.include?('unnumbered') ? "" : "#{start += 1}." %>
<%= v.text %>
</a>
</li>
<% end %>
</ol>
</nav>
результат буде виглядати:
<ol>
<li>
<a href="book.xhtml#preface">
Preface
</a>
</li>
<li>
<a href="book.xhtml#ch1">
1.
The Tax on Income
</a>
</li>
...
</ol>
Повертаючись до Гоогл Плей Букс. Хто здогадається, як воно рендерить такий ToC?
1.
2.
Причину побачити є нескладно, але ГЕТЬ УСІ інші epub-рідери на планеті земля перед малюванням пункта меню замінюють \n+ на пробіл та роблять trim.
Колись давно, старі кіндли повільно плигали з розділу на розділ, якщо текст книжки був в 1 великому (> ~500KB) файлі. З тих часів, кожний розділ складають до окремого файлу. ГЕТЬ УСІ epub-рідери на планеті земля у 2020 не мають жодних проблем з "великими" xhtml файлами. Єдиний рідер, який починає гальмувати на листанні сторінок, це Гоогл Плей Букс.
Це не єдиний бага. Якщо текст книжки є індід в 1 файлі, для рендерингу розділів, які починаються з h1, до css можна додати:
h1 { page-break-before: always; }
Гоогл Плей Букс як бачить таку проперті, плигає на попередню сторінку, при тапанні у меню ToC. Тобто, замість 1ї сторінки нового розділу бачиш останню сторінку попереднього. ГЕТЬ УСІ epub-рідери на планеті земля...
Немає сил.
"Total revenues of $46.2 billion in the third quarter [2020] reflect broad based growth led by an increase in advertiser spend in Search and YouTube as well as continued strength in Google Cloud and Play," said CFO Ruth Porat.