Wiele osób poleca calibre jako niezawodne remedium na wszelkie bolączki związane z tematami ebookowymi. Ja natomiast widząc, co potrafi wyczyniać ten program zalecam daleko posuniętą ostrożność. Jednym z takich – niedopuszczalnych z mojego punktu widzenia – zachowań, jest daleko posunięta modyfikacja oryginalnego kodu ebooka. Dzieje się to nawet przy prostej generacji pliku MOBI na podstawie źródłowego pliku EPUB. Zmiany są tak daleko posunięte, że – w moim mniemaniu – mamy do czynienia już z zupełnie innym plikiem o tej samej treści. Przejdźmy do dowodów.
Narzędzie librarian (wykorzystywane do generowania m.in. plików MOBI oraz EPUB publikowanych w serwisie WolneLektury.pl) od ostatniej aktualizacji ma możliwość generowania plików MOBI za pomocą calibre lub za pomocą oficjalnego narzędzia kindlegen. Dlatego analizując pliki wynikowe MOBI z konwersji tego samego źródłowego pliku możemy zobaczyć skalę „sieczki”, którą dokonuje calibre. Gotowe pliki Mobi do analizy zostały poddane rozpakowaniu narzędziem KindleUnpack.
Do analizy wykorzystałem źródłowy plik XML książki Tadeusza Boya-Żeleńskiego
„Marzenie i pysk”.
Za pomocą librariana wygenerowałem na podstawie ww. pliku trzy pliki wynikowe:
- boy-marzenie-i-pysk.epub
- boy-marzenie-i-pysk_calibre.mobi (calibre było generatorem MOBI)
- boy-marzenie-i-pysk_kindlegen.mobi (kindlegen był generatorem MOBI)
Powyższe pliki są do pobrania z tej lokacji: https://googledrive.com/
Założenie wstępne. KindleUnpack modyfikuje przy rozpakowywaniu oryginalne nazwy plików, więc wszelkie referencje do tych plików są również zmienione. Tych zmian nie porównuję!
Na pierwszy rzut zobaczmy plik part2.html z pliku EPUB. Wygląda on tak:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="style.css" type="text/css"/>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
<title>
WolneLektury.pl
</title>
</head>
<body>
<div id="book-text"><h2 class="h3">Od autora</h2>
<p class="paragraph">Oto, miły czytelniku, garść felietonów, których jesteś zazwyczaj dość chętnym odbiorcą. Tytuł, nieco ekspresjonistyczny, uprzedza cię dostatecznie, że znajdziesz tu rozmaitość wrażeń: ujrzysz to głowę miękko skłonioną do cichego <em class="author-emphasis">marzenia</em>, to <em class="author-emphasis">pysk</em> rozwarty, kłótliwy, zaczepny, tak jak się godzi w obronie dobrej sprawy. Ale czeka cię nie tylko pomieszanie tonów; także i pomieszanie epok: obok rzeczy świeżutkich, prosto z igły, znajdziesz tu drobiazgi pisane przed laty kilku, niemal dokumenty historyczne! Zdradzę ci tego sekret, miły czytelniku. W początkach mojej kariery pisarskiej byłem bardzo nieśmiały. Felietonów moich nie wydawałem wówczas oddzielnie; przemycałem je w poszczególnych tomach krytyk teatralnych, z którymi często nie miały nic wspólnego. Ponieważ groziło to pogrzebaniem wielu myśli, które mi są drogie (ot, taki niewinny sentymencik), przyszło mi do głowy wydobyć je z ukrycia i zamieszać między nowe. Jeżeli więc przypadkowo, zbyt pilny czytelniku, trafisz na artykulik, który ci jest znany, nie zżymaj się, ale odczytaj go jeszcze raz: pisarza — tak ktoś powiedział — którego nie warto przeczytać dwa razy, w ogóle nie warto czytać.</p>
<p class="paragraph">Zresztą, wzorem niektórych codziennych pism, obmyśliłem dla was, mili czytelnicy, nagrodę „za uważne czytanie”. Ten, kto trafi na coś, co już skądś zna, zechce łaskawie zawiadomić autora (Warszawa, Smolna 11) skąd; a między tych, którzy nadeślą trafne odpowiedzi, nastąpi rozlosowanie trzech kompletów pierwszych sześciu tomów <em class="author-emphasis">Biblioteki Boya</em> w wykwintnej oprawie. Termin do końca roku 1930.</p>
<p class="paragraph">A teraz, dobry czytelniku, przyjemnych marzeń i wesołego pyska.</p>
<div class="note"><p class="paragraph">BOY</p></div>
<div class="note"><p class="paragraph">Warszawa, w czerwcu 1930</p></div>
</div>
</body>
</html>
A teraz popatrzmy co z nim uczynił calibre:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
WolneLektury.pl
</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<link href="../Styles/style0002.css" rel="stylesheet" type="text/css"/>
<link href="../Styles/style0001.css" rel="stylesheet" type="text/css"/>
</head>
<body class="calibre">
<div class="calibre1" id="book-text"><h2 class="h">Od autora</h2>
<p class="paragraph"><span class="calibre7">O</span>to, miły czytelniku, garść felietonów, których jesteś zazwyczaj dość chętnym odbiorcą. Tytuł, nieco ekspresjonistyczny, uprzedza cię dostatecznie, że znajdziesz tu rozmaitość wrażeń: ujrzysz to głowę miękko skłonioną do cichego <em class="author-emphasis">marzenia</em>, to <em class="author-emphasis">pysk</em> rozwarty, kłótliwy, zaczepny, tak jak się godzi w obronie dobrej sprawy. Ale czeka cię nie tylko pomieszanie tonów; także i pomieszanie epok: obok rzeczy świeżutkich, prosto z igły, znajdziesz tu drobiazgi pisane przed laty kilku, niemal dokumenty historyczne! Zdradzę ci tego sekret, miły czytelniku. W początkach mojej kariery pisarskiej byłem bardzo nieśmiały. Felietonów moich nie wydawałem wówczas oddzielnie; przemycałem je w poszczególnych tomach krytyk teatralnych, z którymi często nie miały nic wspólnego. Ponieważ groziło to pogrzebaniem wielu myśli, które mi są drogie (ot, taki niewinny sentymencik), przyszło mi do głowy wydobyć je z ukrycia i zamieszać między nowe. Jeżeli więc przypadkowo, zbyt pilny czytelniku, trafisz na artykulik, który ci jest znany, nie zżymaj się, ale odczytaj go jeszcze raz: pisarza — tak ktoś powiedział — którego nie warto przeczytać dwa razy, w ogóle nie warto czytać.</p>
<p class="paragraph1">Zresztą, wzorem niektórych codziennych pism, obmyśliłem dla was, mili czytelnicy, nagrodę „za uważne czytanie”. Ten, kto trafi na coś, co już skądś zna, zechce łaskawie zawiadomić autora (Warszawa, Smolna 11) skąd; a między tych, którzy nadeślą trafne odpowiedzi, nastąpi rozlosowanie trzech kompletów pierwszych sześciu tomów <em class="author-emphasis">Biblioteki Boya</em> w wykwintnej oprawie. Termin do końca roku 1930.</p>
<p class="paragraph1">A teraz, dobry czytelniku, przyjemnych marzeń i wesołego pyska.</p>
<div class="note"><p class="paragraph1">BOY</p></div>
<div class="note"><p class="paragraph1">Warszawa, w czerwcu 1930</p></div>
</div>
</body>
</html>
Widać, że nawet w tak małym pliku zostały dokonane modyfikacje polegające na wstawienie nic nie znaczących z punktu widzenia semantyczności kodu klasy: .calibre, .calibre1, .calibre7. Wyciął również DOCTYPE, mimo, że nikt go o to nie prosił.
Zobaczmy, co zatem uczynił kindlegen z tym samym plikiem:
<?xml version='1.0' encoding='utf-8'?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
<link rel="stylesheet" href="../Styles/style0001.css" type="text/css"/>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
<title>
WolneLektury.pl
</title>
</head><body>
<div id="book-text"><h2 class="h3">Od autora</h2>
<p class="paragraph">Oto, miły czytelniku, garść felietonów, których jesteś zazwyczaj dość chętnym odbiorcą. Tytuł, nieco ekspresjonistyczny, uprzedza cię dostatecznie, że znajdziesz tu rozmaitość wrażeń: ujrzysz to głowę miękko skłonioną do cichego <em class="author-emphasis">marzenia</em>, to <em class="author-emphasis">pysk</em> rozwarty, kłótliwy, zaczepny, tak jak się godzi w obronie dobrej sprawy. Ale czeka cię nie tylko pomieszanie tonów; także i pomieszanie epok: obok rzeczy świeżutkich, prosto z igły, znajdziesz tu drobiazgi pisane przed laty kilku, niemal dokumenty historyczne! Zdradzę ci tego sekret, miły czytelniku. W początkach mojej kariery pisarskiej byłem bardzo nieśmiały. Felietonów moich nie wydawałem wówczas oddzielnie; przemycałem je w poszczególnych tomach krytyk teatralnych, z którymi często nie miały nic wspólnego. Ponieważ groziło to pogrzebaniem wielu myśli, które mi są drogie (ot, taki niewinny sentymencik), przyszło mi do głowy wydobyć je z ukrycia i zamieszać między nowe. Jeżeli więc przypadkowo, zbyt pilny czytelniku, trafisz na artykulik, który ci jest znany, nie zżymaj się, ale odczytaj go jeszcze raz: pisarza — tak ktoś powiedział — którego nie warto przeczytać dwa razy, w ogóle nie warto czytać.</p>
<p class="paragraph">Zresztą, wzorem niektórych codziennych pism, obmyśliłem dla was, mili czytelnicy, nagrodę „za uważne czytanie”. Ten, kto trafi na coś, co już skądś zna, zechce łaskawie zawiadomić autora (Warszawa, Smolna 11) skąd; a między tych, którzy nadeślą trafne odpowiedzi, nastąpi rozlosowanie trzech kompletów pierwszych sześciu tomów <em class="author-emphasis">Biblioteki Boya</em> w wykwintnej oprawie. Termin do końca roku 1930.</p>
<p class="paragraph">A teraz, dobry czytelniku, przyjemnych marzeń i wesołego pyska.</p>
<div class="note"><p class="paragraph">BOY</p></div>
<div class="note"><p class="paragraph">Warszawa, w czerwcu 1930</p></div>
</div>
</body></html>
Nic, absolutnie nic.
To tylko małe preludium do masakry wykonanej na pliku ze stylami. Źródło z pliku EPUB:
@font-face {
font-family: "DejaVu Serif";
font-weight: normal;
font-style: normal;
src: url(DejaVuSerif.ttf);
}
@font-face {
font-family: "DejaVu Serif";
font-weight: bold;
font-style: normal;
src: url(DejaVuSerif-Bold.ttf);
}
@font-face {
font-family: "DejaVu Serif";
font-weight: normal;
font-style: italic;
src: url(DejaVuSerif-Italic.ttf);
}
@font-face {
font-family: "DejaVu Serif";
font-weight: bold;
font-style: italic;
src: url(DejaVuSerif-BoldItalic.ttf);
}
body, p, h1, h2, h3, h4 {
font-family: "DejaVu Serif", serif;
}
body
{
line-height: 1.5em;
margin: 0;
}
a
{
text-decoration: none;
color: #00e;
}
a img {
border: 0;
}
#book-text
{
margin: 2em;
}
@media amzn-kf8
{
#book-text
{
margin: 0;
}
}
/* =================================================== */
/* = Common elements: headings, paragraphs and lines = */
/* =================================================== */
.h2
{
font-size: 2em;
margin: 0;
margin-top: 1.5em;
font-weight: bold;
line-height: 1.5em;
}
.h3
{
text-align:left;
font-size: 1.5em;
margin-top: 1.5em;
font-weight: normal;
line-height: 1.5em;
}
.h4
{
font-size: 1em;
margin: 0;
margin-top: 1.5em;
line-height: 1.5em;
}
p
{
margin: 0;
}
/* ======================== */
/* = Footnotes and themes = */
/* ======================== */
.theme-begin
{
border-left: 0.1em solid #DDDDDD;
color: #777;
padding: 0 0.5em;
width: 7.5em;
font-style: normal;
font-weight: normal;
font-size: 0.875em;
float: right;
margin-right: -9.5em;
clear: both;
left: 40em;
line-height: 1.5em;
text-align: left;
}
.annotation
{
margin-bottom: 0.3em;
text-align: justify;
}
.block
{
font-size: 0.875em;
padding: 1em;
}
/* ============= */
/* = Numbering = */
/* ============= */
.anchor sup
{
line-height: 0;
font-size: 0.7em;
}
/* =================== */
/* = Custom elements = */
/* =================== */
.title-page
{
margin-top: 1.5em;
}
.title
{
font-size: 3em;
text-align: center;
line-height: 1.5em;
font-weight: bold;
}
.author
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.5em;
line-height: 1.5em;
margin-bottom: 0.25em;
}
.intitle
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.5em;
line-height: 1.5em;
margin-bottom: 0.25em;
}
.insubtitle
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1em;
line-height: 1.5em;
margin-bottom: 0.25em;
}
.collection
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.125em;
line-height: 1.5em;
margin-bottom: -0.25em;
}
.subtitle
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.5em;
line-height: 1.5em;
margin-top: -0.25em;
}
div.didaskalia
{
font-style: italic;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: 1.5em;
}
.kwestia
{
margin-top: 0.5em;
}
.paragraph
{
text-align: justify;
margin: 0;
text-indent: 1.2em;
}
h1 + .paragraph, h2 + .paragraph
{
text-indent: 0;
}
h2 + .paragraph:first-letter
{
font-size: 1.6em;
}
.motto
{
text-align: justify;
font-style: italic;
margin-top: 1.5em;
}
.motto_podpis, .motto_podpis .paragraph
{
font-size: 0.875em;
text-align: right;
font-style: italic;
}
.fragment
{
border-bottom: 0.1em solid #999;
padding-bottom: 1.5em;
}
.note
{
text-align: right;
font-style: italic;
margin-top: 1em;
margin-bottom: 0.5em;
}
.note .paragraph
{
text-align: justify;
}
.dedication, .dedication .paragraph
{
text-align: right;
font-style: italic;
}
hr.spacer
{
height: 3em;
visibility: hidden;
}
hr.spacer-line
{
margin: 0;
margin-top: 1.5em;
margin-bottom: 1.5em;
border: none;
border-bottom: 0.1em solid #000;
}
.spacer-asterisk
{
padding: 0;
margin: 0;
margin-top: 1.5em;
margin-bottom: 1.5em;
text-align: center;
}
div.person-list ol
{
list-style: none;
padding: 0;
padding-left: 1.5em;
}
.place-and-time
{
font-style: italic;
}
em.math
{
font-style: italic;
}
em.foreign-word
{
font-style: italic;
}
em.book-title
{
font-style: italic;
}
em.didaskalia
{
font-style: italic;
}
em.author-emphasis
{
letter-spacing: 0.1em;
}
.person-list em.person
{
font-style: normal;
/*font-variant: small-caps;*/
text-transform: uppercase;
}
.info
{
text-align: center;
margin-bottom: 1em;
}
.info div
{
text-align: center;
}
.info img
{
margin: 0;
margin-left: 2em;
margin-right: 2em;
}
p.minor-info {
text-align: center;
margin-bottom: 1em;
font-size: 0.75em;
}
p.footer {
margin-top: 2em;
}
calibre jest niezwykłym kreatorem zupełnie nowej rzeczywistości, nie mającej nic wspólnego z semantyką, utrudniając analizę kodu do bólu wręcz. Zamiast semantycznych selektorów pojawiły się nic nieznaczące ponumerowane klasy. Rozpleniły się również właściwości, których w pierwotnym pliku nie było. Dodatkowo zamiast jednego pliku ze stylami mamy już dwa. Oto pierwszy z nich:
@page {
margin-bottom: 5pt;
margin-top: 5pt
}
@font-face {
font-family: "DejaVu Serif";
font-weight: normal;
font-style: normal;
src: url(../Fonts/font00100.ttf)
}
@font-face {
font-family: "DejaVu Serif";
font-weight: bold;
font-style: normal;
src: url(../Fonts/font00103.ttf)
}
@font-face {
font-family: "DejaVu Serif";
font-weight: normal;
font-style: italic;
src: url(../Fonts/font00101.ttf)
}
@font-face {
font-family: "DejaVu Serif";
font-weight: bold;
font-style: italic;
src: url(../Fonts/font00102.ttf)
}
A to drugi z nich:
.annotation {
display: block;
font-family: "DejaVu Serif", serif;
text-align: justify;
margin: 0 0 0.3em
}
.author {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 1.41667em;
font-weight: bold;
line-height: 1.5em;
text-align: center;
margin: 0 0 0.25em
}
.author-emphasis {
font-style: italic;
letter-spacing: 0.1em
}
.block {
display: block;
font-size: 0.75em;
padding: 1em
}
.block1 {
display: block;
font-size: 1em;
padding: 1em
}
.book-title {
font-style: italic
}
.calibre {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 1em;
line-height: 1.5em;
padding-left: 0;
padding-right: 0;
margin: 0 5pt
}
.calibre1 {
display: block;
margin-bottom: 2em;
margin-top: 2em
}
.calibre2 {
color: #00e;
text-decoration: none
}
.calibre3 {
height: auto;
width: auto;
border: currentColor none 0;
margin: 0 2em
}
.calibre4 {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 2em;
font-weight: bold;
line-height: 1.2;
margin: 0.67em 0
}
.calibre5 {
display: block;
margin-left: 0
}
.calibre6 {
display: block;
margin-left: 1em
}
.calibre7 {
font-size: 1.66667em;
line-height: 1.2
}
.calibre8 {
font-size: 0.75em;
line-height: 1.2;
vertical-align: super
}
.calibre9 {
font-size: 0.77778em;
line-height: 1.2;
vertical-align: super
}
.calibre10 {
font-size: 0.70588em;
line-height: 1.2;
vertical-align: super
}
.calibre11 {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 1.41667em;
font-weight: bold;
line-height: 1.2;
margin: 0.83em 0
}
.calibre12 {
font-weight: bold
}
.calibre13 {
height: auto;
width: auto;
margin: 0 2em
}
.footer {
display: block;
font-family: "DejaVu Serif", serif;
text-align: center;
margin: 2em 0 1em
}
.h {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 1.41667em;
font-weight: normal;
line-height: 1.5em;
text-align: left;
margin: 1.5em 0 0.83em
}
.h1 {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 1em;
font-weight: bold;
line-height: 1.5em;
margin: 1.5em 0 0
}
.info {
display: block;
font-family: "DejaVu Serif", serif;
text-align: center;
margin: 0 0 1em
}
.info1 {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 1.41667em;
font-weight: bold;
line-height: 1.2;
text-align: center;
margin: 0.83em 0 1em
}
.minor-info {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 0.75em;
text-align: center;
margin: 0 0 1em
}
.note {
display: block;
font-style: italic;
margin-bottom: 0.5em;
margin-top: 1em;
text-align: right
}
.paragraph {
display: block;
font-family: "DejaVu Serif", serif;
text-align: justify;
text-indent: 0;
margin: 0
}
.paragraph1 {
display: block;
font-family: "DejaVu Serif", serif;
text-align: justify;
text-indent: 1.2em;
margin: 0
}
.spacer {
display: block;
font-family: "DejaVu Serif", serif;
margin: 0
}
.spacer-asterisk {
display: block;
font-family: "DejaVu Serif", serif;
text-align: center;
padding: 0;
margin: 1.5em 0
}
.stanza {
display: block
}
.title {
display: block;
font-family: "DejaVu Serif", serif;
font-size: 2em;
font-weight: bold;
line-height: 1.5em;
text-align: center;
margin: 0.67em 0
}
.title-page {
display: block;
margin-top: 1.5em
}
A teraz popatrzmy na wynik działania kindlegena:
@font-face {
font-family: "DejaVu Serif";
font-weight: normal;
font-style: normal;
src: url(../Fonts/font00104.ttf);
}
@font-face {
font-family: "DejaVu Serif";
font-weight: bold;
font-style: normal;
src: url(../Fonts/font00105.ttf);
}
@font-face {
font-family: "DejaVu Serif";
font-weight: normal;
font-style: italic;
src: url(../Fonts/font00106.ttf);
}
@font-face {
font-family: "DejaVu Serif";
font-weight: bold;
font-style: italic;
src: url(../Fonts/font00107.ttf);
}
body, p, h1, h2, h3, h4 {
font-family: "DejaVu Serif", serif;
}
body
{
line-height: 1.5em;
margin: 0;
}
a
{
text-decoration: none;
color: #00e;
}
a img {
border: 0;
}
#book-text
{
margin: 2em;
}
@media all{
#book-text
{
margin: 0;
}
}
/* =================================================== */
/* = Common elements: headings, paragraphs and lines = */
/* =================================================== */
.h2
{
font-size: 2em;
margin: 0;
margin-top: 1.5em;
font-weight: bold;
line-height: 1.5em;
}
.h3
{
text-align:left;
font-size: 1.5em;
margin-top: 1.5em;
font-weight: normal;
line-height: 1.5em;
}
.h4
{
font-size: 1em;
margin: 0;
margin-top: 1.5em;
line-height: 1.5em;
}
p
{
margin: 0;
}
/* ======================== */
/* = Footnotes and themes = */
/* ======================== */
.theme-begin
{
border-left: 0.1em solid #DDDDDD;
color: #777;
padding: 0 0.5em;
width: 7.5em;
font-style: normal;
font-weight: normal;
font-size: 0.875em;
float: right;
margin-right: -9.5em;
clear: both;
left: 40em;
line-height: 1.5em;
text-align: left;
}
.annotation
{
margin-bottom: 0.3em;
text-align: justify;
}
.block
{
font-size: 0.875em;
padding: 1em;
}
/* ============= */
/* = Numbering = */
/* ============= */
.anchor sup
{
line-height: 0;
font-size: 0.7em;
}
/* =================== */
/* = Custom elements = */
/* =================== */
.title-page
{
margin-top: 1.5em;
}
.title
{
font-size: 3em;
text-align: center;
line-height: 1.5em;
font-weight: bold;
}
.author
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.5em;
line-height: 1.5em;
margin-bottom: 0.25em;
}
.intitle
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.5em;
line-height: 1.5em;
margin-bottom: 0.25em;
}
.insubtitle
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1em;
line-height: 1.5em;
margin-bottom: 0.25em;
}
.collection
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.125em;
line-height: 1.5em;
margin-bottom: -0.25em;
}
.subtitle
{
margin: 0;
text-align: center;
font-weight: bold;
font-size: 1.5em;
line-height: 1.5em;
margin-top: -0.25em;
}
div.didaskalia
{
font-style: italic;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: 1.5em;
}
.kwestia
{
margin-top: 0.5em;
}
.paragraph
{
text-align: justify;
margin: 0;
text-indent: 1.2em;
}
h1 + .paragraph, h2 + .paragraph
{
text-indent: 0;
}
h2 + .paragraph:first-letter
{
font-size: 1.6em;
}
.motto
{
text-align: justify;
font-style: italic;
margin-top: 1.5em;
}
.motto_podpis, .motto_podpis .paragraph
{
font-size: 0.875em;
text-align: right;
font-style: italic;
}
.fragment
{
border-bottom: 0.1em solid #999;
padding-bottom: 1.5em;
}
.note
{
text-align: right;
font-style: italic;
margin-top: 1em;
margin-bottom: 0.5em;
}
.note .paragraph
{
text-align: justify;
}
.dedication, .dedication .paragraph
{
text-align: right;
font-style: italic;
}
hr.spacer
{
height: 3em;
visibility: hidden;
}
hr.spacer-line
{
margin: 0;
margin-top: 1.5em;
margin-bottom: 1.5em;
border: none;
border-bottom: 0.1em solid #000;
}
.spacer-asterisk
{
padding: 0;
margin: 0;
margin-top: 1.5em;
margin-bottom: 1.5em;
text-align: center;
}
div.person-list ol
{
list-style: none;
padding: 0;
padding-left: 1.5em;
}
.place-and-time
{
font-style: italic;
}
em.math
{
font-style: italic;
}
em.foreign-word
{
font-style: italic;
}
em.book-title
{
font-style: italic;
}
em.didaskalia
{
font-style: italic;
}
em.author-emphasis
{
letter-spacing: 0.1em;
}
.person-list em.person
{
font-style: normal;
/*font-variant: small-caps;*/
text-transform: uppercase;
}
.info
{
text-align: center;
margin-bottom: 1em;
}
.info div
{
text-align: center;
}
.info img
{
margin: 0;
margin-left: 2em;
margin-right: 2em;
}
p.minor-info {
text-align: center;
margin-bottom: 1em;
font-size: 0.75em;
}
p.footer {
margin-top: 2em;
}
Nie dokonane zostały żadne zmiany.
Podsumowanie. Decydując się na korzystanie z calibre przy tej skali ingerencji w kod nie macie żadnej gwarancji, że wygląd ebooka będzie odpowiadał temu, co chcieli uzyskać autorzy. Dlatego przestrzegam przed pochopnym korzystaniem z tego narzędzia i ordynowaniem go bezkrytycznie.
Jeśli ktoś używa calibre wyłącznie do konwersji z plików tekstowych to problemu takiego niema. Za to co robi z epub to brak słów. ;( Komplikowanie html to jedno, ale css nie powinno być w ogóle ruszane.
Najprostszym rozwiązaniem jest napisanie wtyczki do calibre która zintegruje kindlegena do konwersji mobi. Tylko to nie rozwiązuje problemu.
Ps. Czy w komentarzach można używać kolorowania składni? I czy wtyczka to Crayon Syntax Highlighter?
Jeśli nie ma formatowania i to formatowanie tworzy samo calibre to oczywiste jest, że nie ma tu żadnego problemu, bo trudno tu mówić o kaleczeniu kodu. Choć to wynikowe formatowanie piękne nie jest niestety 🙁
PS. W komentarzach nie można korzystać z kolorowania, a wtyczka to istotnie Crayon Syntax Highlighter, A coś z nią nie tak? 😉
Sigil + wyrażenia regularne pozwalają w EPUB na w miarę bezpieczne usunięcie takich kwiatków jak: O. Często polskie litery w wyrazach są w ten sposób wyłączane z formatowania.
Taki kwiatek jak O to efekt działania calibre na :first-letter i szczerze mówiąc zastanawiam się czego dotyczy twój komentarz? Przecież ja nie chcę mieć takiego kwiatka, dlatego przestrzegam przed korzystaniem z calibre 😉
Chciałbym użyć automatora (OSX) do konwersji z kindlegen, ale nie mogę sobie poradzić ze skryptem. Czy możesz mi pomóc w tym temacie?
Co ten automator miałby robić?
Idea jest taka, żeby przez prawoklik na pliku .epub wywołać sekwencję konwersji do .mobi bez „ręcznego” otwierania terminala, wywoływania kindlegena i dodawania pliku wyjściowego.
Coś takiego znalazłem tu: http://goo.gl/pWLGv , jednak nie działa to zgodnie z opisem, albo ja nie potrafię sobie z tym poradzić.
Dzięki za zainteresowanie tematem 🙂
To raczej nie powinno być skomplikowane. Obadam temat i dam znać wieczorem.
Ok. Więc tak:
1) w Automatorze musisz wybrać, że chcesz tworzyć „Service”
2) Zmień opcję „Service receives selected” na „files and folders”
3) Przeciągasz akcję: Run Shell Script
4) W liście „Pass input:” w tej akcji zmieniasz na „as arguments”
5) W samym okienku wklejasz ten tekst:
6) Tam gdzie jest napisane sciezka_dostepu wklej prawidłową ścieżkę dostępu do programu kindlegen.
Dziękuję ci bardzo – działa znakomicie! 🙂 Przy okazji, co sądzisz o używaniu w kindlegen opcji kompresji i ewentualnie gdzie w tym kodzie wstawić zalecany parametr (c0, c1, c2)?
P.S. Myślę, że Twoja porada warta jest zapisania „złotymi zgłoskami” dla wszystkich, którzy borykają się czasami z konwersją ebooków – może wpis na blogu 🙂
Opcje kompresji:
-c0: no compression
-c1: standard DOC compression
-c2: Kindle huffdic compression
Domyślnie program działa z opcją c1 i jest to jak najbardziej prawidłowe zachowanie. Opcja c0 jest całkowicie nie do przyjęcia dla mnie, ponieważ tworzy bardzo duże pliki, a szybkość jest porównywalna do opcji c1.
Opcja c2 jest baaaaaaaaaardzo czasochłonna i szczerze mówiąc niezbyt opłacalna. Różnica wielkości względem przeciętnej książki jest znikoma. Ta opcja sprawdzi się w przypadku książek z baaaaaardzo dużą ilością tekstu.
Jak zmodyfikować powyższy kod, żeby dodać opcje np. -c2? Bardzo prosto:
Osobny wpis już jest: https://blog.blaut.biz/2014/06/generowanie-plikow-mobi-za-pomoca-kindlegen-przy-wykorzystaniu-skryptu-automatora-z-mac-os-x.html
Jeszcze raz dziękuję za pomoc 🙂 Zapisywanie danych konwersji, bardzo przydatne. Pozdrawiam!
Witam. Czy obecnie ten problem nadal występuje czy może został naprawiony w którejś z aktualizacji?
Pozdrawiam