Nov. 26th, 2020

henry_flower: A melancholy wolf (Default)

Гоогл Плей Букс є найідіотський 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.

July 2025

M T W T F S S
 123456
78910111213
14151617181920
21222324252627
2829 3031   

Expand Cut Tags

No cut tags