PDF-format - calibre User Manual

advertisement
calibre Användarhandbok
Utgåva 2.22.0
Kovid Goyal
March 21, 2015
Innehåll
1
Avsnitten
1.1 Grafiska användargränssnittet . . . .
1.2 Lägga till din favorit nyhetswebbplats
1.3 E-bokläsare . . . . . . . . . . . . . .
1.4 E-bokkonvertering . . . . . . . . . .
1.5 Redigera e-böcker . . . . . . . . . .
1.6 Jämför e-böcker . . . . . . . . . . .
1.7 Redigera e-boks metadata . . . . . .
1.8 Vanliga frågor och svar . . . . . . . .
1.9 Handledning . . . . . . . . . . . . .
1.10 Anpassa calibre . . . . . . . . . . . .
1.11 Kommandoradsgränssnitt . . . . . .
1.12 Konfigurera calibre utvecklingsmiljö
1.13 Ordförklaringar . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
21
48
51
67
94
96
99
120
230
265
296
351
Python Modulindex
353
Index
355
i
ii
calibre Användarhandbok, Utgåva 2.22.0
calibre är en e-bokbibliotekshanterare. Den kan visa, konvertera, och katalogisera e-böcker i de flesta e-bokformaten.
Den kan också kommunicera med många e-bokläsarenheter. Den kan gå ut på internet och hämta metadata för dina
böcker. Den kan ladda ner nyhetstidningar och omvandla dem till e-böcker för bekvämare läsning. Den är plattformsoberoende, kör på Linux, Windows och OS X.
Du har just startat calibre. Vad ska du göra nu? Innan calibre kan göra något med dina e-böcker, måste den veta något
om dem. Dra och släpp några e-böcker på calibre, eller klicka “Lägg till böcker”-knappen och se över vilka e-böcker
du vill arbeta med. När du har lagt till böcker, kommer de dyka upp i huvudvyn och se ut i stil med detta:
När du har beundrat listan över böcker som du just lagt till i ditt favoritinnehåll, kommer du antagligen att vilja läsa
en. För att göra att du måste konvertera boken till ett format som din läsaren förstår. När du först kör calibre kommer
Välkomstinstallationsguiden starta upp och ställa in Calibre för dina läsenheter. Konvertering är en småsak. Välj bara
den bok du vill konvertera och klicka sedan på “Konvertera böcker”-knappen. Ignorera alla alternativ för nu och
klicka på “OK”. Den lilla ikonen i det nedre högra hörnet kommer att börja snurra. När den är klar spinning, är din
konverterade boken klar. Klicka på “Visa” för att läsa boken.
Om du vill läsa boken på din läsenhet, anslut den till datorn, vänta tills Calibre upptäcker den (10-20 sekunder) och
sedan klicka på “Skicka till enhet”-knappen. När ikonen slutar rotera igen, koppla bort din läsenhet och börja läsa! Om
du inte konverterar boken i tidigare steg, calibre kommer automatiskt konvertera den till formatet som din läsenhet kan
hantera.
För att komma igång med mer avancerad användning, bör du läsa om Grafiska användargränssnittet (sida 3). För ännu
mer kraft och mångsidighet, lära dig Kommandoradsgränssnitt (sida 265). Du hittar listan med Vanliga frågor och
svar (sida 99) användbara.
Innehåll
1
calibre Användarhandbok, Utgåva 2.22.0
2
Innehåll
KAPITEL 1
Avsnitten
1.1 Grafiska användargränssnittet
Det grafiska användargränssnittet (GUI) erbjuder tillgång till all bibliotekshantering och e-bokkonverteringsfunktioner.
Det grundläggande arbetsflöde för att använda calibre är först att lägga till böcker till biblioteket från din hårddisk.
calibre kommer automatiskt försöka läsa metadata från böckerna och lägga till dem i sin interna databas. När de är i
databasen, kan du utföra olika Åtgärder (sida 3) på dem som ingår konvertering från ett format till ett annat, överföra till
avläsningsanordningen, titta på datorn och redigera metadata. Det senare innefattar modifiering av omslag, beskrivning
och etiketter bland andra detaljer. Observera att calibre skapar kopior av de filer som du lägger till. Dina originalfiler
lämnas orörda.
Gränssnittet är uppdelat i olika sektioner:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Åtgärder (sida 3)
Inställningar (sida 9)
Kataloger (sida 10)
Sök & sortera (sida 10)
Sökgränssnittet (sida 11)
Sparade sökningar (sida 13)
Virtuella bibliotek (sida 14)
Gissa metadata från filnamn (sida 14)
Bokinformation (sida 15)
Etikettbläddrare (sida 16)
Omslagsrutnät (sida 18)
Omslagsbläddrare (sida 19)
Snabbvisning (sida 19)
Jobb (sida 20)
Kortkommandon (sida 20)
1.1.1 Åtgärder
I åtgärdsverktygsfältet finns praktiska genvägar till vanliga åtgärder. Om du högerklickar på knapparna, kan du utföra
varianter på standardåtgärden. Observera att de åtgärdsverktygsfält kommer se lite olika ut beroende på om du har en
e-bokläsare ansluten till datorn.
3
calibre Användarhandbok, Utgåva 2.22.0
•
•
•
•
•
•
•
•
•
•
•
Lägg till böcker (sida 4)
Redigera metadata (sida 5)
Konvertera böcker (sida 5)
Visa (sida 6)
Skicka till enhet (sida 6)
Hämta nyheter (sida 6)
Bibliotek (sida 7)
Enhet (sida 7)
Spara till disk (sida 8)
Anslut/dela ut (sida 8)
Ta bort böcker (sida 9)
Lägg till böcker
Lägg till böcker åtgärd har sju variationer, som nås genom att göra ett högerklick på knappen.
1. Lägg böcker från en enda katalog: Öppnar en filvalsdialog och låter dig ange vilka böcker i en katalog bör
tilläggas. Denna åtgärd är kontextkänslig , det vill säga det beror på vilken katalog (sida 10) som du har valt. Om
du har valt biblioteket , kommer böcker att läggas till i biblioteket. Om du har valt e-boksläsarenheten kommer
böckerna laddas upp till enheten och så vidare.
2. Lägg böcker från kataloger, inklusive underkataloger (En bok per katalog, antar varje e-bokfil är samma
bok i ett annat format): Låter dig välja en katalog. Katalogen och alla dess underkataloger skannas rekursivt,
och alla e-böcker som hittas läggs till i biblioteket. calibre förutsätter att varje katalog innehåller en enda bok.
Alla e-bokfiler i en katalog antas vara samma bok i olika format. Denna åtgärd är inversen av Spara till disk
(sida 8) handling, dvs du kan Spara till disk, ta bort böckerna och lägga tillbaka dem utan någon förlorad
information utom för dagen (detta förutsätter att du inte har ändrat någon av inställningarna för Spara till disk
åtgärd).
3. Lägg böcker från kataloger, inklusive underkataloger (Flera böcker per katalog, antar varje e-bokfil är en
annan bok) : Låter dig välja en katalog. Katalogen och alla dess underkataloger skannas rekursivt och eventuella
e-böcker som hittas läggs till i biblioteket. calibre förutsätter att varje katalog innehåller många böcker. Alla ebokfiler med samma namn i en katalog antas vara samma bok i olika format. E-böcker med olika namn läggs
till som olika böcker.
4. Lägg till flera böcker från arkivet (ZIP/RAR): Gör att du kan lägga till flera e-böcker som finns lagrade inuti
det markerade ZIP eller RAR-filer. Det är en praktisk genväg som innebär att man slipper att först packa upp
arkivet och sedan lägga till böckerna via ett av de två ovanstående alternativen.
5. Lägg tom bok. (Värdeandels utan format): Används för att skapa en tom bok rekord. Detta kan användas för
att sedan manuellt fylla i information om en bok som du kanske inte har ännu i din samling.
6. Lägg från ISBN: Låter dig lägga till en eller flera böcker genom att skriva in deras ISBN.
7. Lägg till filer till utvalda boken poster: Gör att du kan lägga till eller uppdatera filer som hör till en befintlig
bok i biblioteket.
Med Lägg till böcker åtgärden kan läsa metadata från en bred variation av e-boksformat. Dessutom försöker den gissa
metadata från filnamnet. Se Gissa metadata från filnamn (sida 14) sektion, för att lära sig att konfigurera denna.
För att lägga till ett extra format för en befintlig bok du kan göra något av tre saker:
4
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1. Dra och släpp filen på bokens informationspanelen på höger sida i huvudfönstret
2. Högerklicka på knappen Lägg till böcker och välj Lägg till filer till valda bokens poster.
3. Klicka på den röda “lägg till böcker”-knappen i övre högra delen av Edit Metadata dialog, nås av Redigera
metadata (sida 5) åtgärd.
Redigera metadata
Redigera metadata åtgärder har fyra variationer, som kan nås genom att göra ett högerklick på
knappen.
1. Redigera metadata individuellt: Gör att du kan redigera metadata för böcker en efter en med möjlighet att
hämta metadata, inklusive omslag, från Internet. Det gör också att du kan lägga till eller ta bort vissa e-bokformat
från en bok.
2. Redigera metadata i grupp: Gör det möjligt att redigera vanliga metadatafält för ett stort antal böcker samtidigt.
Den fungerar på alla böcker som du har valt i Biblioteksvy (sida 10).
3. Hämta metadata och omslag: Laddar ner metadata och omslag (om möjligt) för de böcker som är markerade i
boklistan.
4. Sammanfoga bokuppgifter: Ger dig möjlighet att slå samman metadata och format av två eller flera bokposter.
Du kan välja att antingen ta bort eller behålla de register som inte klickade först.
För mer detaljer se Redigera e-boks metadata (sida 96).
Konvertera böcker
E-böcker kan omvandlas från ett antal format till det format din eboksläsare föredrar. Många eböcker som finns att köpa kommer att skyddas av Digital Rights Management1 (DRM) teknik. calibre kommer inte
konvertera dessa e-böcker. Det är lätt att ta bort DRM från många format, men eftersom det kan vara olagligt, du måste
hitta verktyg för att frigöra dina böcker själv och sedan använda calibre för att konvertera dem.
För de flesta människor, bör konverteringen vara en enkel en-klicks-uppgift. Om du vill lära dig mer om konverteringsprocessen, se E-bokkonvertering (sida 51).
Kovertera böcker åtgärden har tre varianter, som nås genom att göra ett högerklick på knappen.
1. Konvertera individuellt: Här kan du ange konverteringsalternativ för att anpassa konverteringen av varje vald
e-bok.
2. Masskonvertering: Här kan du ange alternativ endast en gång för att omvandla ett antal e-böcker i grupp.
3. Skapa en katalog av böckerna i ditt calibre-bibliotek: Gör att du kan skapa en fullständig lista över de böcker
i biblioteket, inklusive all metadata, i flera format som XML, CSV, BiBTeX, EPUB och MOBI. Katalogen
kommer att innehålla alla böcker nu visas i biblioteksvyn. Detta gör att du kan använda sökfunktioner för att
begränsa de böcker som ska katalogiserade. Dessutom, om du väljer flera böcker med musen, kommer bara dessa
böcker att läggas till katalogen. Om du skapar katalogen i ett e-bokformat som EPUB, MOBI eller AZW3, nästa
1 http://drmfree.calibre-ebook.com/about#drm
1.1. Grafiska användargränssnittet
5
calibre Användarhandbok, Utgåva 2.22.0
gång du ansluter e-boksläsare kommer katalogen skickas automatiskt till enheten. För mer information om hur
kataloger fungerar, läs Skapa AZW3 • EPUB • MOBI kataloger (sida 224).
Visa
Visa åtgärden visar boken i ett e-bokläsarprogram. calibre har en inbyggd läsare för många e-bokformat.
För andra format använder den operativsystemets standardapplikation. Du kan konfigurera vilka format ska öppnas
med den interna läsaren via Inställningar->Beteende. Om en bok har fler än ett format, kan du visa ett visst format
genom att göra ett högerklick på knappen.
Skicka till enhet
Skicka till enhet åtgärden har åtta variationer, som nås genom att göra ett högerklick på knappen.
1. Skicka till huvudminne: De utvalda böckerna överförs till huvudminnet av e-bokläsaren.
2. Skicka till minneskortet (A): De utvalda böckerna överförs till minneskortet (A) på e-bokläsaren.
3. Skicka till minneskortet (B): De utvalda böckerna överförs till minneskortet (B) på e-bokläsaren.
4. Skicka specifikt format till: De utvalda böckerna överförs till vald plats på enheten, i det format som du anger.
5. Mata ut enhet: Kopplar bort enheten från calibre.
6. Sätt som standard att skicka till enhet: Här kan du ange vilket av alternativen, 1 till 5 ovan eller 7 nedan,
kommer att vara standardåtgärd när du klickar på huvudknappen.
7. Skicka och radera från biblioteket: De utvalda böckerna överförs till vald plats på enheten och sedan raderas
från biblioteket.
8. Hämta anteckningar (experimentellt): Överför anteckningar du kan ha gjort på en e-bok på din enhet till
kommentarsmetadata av boken i calibre-biblioteket.
Du kan kontrollera filnamnet och mappstruktur med filer som skickas till enheten genom att sätta upp en mall i
Inställningar->Import/Export->Skickar böcker till enheter. Se också calibre språkmall (sida 155).
Hämta nyheter
Hämta nyheter åtgärden hämtar nyheter från olika webbplatser och omvandlar de till en e-bok som kan
läsas på din e-bokläsare. Normalt är att den nyskapade e-boken läggs till ditt e-bokbibliotek, men om en e-bokläsare
är ansluten vid den tidpunkt då nedladdningen är klar, laddas nyheten också upp till läsaren automatiskt.
Hämta nyheter åtgärden använder enkla recept (10-15 rader kod) för varje nyhetsplats. Om du vill veta hur du skapar
recept för dina egna nyhetskällor, se Lägga till din favorit nyhetswebbplats (sida 121).
Hämta nyheter åtgärden har tre varianter, som nås genom att göra ett högerklick på knappen.
6
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1. Schemalägg nyhetshämtning: Låter dig schemalägga nedladdningen av dina utvalda nyhetskällor från en lista
med hundratals tillgängliga. Schemaläggning kan ställas in individuellt för varje nyhetskälla du väljer och schemaläggning är flexibel så att du kan välja specifika veckodagar eller en frekvens av dagar mellan hämtningar.
2. Lägg till en anpassad nyhetskälla: Gör att du kan skapa ett enkelt recept för nedladdning av nyheter från en
egen nyhetsplats som du vill komma åt. Skapa recept kan vara så enkelt som att ange en RSS-flödes-URL, eller
så kan du vara mer normativ genom att skapa Python-baserad kod för uppgiften. För mer information se Lägga
till din favorit nyhetswebbplats (sida 121).
3. Ladda ner alla schemalagda nyhetskällor: Får calibre att omedelbart börja ladda ner alla nyhetskällor som du
har schemalagt.
Bibliotek
BIbliotek åtgärden låter dig skapa, växla mellan, byta namn på eller ta bort ett bibliotek. calibre ger dig
möjlighet att skapa så många bibliotek som du vill. Du kan till exempel skapa ett skönlitterärtbibliotek, ett faktabibliotek, ett bibliotek för främmande språk, ett projektbibliotek, eller någon struktur som passar dina behov. Biblioteken
är den högsta organisationsstrukturen inom calibre. Varje bibliotek har sin egen uppsättning av böcker, etiketter, kategorier och lagringsplatsbas.
1. Byt/skapa bibliotek...: Låter dig; a) ansluta till ett befintligt calibre-bibliotek på en annan plats, b) skapa ett
tomt biblioteket på en ny plats eller, c) flytta nuvarande biblioteket till en nyligen angiven plats.
2. Snabb växling: Låter dig växla mellan bibliotek som har registrerats eller skapats inom calibre.
3. Byt namn på bibliotek: Låter dig byta namn på ett bibliotek.
4. Ta bort bibliotek: Låter dig avregistrera ett bibliotek från calibre.
5. <biblioteksnamn>: Åtgärder 5, 6 osv ... ger dig omedelbar övergång tillgång mellan flera bibliotek som du
har skapat eller bifogas. Denna lista innehåller endast de fem mest använda bibliotek. För den kompletta listan,
använd “Snabb växling”-menyn.
6. Biblioteksunderhåll: Låter dig kontrollera det aktuella biblioteket för datakonsistens och återställa den nuvarande bibliotekets databas från säkerhetskopior.
Observera: Metadata för dina e-böcker, t.ex. titel, författare, och etiketter, lagras i en enda fil i din calibrebiblioteksmapp som heter metadata.db. Om filen blir korrupt (mycket ovanligt), kan du förlora metadata. Lyckligtvis säkerhetskopierar calibre automatiskt metadata för varje enskild bok i bokens mapp som en OPF-fil. Genom att
använda “Återställ databas”-åtgärden enligt Biblioteksunderhåll som beskrivs ovan, kan du låta calibre återskapa metadata.db filen från de enskilda OPF-filer åt dig.
Du kan kopiera eller flytta böcker mellan olika bibliotek (när du har mer än ett bibliotek uppsatt) genom att högerklicka
på boken och välja åtgärd Kopiera till bibliotek.
Enhet
Enhet åtgärden låter dig visa böckerna i huvudminnet eller minneskort för enheten, eller att mata ut enheten
1.1. Grafiska användargränssnittet
7
calibre Användarhandbok, Utgåva 2.22.0
(ta bort den från calibre). Denna ikon visas automatiskt upp på calibres huvudverktygsfält när du ansluter en enhet
som stöds. Du kan klicka på den för att se böckerna på enheten. Du kan också dra och släppa böcker från ditt calibrebiblioteket till ikonen för att överföra dem till enheten. Omvänt kan du dra och släppa böcker från din enhet till
symbolbiblioteket i verktygsfältet för att överföra böcker från din enhet till calibre-biblioteket
Spara till disk
Spara till disk åtgärden har fem varianter, som nås genom att göra ett högerklick på knappen.
1. Spara till disk: Sparar de markerade böckerna organiserade i kataloger till disk. Katalogstrukturen
ser ut som:
Author_(sort)
Title
Book Files
Du kan kontrollera filnamnet och mappstruktur med filer som sparas till disk genom att sätta upp en mall
i Inställningar->Import/Export->Spara böcker till disk. Se också calibre språkmall (sida 155).
2. Spara till disk i en enda katalog: Sparar de markerade böckerna till disk i en enda katalog.
För 1. och 2., alla tillgängliga format, samt metadata lagras på disk för varje vald bok. Metadata lagras i en
OPF-fil. Sparade böcker kan återimporteras till biblioteket utan förlust av information genom att använda
Lägg till böcker (sida 4) åtgärd.
3. Spara bara *<ditt önskade>*-format på disk: Sparar de markerade böckerna till disk i katalogstrukturen som visas i (1) men bara i önskat e-bokformat. Du kan ställa din favorit format i
Inställningar->Beteende->Önskat utformat
4. Spara bara *<ditt önskade>* format till disk i en enda katalog: Sparar de markerade böckerna
till din hårddisk i en enda katalog men bara på ditt önskade e-bokformat. Du kan ställa din favorit
format i Inställningar->Beteende->Önskat utformat
5. Spara ett enstaka format till disk ...: Sparar de markerade böckerna till disk i katalogstrukturen
som visas i (1) men bara i det format du väljer från rullgardinlistan.
Anslut/dela ut
Anslut/dela ut åtgärden låter dig ansluta manuellt till en enhet eller mapp på datorn. Det gör också att
du kan ställa in ditt calibre-bibliotek för åtkomst via en webbläsare eller e-post.
Anslut/dela ut åtgärden har fyra variationer, som nås genom att göra ett högerklick på knappen.
1. Anslut till mapp: Låter dig ansluta till valfri mapp på din dator som om den vore en enhet och
använda alla faciliteter calibre har för enheter med den mappen. Användbart om enheten inte kan
stödjas av calibre, men finns som en USB-disk.
2. Anslut till iTunes: Låter dig ansluta till iTunes-böckers databas som om det vore en enhet. När
böckerna skickas till iTunes kan du använda iTunes för att göra dem tillgängliga för dina olika
iDevices.
8
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
3. Starta mediaserver: Startar calibres inbyggda webbserver. Vid start kommer ditt calibre-biblioteket
vara tillgänglig via en webbläsare från Internet (om du väljer). Du kan konfigurera hur webbservern
nås genom att ställa in preferenser på Inställningar->Dela->Dela på nätet
4. Ställ in epostbaserad delning av böcker: Tillåter delning av böcker och nyhetsflöden via e-post.
När du konfigurerat e-postadresser för detta alternativ kommer calibre skicka nyhetsuppdateringar
och boka uppdateringar till de angivna e-postadresser. Du kan konfigurera hur calibre skickar e-post
genom att ange inställningar på Inställningar->Dela->Dela Böcker via e-Post. När du har ställt in
en eller flera e-postadresser, kommer menyalternativet ersättas av menyposter för att skicka böcker
till de konfigurerade e-postadresser.
Ta bort böcker
Med Ta bort böcker åtgärden raderas böcker permanent, så använd den med omsorg. Det är
kontextkänslig, det vill säga att det beror på vilken katalog (sida 10) du har valt. Om du har valt Bibliotek, kommer
böcker att tas bort från biblioteket. Om du har valt eboksläsarenheten kommer böcker att tas bort från enheten. För att
ta bort endast ett visst format för en given bok använd Redigera metadata (sida 5) åtgärd. Ta bort böcker har också
fem variationer som kan nås genom att göra en högerklicka på knappen.
1. Ta bort valda böcker: Tillåter dig att permanent ta bort alla böcker som är valda i boklistan.
2. Ta bort filer av specifikt format från valda böcker...: Tillåter dig att permanent ta bort e-böcker med ett
specifikt format från böcker som är valda i boklistan.
3. Ta bort alla format från valda böcker, utom...: Tillåter dig att permanent ta bort filer av godtyckligt format
förutom ett angivet specifikt format från böcker som är valda i boklistan.
4. Ta bort alla format från valda böcker: Tillåter dig att permanent ta bort filer från böcker som är valda i
boklistan. Bara metadata kommer återstå.
5. Ta bort omslag från valda böcker: Tillåter dig att permanent ta bort omslagsbildfiler från böcker som är valda
i boklistan.
6. Ta bort passande böcker från enheten: Tillåter dig att permanent ta bort e-bokfiler från anslutna enheter som
passar böcker som är valda i boklistan.
Observera: Observera att när du använder Ta bort böcker för att ta bort böcker från ditt calibre-biblioteket, tas
bokposten bort permanent, men på Windows och OS X placeras filerna i papperskorgen. Detta gör att du kan återställa
dem om du ångrar dig.
1.1.2 Inställningar
Inställningar åtgärden tillåter dig ändra hur olika aspekter av calibres arbete. Den har fyra variationer,
som nås genom att göra ett högerklick på knappen.
1. Inställningar: Tillåter dig ändra hur olika aspekter av calibres arbete. Genom att klicka på knappen utförs också
denna åtgärd.
2. Kör välkomstguide: Tillåter dig att starta välkomstguiden som dyker upp första gången du startar calibre.
1.1. Grafiska användargränssnittet
9
calibre Användarhandbok, Utgåva 2.22.0
3. Hämta tillägg för att förbättra calibre: Öppnar ett nytt fönster som visar tillägg för calibre. Dessa tillägg är
utvecklade av tredje part för att utöka calibres funktionalitet.
4. Starta om i felsökningsläge: Tillåter dig att aktivera felsökningsläge som kan hjälpa calibres utvecklarna att
lösa problem som du stöter på med programmet. För de flesta användare bör det förbli inaktiverad om inte
instrueras av en utvecklare att aktivera det.
1.1.3 Kataloger
En Katalog är en samling av böcker. calibre kan hantera två typer av olika kataloger:
1. Bibliotek: Detta är en samling böcker som lagras i ditt calibre-biblioteket på din dator.
2. Enhet: Detta är en samling böcker som lagras i din eboksläsare. Det kommer att vara tillgängliga när du ansluter
läsaren till datorn.
Många operationer, som att lägga böcker, ta bort, visa, etc., är beroende av kontext. Så, till exempel, om du klickar
på knappen Visa när du har Enhet-katalog vald, kommer calibre att öppna filerna på enheten för att visa. Om du har
Bibliotek-katalog vald, kommer filer i ditt calibre-bibliotek öppnas i stället.
1.1.4 Sök & sortera
Sök & sortera avsnittet tillåter dig utföra flera kraftfulla åtgärder på dina boksamlingar.
• Du kan sortera dem efter titel, författare, datum, betyg, etc. genom att klicka på kolumnrubrikerna. Du kan
också göra undersortering, dvs sortera på flera kolumner. Till exempel, om du klickar på titelkolumnen och
sedan författarkolumnen, kommer boken att sorteras efter författare och sedan alla poster för samma författare
sorteras efter titel.
• Du kan söka efter en viss bok eller en uppsättning böcker med hjälp av sökfältet. Mer om detta nedan.
10
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• Du kan snabbt och bekvämt redigera metadata genom att dubbelklicka på posten som du vill ändra i listan.
• Du kan utföra Åtgärder (sida 3) på uppsättningar av böcker. För att välja flera böcker kan du antingen:
– Håll Ctrl tangenten nedtryckt och klicka på de böcker du vill markera.
– Håll Shift tangenten nedtryckt och klicka på start- och slutbok av en rad böcker som du vill markera.
• Du kan konfigurera vilka fält som ska visas med hjälp av Inställningar (sida 9) dialogen.
1.1.5 Sökgränssnittet
Du kan söka allt metadata genom att skriva in sökord i sökfältet. Sökningar är skiftlägesokänsliga. Exempelvis:
Asimov Foundation format:lrf
Detta kommer att passas mot alla böcker i biblioteket som har Asimov och Foundation i sitt metadata och finns i
LRF-format. Några fler exempel:
author:Asimov and not series:Foundation
title:"The Ring" or "This book is about a ring"
format:epub publisher:feedbooks.com
Sökningar är som standard “innehåller”. Ett objekt passar om söksträngen visas någonstans i den angivna metadata.
Två andra typer av sökningar finns: likhetssökning och sök hjälp av reguljära uttryck2 .
Likhetssökningar indikeras genom att inleda söksträngen med ett likhetstecken (=). Till exempel frågan
tag: - vetenskap"‘‘ kommer att passa "vetenskap", men inte science
fiction"eller "hård vetenskap". Sök med reguljärt uttryck indikeras genom att
inleda söksträngen med tilde (~). Varje ‘python-kompatibla reguljära uttryck
<https://docs.python.org/2/library/re.html>‘_ kan användas. Observera att
omvända snedstreck som används för att undkomma specialtecken i reguljära
uttryck måste fördubblas, eftersom enskilda snedstreck kommer att tas bort
under frågeanalys. Till exempel, för att matcha en bokstavlig parentes måste
du ange ‘‘\\(. Reguljära uttryckssökningar är “innehåller” sökningar om inte uttrycket innehåller ankare.
Om du behöver söka efter en sträng med inledande likhet- eller tilde-tecken, prefixa strängen med ett omvänt snedstreck.
Bifoga söksträngar med citationstecken (”) om strängen innehåller parentes eller utrymmen till exempel vill söka efter
etiketten Science Fiction du skulle behöva söka efter etikett:-science fiction" Om du sök efter
etikett:=science fiction hittar du alla böcker med etiketten “science” och som innehåller ordet “fiction”
av vilket metadata.
Du kan bygga avancerade sökfrågor enkelt med hjälp av Avancerad sökdialog som nås genom att klicka på knappen
.
Tillgängliga fält för att söka är: etikett, titel, författare, förlag, serier, series_index,
betyg, omslag, kommentarer, format identifierare, datum, pubDate, sök, storlek
och anpassade kolumner. Om en enhet är ansluten, blir ondevice fält tillgängliga, när du söker calibre biblioteksvyn. För att hitta sökningen namnet (egentligen kallad lookup name) för en anpassad kolumn håller du musen över
kolumnrubriken i biblioteksvyn.
Syntaxen för att söka efter datum är:
2 http://en.wikipedia.org/wiki/Regular_expression
1.1. Grafiska användargränssnittet
11
calibre Användarhandbok, Utgåva 2.22.0
pubdate:>2000-1 Will find all books published after Jan, 2000
date:<=2000-1-3 Will find all books added to calibre before 3 Jan, 2000
pubdate:=2009 Will find all books published in 2009
Om datumet är tvetydig, är den aktuella används platsinformation för datumjämförelse. Till exempel i en mm/dd/åååå
platsinformation 2009/02/01 tolkas det som 1 Feb 2009. I en åååå/mm/dd platsinformation tolkas det som 2 januari
2009. Vissa speciella datumsträngar är tillgängliga. Strängen today översätter till dagens datum, vad det än är. Strängarna yesterday och thismonth (eller översatta motsvarande i det aktuella språket) fungerar också. Dessutom kan
strängen daysago (även översatt) användas för att jämföra med ett datum ett visst antal dagar sedan. Exempelvis:
date:>10daysago
date:<=45daysago
För att undvika eventuella problem med översatta strängar när du använder en icke-engelsk version av calibre, är
strängarna _today, _yesterday, _thismonth och _daysago alltid tillgängliga. De översätts inte.
Du kan söka efter böcker som har ett format av en viss storlek så här:
size:>1.1M Will find books with a format larger than 1.1MB
size:<=1K Will find books with a format smaller than 1KB
Datum och numeriska fält stöder relationsoperatorer = (lika med), > (större än), >= (större än eller lika med), < (mindre
än), <= (mindre än eller lika med), and != (inte lika med). Betygsfälten anses vara numeriska. Exempelvis sökandet
rating:>=3 hittar alla böcker med betyg 3 eller högre.
Du kan söka efter det antal poster i flervärda områden som etiketter. Dessa sökningar börjar med tecknet #, sedan
använda samma syntax som för numeriska fält. Till exempel, för att hitta alla böcker med mer än 4 etiketter använder
‘‘ tags:#>4‘‘. För att hitta alla böcker med exakt 10 etiketter använder ‘‘ tags:#=10‘‘.
Indexserien är sökbara. För standardserien, är söknamnet “series_index”. För anpassade seriekolumner, använd kolumnsökningsnamn följt av _index. Om du exempelvis vill söka indexen för en anpassad seriekolumn som heter
#my_series, skulle du använda sökfunktionsnamnet #my_series_index. Indexserien är tal, så att du kan använda relationsoperatorer som beskrivs ovan.
Det speciella fältet search används för sparade sökningar. Så om du sparar en sökning med namnet “Min makes
böcker” kan du skriva search:Min makes böcker" i sökfältet för att återanvända den sparade sökningen. Mer
om att spara sökningar nedan.
Du kan söka efter frånvaron eller närvaron av ett fält med hjälp av de speciella “sanna” och “falska” värden. Exempelvis:
cover:false will give you all books without a cover
series:true will give you all books that belong to a series
comments:false will give you all books with an empty comment
format:false will give you all books with no actual files (empty records)
Ja/nej anpassade kolumner är sökbara. Söka efter ‘‘ false‘‘, ‘‘ empty‘‘, eller ‘‘ blank‘‘ hittar alla böcker med odefinierade värden i kolumnen. Söka efter true hittar alla böcker som inte har odefinierade värden i kolumnen. Söka efter
yes eller checked hittar alla böcker med Yes i kolumnen. Söka efter no eller unchecked hittar alla böcker med
No i kolumnen. Observera att orden yes, no, blank, empty, checked och unchecked sätts; Du kan antingen
använda det aktuella språket motsvariga ord eller det engelska ordet. Orden true och false och de särskilda värden
_yes, _no och _empty översätts inte.
Hierarkiska objekt (t.ex. A.B.C) använder en utökad syntax för att passa de första delarna av hierarkin. Detta görs
genom att lägga till en punkt mellan den exakta indikatorn passningen (=) och texten. Till exempel frågan tags:=A
hittar etiketterna A och‘ AB‘, men hittar inte etiketterna AA eller‘ AA.B‘. Sökning tags:=.A.B hittar etiketterna
A.B och‘ A.B.C‘, men inte den etiketten A.
Identifierare (t.ex. isbn, doi, LCCN etc) också använda en utökad syntax. Först, notera att en identifierare har formen
typ:value, som i ISBN:123456789. Den utökade syntaxen tillåter dig att specificera självständigt vilken typ
12
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
och värde för att söka efter. Både typ och värde delarna av frågan kan använda lika med,‘ innehåller‘ eller reguljära
uttryck sökningar. Exempel:
• identifierare:true hittar böcker med någon identifierare.
• identifierare:false hittar böcker utan identifierare.
• identifierare:123 kommer att söka efter böcker av någon typ som har ett värde som innehåller 123.
• identifierare:=123456789 kommer att söka efter böcker av någon typ som har ett värde som är lika
med 123456789.
• identifierare:=isbn: och identifierare: isbn: true hittar böcker med en typ lika med isbn
har något värde
• identifierare:=isbn:false hittar böcker med någon typ lika med isbn.
• identifierare:=isbn:123 hittar böcker med en typ som motsvarar isbn med ett värde som innehåller
123.
• identifierare:=isbn:=123456789 hittar böcker med en typ som motsvarar isbn med ett värde som är
lika med 123456789.
• identifierare:i:1 hittar böcker med en typ som innehåller ett i har ett värde som innehåller en‘1‘.
Figur 1.1: Advancerad sökdialog
1.1.6 Sparade sökningar
calibre tillåter dig spara en ofta använd sökning under ett särskilt namn och sedan återanvända den sökningen med
ett enda klick. Det gör du genom att skapa din sökning, antingen genom att skriva in det i sökfältet eller använda
etikettbläddraren. Skriv sedan det namn du vill ge till sökningen i rutan Sparade sökningar bredvid sökfältet. Klicka
på plusikonen bredvid rutan sparade sökningar för att spara sökningen.
Nu kan du komma åt din sparade sökning i etikettbläddraren under “sökningar”. Ett enda klick gör att du kan återanvända en godtyckligt komplex sökning enkelt, utan att behöva återskapa den.
1.1. Grafiska användargränssnittet
13
calibre Användarhandbok, Utgåva 2.22.0
1.1.7 Virtuella bibliotek
Ett Virtuellt bibliotek är ett sätt att låtsas att ditt calibre-biblioteket bara har ett fåtal böcker i stället för dess fullständiga
samling. Detta är ett utmärkt sätt att partitionera din stora samling av böcker i mindre, hanterbara bitar. Om du vill
veta hur du skapar och använder virtuella bibliotek, se handledningen: Virtuella bibliotek (sida 228).
1.1.8 Gissa metadata från filnamn
Normalt läser calibre metadata från bokfilen. Emellertid kan den konfigureras för att läsa metadata från filnamnet i
stället, via Inställningar->Lägga till böcker->Läs metadata från filens innehåll i stället för filnamn.
Du kan också styra hur metadata läses från filnamnet med reguljära uttryck (se Allt om att använda reguljära uttryck i
calibre (sida 199)). I Lägg till böcker avsnittet av inställningsdialogrutan kan du ange ett reguljärt uttryck som calibre
kommer att använda för att försöka gissa metadata från namnen på e-bokfiler som du lägger till i biblioteket. Standard
för reguljära uttrycket är:
title - author
et vill säga, det förutsätts att alla tecken fram till den första - är titeln på boken och efterföljande tecken är författare
till boken. Till exempel, filnamnet:
Foundation and Earth - Isaac Asimov.txt
kommer att tolkas ha titeln: Foundation and Earth och författare: Isaac Asimov
Tips: Om filnamnet inte innehåller bindestrecket, kommer ovanstående reguljära uttryck misslyckas.
14
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.1.9 Bokinformation
Bokdetaljer visar omslag och allt metadata för den valda boken. Det kan döljas via knappen i det nedre högra hörnet
av huvudfönstret i calibre. De författarnamn som visas i panelen bokdetaljer är klickbara, de kommer som standard att
ta dig till Wikipedia-sidan för författaren. Detta kan anpassas genom att högerklicka på författarens namn och välja
Hantera denna författare.
Likaså om du hämtar metadata för boken, visar panelen bokdetaljer automatiskt dig länkar som pekar på webbsidor
för boken på Amazon, WorldCat, etc. från där metadata hämtades.
Du kan högerklicka på enskilda e-bokformat i bokdetaljpanelen för att ta bort dem, jämföra dem med sina originalversioner, spara dem till disk, öppna dem med ett externt program, osv.
Du kan ändra omslaget till boken genom att helt enkelt dra och släppa en bild på bokdetaljpanelen. Du vill redigera
omslagsbild i ett extern program, högerklicka på den och välj Öppna med.
Du kan också lägga e-bokfiler till den aktuella boken genom att dra och släppa filerna på bokdetaljpanelen.
1.1. Grafiska användargränssnittet
15
calibre Användarhandbok, Utgåva 2.22.0
Dubbelklicka på information om boken så öppnas panelen upp i ett separat fönster.
Slutligen kan du skräddarsy exakt vilken information som visas i bokdetaljspanelen via Inställningar->Utseende &
Beteende>Bokinformation.
1.1.10 Etikettbläddrare
Etikettbläddaren tillåter dig enkelt bläddra i din samling Författare/Etiketter/Serier/etc. Om du klickar på ett objekt i
Etikettbläddaren, till exempel författarens namn Isaac Asimov, då begränsas listan över böcker till höger till att visa
böcker av denna författare. Du kan klicka på kategorinamn också. Till exempel, klicka på “Serier” kommer att visa
dig alla böcker i någon serie.
Det första klicket på ett objekt kommer att begränsa listan över böcker till de som innehåller eller passar objektet.
Fortsätt exemplet ovan, att klicka på Isaac Asimov kommer visa böcker av denna författare. Klicka igen på objektet
kommer att ändra vad som visas, beroende på om objektet har barn (se underkategorier och hierarkiska artiklar nedan).
Fortsätt Isaac Asimov exemplet klicka igen på Isaac Asimov kommer begränsa listan över böcker till dem som inte är
av Isaac Asimov. Ett tredje klick tar bort begränsningen, visar alla böcker. Om du håller ned Ctrl eller Skift och klickar
på flera objekt, så skapas restriktioner baserade på flera objekt. Till exempel kan du hålla Ctrl och klicka på etiketterna
Historia och Europa för att hitta böcker om Europas historia. Etikettbläddraren fungerar genom att bygga sökuttryck
som automatiskt förs in i sökfältet. Om man tittar på vad Etikettbläddraren genererar är ett bra sätt att lära sig hur man
konstruerar grundläggande sökuttryck.
Poster i etikettbläddraren har sina ikoner delvis färgad. Mängden färg beror på den genomsnittliga betyget av böckerna
i den kategorin. Så till exempel om böcker av Isaac Asimov har i genomsnitt fyra stjärnor, visas ikonen för Isaac
Asimov i etikettbläddraren vara 4/5: e färgad. Du kan hålla musen över ikonen för att se det genomsnittliga betyget.
Objekten i yttre nivå av etikettbläddraren, till exempel författare och serien, kallas kategorier. Du kan skapa egna
16
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
kategorier, så kallade användarkategorier, som är användbara för att organisera objekt. Till exempel kan du använda
användarkategoriredigering (klicka Etikettbläddrarmeny-> Hantera författare, serier, etc-> Hantera användarkategorier) för att skapa en användarkategori som kallas favoritförfattare, sedan lägg objekten på dina favoriter i kategorin.
Användarkategorier kan ha underkategorier. Till exempel är de användarkategori Favorites.Authors en underkategori
av favoriter. Du kanske också har Favorites.Series, i vilket fall kommer det att finnas två underkategorier under favoriter. Underkategorier kan skapas genom att högerklicka på en användarkategori och att välja “Lägg till underkategori
till ...”, och går in i underkategorin namn; eller genom att använda användarkategoriredigering genom att ange namn
som favoriter i exemplet ovan.
Du kan söka användarkategorier på samma sätt som inbyggda kategorier, genom att klicka på dem. Det finns fyra olika sökning
1. “allt som passar en post i kategorin” anges med ett enda gröna plustecknet.
2. “allt som passar en post i den kategori eller dess underkategorier” anges med två gröna plustecknet.
3. “allt som inte passar en post i kategorin” visas med ett enda röd minustecken.
4. “allt som inte passar en post i den kategori eller dess underkategorier” visas av två röda minustecken.
Det är också möjligt att skapa hierarkier inom några av kategorierna text såsom etiketter, serier och anpassade kolumner. Dessa hierarkier visar den lilla triangeln, medger delposter att vara dolda. För att använda hierarkier av objekt i en
kategori, måste du först gå till Inställningar->Utseende och beteende och ange kategorinamn (s) in i “Kategorier med
hierarkisk objekt” rutan. När detta är gjort, kommer poster i den kategorin som innehåller punkter visas med hjälp av
den lilla triangeln. Till exempel, anta att du skapar en egen kolumn som heter “Genre” och pekar på att den innehåller hierarkiska objekt. När detta är gjort, sådant som Mystery.Thriller och Mystery.English visas som Mystery med
den lilla triangeln bredvid den. Genom att klicka på triangeln visas Thriller och engelska som delposter. Se Hantera
undergrupper av böcker, till exempel “genre” (sida 148) för mer information.
Hierarkiska objekt (objekt med barn) använder samma fyra “klicka-på” sökningar som användarkategorier. Poster som
inte har barn använder två av de sökningar: “allt som passar” och “allt som inte passar”.
Du kan dra och släppa objekt i etikettbläddraren på användarkategorier för att lägga till dem i den kategorin. Om källan
är en användarkategori, hålla Skift-tangenten medan du drar flyttar objektet till den nya kategorin. Du kan också dra
och släppa böcker från boklistan på objekt i etikettbläddraren; släppa en bok om ett objekt medför att objekt som ska
tillämpas automatiskt på de släppta böckerna. Till exempel kommer dra en bok på Isaac Asimov sätter författaren till
denna bok till Isaac Asimov. Att släppa den på etiketten Historik kommer att lägga till etiketten Historik till bokens
etiketter.
Det finns ett sökfält överst på etikettbläddraren som tillåter dig att enkelt hitta ett objekt i etikettbläddraren. Dessutom
kan du högerklicka på ett objekt och välja ett av flera operationer. Några exempel är att dölja det, byta namn på det,
eller öppna en “Hantera x” dialogruta som låter dig hantera objekt av detta slag. Till exempel dialogruta “Hantera
Författare” kan du ändra namn på författare och kontrollera hur deras namn sorteras.
Du kan styra hur objekt sorteras i etikettbläddraren via Alter Tag Browser knappen längst ner på Tag Browser. Du
kan välja att sortera efter namn, genomsnittliga betyget eller popularitet (popularitet är antalet böcker med ett objekt i
biblioteket, till exempel, är populariteten av Isaac Asimov antalet böcker i biblioteket av Isaac Asimov).
1.1. Grafiska användargränssnittet
17
calibre Användarhandbok, Utgåva 2.22.0
1.1.11 Omslagsrutnät
Du kan låta calibre visa ett rutnät av bokomslag stället för en lista med böcker, om du föredrar att bläddra i din samling
av omslag istället. Den Omslagsrutnät aktiveras genom att klicka på knappen nätet i det nedre högra hörnet av huvudfönstret calibre. Du kan anpassa omslagsstorlekar och bakgrunden till omslagsrutnät via Inställningar->Utseende &
Beteende>Omslagsrutnät. Du kan även låta calibre visa någon angivna fältet under omslaget, t.ex. titel eller författare
eller betyg eller en egen kolumn som du själva har utformat.
18
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.1.12 Omslagsbläddrare
Förutom omslag som beskrivs ovan, kan du också låta calibre visa omslag på en enda rad. Detta aktiveras via en knapp
i det nedre högra hörnet av huvudfönstret. I Inställningar->Utseende & Beteende->Omslagsbläddrare kan du ändra
antalet omslag visas, och även låta omslagen visas i ett separat fönster.
1.1.13 Snabbvisning
Ibland vill du välja en bok och snabbt få en lista över böcker med samma värde i någon kategori (författare, etiketter,
förläggare, serier, etc) som den markerade boken, men utan att ändra den aktuella vyn av biblioteket. Du kan göra
detta med Snabbvisning. Snabbvisning öppnar ett andra fönster som visar en lista med böcker som passar värdet av
intresse.
Antag till exempel att du vill se en lista med alla böcker med samma författare till den för tillfället valda boken. Klicka
i författarens cell du är intresserad av och tryck på “Q”-tangenten. Ett fönster öppnas med alla författare för det verket
till vänster, och alla böcker av den valda författaren till höger.
Några exempel på snabbvisningsanvändning: snabbt se vad andra böcker:
• har någon etikett som tillämpas på den markerade boken,
• är i samma serie som aktuell bok
• har samma värden i en anpassad kolumn som den aktuella boken
• är skriven av en av samma författare till den aktuella boken
utan att ändra innehållet i biblioteksvyn.
Snabbvisningsfönstret öppnas ovanpå calibre och håller öppet tills du explicit stänger det. Du kan använda snabbvisning och calibres biblioteksvy samtidigt. Till exempel, om du i calibres biblioteksvy klickar på en kategorikolumn
(etiketter, serier, utgivare, författare, etc.) för en bok, kommer fönsterinnehållet snabbvisningen ändras till att visa dig
i den vänstra sidopanelen objekten i den kategori för den valda boken (t.ex. etiketter för det verket). Den första posten i denna lista kommer att väljas ut, och snabbvisning kommer att visa dig på den högra sidopanelen alla böcker
i biblioteket som refererar den posten. Klicka på en annan post i den vänstra rutan för att se böckerna med att olika
objekt.
1.1. Grafiska användargränssnittet
19
calibre Användarhandbok, Utgåva 2.22.0
Dubbelklicka på en bok i snabbvisningsfönstret för att välja den bok i biblioteksvyn. Detta kommer också ändra poster
som visas i snabbvisningsfönstret (det vänstra fönstret) för att visa objekten i den nyligen valda boken.
Skift- (eller Ctrl-) dubbelklicka på en bok i snabbvisningsfönstret för att öppna dialogrutan för att redigera metadata
för boken i calibre-fönstret.
Du kan se om en kolumn kan snabbvisas genom att hålla musen över kolumnrubriken och tittar på verktygstips för
denna rubrik. Du kan också veta genom att högerklicka på kolumnrubriken för att se om “Snabbvisnings” alternativet
visas i menyn, i vilket fall välja att snabbvisningsalternativet motsvarar att trycka “Q” i den aktuella cellen.
Snabbvisning respekterar det virtuella bibliotekets inställning, visar bara böcker i den aktuella virtuella biblioteket.
1.1.14 Jobb
Panelen jobb visar antalet jobb som körs. Jobb är uppgifter som körs i en separat process. De omfattar konvertera
e-böcker och prata med din läsenhet. Du kan klicka på jobbpanelen för att komma åt listan över jobb. När ett jobb har
slutförts kan du se en detaljerad logg från det jobbet genom att dubbelklicka på den i listan. Detta är användbart för att
felsöka jobb som kanske inte har slutförts.
1.1.15 Kortkommandon
calibre har flera kortkommandon för att spara tid och musrörelser. Dessa kortkommandon är aktiva i boklistvyn (när
du inte redigerar detaljerna i en viss bok), och de flesta av dem påverkar den titel du har valt. calibres e-bokläsare har
sina egna kortkommandon som kan skräddarsys, genom att klicka på knappen Inställningar i läsaren.
Observera: Observera: calibres kortkommandon inte kräver en specialtangent (kommando, alternativ, kontroll, etc.),
om inte särskilt anges. Du behöver bara trycka på bokstavsknappen, t.ex. E för att redigera.
Tabell 1.1: Kortkommandon
Kortkommando
F2 (Enter i OS X)
A
Skift+A
C
D
Del
E
G
I
K
M
Alt+M
O
P
S
V
Alt+V/Cmd+V i OS X
Alt+Skift+J
Alt+Skift+B
Utför
Redigera metadata för det valda fältet i boklistan.
Lägg till böcker
Lägg format till de utvalda böckerna
Konvertera valda böcker
Skicka till enhet
Ta bort valda böcker
Redigera metadata av valda böcker
Hämta böcker
Visa bokdetaljer
Redigera Innehållsförteckning
Slå samman valda poster
Slå samman poster, behåll originalen
Öppna mapp
Polera böcker
Spara till disk
Visa
Visa specifikt format
Växla jobblista
Växla omslagsvisning
Fortsätter på n
20
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Kortkommando
Alt+Skift+D
Alt+Skift+T
Alt+Skift+G
Alt+A
Alt+T
Alt+P
Alt+Skift+S
/, Ctrl+F
Skift+Ctrl+F
Esc
Skift+Esc
Ctrl+Esc
Alt+Esc
Ctrl+*
N or F3
Skift+N eller Skift+F3
Ctrl+D
Ctrl+R
Ctrl+Skift+R
Skift+Ctrl+E
Q
Skift+Q
Skift+S
Ctrl+Q
Tabell 1.1 – fortsättning från föregående sida
Utför
Växla bokdetaljspanel
Växla etikett visning
Växla omslagsrutnät
Visa böcker med samma författare som aktuell bok
Visa böcker med samma etiketter som aktuell bok
Visa böcker av samma förlag som aktuell bok
Visa böcker i samma serie som aktuell bok
Fokusera sökfältet
Öppna den avancerade sökdialogen
Rensa sökning
Fokusera boklista
Rensa det virtuella biblioteket
Rensa den ytterligare begränsningen
Skapa ett temporärt virtuellt bibliotek baserat på den aktuella sökningen
Hitta nästa bok som passar den aktuella sökningen (fungerar bara om kryssrutan bredvid sökfältet
Hitta nästa bok som passar den aktuella sökningen (fungerar bara om kryssrutan bredvid sökfältet
Hämta metadata och genvägar
Starta om calibre
Starta om calibre i felsökningsläge
Lägg till tomma böcker till calibre
Öppna snabbsökningsfönstret för visa böcker med relaterade serier/etiketter/etc.
Fokusera den öppnade snabbsökningspanelen
Utför en sökning i snabbsökningspanelen
Avsluta Calibre
1.2 Lägga till din favorit nyhetswebbplats
calibre har en kraftfull, flexibel och lätt att använda ramverk för att hämta nyheter från Internet och omvandla dem till
en e-bok. Följande kommer att visa dig, med hjälp av exempel, hur man får nyheter från olika webbplatser.
För att få en förståelse för hur man använder ramverket, följ exemplen i den ordning som anges nedan:
• Helt automatisk hämtning (sida 121)
– calibre blogg (sida 121)
– bbc.co.uk (sida 122)
• Anpassa hämta processen (sida 123)
– Använda den tryckta versionen av bbc.co.uk (sida 123)
– Byte av artikelstilar (sida 124)
– Skivning och tärning (sida 125)
– Exempel i verkligheten (sida 136)
• Tips för att utveckla nya recept (sida 139)
• Ytterligare läsning (sida 139)
• API dokumentation (sida 139)
1.2.1 Helt automatisk hämtning
Om din nyhetskälla är enkel nog, skulle calibre mycket väl kunna hämta det helt automatiskt, allt du behöver göra att
ge webbadressen. calibre samlar all information som behövs för att ladda ner en nyhetskälla i ett recept . För att berätta
1.2. Lägga till din favorit nyhetswebbplats
21
calibre Användarhandbok, Utgåva 2.22.0
för calibre om en nyhetskälla, måste du skapa ett recept för det. Låt oss se några exempel:
calibre blogg
calibre blogg är en blogg av inlägg som beskriver många användbara calibre-funktioner på ett enkelt och lättillgängligt
sätt för nya calibre-användare. För att ladda ner den här bloggen till en e-bok, förlitar vi oss på RSS-flödet av bloggen:
http://blog.calibre-ebook.com/feeds/posts/default
Jag fick RSS URL genom att titta under “Prenumerera” längst ner på bloggsidan och välja Posts->Atom. För att få
calibre hämta flöden och omvandla dem till en e-bok, ska du högerklicka på Hämta nyheter knappen och sedan på
Lägg till en anpassad nyhetskälla menyalternativet och sedan Nytt recept knappen. En dialogruta liknande den som
visas nedan bör öppna sig.
Ange först calibre Blog i Recepttitel fält. Detta kommer att vara namnet på den e-bok som kommer att skapas
från artiklarna i de ovanstående flöden.
De nästa två fälten (Äldsta artikel och Max. number of articles) tillåter dig viss kontroll över hur många artiklar som
ska hämtas från varje flöde, och de är ganska självförklarande.
För att lägga till flöde till receptet, mata in flödestitel och flödes-URL och klicka på Lägg till flöde knappen. När du
har lagt till flöde, klicka på Spara knappen och du är klar! Stäng dialogrutan.
Så här testar du nya recept klicka på Anpassad nyhetskälla undermenyn klicka calibre blogg nyhetsknapp. Efter ett
par minuter, kommer den nyligen nedladdade e-boken av blogginlägget visas i huvudbiblioteksvyn (om du har dina
22
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
läsare ansluten kommer den att läggas ut på läsaren i stället för in i biblioteket). Välj det och tryck på Visa knappen
för att läsa!
Anledningen till att detta fungerat så bra, med så liten ansträngning är att bloggen ger fullt innehåll RSS flöden, det
vill säga, artikelns innehåll är inbäddat i själva flödet. För de flesta nyhetskällor som tillhandahåller nyheter på detta
sätt, med fullt innehåll flöden, du behöver inte någon mer ansträngning för att omvandla dem till e-böcker. Nu ska vi
titta på en nyhetskälla som inte ger fullständigt innehållsflöde. I sådana flöden är hela artikeln en webbsida och flödet
innehåller bara en länk till webbsidan med en kort sammanfattning av artikeln.
bbc.co.uk
Låt oss prova följande två flöden från BBC:
1. Nyheter framsida: http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml
2. Vetenskap/Natur: http://newsrss.bbc.co.uk/rss/newsonline_world_edition/science/nature/rss.xml
Följ proceduren som beskrivs i calibre blogg (sida 121) ovan för att skapa ett recept på BBC (med hjälp av flöde
ovan). Om man tittar på den nedladdade e-boken, ser vi att claibre har gjort ett förtjänstfullt arbete för att utvinna
bara innehållet som du bryr dig om från varje artikel hemsida. Emellertid är extraktionsprocessen inte perfekt. Ibland
lämnar oönskade innehåll som menyer och navigeringshjälpmedel, eller det tar bort innehåll som borde lämnas i fred,
som artikelrubriker. För att få perfekt innehållsutvinning, måste vi anpassa hämta processen, som beskrivs i nästa
avsnitt.
1.2.2 Anpassa hämta processen
När du vill att fullända hämtningen, eller hämta innehåll från en särskilt komplicerad webbplats kan du använda dig av
all den kraft och flexibilitet i ramen av recept. För att kunna göra det, i Lägg till anpassad nyhetskälla dialog, genom
att klicka på Växla till avancerat läge knappen.
Det enklaste och ofta mest produktiva anpassning är att använda den tryckta versionen av uppkopplade-artiklar. Den
tryckta versionen är oftast mycket mindre hantverk och översätter mycket smidigare till en e-bok. Låt oss försöka
använda den tryckta versionen av artiklarna från BBC.
Använda den tryckta versionen av bbc.co.uk
Det första steget är att titta på e-boken som vi hämtat tidigare från bbc.co.uk (sida 122) . Vid slutet av varje artikel, i
e-boken finns en liten baksidetext som talar om när artikeln hämtats från. Kopiera och klistra in denna webbadress i
en webbläsare. Nu på artikelwebbsidan leta efter en länk som pekar på “Utskrift”. Klicka på den för att se den tryckta
versionen av artikeln. Det ser mycket snyggare! Jämför nu de två webbadresser. För mig var de:
Artikel URL http://news.bbc.co.uk/2/hi/science/nature/7312016.stm
Utskriftsversion URL http://newsvote.bbc.co.uk/mpapps/pagetools/print/news.bbc.co.uk/2/hi/science/nature/7312016.stm
Så det ser ut att få den tryckta versionen måste vi prefix varje artikel URL med:
newsvote.bbc.co.uk/mpapps/pagetools/print/
Nu i Avancerat läge för Anpassad nyhetskällor dialogrutan ska du se något liknande (kom ihåg att välja BBC receptet
innan du växlar till avancerat läge):
1.2. Lägga till din favorit nyhetswebbplats
23
calibre Användarhandbok, Utgåva 2.22.0
Du kan se att fälten från Grundläge har omräknats med python-kod på ett enkelt sätt. Vi måste lägga till instruktioner
för att detta recept för att använda den tryckta versionen av artiklarna. Allt som behövs är att lägga till följande två
rader:
def print_version(self, url):
return url.replace('http://', 'http://newsvote.bbc.co.uk/mpapps/pagetools/print/')
Detta är python, så indenteringen(indrag) är viktigt. När du har lagt raderna ska det se ut:
I ovanstående, def print_version(self, url) definieras en metod som anropas av calibre för varje artikel.
url är webbadressen till den ursprungliga artikeln. Vad print_version gör är att den tar URL:n och ersätter den
med den nya URL:n som pekar på den tryckta versionen av artikeln. Om du vill veta om python3 se tutorial4 .
Nu klickar du på Lägg till/Uppdatera recept-knappen och dina ändringar sparas. Hämta e-boken igen. Du bör nu ha
en mycket förbättrad e-bok. Ett av problemen med den nya versionen är att typsnitten på utskriftsversion är för små.
Detta är automatiskt justerat vid konvertering till en e-bok, men även efter justeringsprocessen, blir teckenstorleken
för menyer och navigeringsfältet för stora i förhållande till artikeltexten. För att åtgärda detta, kommer vi att göra lite
mer anpassning, i nästa avsnitt.
Byte av artikelstilar
I föregående avsnitt såg vi att teckenstorleken efter artiklar från den tryckta versionen av BBC var för liten. I de flesta
webbplatser, ingår BBC, är detta textstorlek in med hjälp av CSS stilmallar. Vi kan inaktivera hämtning av sådana
mallar genom att lägga till raden:
no_stylesheets = True
3 https://www.python.org
4 https://docs.python.org/2/tutorial/
24
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Receptet ser nu ut:
Den nya versionen ser ganska bra ut. Om du är en perfektionist, vill du nog läsa nästa avsnitt, som handlar faktiskt om
att modifiera nedladdat material.
Skivning och tärning
calibre innehåller mycket kraftfulla och flexibla färdigheter när det gäller att manipulera nedladdat material. För att
visa upp ett par av dessa, låt oss titta på vår gamle vän för BBC (sida 124) receptet igen. Om man tittar på källkoden
(HTML) i ett par artiklar (utskriftsversion), ser vi att de har en sidfot som innehåller någon användbar information,
som finns i
<div class="footer">
...
</div>
Detta kan tas bort genom att lägga till:
remove_tags
= [dict(name='div', attrs={'class':'footer'})]
till receptet. Slutligen kan ersätta en del av CSS som vi tidigare inaktiverad, med vår egen :term:‘CSS‘om är lämplig
för omvandling till en e-bok:
extra_css
= '.headline {font-size: x-large;} \n .fact { padding-top: 10pt
}'
Med dessa tillägg har vårt recept blivit “produktionskvalitet”, ja det är mycket nära till den faktiska receptet används
av calibre för BBC, som visas nedan:
##
##
##
##
##
##
##
##
##
##
Title:
Contact:
BBC News, Sport, and Blog Calibre Recipe
mattst - jmstanfield@gmail.com
License:
Copyright:
GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html
mattst - jmstanfield@gmail.com
Written:
Last Edited:
November 2011
2011-11-19
__license__
__copyright__
= 'GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html'
= 'mattst - jmstanfield@gmail.com'
1.2. Lägga till din favorit nyhetswebbplats
25
calibre Användarhandbok, Utgåva 2.22.0
'''
BBC News, Sport, and Blog Calibre Recipe
'''
# Import the regular expressions module.
import re
# Import the BasicNewsRecipe class which this class extends.
from calibre.web.feeds.recipes import BasicNewsRecipe
class BBCNewsSportBlog(BasicNewsRecipe):
#
#
**** IMPORTANT USERS READ ME ****
#
# First select the feeds you want then scroll down below the feeds list
# and select the values you want for the other user preferences, like
# oldest_article and such like.
#
#
# Select the BBC rss feeds which you want in your ebook.
# Selected feed have NO '#' at their start, de-selected feeds begin with a '#'.
#
# Eg. ("News Home", "http://feeds.bbci.co.uk/... - include feed.
# Eg. #("News Home", "http://feeds.bbci.co.uk/... - do not include feed.
#
# There are 68 feeds below which constitute the bulk of the available rss
# feeds on the BBC web site. These include 5 blogs by editors and
# correspondants, 16 sports feeds, 15 'sub' regional feeds (Eg. North West
# Wales, Scotland Business), and 7 Welsh language feeds.
#
# Some of the feeds are low volume (Eg. blogs), or very low volume (Eg. Click)
# so if "oldest_article = 1.5" (only articles published in the last 36 hours)
# you may get some 'empty feeds' which will not then be included in the ebook.
#
# The 15 feeds currently selected below are simply my default ones.
#
# Note: With all 68 feeds selected, oldest_article set to 2,
# max_articles_per_feed set to 100, and simultaneous_downloads set to 10,
# the ebook creation took 29 minutes on my speedy 100 mbps net connection,
# fairly high-end desktop PC running Linux (Ubuntu Lucid-Lynx).
# More realistically with 15 feeds selected, oldest_article set to 1.5,
# max_articles_per_feed set to 100, and simultaneous_downloads set to 20,
# it took 6 minutes. If that's too slow increase 'simultaneous_downloads'.
#
# Select / de-select the feeds you want in your ebook.
#
feeds = [
("News Home", "http://feeds.bbci.co.uk/news/rss.xml"),
("UK", "http://feeds.bbci.co.uk/news/uk/rss.xml"),
("World", "http://feeds.bbci.co.uk/news/world/rss.xml"),
#("England", "http://feeds.bbci.co.uk/news/england/rss.xml"),
#("Scotland", "http://feeds.bbci.co.uk/news/scotland/rss.xml"),
#("Wales", "http://feeds.bbci.co.uk/news/wales/rss.xml"),
#("N. Ireland", "http://feeds.bbci.co.uk/news/northern_ireland/rss.xml"),
#("Africa", "http://feeds.bbci.co.uk/news/world/africa/rss.xml"),
#("Asia", "http://feeds.bbci.co.uk/news/world/asia/rss.xml"),
#("Europe", "http://feeds.bbci.co.uk/news/world/europe/rss.xml"),
26
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
#("Latin America", "http://feeds.bbci.co.uk/news/world/latin_america/rss.xml"),
#("Middle East", "http://feeds.bbci.co.uk/news/world/middle_east/rss.xml"),
("US & Canada", "http://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml"),
("Politics", "http://feeds.bbci.co.uk/news/politics/rss.xml"),
("Science/Environment", "http://feeds.bbci.co.uk/news/science_and_environment/rss.xml")
("Technology", "http://feeds.bbci.co.uk/news/technology/rss.xml"),
("Magazine", "http://feeds.bbci.co.uk/news/magazine/rss.xml"),
("Entertainment/Arts", "http://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml"),
#("Health", "http://feeds.bbci.co.uk/news/health/rss.xml"),
#("Education/Family", "http://feeds.bbci.co.uk/news/education/rss.xml"),
("Business", "http://feeds.bbci.co.uk/news/business/rss.xml"),
("Special Reports", "http://feeds.bbci.co.uk/news/special_reports/rss.xml"),
("Also in the News", "http://feeds.bbci.co.uk/news/also_in_the_news/rss.xml"),
#("Newsbeat", "http://www.bbc.co.uk/newsbeat/rss.xml"),
#("Click", "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/programmes/click_online/
("Blog: Nick Robinson (Political Editor)", "http://feeds.bbci.co.uk/news/correspondents
#("Blog: Mark D'Arcy (Parliamentary Correspondent)", "http://feeds.bbci.co.uk/news/corr
#("Blog: Robert Peston (Business Editor)", "http://feeds.bbci.co.uk/news/correspondents
#("Blog: Stephanie Flanders (Economics Editor)", "http://feeds.bbci.co.uk/news/correspo
("Blog: Rory Cellan-Jones (Technology correspondent)", "http://feeds.bbci.co.uk/news/co
("Sport Front Page", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/front_page/rs
#("Football", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/rss.xml"),
#("Cricket", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/cricket/rss.xml"),
#("Rugby Union", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_union/rss.x
#("Rugby League", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_league/rss
#("Tennis", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/tennis/rss.xml"),
#("Golf", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/golf/rss.xml"),
#("Motorsport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/motorsport/rss.xml
#("Boxing", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/boxing/rss.xml"),
#("Athletics", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/athletics/rss.xml")
#("Snooker", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/snooker/
#("Horse Racing", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/hor
#("Cycling", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/cycling/
#("Disability Sport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports
#("Other Sport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/rss.
#("Olympics 2012", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/ol
#("N. Ireland Politics", "http://feeds.bbci.co.uk/news/northern_ireland/northern_irelan
#("Scotland Politics", "http://feeds.bbci.co.uk/news/scotland/scotland_politics/rss.xml
#("Scotland Business", "http://feeds.bbci.co.uk/news/scotland/scotland_business/rss.xml
#("E. Scotland, Edinburgh & Fife", "http://feeds.bbci.co.uk/news/scotland/edinburgh_eas
#("W. Scotland & Glasgow", "http://feeds.bbci.co.uk/news/scotland/glasgow_and_west/rss.
#("Highlands & Islands", "http://feeds.bbci.co.uk/news/scotland/highlands_and_islands/r
#("NE. Scotland, Orkney & Shetland", "http://feeds.bbci.co.uk/news/scotland/north_east_
#("South Scotland", "http://feeds.bbci.co.uk/news/scotland/south_scotland/rss.xml"),
#("Central Scotland & Tayside", "http://feeds.bbci.co.uk/news/scotland/tayside_and_cent
#("Wales Politics", "http://feeds.bbci.co.uk/news/wales/wales_politics/rss.xml"),
#("NW. Wales", "http://feeds.bbci.co.uk/news/wales/north_west_wales/rss.xml"),
#("NE. Wales", "http://feeds.bbci.co.uk/news/wales/north_east_wales/rss.xml"),
#("Mid. Wales", "http://feeds.bbci.co.uk/news/wales/mid_wales/rss.xml"),
#("SW. Wales", "http://feeds.bbci.co.uk/news/wales/south_west_wales/rss.xml"),
#("SE. Wales", "http://feeds.bbci.co.uk/news/wales/south_east_wales/rss.xml"),
#("Newyddion - News in Welsh", "http://feeds.bbci.co.uk/newyddion/rss.xml"),
#("Gwleidyddiaeth", "http://feeds.bbci.co.uk/newyddion/gwleidyddiaeth/rss.xml"),
#("Gogledd-Ddwyrain", "http://feeds.bbci.co.uk/newyddion/gogledd-ddwyrain/rss.xml"),
#("Gogledd-Orllewin", "http://feeds.bbci.co.uk/newyddion/gogledd-orllewin/rss.xml"),
#("Canolbarth", "http://feeds.bbci.co.uk/newyddion/canolbarth/rss.xml"),
#("De-Ddwyrain", "http://feeds.bbci.co.uk/newyddion/de-ddwyrain/rss.xml"),
#("De-Orllewin", "http://feeds.bbci.co.uk/newyddion/de-orllewin/rss.xml"),
1.2. Lägga till din favorit nyhetswebbplats
27
calibre Användarhandbok, Utgåva 2.22.0
]
#
**** SELECT YOUR USER PREFERENCES ****
# Title to use for the ebook.
#
title = 'BBC News'
# A brief description for the ebook.
#
description = u'BBC web site ebook created using rss feeds.'
# The max number of articles which may be downloaded from each feed.
# I've never seen more than about 70 articles in a single feed in the
# BBC feeds.
#
max_articles_per_feed = 100
# The max age of articles which may be downloaded from each feed. This is
# specified in days - note fractions of days are allowed, Eg. 2.5 (2 and a
# half days). My default of 1.5 days is the last 36 hours, the point at
# which I've decided 'news' becomes 'old news', but be warned this is not
# so good for the blogs, technology, magazine, etc., and sports feeds.
# You may wish to extend this to 2-5 but watch out ebook creation time will
# increase as well. Setting this to 30 will get everything (AFAICT) as long
# as max_articles_per_feed remains set high (except for 'Click' which is
# v. low volume and its currently oldest article is 4th Feb 2011).
#
oldest_article = 1.5
# Number of simultaneous downloads. 20 is consistantly working fine on the
# BBC News feeds with no problems. Speeds things up from the defualt of 5.
# If you have a lot of feeds and/or have increased oldest_article above 2
# then you may wish to try increasing simultaneous_downloads to 25-30,
# Or, of course, if you are in a hurry. [I've not tried beyond 20.]
#
simultaneous_downloads = 20
# Timeout for fetching files from the server in seconds. The default of
# 120 seconds, seems somewhat excessive.
#
timeout = 30
# The format string for the date shown on the ebook's first page.
# List of all values: http://docs.python.org/library/time.html
# Default in news.py has a leading space so that's mirrored here.
# As with 'feeds' select/de-select by adding/removing the initial '#',
# only one timefmt should be selected, here's a few to choose from.
#
timefmt = ' [%a, %d %b %Y]'
# [Fri, 14 Nov 2011] (Calibre default)
#timefmt = ' [%a, %d %b %Y %H:%M]'
# [Fri, 14 Nov 2011 18:30]
#timefmt = ' [%a, %d %b %Y %I:%M %p]'
# [Fri, 14 Nov 2011 06:30 PM]
#timefmt = ' [%d %b %Y]'
# [14 Nov 2011]
#timefmt = ' [%d %b %Y %H:%M]'
# [14 Nov 2011 18.30]
#timefmt = ' [%Y-%m-%d]'
# [2011-11-14]
#timefmt = ' [%Y-%m-%d-%H-%M]'
# [2011-11-14-18-30]
28
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
#
#
#
#
#
#
#
#
#
#
#
**** IMPORTANT ****
DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING.
DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING.
I MEAN IT, YES I DO, ABSOLUTELY, AT YOU OWN RISK. :)
**** IMPORTANT ****
# Author of this recipe.
__author__ = 'mattst'
# Specify English as the language of the RSS feeds (ISO-639 code).
language = 'en_GB'
# Set tags.
tags = 'news, sport, blog'
# Set publisher and publication type.
publisher = 'BBC'
publication_type = 'newspaper'
# Disable stylesheets from site.
no_stylesheets = True
# Specifies an override encoding for sites that have an incorrect charset
# specified. Default of 'None' says to auto-detect. Some other BBC recipes
# use 'utf8', which works fine (so use that if necessary) but auto-detecting
# with None is working fine, so stick with that for robustness.
encoding = None
# Sets whether a feed has full articles embedded in it. The BBC feeds do not.
use_embedded_content = False
# Removes empty feeds - why keep them!?
remove_empty_feeds = True
#
#
#
#
#
#
Create a custom title which fits nicely in the Kindle title list.
Requires "import time" above class declaration, and replacing
title with custom_title in conversion_options (right column only).
Example of string below: "BBC News - 14 Nov 2011"
custom_title = "BBC News - " + time.strftime('%d %b %Y')
'''
# Conversion options for advanced users, but don't forget to comment out the
# current conversion_options below. Avoid setting 'linearize_tables' as that
# plays havoc with the 'old style' table based pages.
#
conversion_options = { 'title'
: title,
'comments'
: description,
'tags'
: tags,
1.2. Lägga till din favorit nyhetswebbplats
29
calibre Användarhandbok, Utgåva 2.22.0
'language'
: language,
'publisher'
: publisher,
'authors'
: publisher,
'smarten_punctuation' : True
}
'''
conversion_options = { 'smarten_punctuation' : True }
# Specify extra CSS - overrides ALL other CSS (IE. Added last).
extra_css = 'body { font-family: verdana, helvetica, sans-serif; } \
.introduction, .first { font-weight: bold; } \
.cross-head { font-weight: bold; font-size: 125%; } \
.cap, .caption { display: block; font-size: 80%; font-style: italic; } \
.cap, .caption, .caption img, .caption span { display: block; text-align: center; ma
.byl, .byd, .byline img, .byline-name, .byline-title, .author-name, .author-position
.correspondent-portrait img, .byline-lead-in, .name, .bbc-role { display: block;
text-align: center; font-size: 80%; font-style: italic; margin: 1px auto; } \
.story-date, .published { font-size: 80%; } \
table { width: 100%; } \
td img { display: block; margin: 5px auto; } \
ul { padding-top: 10px; } \
ol { padding-top: 10px; } \
li { padding-top: 5px; padding-bottom: 5px; } \
h1 { text-align: center; font-size: 175%; font-weight: bold; } \
h2 { text-align: center; font-size: 150%; font-weight: bold; } \
h3 { text-align: center; font-size: 125%; font-weight: bold; } \
h4, h5, h6 { text-align: center; font-size: 100%; font-weight: bold; }'
# Remove various tag attributes to improve the look of the ebook pages.
remove_attributes = [ 'border', 'cellspacing', 'align', 'cellpadding', 'colspan',
'valign', 'vspace', 'hspace', 'alt', 'width', 'height' ]
# Remove the (admittedly rarely used) line breaks, "<br />", which sometimes
# cause a section of the ebook to start in an unsightly fashion or, more
# frequently, a "<br />" will muck up the formatting of a correspondant's byline.
# "<br />" and "<br clear/>" are far more frequently used on the table formatted
# style of pages, and really spoil the look of the ebook pages.
preprocess_regexps
= [(re.compile(r'<br[ ]*/>', re.IGNORECASE), lambda m: ''),
(re.compile(r'<br[ ]*clear.*/>', re.IGNORECASE), lambda m: '')]
#
#
#
#
Create regular expressions for tag keeping and removal to make the matches more
robust against minor changes and errors in the HTML, Eg. double spaces, leading
and trailing spaces, missing hyphens, and such like.
Python regular expression ('re' class) page: http://docs.python.org/library/re.html
# ***************************************
# Regular expressions for keep_only_tags:
# ***************************************
# The BBC News HTML pages use variants of 'storybody' to denote the section of a HTML
# page which contains the main text of the article. Match storybody variants: 'storybody',
# 'story-body', 'story body','storybody ', etc.
storybody_reg_exp = '^.*story[_ -]*body.*$'
# The BBC sport and 'newsbeat' (features) HTML pages use 'blq_content' to hold the title
# and published date. This is one level above the usual news pages which have the title
30
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# and date within 'story-body'. This is annoying since 'blq_content' must also be kept,
# resulting in a lot of extra things to be removed by remove_tags.
blq_content_reg_exp = '^.*blq[_ -]*content.*$'
# The BBC has an alternative page design structure, which I suspect is an out-of-date
# design but which is still used in some articles, Eg. 'Click' (technology), 'FastTrack'
# (travel), and in some sport pages. These alternative pages are table based (which is
# why I think they are an out-of-date design) and account for -I'm guesstimaking- less
# than 1% of all articles. They use a table class 'storycontent' to hold the article
# and like blq_content (above) have required lots of extra removal by remove_tags.
story_content_reg_exp = '^.*story[_ -]*content.*$'
# Keep the sections of the HTML which match the list below. The HTML page created by
# Calibre will fill <body> with those sections which are matched. Note that the
# blq_content_reg_exp must be listed before storybody_reg_exp in keep_only_tags due to
# it being the parent of storybody_reg_exp, that is to say the div class/id 'story-body'
# will be inside div class/id 'blq_content' in the HTML (if 'blq_content' is there at
# all). If they are the other way around in keep_only_tags then blq_content_reg_exp
# will end up being discarded.
keep_only_tags = [ dict(name='table', attrs={'class':re.compile(story_content_reg_exp, re.IGNOREC
dict(name='div',
attrs={'class':re.compile(blq_content_reg_exp, re.IGNORECAS
dict(name='div',
attrs={'id':re.compile(blq_content_reg_exp, re.IGNORECASE)}
dict(name='div',
attrs={'class':re.compile(storybody_reg_exp, re.IGNORECASE)
dict(name='div',
attrs={'id':re.compile(storybody_reg_exp, re.IGNORECASE)})
# ************************************
# Regular expressions for remove_tags:
# ************************************
# Regular expression to remove share-help and variant tags. The share-help class
# is used by the site for a variety of 'sharing' type links, Eg. Facebook, delicious,
# twitter, email. Removed to avoid page clutter.
share_help_reg_exp = '^.*share[_ -]*help.*$'
# Regular expression to remove embedded-hyper and variant tags. This class is used to
# display links to other BBC News articles on the same/similar subject.
embedded_hyper_reg_exp = '^.*embed*ed[_ -]*hyper.*$'
# Regular expression to remove hypertabs and variant tags. This class is used to
# display a tab bar at the top of an article which allows the user to switch to
# an article (viewed on the same page) providing further info., 'in depth' analysis,
# an editorial, a correspondant's blog entry, and such like. The ability to handle
# a tab bar of this nature is currently beyond the scope of this recipe and
# possibly of Calibre itself (not sure about that - TO DO - check!).
hypertabs_reg_exp = '^.*hyper[_ -]*tabs.*$'
# Regular expression to remove story-feature and variant tags. Eg. 'story-feature',
# 'story-feature related narrow', 'story-feature wide', 'story-feature narrow'.
# This class is used to add additional info. boxes, or small lists, outside of
# the main story. TO DO: Work out a way to incorporate these neatly.
story_feature_reg_exp = '^.*story[_ -]*feature.*$'
# Regular expression to remove video and variant tags, Eg. 'videoInStoryB',
# 'videoInStoryC'. This class is used to embed video.
video_reg_exp = '^.*video.*$'
# Regular expression to remove audio and variant tags, Eg. 'audioInStoryD'.
# This class is used to embed audio.
1.2. Lägga till din favorit nyhetswebbplats
31
calibre Användarhandbok, Utgåva 2.22.0
audio_reg_exp = '^.*audio.*$'
# Regular expression to remove pictureGallery and variant tags, Eg. 'pictureGallery'.
# This class is used to embed a photo slideshow. See also 'slideshow' below.
picture_gallery_reg_exp = '^.*picture.*$'
# Regular expression to remove slideshow and variant tags, Eg. 'dslideshow-enclosure'.
# This class is used to embed a slideshow (not necessarily photo) but both
# 'slideshow' and 'pictureGallery' are used for slideshows.
slideshow_reg_exp = '^.*slide[_ -]*show.*$'
# Regular expression to remove social-links and variant tags. This class is used to
# display links to a BBC bloggers main page, used in various columnist's blogs
# (Eg. Nick Robinson, Robert Preston).
social_links_reg_exp = '^.*social[_ -]*links.*$'
# Regular expression to remove quote and (multi) variant tags, Eg. 'quote',
# 'endquote', 'quote-credit', 'quote-credit-title', etc. These are usually
# removed by 'story-feature' removal (as they are usually within them), but
# not always. The quotation removed is always (AFAICT) in the article text
# as well but a 2nd copy is placed in a quote tag to draw attention to it.
# The quote class tags may or may not appear in div's.
quote_reg_exp = '^.*quote.*$'
# Regular expression to remove hidden and variant tags, Eg. 'hidden'.
# The purpose of these is unclear, they seem to be an internal link to a
# section within the article, but the text of the link (Eg. 'Continue reading
# the main story') never seems to be displayed anyway. Removed to avoid clutter.
# The hidden class tags may or may not appear in div's.
hidden_reg_exp = '^.*hidden.*$'
# Regular expression to remove comment and variant tags, Eg. 'comment-introduction'.
# Used on the site to display text about registered users entering comments.
comment_reg_exp = '^.*comment.*$'
# Regular expression to remove form and variant tags, Eg. 'comment-form'.
# Used on the site to allow registered BBC users to fill in forms, typically
# for entering comments about an article.
form_reg_exp = '^.*form.*$'
# Extra things to remove due to the addition of 'blq_content' in keep_only_tags.
#<div class="story-actions"> Used on sports pages for 'email' and 'print'.
story_actions_reg_exp = '^.*story[_ -]*actions.*$'
#<div class="bookmark-list"> Used on sports pages instead of 'share-help' (for
# social networking links).
bookmark_list_reg_exp = '^.*bookmark[_ -]*list.*$'
#<div id="secondary-content" class="content-group">
# NOTE: Don't remove class="content-group" that is needed.
# Used on sports pages to link to 'similar stories'.
secondary_content_reg_exp = '^.*secondary[_ -]*content.*$'
#<div id="featured-content" class="content-group">
# NOTE: Don't remove class="content-group" that is needed.
# Used on sports pages to link to pages like 'tables', 'fixtures', etc.
featured_content_reg_exp = '^.*featured[_ -]*content.*$'
32
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
#<div id="navigation">
# Used on sports pages to link to pages like 'tables', 'fixtures', etc.
# Used sometimes instead of "featured-content" above.
navigation_reg_exp = '^.*navigation.*$'
#<a class="skip" href="#blq-container-inner">Skip to top</a>
# Used on sports pages to link to the top of the page.
skip_reg_exp = '^.*skip.*$'
# Extra things to remove due to the addition of 'storycontent' in keep_only_tags,
# which are the alterative table design based pages. The purpose of some of these
# is not entirely clear from the pages (which are a total mess!).
# Remove mapping based tags, Eg. <map id="world_map">
# The dynamic maps don't seem to work during ebook creation. TO DO: Investigate.
map_reg_exp = '^.*map.*$'
# Remove social bookmarking variation, called 'socialBookMarks'.
social_bookmarks_reg_exp = '^.*social[_ -]*bookmarks.*$'
# Remove page navigation tools, like 'search', 'email', 'print', called 'blq-mast'.
blq_mast_reg_exp = '^.*blq[_ -]*mast.*$'
# Remove 'sharesb', I think this is a generic 'sharing' class. It seems to appear
# alongside 'socialBookMarks' whenever that appears. I am removing it as well
# under the assumption that it can appear alone as well.
sharesb_reg_exp = '^.*sharesb.*$'
# Remove class 'o'. The worst named user created css class of all time. The creator
# should immediately be fired. I've seen it used to hold nothing at all but with
# 20 or so empty lines in it. Also to hold a single link to another article.
# Whatever it was designed to do it is not wanted by this recipe. Exact match only.
o_reg_exp = '^o$'
# Remove 'promotopbg' and 'promobottombg', link lists. Have decided to
# use two reg expressions to make removing this (and variants) robust.
promo_top_reg_exp = '^.*promotopbg.*$'
promo_bottom_reg_exp = '^.*promobottombg.*$'
# Remove 'nlp', provides heading for link lists. Requires an exact match due to
# risk of matching those letters in something needed, unless I see a variation
# of 'nlp' used at a later date.
nlp_reg_exp = '^nlp$'
# Remove 'mva', provides embedded floating content of various types. Variant 'mvb'
# has also now been seen. Requires an exact match of 'mva' or 'mvb' due to risk of
# matching those letters in something needed.
mva_or_mvb_reg_exp = '^mv[ab]$'
# Remove 'mvtb', seems to be page navigation tools, like 'blq-mast'.
mvtb_reg_exp = '^mvtb$'
# Remove 'blq-toplink', class to provide a link to the top of the page.
blq_toplink_reg_exp = '^.*blq[_ -]*top[_ -]*link.*$'
# Remove 'products and services' links, Eg. desktop tools, alerts, and so on.
# Eg. Class="servicev4 ukfs_services" - what a mess of a name. Have decided to
# use two reg expressions to make removing this (and variants) robust.
1.2. Lägga till din favorit nyhetswebbplats
33
calibre Användarhandbok, Utgåva 2.22.0
prods_services_01_reg_exp = '^.*servicev4.*$'
prods_services_02_reg_exp = '^.*ukfs[_ -]*services.*$'
# Remove -what I think is- some kind of navigation tools helper class, though I am
# not sure, it's called: 'blq-rst blq-new-nav'. What I do know is it pops up
# frequently and it is not wanted. Have decided to use two reg expressions to make
# removing this (and variants) robust.
blq_misc_01_reg_exp = '^.*blq[_ -]*rst.*$'
blq_misc_02_reg_exp = '^.*blq[_ -]*new[_ -]*nav.*$'
# Remove 'puffbox' - this may only appear inside 'storyextra', so it may not
# need removing - I have no clue what it does other than it contains links.
# Whatever it is - it is not part of the article and is not wanted.
puffbox_reg_exp = '^.*puffbox.*$'
# Remove 'sibtbg' and 'sibtbgf' - some kind of table formatting classes.
sibtbg_reg_exp = '^.*sibtbg.*$'
# Remove 'storyextra' - links to relevant articles and external sites.
storyextra_reg_exp = '^.*story[_ -]*extra.*$'
remove_tags = [ dict(name='div', attrs={'class':re.compile(story_feature_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'class':re.compile(share_help_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(embedded_hyper_reg_exp, re.IGNORECASE
dict(name='div', attrs={'class':re.compile(hypertabs_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(video_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(audio_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(picture_gallery_reg_exp, re.IGNORECAS
dict(name='div', attrs={'class':re.compile(slideshow_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(quote_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(hidden_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(comment_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(story_actions_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'class':re.compile(bookmark_list_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'id':re.compile(secondary_content_reg_exp, re.IGNORECASE
dict(name='div', attrs={'id':re.compile(featured_content_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'id':re.compile(navigation_reg_exp, re.IGNORECASE)}),
dict(name='form', attrs={'id':re.compile(form_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(quote_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(hidden_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(social_links_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(comment_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(skip_reg_exp, re.IGNORECASE)}),
dict(name='map', attrs={'id':re.compile(map_reg_exp, re.IGNORECASE)}),
dict(name='map', attrs={'name':re.compile(map_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'id':re.compile(social_bookmarks_reg_exp, re.IGNORECASE)}
dict(name='div', attrs={'id':re.compile(blq_mast_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(sharesb_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(o_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(promo_top_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(promo_bottom_reg_exp, re.IGNORECASE)}
dict(name='div', attrs={'class':re.compile(nlp_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(mva_or_mvb_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(mvtb_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(blq_toplink_reg_exp, re.IGNORECASE)})
dict(name='div', attrs={'class':re.compile(prods_services_01_reg_exp, re.IGNOREC
dict(name='div', attrs={'class':re.compile(prods_services_02_reg_exp, re.IGNOREC
34
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
dict(name='div', attrs={'class':re.compile(blq_misc_01_reg_exp, re.IGNORECASE)})
dict(name='div', attrs={'class':re.compile(blq_misc_02_reg_exp, re.IGNORECASE)})
dict(name='div', attrs={'class':re.compile(puffbox_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(sibtbg_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(storyextra_reg_exp, re.IGNORECASE)})
]
# Uses url to create and return the 'printer friendly' version of the url.
# In other words the 'print this page' address of the page.
#
# There are 3 types of urls used in the BBC site's rss feeds. There is just
# 1 type for the standard news while there are 2 used for sports feed urls.
# Note: Sports urls are linked from regular news feeds (Eg. 'News Home') when
# there is a major story of interest to 'everyone'. So even if no BBC sports
# feeds are added to 'feeds' the logic of this method is still needed to avoid
# blank / missing / empty articles which have an index title and then no body.
def print_version(self, url):
# Handle sports page urls type 01:
if (url.find("go/rss/-/sport1/") != -1):
temp_url = url.replace("go/rss/-/", "")
# Handle sports page urls type 02:
elif (url.find("go/rss/int/news/-/sport1/") != -1):
temp_url = url.replace("go/rss/int/news/-/", "")
# Handle regular news page urls:
else:
temp_url = url.replace("go/rss/int/news/-/", "")
# Always add "?print=true" to the end of the url.
print_url = temp_url + "?print=true"
return print_url
# Remove articles in feeds based on a string in the article title or url.
#
# Code logic written by: Starson17 - posted in: "Recipes - Re-usable code"
# thread, in post with title: "Remove articles from feed", see url:
# http://www.mobileread.com/forums/showpost.php?p=1165462&postcount=6
# Many thanks and all credit to Starson17.
#
# Starson17's code has obviously been altered to suite my requirements.
def parse_feeds(self):
# Call parent's method.
feeds = BasicNewsRecipe.parse_feeds(self)
# Loop through all feeds.
for feed in feeds:
# Loop through all articles in feed.
for article in feed.articles[:]:
# Match key words and remove article if there's a match.
# Most BBC rss feed video only 'articles' use upper case 'VIDEO'
1.2. Lägga till din favorit nyhetswebbplats
35
calibre Användarhandbok, Utgåva 2.22.0
# as a title prefix. Just match upper case 'VIDEO', so that
# articles like 'Video game banned' won't be matched and removed.
if 'VIDEO' in article.title:
feed.articles.remove(article)
# Most BBC rss feed audio only 'articles' use upper case 'AUDIO'
# as a title prefix. Just match upper case 'AUDIO', so that
# articles like 'Hi-Def audio...' won't be matched and removed.
elif 'AUDIO' in article.title:
feed.articles.remove(article)
# Most BBC rss feed photo slideshow 'articles' use 'In Pictures',
# 'In pictures', and 'in pictures', somewhere in their title.
# Match any case of that phrase.
elif 'IN PICTURES' in article.title.upper():
feed.articles.remove(article)
# As above, but user contributed pictures. Match any case.
elif 'YOUR PICTURES' in article.title.upper():
feed.articles.remove(article)
# 'Sportsday Live' are articles which contain a constantly and
# dynamically updated 'running commentary' during a live sporting
# event. Match any case.
elif 'SPORTSDAY LIVE' in article.title.upper():
feed.articles.remove(article)
# Sometimes 'Sportsday Live' (above) becomes 'Live - Sport Name'.
# These are being matched below using 'Live - ' because removing all
# articles with 'live' in their titles would remove some articles
# that are in fact not live sports pages. Match any case.
elif 'LIVE - ' in article.title.upper():
feed.articles.remove(article)
# 'Quiz of the week' is a Flash player weekly news quiz. Match only
# the 'Quiz of the' part in anticipation of monthly and yearly
# variants. Match any case.
elif 'QUIZ OF THE' in article.title.upper():
feed.articles.remove(article)
# Remove articles with 'scorecards' in the url. These are BBC sports
# pages which just display a cricket scorecard. The pages have a mass
# of table and css entries to display the scorecards nicely. Probably
# could make them work with this recipe, but might take a whole day
# of work to sort out all the css - basically a formatting nightmare.
elif 'scorecards' in article.url:
feed.articles.remove(article)
return feeds
# End of class and file.
Detta recept utforskar bara toppen av isberget när det kommer till makten av calibre. För att utforska mer av förmågan
hos calibre så undersöker vi en mer komplex verkliga livet exempel i nästa avsnitt.
36
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Exempel i verkligheten
Ett tämligen komplicerat exempel från verkligheten som exponerar mer av API för BasicNewsRecipe är recept
för New York Times
import string, re
from calibre import strftime
from calibre.web.feeds.recipes import BasicNewsRecipe
from calibre.ebooks.BeautifulSoup import BeautifulSoup
class NYTimes(BasicNewsRecipe):
title
= 'The New York Times'
__author__ = 'Kovid Goyal'
description = 'Daily news from the New York Times'
timefmt = ' [%a, %d %b, %Y]'
needs_subscription = True
remove_tags_before = dict(id='article')
remove_tags_after = dict(id='article')
remove_tags = [dict(attrs={'class':['articleTools', 'post-tools', 'side_tool', 'nextArticleLink c
dict(id=['footer', 'toolsRight', 'articleInline', 'navigation', 'archive', 'side_sear
dict(name=['script', 'noscript', 'style'])]
encoding = 'cp1252'
no_stylesheets = True
extra_css = 'h1 {font: sans-serif large;}\n.byline {font:monospace;}'
def get_browser(self):
br = BasicNewsRecipe.get_browser()
if self.username is not None and self.password is not None:
br.open('http://www.nytimes.com/auth/login')
br.select_form(name='login')
br['USERID']
= self.username
br['PASSWORD'] = self.password
br.submit()
return br
def parse_index(self):
soup = self.index_to_soup('http://www.nytimes.com/pages/todayspaper/index.html')
def feed_title(div):
return ''.join(div.findAll(text=True, recursive=False)).strip()
articles = {}
key = None
ans = []
for div in soup.findAll(True,
attrs={'class':['section-headline', 'story', 'story headline']}):
if div['class'] == 'section-headline':
key = string.capwords(feed_title(div))
articles[key] = []
ans.append(key)
elif div['class'] in ['story', 'story headline']:
a = div.find('a', href=True)
if not a:
continue
url = re.sub(r'\?.*', '', a['href'])
1.2. Lägga till din favorit nyhetswebbplats
37
calibre Användarhandbok, Utgåva 2.22.0
url += '?pagewanted=all'
title = self.tag_to_string(a, use_alt=True).strip()
description = ''
pubdate = strftime('%a, %d %b')
summary = div.find(True, attrs={'class':'summary'})
if summary:
description = self.tag_to_string(summary, use_alt=False)
feed = key if key is not None else 'Uncategorized'
if not articles.has_key(feed):
articles[feed] = []
if not 'podcasts' in url:
articles[feed].append(
dict(title=title, url=url, date=pubdate,
description=description,
content=''))
ans = self.sort_index_by(ans, {'The Front Page':-1, 'Dining In, Dining Out':1, 'Obituaries':2
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
return ans
def preprocess_html(self, soup):
refresh = soup.find('meta', {'http-equiv':'refresh'})
if refresh is None:
return soup
content = refresh.get('content').partition('=')[2]
raw = self.browser.open('http://www.nytimes.com'+content).read()
return BeautifulSoup(raw.decode('cp1252', 'replace'))
Vi ser flera nya funktioner i detta recept. recept. Först har vi:
timefmt = ' [%a, %d %b, %Y]'
Detta ställer den visade tiden på förstasidan av den skapade e-boken att vara i formatet, Dag, Dag_Nummer
Månad, År. Se timefmt (sida 311).
Sedan ser vi en grupp av direktiv till sanering den nedladdade HTML:
remove_tags_before = dict(name='h1')
remove_tags_after = dict(id='footer')
remove_tags = ...
Dessa tar bort allt innan den första <h1> etiketten och allt efter den första etiketten vars id är footer. Se
remove_tags (sida 310), remove_tags_before (sida 311), remove_tags_after (sida 311).
Nästa intressant funktion är:
needs_subscription = True
...
def get_browser(self):
...
needs_subscription = True berättar för calibre att detta recept behöver användarnamn och lösenord för att
kunna åt innehållet. Detta medför att, calibre frågar efter användarnamn och lösenord när du försöker använda det
här receptet. Koden i calibre.web.feeds.news.BasicNewsRecipe.get_browser() (sida 304) loggar
faktiskt in på NYT webbsida. När du loggat in, kommer calibre använda samma webbinstans för att hämta allt innehåll.
Se mechanize5 to understand the code in get_browser.
Nästa nyhet är calibre.web.feeds.news.BasicNewsRecipe.parse_index() (sida 305) metoden.
Dess uppgift är att gå till http://www.nytimes.com/pages/todayspaper/index.html och hämta listan över artiklar som
5 http://wwwsearch.sourceforge.net/mechanize/
38
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
visas i dagens tidning. Medan mer komplex än att bara använda RSS, skapar receptet en e-bok som motsvarar mycket
nära dagens tidning. parse_index använder mycket BeautifulSoup6 för att tolka dagens tidningswebbsida. Du kan
också använda andra, mer moderna parsers om du ogillar BeatifulSoup. calibre comes with lxml7 och html5lib8 , vilka
är de rekommenderade parsers. För att använda dem, byt ut anropet till index_to_soup() med följande:
raw = self.index_to_soup(url, raw=True)
# For html5lib
import html5lib
root = html5lib.parse(raw, namespaceHTMLElements=False, treebuilder='lxml')
# For the lxml html 4 parser
from lxml import html
root = html.fromstring(raw)
Den sista nyheten är calibre.web.feeds.news.BasicNewsRecipe.preprocess_html() (sida 306)
metoden. Den kan användas för att utföra godtyckliga transformationer på varje nedladdad HTML-sida. Här används
det för att kringgå de annonser som de NYTimes visar dig innan varje artikel.
1.2.3 Tips för att utveckla nya recept
Det bästa sättet att utveckla nya recept är att använda kommandoraden. Skapa receptet med din favorit python editor
och spara den till en fil låt säga myrecipe.recipe. Den .recipe -tillägget krävs. Du kan hämta innehåll med detta
recept med kommandot:
ebook-convert myrecipe.recipe .epub --test -vv --debug-pipeline debug
Kommandot ebook-convert kommer att ladda ner alla webbsidor och spara dem till EPUB-filen myrecipe.epub.
Alternativet -vv får ebook-convert mata ut en hel del information om vad den gör. Alternativet --test begränsar nerladdning till bara ett par artiklar från högst två flöden. Dessutom kommer ebook-convert placera HTML i
debug/input-katalogen, där debug är katalogen du angav i --debug-pipeline-alternativet.
När nedladdningen är klar kan du titta på den nedladdade HTML genom att öppna filen
debug/input/index.html i en webbläsare. När du är nöjd med nedladdningen och förbehandling sker
på rätt sätt, kan du skapa e-böcker i olika format enligt nedan:
ebook-convert myrecipe.recipe myrecipe.epub
ebook-convert myrecipe.recipe myrecipe.mobi
...
Om du är nöjd med ditt recept, och du känner att det finns tillräcklig efterfrågan för att motivera dess införande i
uppsättningen av inbyggda recept, lägg upp receptet på calibres receptforum9 för att dela den med andra calibreanvändare.
Observera:
På
OS
X,
kommandoradverktyget
är
inne
i
calibre
paketet,
till
exempel
om
du
installerar
Calibre
i
/Applications
är
kommandoradverktyget
i
/Applications/calibre.app/Contents/console.app/Contents/MacOS/.
Se även:
ebook-convert (sida 281) Kommandoradsgränssnittet för all e-bokkonvertering.
6 http://www.crummy.com/software/BeautifulSoup/documentation.html
7 http://lxml.de/
8 https://github.com/html5lib/html5lib-python
9 http://www.mobileread.com/forums/forumdisplay.php?f=228
1.2. Lägga till din favorit nyhetswebbplats
39
calibre Användarhandbok, Utgåva 2.22.0
1.2.4 Ytterligare läsning
Om du vill veta mer om att skriva avancerade recept med några av faciliteterna som finns i BasicNewsRecipe bör
du konsultera följande källor:
API Dokumentation (sida 303) Dokumentation av BasicNewsRecipe-klassen och alla dess viktiga
metoder och fält.
BasicNewsRecipe10 Källkoden för BasicNewsRecipe
Inbyggda recept11 Källkoden för de inbyggda recept som kommer med calibre
Calibres recept forum12 Massor av kunniga calibre recept-författare håller till här.
1.2.5 API dokumentation
API dokumentation för recept
API för skriva recept är definierade av BasicNewsRecipe (sida 303)
class calibre.web.feeds.news.BasicNewsRecipe(options, log, progress_reporter)
Basklass som innehåller logik behövs i alla recept. Av överrida progressivt mer av funktionaliteten i denna
klass, kan du göra allt mer kundanpassade / kraftfulla recept. En handledning introduktion till att skapa recept,
se Lägga till din favorit nyhetswebbplats (sida 121).
abort_recipe_processing(msg)
Orsakar att receptetnedladdningssystemet avbryter nedladdningen av detta recept, visar en enkel återkopplingsmeddelande till användaren.
add_toc_thumbnail(article, src)
Kalla detta från populate_article_metadata med attributet src för en <img> etiketten från artikeln som är
lämplig att använda som ikon representerar artikeln i innehållsförteckningen. Huruvida ikonen faktiskt
används är beroende av enhet (för närvarande endast används av Kindles). Observera att den refererade
bilden måste vara en som framgångsrikt hämtats, annars kommer det att ignoreras.
classmethod adeify_images(soup)
Om ditt recept vid konvertering till EPUB har problem med bilderna när de visas i Adobe Digital Editions,
kalla denna metod inifrån postprocess_html() (sida 306).
cleanup()
Anropas efter alla artiklar har laddats ner. Använd den för att göra godtycklig sanering som att logga ut
från prenumerationsplatser etc.
clone_browser(br)
Klona webbläsare br. Klonade webbläsare används för multi-trådade nedladdningar, eftersom mechanize
(mekanisera) inte är trådsäkert. Standardkloningsrutiner ska fånga de flesta webbläsaranpassningar, men
om du gör något exotiskt i ditt recept, ska du åsidosätta den här metoden i ditt recept och klona manuellt.
Klonade webbläsarinstanser använder samma, trådsäkra CookieJar som standard, såvida du inte har anpassat cookie-hantering.
default_cover(cover_file)
Skapa en generisk omslag för recept som inte har ett omslag
download()
Hämta och förbearbeta alla artiklar från flöde i detta recept. Denna metod bör kallas en gång för en viss
receptinstans. Kallas det mer än en gång kommer det att leda till odefinierade beteenden. :return: Path to
index.html
40
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
extract_readable_article(html, url)
Tar fram huvudartikelns innehåll från “html”, rensar upp och återvänder som en (article_html, extracted_title) tupel. Baserat på den ursprungliga läsbarhet algoritm genom Arc90.
get_article_url(article)
Överrid i en underklass för att anpassa utvinning av URL som pekar på innehållet för varje artikel. Returnera artikel-URLn. Den anropas med article, ett objekt som representerar en analyserad artikel från ett
flöde. Se ‘feedparser <https://pythonhosted.org/feedparser/>’ _. Normalt söker den efter den ursprungliga
länken (till flöde syndikerade via en tjänst som Feedburner eller pheedo) och om den hittas, returnerar detta
eller annars returneras article.link13 .
get_browser(*args, **kwargs)
Returnera en webbläsare instans som används för att hämta dokument från webben. Som standard den
returnerar en mechanize (mekanisera)14 browser instans som stöder cookies, ignorerar robots.txt, hanterar
fräschar och har ett Mozilla Firefox användaragent.
Om ditt recept kräver att du loggar in först, överrids denna metod i din underklass. Till exempel är följande
kod används i New York Times recept för att logga in för full tillgång:
def get_browser(self):
br = BasicNewsRecipe.get_browser(self)
if self.username is not None and self.password is not None:
br.open('http://www.nytimes.com/auth/login')
br.select_form(name='login')
br['USERID']
= self.username
br['PASSWORD'] = self.password
br.submit()
return br
get_cover_url()
Returnera en URL till omslagsbild för den här utgåvan eller‘ None‘. Som standard returnerar värdet av
elementet self.cover_url som normalt är None. Om du vill att ditt recept för att hämta ett omslag för eboken överrids den här metoden i din underklass, eller ställa medlemsvariabeln self.cover_url innan denna
metod anropas.
get_feeds()
Returnera en lista med RSS flöde att hämta för den här profilen. Varje element i listan måste vara ett
2-elements tupel av formen (titel, url). Om titeln är None eller en tom sträng, används titeln från flödet.
Denna metod är användbar om du receptet behöver göra en del bearbetning för att räkna ut lista med inlägg
för att ladda ner. Om så är fallet, överrid i din underklass.
get_masthead_title()
Överrids i underklass för att använda något annat än receptets titel
get_masthead_url()
Returnera en URL till redaktionsloggo till denna utgåva eller‘ None‘. Som standard returnerar värdet av
elementet self.masthead_url som normalt är None. Om du vill att ditt recept ska hämta en redationsloggon
för e-boken överrrid den här metoden i din underklass, eller sätt medlemmen variabeln self.masthead_url
innan denna metod anropas. Redaktionsloggo används i Kindle MOBI-filer.
get_obfuscated_article(url)
Om du sätter articles_are_obfuscated anropas denna metod med varje artikel URL. Det ska returnera
sökvägen till en fil i filsystemet som innehåller artikeln HTML. Filen bearbetas av den rekursiva HTMLhämtmotor, så det kan innehålla länkar till sidor / bilder på webben.
Denna metod är oftast användbart för webbplatser som försöker göra det svårt att komma åt artikelns
innehåll automatiskt.
13 https://pythonhosted.org/feedparser/reference-entry-link.html
14 http://wwwsearch.sourceforge.net/mechanize/
1.2. Lägga till din favorit nyhetswebbplats
41
calibre Användarhandbok, Utgåva 2.22.0
classmethod image_url_processor(baseurl, url)
Utför någon behandling på bildwebbadresser (kanske ta bort storleksbegränsningar för dynamiskt skapade
bilder, etc.) och returnera bearbetad URL.
index_to_soup(url_or_raw, raw=False, as_tree=False)
Bekväm metod som använder en webadress (URL) för indexera en sida och returnerar en BeautifulSoup15
av den.
url_or_raw: Antingen en webbadress eller den nedladdade indexsidan som en sträng
is_link_wanted(url, tag)
Returnerar Sann om länken ska följas eller Falsk annars. Som standard höjer NotImplementedError som
orsakar hämtningen att ignorera det.
Parametrar
• url – Webbadressen som skall följas
• tag – Ettiketen för vilken URL erhölls
javascript_login(browser, username, password)
Denna metod används för att logga in på en webbplats som använder javascript för sitt inloggningsformulär.
Efter inloggningen är klar, kopieras kakorna från webbplatsen kopieras till en normal (icke-javascript)
webbläsare och nedladdningen fortsätter som använder dessa kakor.
Ett exempel på implementering:
def javascript_login(self, browser, username, password):
browser.visit('http://some-page-that-has-a-login')
form = browser.select_form(nr=0) # Select the first form on the page
form['username'] = username
form['password'] = password
browser.submit(timeout=120) # Submit the form and wait at most two minutes for loading t
Observera att du också kan välja formulär med CSS2 väljare, så här:
browser.select_form('form#login_form')
browser.select_from('form[name="someform"]')
parse_feeds()
Skapa en lista över artiklar i listan över flöden som returneras av BasicNewsRecipe.get_feeds()
(sida 304). Returnerar en lista med Feed objekt.
parse_index()
Denna metod bör implementeras på recept för att tolka en webbplats istället för flöde för att skapa en
lista med artiklar. Typiska användningsområden är för nyhetskällor som har en “Print Edition” webbsida
som listar alla artiklar i den aktuella tryckupplagan. Om denna funktion implementeras kommer den att
användas i stället för BasicNewsRecipe.parse_feeds() (sida 305).
Det måste returnera en lista. Varje element i listan måste vara ett 2-inslag tupel av formen (fflödestitel", lista med artiklar).
Varje lista av artiklar måste innehålla ordlister på formen:
{
'title'
'url'
'date'
'description'
'content'
:
:
:
:
:
article title,
URL of print version,
The publication date of the article as a string,
A summary of the article
The full article (can be an empty string). Obsolete
15 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
42
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
do not use, instead save the content to a temporary
file and pass a file:///path/to/temp/file.html as
the URL.
}
Till exempel, se receptet för nedladdning The Atlantic. Dessutom kan du lägga till “författare” för författaren till artikeln.
Om du vill avbryta behandlingen av någon anledning och låta calibre visa användaren ett enkelt budskap i
stället för ett fel, anropa abort_recipe_processing() (sida 303).
populate_article_metadata(article, soup, first)
Anropas när varje HTML-sida som hör till artikeln hämtas. Avsedd att användas för att få artikelns metadata som författaren / sammandrag / etc. från analyserad HTML (soppa). :param artikel: Ett objekt av
klassen calibre.web.feeds.Article. Om du ändrar sammanfattningen, kom ihåg att också ändra text_summary :param soup: Tolkad HTML tillhör denna artikel :param first: Sann om och endast om
analyserad HTML är den första sidan av artikeln.
postprocess_book(oeb, opts, log)
Körs om någon efterbehandling behövs på analyserad nedladdade e-bok.
Parametrar
• oeb – Ett OEBBook-objekt
• opts – Konverteringsalternativ
postprocess_html(soup, first_fetch)
Denna metod kallas med källan till varje nedladdad: term HTML fil, efter att den analyserats för länkar och
bilder. Den kan användas för att göra godtyckligt kraftfull efterbehandling på HTML. Det bör returnera
soup efter bearbetning det.
Parametrar
• soup – En BeautifulSoup16 instans innehållande nerladdad HTML.
• first_fetch – Sann om detta är första sidan av en artikel.
preprocess_html(soup)
Denna metod kallas med källan till varje nedladdad HTML fil, innan den analyseras för länkar och bilder.
Det kallas efter rensningen som specificerats remove_tags etc. Det kan användas för att göra godtyckliga
och starka förbearbetning på HTML. Det bör returnera soup efter bearbetning det.
soup: En BeautifulSoup17 instans innehållande nerladdad HTML.
preprocess_raw_html(raw_html, url)
Denna metod anropas med källa av varje nedladdad HTML fil, innan den tolkas i ett objektträd. raw_html
är en unicode sträng som representerar råa HTML nedladdningen från webben. url är URL från vilken
HTML var nedladdad.
Obserevera att denna metod agerar innan preprocess_regexps.
Denna metod måste returnera den bearbetade raw_html som ett unicode-objekt.
classmethod print_version(url)
Ta en url som pekar på en webbsida med artikelinnehåll och returnerar URL som pekar på en utskrivbar
version av artikeln. Som standard gör ingenting. TIll exempel:
def print_version(self, url):
return url + '?&pagewanted=print'
16 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
17 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
1.2. Lägga till din favorit nyhetswebbplats
43
calibre Användarhandbok, Utgåva 2.22.0
skip_ad_pages(soup)
Denna metod anropas med källan till varje nedladdad HTML fil, innan någon av rensningsattribut som
remove_tags, keep_only_tags tillämpas. Observera att preprocess_regexps kommer redan ha använts. Det
är tänkt att låta receptet att hoppa över annonssidor. Om soup är en annonssida, returnera HTML den
verkliga sidan. Annars returneras None.
soup: En BeautifulSoup18 instans innehållande nerladdad HTML.
sort_index_by(index, weights)
Bekväm metod för att sortera titlar i index enligt weights. index‘ sorteras på plats. Returnerar index.
index: En lista av titlar.
weights: En ordlista som översätter vikt mot titel., Om något titelindex inte har vikt. antas de ha vikten 0.
classmethod tag_to_string(tag, use_alt=True, normalize_whitespace=True)
Bekväm metod som använder en BeautifulSoup19 tag-etikett och extraherar text från den rekursivt, inkluderande godtycklig CDATA sektion och alt-attribut. Returnerar en möjlig tom unicode-sträng.
use_alt: Om True försök använd alt attribut för etiketter som inte har något textinnehåll
tag: BeautifulSoup20 Tag (Etikett)
articles_are_obfuscated = False
Sätt till Sann och implementerar get_obfuscated_article() (sida 305) för hantera webbsidor som
försöker göra det svårt att skrapa fram innehåll.
auto_cleanup = False
Automatiskt extrahera all text från nedladdade artikelsidor. Använder algoritmerna från läsbarhet projektet.
Sätt denna sann innebär att du inte behöver oroa dig för att städa upp den nedladdade HTML manuellt (även
om manuell rensning alltid kommer att vara bättre).
auto_cleanup_keep = None
Specify elements that the auto cleanup algorithm should never remove. The syntax is a XPath expression.
For example:
auto_cleanup_keep = '//div[@id="article-image"]' will keep all divs with
id="article-image"
auto_cleanup_keep = '//*[@class="important"]' will keep all elements
with class="important"
auto_cleanup_keep = '//div[@id="article-image"]|//span[@class="important"]'
will keep all divs with id="article-image" and spans
with class="important"
center_navbar = True
Om sann centreras navigationslisten annars är den vänsterjusterad
compress_news_images = False
Ställ in den till Falsk för att ignorera alla skalnings- och komprimeringsparametrar och passera bilder
igenom omodifierad. Om Sann och andra komprimeringsparametrar behåller sina standardvärden, kommer
jpeg-bilder skalas för att passa in skärmmått som fastställts av utskriftsprofil och komprimeras till storleken
på de flesta (b * h) / 16 där bxh är det skalade bildens dimensioner .
compress_news_images_auto_size = 16
Den faktor som används när automatisk komprimera jpeg-bilder. Om värdet är None, är komprimering automatisk inaktiverad. Annars kommer bilderna att minskas i storlek till (b * h) / compress_news_images_auto_size byte om möjligt genom att minska kvalitetsnivån, där bxh är bildens dimensioner i pixlar. Den minsta jpeg-kvalitet kommer att vara 5/100 så det är möjligt denna begränsning inte
18 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
19 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
20 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
44
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
kommer att uppfyllas. Denna parameter kan överridas av parametern compress_news_images_max_size
som ger en fast maximal storlek för bilder. Observera att om du aktiverar scale_news_images_to_device
kommer sedan bilden först skalas och sedan dess kvalitet sänkas tills dess storlek är mindre än (b*h)/faktor
där w och h är nu bildens skalade dimensioner. Med andra ord, denna kompression sker efter skalning.
compress_news_images_max_size = None
Sätt jpeg-kvalitet så att bilder inte överskrider angiven storlek (i kBytes). Om satt, överrider denna parameter automatisk komprimering via compress_news_images_auto_size. Minimum jpeg-kvalitet kommer
vara 5/100 so det är möjligt att denna restriktion inte möts.
conversion_options = {}
Receptspecifika alternativ för att styra konvertering av nedladdat innehåll in i en e-bok. Dessa kommer
överrida alla användare eller tilläggsspecifika värden, så använd bara om det är absolut nödvändigt. TIll
exempel:
conversion_options =
'base_font_size'
'tags'
'title'
'linearize_tables'
}
{
:
:
:
:
16,
'mytag1,mytag2',
'My Title',
True,
cover_margins = (0, 0, ‘#ffffff’)
Som standard returneras omslagsbild av get_cover_url () och kommer att användas som omslag för tidskriften. Överridning av detta i ditt recept instruerar calibre att anpassa det nedladdade omslaget i en ram
vars bredd och höjd uttrycks som en procentandel av den nedladdade omslaget. cover_margins = (10, 15,
“#ffffff”) fyller omslaget med en vit marginal 10px på vänster och höger, 15px på toppen och botten. Färgnamn som fastställts på http://www.imagemagick.org/script/color.php Notera att av någon anledning, vitt
fungerar inte alltid på fönster. Använd #ffffff istället
delay = 0
Fördröjning mellan konsekutiva nedladdningar i sekunder. Argumentet kan vara ett flyttal för att indikera
mer exakt tid.
description = u’‘
Ett par rader som beskriver innehållet detta recept laddar ner. Detta kommer främst att användas i ett
användargränssnitt som presenterar en lista med recept.
encoding = None
Ange en kodningsöverridning för webbplatser som har en felaktig charset-specifikation. Det vanligaste är
att ange latin1 och använda cp1252. Om None, försöka identifiera kodningen. Om det är en anropbar,
anropas den anropbara med två argument: Receptobjektet och den källa som skall avkodas. Det måste
returnera den avkodade källan.
extra_css = None
Ange någon extra CSS som bör läggas till ladda ned HTML-filer. Det kommer att införas i <style> etiketter,
precis före den avslutande </head> etikett därmed tvingande allt CSS utom det som deklareras med hjälp
av stilattribut på individuella HTML etiketter . Exempelvis:
extra_css = '.heading { font: serif x-large }'
feeds = None
Förteckning över flöde för att ladda ner. Kan vara antingen [url1, url2, ...] eller [(’title1’,
url1), (’title2’, url2),...]
filter_regexps = []
Lista över reguljära uttryck som avgör vilka länkar att ignorera. Om den är tom ignoreras det. Endast
användas om is_link_wanted inte implementeras. Exempelvis:
1.2. Lägga till din favorit nyhetswebbplats
45
calibre Användarhandbok, Utgåva 2.22.0
filter_regexps = [r'ads\.doubleclick\.net']
kommer ta bort alla URLer som har ads.doubleclick.net in sig.
Bara
en
av
BasicNewsRecipe.match_regexps
(sida
BasicNewsRecipe.filter_regexps (sida 309) skulle bara definierad.
309)
eller
ignore_duplicate_articles = None
Ignorera dubbletter av artiklar som finns i mer än ett avsnitt. En dubblettartikel är en artikel som har samma
titel och / eller webbadress. Att ignorera artiklar med samma titel, ställa detta till:
ignore_duplicate_articles = {'title'}
För att använda URL:er i stället, sätt den till:
ignore_duplicate_articles = {'url'}
För träff mot titel eller URL, sätt den till:
ignore_duplicate_articles = {'title', 'url'}
keep_only_tags = []
Håll endast specificerade etiketter och deras barn. För formatet för att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Om denna lista inte är tom, då blir <body> etikett
tom och återfylld med etiketter som passar poster i denna lista. Till exempel:
keep_only_tags = [dict(id=['content', 'heading'])]
kommer bara ha etiketter som har ett id attribut av “content” eller “heading”.
language = ‘und’
Språket som nyheterna är i. Måste vara en ISO-639-kod antingen två eller tre tecken långt
masthead_url = None
Som standard, kommer calibre att använda en redaktionslogga (endast Kindle). Åsido detta i ditt recept för
att ge en url för att användas som en redaktionslogga.
match_regexps = []
Lista över reguljära uttryck som avgör vilka länkar att följa. Om den är tom, ignoreras den. Endast användas
om is_link_wanted inte implementeras. Exempelvis:
match_regexps = [r'page=[0-9]+']
kommer passa mot alla URLer som har page=some number i sig.
Bara
en
av
BasicNewsRecipe.match_regexps
(sida
BasicNewsRecipe.filter_regexps (sida 309) skulle bara definierad.
309)
eller
max_articles_per_feed = 100
Maximalt antal artiklar att ladda ned från varje flöde. Den är primärt användbar för flöde som inte har
artikeldatum. För de flesta flödes, bör du använda BasicNewsRecipe.oldest_article (sida 310)
needs_subscription = False
Om Sann kommer gränssnittet att be användaren om ett användarnamn och lösenord för att använda vid
nedladdning. Om inställningen är “frivilligt” att använda ett användarnamn och lösenord blir tillval
no_stylesheets = False
Bekväm flagga för att inaktivera laddning av formatmallar för webbplatser som har alltför komplexa mallar
som är olämpliga för konvertering till e-böcker format. Om Sann hämtas inte mallar och bearbetas
oldest_article = 7.0
Äldsta artikel att ladda ner från denna nyhetskälla. I dagarna.
46
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
preprocess_regexps = []
Lista av regexp substitutionsregler att köras vid nedladdning HTML. Varje element i listan bör vara en
tupel. Första elementet av tupel bör vara ett kompilerat regujärt uttryck och andra en anropsbar som tar ett
passande objekt och returnerar en sträng för att ersätta träffen. Till exempel:
preprocess_regexps = [
(re.compile(r'<!--Article ends here-->.*</body>', re.DOTALL|re.IGNORECASE),
lambda match: '</body>'),
]
kommer ta bort allt från <!–Article ends here–> till </body>.
publication_type = ‘unknown’
Publikationstyp Inställd på tidning, tidskrift eller blogg. Om satt till None, kommer ingen publikationstypsmetadata skrivas till opf-filen.
recipe_disabled = None
Ställ in på en icke tom sträng för att inaktivera detta recept. Strängen kommer att användas som inaktiverade meddelande
recursions = 0
Antal nivåer av länkar att följa på en artikelwebbsida
remove_attributes = []
Lista över attribut för att ta bort från alla etiketter. Exempelvis:
remove_attributes = ['style', 'font']
remove_empty_feeds = False
Om Sann tas tomma flöden bort från utdata. Det här alternativet har ingen effekt om parse_index överrids i
underklassen. Den är avsedd endast för recept som returnerar en lista med flöden som använder feeds eller
get_feeds() (sida 304). Den används också om du använder alternativet ignore_duplicate_articles.
remove_javascript = True
Bekväm flagga att strippa alla javascript etiketter från den nedladdade HTMLn
remove_tags = []
Lista med etiketter som skall avlägsnas. Angivna etiketter tas bort från nedladdad HTML. En etiketter
anges som en ordlista på formen:
{
name
attrs
: 'tag name',
#e.g. 'div'
: a dictionary, #e.g. {class: 'advertisment'}
}
Alla tangenter är valbara. För full förklaring av sökningskriteria, se Beautiful Soup21 Ett vanligt exempel:
remove_tags = [dict(name='div', attrs={'class':'advert'})]
Detta tar bort alla <div class=”advert”> etiketter och deras barn från nerladdade HTML.
remove_tags_after = None
Ta bort alla etiketter som förekommer efter angiven etikett. För formatet att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Till exempel:
remove_tags_after = [dict(id='content')]
kommer ta bort alla etiketter efter första elementet med id=”content”.
21 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#Searching%20the%20Parse%20Tree
1.2. Lägga till din favorit nyhetswebbplats
47
calibre Användarhandbok, Utgåva 2.22.0
remove_tags_before = None
Ta bort alla etiketter som förekommer före angiven etikett. För formatet att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Till exempel:
remove_tags_before = dict(id='content')
kommer ta bort alla etiketter före första elementet med id=”content”.
requires_version = (0, 6, 0)
Minimum version av calibre som behövs för detta recept
reverse_article_order = False
Omvänd ordning av artiklar i varje flöde
scale_news_images = None
Maximala dimensioner (w, h) att skala bilder till. Om scale_news_images_to_device är Sann så är detta
inställt på enhetens skärmmått för utskriftsprofil om det inte finns någon profil som, i vilket fall det är kvar
på oavsett värde den har tilldelats (standard None).
scale_news_images_to_device = True
Skala om bilder för att passa enhetens skärmmått satta av utdataprofilen. Ignoreras om ingen utdataprofil
är angiven.
simultaneous_downloads = 5
Antal samtidiga nedladdningar. Sätt till 1 om servern är petig. Automatisk reducerat till 1 om attr:BasicNewsRecipe.delay > 0
summary_length = 500
Maximal antal tecken i den korta beskrivningen
template_css = u’\n .article_date {\n color: gray; font-family: monospace;\n }\n\n .article_description {\n text-indent: 0
CSS som används för att utforma mallar, dvs de navigeringsfält och innehållsförteckningar. I stället för att
överrida denna variabel bör du använda extra_css i receptet för att anpassa utseende och beteende.
timefmt = ‘ [%a, %d %b %Y]’
Formatsträng för datum att visa på första sidan. Som standard: Day_Name, Day_Number Month_Name
Year
timeout = 120.0
Tidsbegränsning för hämta filer från servern i sekunder
title = u’Ok\xe4nd nyhetsk\xe4lla’
Titel att använda för e-bok
use_embedded_content = None
Normalt försöker vi gissa om ett flöde har hela artiklar inbäddade i den baserat på längden av inbäddat innehåll. Om None, sedan standard används gissning. Om True då antar vi alltid flöden har inbäddat innehåll
och om‘ False‘ kan vi alltid utgå från flödet inte har inbäddat innehåll.
use_javascript_to_login = False
Om du sätter detta till Sann, så använder calibre javascript för att logga in på webbplatsen. Detta behövs
för vissa webbplatser som kräver användning av javascript för att logga in. Om du ställer in detta till
Sann måste du implementera javascript_login() (sida 305) metoden, för att göra den faktiska
inloggningen.
1.3 E-bokläsare
calibre inkluderar en inbyggd e-bokläsare som kan visa de flesta e-bokformaten. Denna läsare är väldigt anpassbar oc
har många avancerade funktioner.
48
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
•
•
•
•
•
Startar läsaren (sida 49)
Navigera omkring i en e-bok (sida 49)
Anpassning av utseende av din läsupplevelse (sida 51)
Ordlistsuppslag (sida 51)
Kopiering av text och bilder (sida 51)
1.3.1 Startar läsaren
Du kan visa godtycklig bok i ditt calibre-bibliotek genom att välja boken och trycka på visa-knappen. Detta kommer
öppna upp boken i e-bokläsare. Du kan också sätta igång läsare själv från start-menyn i Windows eller genom att
använda kommandot ebook-viewer i Linux och OS X (du måste installera kommandoverktyget i OS X först genom
Inställningar->Avancerat->Diverse).
1.3.2 Navigera omkring i en e-bok
, eller genom
Du kan “bläddra sidor” i en bok genom att använda Nästa sida och Föregående sida knappar
att trycka på “Page Up/Page Down”-knapparna. Till skillnad mot de flesta e-bokläsare, kräver inte calibre dig att visa
böcker i sidläge. Du kan rulla andelar som är mindre än en sida genom att använda rullisten eller diverse anpassbara
tangentbordssnabbval.
Bokmärken
När du är mitt i en bok och stänger läsare, kommer den komma i håg var du slutade läsa och återvända dit nästa gång
du öppnar boken. Du kan också sätt in bokmärken i boken genom att använda bokmärkes-knappen
. När
EPUB-formaterade böcker läses, sparas dessa bokmärken faktiskt i själva EPUB-filen. Du kan lägga till bokmärken,
sedan skicka filen till en vän. När vännen sedan öppnar kommer hen se dina bokmärken.
Innehållsförteckning
Om boken du läser har en innehållsförteckning, kan du nå den genom att trycka på innehållsförteckningsknappen
. Detta kommer att ta fram en lista av sektioner i boken. Du kan klicka på valfri och hoppa till denna del av
boken.
Navigering genom plats
E-böcker till skillnad mot böcker, har inget sidkoncept. I stället, allt eftersom du läser genom boken, kommer du notera
att din position i boken visas i övre vänstra hörnet i en ruta som denna
. Detta är både din nuvarande
position och den totala längden av boken. Dessa nummer är oberoende av skärmstorlek och teckenstorlek som du visar
1.3. E-bokläsare
49
calibre Användarhandbok, Utgåva 2.22.0
boken i, och de spelar en liknande roll till sidnummer i pappersboken. Du kan skriva in valfritt nummer du vill gå till
motsvarande plats i boken.
calibre har också en bekvämt referensläge. Du kan slå på detta genom att klicka på referenslägesknappen
. När
du gör detta, kommer calibre varje gång du för musen över en paragraf visa ett unikt nummer bestående av sektionoch paragrafnummer
Du kan använda detta nummer för att entydigt hänvisa till delar av böckerna när man diskuterar det med vänner eller
hänvisa till den i andra verk. Du kan skriva in dessa nummer i rutan Gå till högst upp i fönstret för att gå till en särskild
hänvisning plats.
Om du klickar på länkar inne i e-boken kommer du kunna ta dig till olika delar av boken, som slutnotering, kan du
använda dig av framåt- och bakåtknappar i övre vänstra hörnet för att återvända var du var. Dessa knappar beter sig
precis som dem i en webläsare.
50
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.3.3 Anpassning av utseende av din läsupplevelse
Du kan ändra typsnittsstorlek på direkten genom att typsnittsstorleksknapparna
. Du kan också få läsaren att
. Genom att klicka på inställningsknappen
,
visa helskärmsläge genom att trycka Helskärmsknappen
kan du ändra grundinställningen av typsnitt som läsaren använder samt typsnittsstorlek till de du önskar ha när läsaren
startar.
Mer avancerade anpassningar kan åstadkommas genom inställningar för användarformatmall. Detta är en formatmall
som du kan välja att tillämpa på alla böcker. Genom att använda detta kan du göra saker som ha vit text på svart
bakgrund, ändra paragrafstilar, textmarginaler, etc. TIll exempel av anpassad formatmal som används av calibre’s
användare, se the forums22 .
1.3.4 Ordlistsuppslag
Du kan slå upp betydelsen av ord i aktuell bok genom att högerklicka på ett ord. calibre använder allmänt tillgängliga
ordboksserver dict.org för att slå upp ord. Definitionen visas i en liten ruta längst ner på skärmen.
1.3.5 Kopiering av text och bilder
Du kan välja text och bilder genom att dra innehållet med din mus och sedan högerklicka för att kopiera till klippbordet.
Kopierat material kan sedan klistras in i en annan applikation som ren text och bilder.
1.4 E-bokkonvertering
calibre har ett konverteringssystem som är utformat för att vara mycket lätt att använda. Normalt du bara lägger till
en bok till calibre, klicka konvertera och calibre kommer att försöka intensivt för att generera utdata som är så nära
som möjligt till ingången. Däremot accepterar calibre ett mycket stort antal indataformat, inte alla som är så lämpliga
som andra för konvertering till e-böcker. I fråga om sådana inmatningsformat, eller om du bara vill ha större kontroll
över konverteringssystemet, har calibre en hel del alternativ för att finjustera konverteringen. Observera dock att calibre
omvandlingssystemet inte är en ersättning för en fullständig e-bokeditor. Om du vill redigera e-böcker, rekommenderar
jag att du först konverterar dem till ePub eller AZW3 med calibre och sedan använder Redigera Bok-funktionen för
att få dem i perfekt form. Du kan sedan använda den redigerade e-boken som indata för omvandling till andra format
i calibre.
Detta dokument kommer avser främst konverteringsinställningarna som finns i dialogrutan omvandlingen, bilden nedan. Alla dessa inställningar är även tillgängliga via kommandoraden för konvertering, dokumenterat på ebook-convert
(sida 281). I calibre, kan du få hjälp av någon enskild inställning genom att hålla musen över det, då kommer ett verktygstips visas som beskriver inställningen.
22 http://www.mobileread.com/forums/showthread.php?t=51500
1.4. E-bokkonvertering
51
calibre Användarhandbok, Utgåva 2.22.0
Innehåll
•
•
•
•
•
•
•
•
•
•
•
52
Introduktion (sida 53)
Utseende (sida 54)
Sidinställning (sida 56)
Heuristisk bearbetning (sida 57)
Sök och ersätt (sida 58)
Struktrurdetektion (sida 58)
Innehållsförteckning (sida 59)
Att använda bilder som kapitelrubriker när du konverterar HTML-inmatningsdokument (sida 61)
Använda etikettattribut för att leverera texten för posterna i innehållsförteckningen (sida 61)
Hur alternativen är inställda/sparade för Konvertering (sida 61)
Formatspecifika tips (sida 62)
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.4.1 Introduktion
Det första man måste förstå om omvandlingssystemet är att det är utformat som en rörledning. Schematiskt ser det ut
så här:
Inmatningsformatet först konverteras till XHTML med lämplig indatatillägg. Denna HTML transformeras sedan. I det
sista steget, är den bearbetade XHTML omvandlad till det angivna utdataformat med lämplig utdatatillägg. Resultaten
av omvandlingen kan variera kraftigt, beroende på inmatningsformatet. Vissa format konverterar mycket bättre än
andra. En lista över de bästa källformaten för omvandling finns här .
De omvandlingar som verkar på XHTML-utdata är där allt arbete sker. Det finns olika transformer, till exempel för
att sätta in bokens metadata som en sida i början av boken, för att upptäcka kapitelrubriker och automatiskt skapa
en innehållsförteckning, att proportionellt justera teckenstorlekar och så vidare. Det är viktigt att minnas att alla omvandlingar verkar på XHTML-utdatas av indatatillägget, inte på indatafilen. Så, till exempel, om du ber calibre att
konvertera en RTF-fil till EPUB, kommer den först omvandlas till XHTML internt, de olika transformationer kommer
appliceras på XHTML och sedan kommer utdatatillägget att skapa EPUB-filen, automatiskt generera all metadata ,
innehållsförteckning, och så vidare.
Du kan se denna process i handling genom att använda felsökningsalternativet
. Bara ange sökvägen
till en katalog för felsökningsutdata. Under konverteringen kommer calibre placera XHTML genereras av de olika
stegen i omvandlingen pipeline i olika underkataloger. De fyra underkataloger är:
1.4. E-bokkonvertering
53
calibre Användarhandbok, Utgåva 2.22.0
Tabell 1.2: Stadier av omvandlingen
Stadie
indata
analyserad
struktur
bearbetad
Beskrivning
Det innehåller HTML-utdata från indatatillägget. Använd detta för att felsöka Input Plugin.
Resultatet av förbehandling och konvertering till XHTML utsignalen från indatatillägget. Används för
att felsöka strukturdetektion.
Efterstrukturell detektion, men innan CSS utplattning och teckenstorlekskonvertering. Används för att
felsöka teckenstorlekskonvertering och CSS-omvandlingar.
Precis innan e-bok leds till utdatatillägget. Används för att felsöka utdatatillägget.
Om du vill redigera indatadokumentet lite innan calibre konverterar det, är det bästa att göra redigera filerna i indata
undermapp och sedan packa upp och använda zip-filen som indataformat för efterföljande omvandlingar. För att göra
detta använder Edit meta information dialogrutan för att lägga zip-filen som ett format för boken och sedan, i det övre
vänstra hörnet i konverteringsdialogrutan väljer ZIP som indataformat.
Detta dokument kommer att främst ta itu med de olika transformer som verkar på mellan XHTML och hur man kan
kontrollerar dem. I slutet är några tips som är specifika för varje indata- och utdataformat.
1.4.2 Utseende
Innehåll
•
•
•
•
Teckenstorleksomskalning - Typgradsjustering (sida 54)
Styckesavstånd (sida 55)
Extra CSS (sida 55)
Diverse (sida 56)
Denna grupp av alternativ styr olika aspekter av utseendet och känslan av den konverterade e-boken.
Teckenstorleksomskalning - Typgradsjustering
En av de trevligaste inslagen i e-läsupplevelse är möjligheten att enkelt justera teckenstorlek för att passa individuella behov och ljusförhållanden. calibre har sofistikerade algoritmer för att säkerställa att alla böcker det avger har
konsistenta teckenstorlekar, oavsett vilken teckenstorlekar anges i indatadokumentet.
Basstorlek för teckensnitt på ett dokument är den vanligaste teckenstorlek/typgrad i detta dokument, det vill säga storleken på den största delen av texten i dokumentet. När du anger en Basteckenstorlek, skalar calibre automatiskt alla
teckenstorlekar i dokumentet proportionellt, så att den vanligaste teckenstorleken blir den angivna basstorleken och
andra teckenstorlekar skalas på lämpligt sätt. Genom att välja en större basstorlek, kan du göra teckensnitten i dokumentet större och vice versa. När du ställer in basstorleken, för bästa resultat, bör du också ställa in teckenstorleken.
Normalt kommer calibre automatiskt att välja en basstorlek lämplig för utdataprofil som du har valt (se Sidinställning
(sida 56) ). Du kan dock åsidosätta detta här ifall standarden inte är lämplig för dig.
Teckenstorleksnycklar alternativet kan du styra hur icke-baserade teckenstorlekar är skalas. Typsnittetets omskalningsalgoritm fungerar med hjälp av en teckenstorleksnyckel, vilket helt enkelt är en kommaseparerad lista med teckenstorlekar. Teckenstorleksnyckel anger för calibre hur många “steg” större eller mindre en given teckenstorlek bör jämföras
med basstorleken. Tanken är att det ska finnas ett begränsat antal teckenstorlekar i ett dokument. Till exempel, en
storlek för brödtext, ett par storlekar för olika nivåer av rubriker och ett par storlekar för upphöjd / nersänkt typsnitt
och fotnoter. Teckenstorleksnyckel tillåter calibre att dela upp de teckenstorlekar i inmatningsdokumenten i separata
“fack” som motsvarar de olika logiska teckenstorlekarna.
54
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Låt oss illustrera med ett exempel. Antag källdokumentet vi konverterar producerades av någon med utmärkt syn och
har en basstorlek på 8 pt. Det innebär att huvuddelen av texten i dokumentet är dimensionerad för 8pts, medan rubriker
är något större (säg 10 och 12pt) och fotnoter något mindre som 6pt. Nu om vi använder följande inställningar:
Base font size : 12pt
Font size key : 7, 8, 10, 12, 14, 16, 18, 20
Utdatadokumentet kommer att ha en basstorlek på 12 punkter, rubrikerna 14 och 16pt och fotnoter i 8 pt. Antag nu vi
vill göra att den största rubriken storleken sticker ut mer och göra fotnötter lite större också. För att uppnå detta bör
det teckensnittsnyckel ändras till:
New font size key : 7, 9, 12, 14, 18, 20, 22
De största rubrikerna blir nu 18 pt, medan fotnötter blir 9pt. Du kan spela med dessa inställningar för att försöka lista
ut vad som skulle vara optimalt för dig med hjälp av tecken omskalningsguiden som kan nås genom att klicka på den
lilla knappen bredvid Teckenstorleksnyckel.
Alla omskalningar av teckenstorleken i omvandlingen kan även stängas av här, om du vill bevara teckenstorlekar i
inmatningsdokumentet.
En relaterad inställning är Radhöjd. Radhöjd styr den vertikala höjden på rader. Som standard (ett radavstånd av 0)
utförs ingen manipulation av linjehöjder. Om du anger ett icke-standardvärde, kommer linjehöjder sättas på alla platser
som inte anger sina egna linjehöjder. Detta är dock något av en trubbigt vapen och bör användas sparsamt. Om du vill
justera linjehöjder för vissa avsnitt av indata, är det bättre att använda Extra CSS (sida 55).
Styckesavstånd
Normalt ska stycker/paragrafer i XHTML återges med en tom rad mellan dem och ingen ledande textindrag. calibre
har ett par alternativ för att styra detta. Ta bort blankrad mellan stycken ser med kraft till att alla stycken har någon
bland paragraf/styckesavstånd. Den sätter också textindraget till 1.5em (kan ändras) för att markera början på varje
punkt. Infoga tom rad gör det motsatta, som garanterar att det finns exakt en tom rad mellan varje par av stycken. Båda
dessa alternativ är mycket omfattande, avlägsna avstånd, eller sätta in den för alla stycken (tekniskt <p> och <div>
etiketter). Det är så att du bara kan ställa in alternativet och vara säker på att den presterar som utlovat, oavsett hur rörig
indatafilen är. Det enda undantaget är när indatafilen använder hårda radbrytningar att genomföra interstyckeavstånd.
Om du vill ta bort avståndet mellan alla stycken, förutom några få utvalda, använd inte dessa alternativ. I stället lägger
du till följande CSS-kod till Extra CSS (sida 55):
p, div { margin: 0pt; border: 0pt; text-indent: 1.5em }
.spacious { margin-bottom: 1em; text-indent: 0pt; }
Då, i ditt källdokument, markera de punkter som behöver avståndet med class=”spacious”. Om indatadokumentet inte
är i HTML, använd felsökningsalternativet, beskrivet i inledningen till att få HTML (använd input underkatalog).
Extra CSS
Det här alternativet kan du ange godtyckliga CSS som kommer att tillämpas på alla HTML-filer i inmatningen. Denna
CSS appliceras med mycket hög prioritet och bör åsidosätta de flesta CSS närvarande i själva inmatningsdokumentet.
Du kan använda denna inställning för att finjustera presentation / layout av dokumentet. Till exempel, om du vill att
alla stycken i klassen endnote att vara högerställda, lägg bara till:
.endnote { text-align: right }
eller om du vill ändra indraget på alla stycken:
p { text-indent: 5mm; }
1.4. E-bokkonvertering
55
calibre Användarhandbok, Utgåva 2.22.0
Extra CSS är ett mycket kraftfullt alternativ, men du behöver en förståelse för hur CSS fungerar för att använda den
till sin fulla potential. Du kan använda alternativet felsök rörledningsalternativet som beskrivs ovan för att se vad CSS
finns i ditt indatadokument.
Diverse
Det finns några fler alternativ i det här avsnittet.
Ingen textjustering Normalt, om utdataformatet stöder det, kommer calibre tvinga e-boksutdata att ha justerad text
(dvs en jämn högermarginal). Detta alternativ kommer att stänga av detta beteende, i vilket fall oavsett kommer
justering som anges i indatadokument användas istället.
Omvandla data i tabeller till linjära data Några dåligt utformade dokument använder tabeller för att styra layouten
på texten på sidan. Vid konvertering har dessa dokument ofta text som rinner ut från sidan och andra artefakter.
Detta alternativ kommer att extrahera innehållet från tabellerna och presentera den på ett linjärt sätt. Observera
att detta alternativ linjärisera alla bord, så att använd bara den om du är säker ingångsdokumentet använder inte
tabeller för verkliga ändamål, som att presentera tabellinformation.
Translitterera Unicode-tecken Transkribera Unicode-tecken till en ASCII-representation. Använd med försiktighet
eftersom detta kommer att ersätta Unicode-tecken med ASCII. Till exempel kommer det att ersätta “Михаил
Горбачёв” med “Mikhail Gorbachiov”. Observera också att i de fall där det finns flera representationer av ett
tecken (tecken som delas av kinesiska och japanska till exempel) representation som används av det största antal
människor kommer att användas (kinesiska i föregående exempel). Det här alternativet är främst användbart om
du ska visa e-bok på en enhet som inte har stöd för unicode.
Teckenkodning för indata Äldre handlingar ibland inte anger sin teckenkodning. Vid konvertering kan detta resultera
i icke-engelska tecken eller specialtecken som typografiska citattecken skadas. calibre försöker automatiskt
identifiera teckenkodning i källdokumentet, men det är inte alltid som den lyckas. Du kan tvinga den att anta
en viss teckenkodning med den här inställningen. CP1252 är en vanlig kodning för handlingar med hjälp av
Windows-programvara. Du bör också läsa Hur konverterar jag min fil som innehåller icke-engelska tecken, eller
typografiska citattecken? (sida 100) för mer om kodningsfrågor.
1.4.3 Sidinställning
Alternativen för utskriftsformat är till för att styra skärmlayout, som marginaler och skärmstorlekar. Det finns alternativ
till sidmarginalsinställningar, som kommer att användas av utdatatillägget, om det valda utmatningsformatet stödjer
sidmarginaler. Dessutom bör du välja en inmatningsprofil och en utskriftsprofil. Båda uppsättningarna av profiler i
princip behandlar hur man ska tolka mått i dokumentets indata/utdata, skärmstorlekar och standardtypsnitts omskalningsnycklar.
Om du vet att filen du konverterar var avsett att användas på en viss enhet / mjukvaruplattform, välj motsvarande
inmatningsprofil, annars bara välja standardinmatningsprofil. Om du vet att filerna som du producerar är avsedda för
en viss typ enhet, välj motsvarande resultatprofil. Särskilt för MOBI-utdatafiler, bör du välja Kindle, för Microsoft
Reader LIT och EPUB Sony Reader. I fallet med EPUB kommer Sony Reader profil resultera i EPUB-filer som
kommer att fungera överallt. Det har dock vissa biverkningar, som att sätta in konstgjorda avsnittsbrytningar för att
hålla interna komponenter under tröskelstorlek, behövs för Sony-enheter. Särskilt för iPhone / Android-telefoner, välj
Sony-utskriftsprofil. Om du vet att dina EPUB-filer kommer inte att läsas på en Sony eller liknande enhet, använda
standardutskriftsprofil. Om du vill skriva MOBI-filer som inte är avsedda för Kindle, välj utskriftsprofil Mobipocket
books .
Resultatprofilen styr även skärmstorleken. Detta kommer att orsaka, till exempel bilder som automatiskt storleksändras
vara tjänliga till skärmen i vissa utdataformat. Så välj en profil av en enhet som har en skärmstorlek som liknar din
enhet.
56
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.4.4 Heuristisk bearbetning
Heuristisk bearbetning erbjuder en mängd olika funktioner som kan användas för att försöka upptäcka och åtgärda
vanliga problem i dåligt formaterade indatadokument. Använd dessa funktioner om ditt indatadokument lider av dålig
formatering. Eftersom dessa funktioner är beroende av gemensamma mönster, var medveten om att ett alternativ i
vissa fall kan leda till sämre resultat, så använd med försiktighet. Som ett exempel, kommer flera av dessa alternativ ta
bort alla icke-mellanslagsbrytande entiteter, eller kan innefatta Falskt positiva resultat avseende funktionen.
Aktivera heuristisk bearbetning Det här alternativet aktiverar calibre heuristisk bearbetnings steg av omvandlingen.
Detta måste vara aktiverat för olika delfunktioner som skall tillämpas
Ta bort radbrytningar Aktivering av detta alternativ kommer att orsaka att calibre försöker upptäcka och korrigera
hårda radbrytningar som finns inom ett dokument med ledtrådar som skiljetecken och linjelängd. calibre kommer
först att försöka att upptäcka om hårda radbrytningar finns, om de inte tycks existera calibre kommer inte att
försöka ta bort radbrytningar. Radbrytningsfaktor kan minskas om man vill “tvinga” calibre att veckla ut rader.
Faktor för ta bort radbrytningar Det här alternativet styr algoritmen calibre använder för att ta bort hårda radbrytningar. Till exempel, om värdet av detta alternativ är 0,4, innebär att calibre kommer att ta bort hårda radbrytningar från slutet av linjer vars längd är mindre än längden på 40% av alla rader i dokumentet. Om dokumentet
har bara några radbrytningar som behöver korrigering, då detta värde bör minskas till någonstans mellan 0,1 och
0,2.
Identifiera och markera oformaterade kapitelrubriker och underrubriker Om dokumentet inte har kapitelrubriker
och titlar formaterade annorlunda från resten av texten, kan calibre använda det här alternativet för att försöka
detektions dem och omge dem med rubriketiketter. <H2> etiketter används för kapitelrubriker; <H3> etiketter
används för några titlar som upptäcks.
Den här funktionen kommer inte att skapa en innehållsförteckning, men i många fall kommer det att orsaka
calibre inställningar standard kapitlet upptäckt att korrekt upptäcka kapitel och bygga en innehållsförteckning.
Justera XPath enligt Structure Detection om TOC inte skapas automatiskt. Om det inte finns några andra rubriker
som används i dokumentet sedan inställningen “// h: h2” under Structure Detection skulle vara det enklaste sättet
att skapa en innehållsförteckning för dokumentet.
De insatta rubriker är inte formaterad, för att tillämpa formatering använd Extra CSS alternativet under konverteringsinställningar för utseende och beteende. Till exempel, för att centrera rubriketiketter, använd följande:
h2, h3 { text-align: center }
Renumber sequences of <h1> or <h2> tags Vissa förlag formaterar kapitelrubriker som använder flera <h1> eller
<h2> etiketter sekventiellt. calibres standardkonverteringsinställningar kommer orsaka att sådana titlar delas
upp i två delar. Detta alternativ kommer att numrera rubrikensetiketter för att undvika delning.
Ta bort tomma rader mellan stycken Detta alternativ kommer att få calibre att analysera tomma rader som ingår i
dokumentet. Om varje stycke interfolierade med en tom rad, då kommer calibre att ta bort alla dessa tomma
stycken. Sekvenser av flera tomma rader kommer att betraktas som scenbrott och behållas som ett enda stycke.
Detta alternativ skiljer sig från ‘Ta bort styckesavstånd “alternativ under” Utseende och känsla “i att det faktiskt
ändrar HTML-innehåll, medan det andra alternativet ändrar dokumentmallar. Detta alternativ kan också ta bort
stycken som infogats med hjälp av calibres “Infoga tom rad” alternativ.
Se till scenslut är konsekvent formaterade Med detta alternativ kommer calibre att försöka upptäcka vanliga scenbrytmarkörer och se till att de är centrerad. “Mjuka” scen brytmarkörer, dvs scenraster endast definieras av extra
tomrum, är utformade för att säkerställa att de inte kommer att visas i samband med sidbrytningar.
Ersätt scen byten Om det här alternativet konfigureras sedan ersätter calibre scenbrytmarkörer som hittas med den
nya texten som anges av användaren. Observera att vissa prydnadstecken kanske inte stöds i alla läser enheter.
Generellt bör man undvika att använda html-etiketter, calibre kommer bortse från några etiketter och använda
fördefinierade uppmärkning. <hr /> etiketter, det vill säga övergripande regler och <img> -etiketter undantages.
Horisontella regler kan eventuellt fås med stilar, om du väljer att lägga till din egen stil se till att inkludera
1.4. E-bokkonvertering
57
calibre Användarhandbok, Utgåva 2.22.0
“bredd”-inställning, annars informations stilen kommer att slängas. Bildetiketter kan användas, men calibre ger
inte möjlighet att lägga till bilden under konverteringen, måste detta ske i efterhand med hjälp av “Redigera
Book”-funktionen.
Exempel bildetiketter (placera bilden i en “Bilder”-mapp inne i epub efter konvertering):
<img style=”width:10%” src=”../Images/scenebreak.png” />
Exempel horisontell linje med stilar: <hr style=”width:20%;padding-top: 1px;border-top: 2px
ridge black;border-bottom: 2px groove black;”/>
Ta bort onödiga bindestreck calibre kommer att analysera alla bindestrecksinnehåll i dokumentet när det här alternativet är aktiverat. Dokumentet i sig används som ett lexikon för analys. Detta gör calibre att noggrant ta bort
bindestreck för något ord i dokumentet på något språk, tillsammans med påhittade och obskyra vetenskapliga
ord. Den primära nackdelen är ord som förekommer endast en gång i dokumentet ändras inte. Analys sker i
två omgångar, det första passet analyserar radslut. Linjer är bara oförpackade om ordet finns med eller utan
bindestreck i dokumentet. Det andra passet analyserar alla ord med bindestreck i hela dokumentet, bindestreck
tas bort om ordet förekommer på andra ställen i dokumentet utan träff.
Kursivera vanliga ord och mönster När funktionen är aktiverad kommer calibre söka efter vanliga ord och mönster
som betecknar kursiv och kursivera dem. Exempel är vanliga textkonventioner såsom ~ ordet ~ eller fraser som
generellt bör vara kursiv, t.ex. latin fraser som “etc.” eller “et cetera.
Byt enhetstrecksatserna med CSS strecksatser Vissa dokument använder en konvention att definiera textindrag med
att använd hårda blanka enheter. När det här alternativet är aktiverat calibre kommer att försöka upptäcka denna
typ av formatering och konvertera dem till en 3% textindrag hjälp av css.
1.4.5 Sök och ersätt
De här alternativen är användbart främst för konvertering av PDF-dokument eller OCR omvandlingar, även om de
också kan användas för att åtgärda många dokument-specifika problem. Som ett exempel kan lämna bladen bakom
sidhuvud och sidfot i texten några konverteringar. Dessa alternativ använder vanliga uttryck för att försöka upptäcka
sidhuvuden, sidfötter eller annan godtycklig text och ta bort eller byta ut dem. Kom ihåg att de är verksamma på mellan
XHTML producerad av konverteringsrörledning. Det finns en guide som hjälper dig att anpassa de reguljära uttryck
för dokumentet. Klicka på trollstaven bredvid uttrycksrutan och klicka på “Test” knappen efter att komponerat ditt
sökuttryck. Framgångsrika träffar kommer att markeras i gult.
Sökningen fungerar med hjälp av ett python-reguljärt uttryck. Allt passande texten tas helt enkelt bort från dokumentet
eller byts ut med hjälp av ersättningsmönstret. Ersättningsmönster är valfritt, om det lämnas tomt kommer text som
passar sökbegreppet kommer att tas bort från dokumentet. Du kan läsa mer om reguljära uttryck och deras syntax på:
ref: regexptutorial.
1.4.6 Struktrurdetektion
Strukturdetektion innebär att calibre försöker sitt bästa för att upptäcka strukturella element i indatadokumentet, när
de inte är korrekt angivet. Till exempel, kapitel, sidbrytningar, rubriker, sidfot, etc. Som ni kan föreställa er, varierar
denna process mycket från bok till bok. Lyckligtvis har calibre mycket kraftfulla alternativ för att styra detta. Med makt
kommer komplexitet, men om när du tar dig tid att lära sig komplexiteten, upptäcker du att det väl värt ansträngningen.
Kapitel och sidbrytningar
calibre har två uppsättningar av alternativ för kapiteldetektion och infoga sidbrytningar. Detta kan ibland vara lite
förvirrande, som standard, kommer calibre infoga sidbrytningar innan upptäckta kapitel samt de platser som upptäckts
av alternativet sidbrytningar. Anledningen till detta är att det ofta finns platser där sidbrytningar bör införas som inte är
kapitelgränser. Dessutom upptäckta kapitlen kan eventuellt införas i automatiskt genererade innehållsförteckningen.
58
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
calibre använder XPath, ett kraftfullt språk för att göra det möjligt för användaren att specificera kapitelgränser / sidbrytningar. XPath kan verka lite skrämmande att använda i början, lyckligtvis finns det en Introduktion (sida 53) i
användarhandboken. Kom ihåg att Strukturdetektion fungerar på tillfällig XHTML producerad av konverteringsrörledningen. Använd felsökningsalternativet beskrivs i Introduktion (sida 53) att räkna ut lämpliga inställningar för din
bok. Det finns också en knapp för en XPath-guide för att hjälpa till med generering av enkla XPath-uttryck.
So standard använder calibre följande uttrycker för kapiteldetektion:
//*[((name()='h1' or name()='h2') and re:test(., 'chapter|book|section|part\s+', 'i')) or @class = 'c
This expression is rather complex, because it tries to handle a number of common cases simultaneously. What it means
is that calibre will assume chapters start at either <h1> or <h2> tags that have any of the words (chapter, book, section
or part) in them or that have the class=”chapter” attribute.
Ett relaterat alternativ är Kapitelmärkning, vilket gör att du kan styra vad calibre gör när den upptäcker ett kapitel.
Som standard kommer den att infoga en sidbrytning före kapitlet. Du kan ha det infoga en styrd linje i stället för, eller
som komplement till sidbrytning. Du kan också få den göra ingenting.
Standardinställningen för detektering av sidbrytningar är:
//*[name()='h1' or name()='h2']
vilket innebär att calibre kommer att infoga sidbrytningar före varje ‘ <h1>‘ och ‘ <h2>‘ etikett som standard.
Observera: Standarduttryck kan ändras beroende på inmatningsformat du konverterar.
Diverse
Det finns några fler alternativ i det här avsnittet.
Infoga metadata som en sida i början av boken En av de bästa sakerna med calibre är att det tillåter dig att behålla
mycket komplett metadata om alla dina böcker, till exempel, ett betyg, etiketter, kommentarer, etc. Detta alternativ kommer att skapa en enda sida med all denna metadata och sätta in den i den konverterade e-boken, typiskt
just efter omslaget. Se det som ett sätt att skapa egna bokskyddsomslag.
Ta bort första bilden Ibland innehåller källdokumentet du konverterar omslaget som en del av boken, i stället för som
ett separat omslag. Om du också ange ett omslag i calibre, den då konverterade boken kommer att ha två omslag.
Detta alternativ kommer att helt enkelt ta bort den första bilden från källdokumentet, vilket säkerställer att den
konverterade boken har bara ett omslag, det som anges i calibre.
1.4.7 Innehållsförteckning
När indatadokumentet har en innehållsförteckning i sitt metadata, kommer calibre bara använda det. Men ett antal
äldre format stöder antingen inte metadata baserade innehållsförteckning, eller enskilda dokument har inte en. I dessa
fall kan alternativen i det här avsnittet automatiskt hjälp dig generera en innehållsförteckning i den konverterade e-bok,
baserat på det faktiska innehållet i inmatningsdokumentet.
Observera: Det kan vara lite utmanande att få exakt rätt med hjälp av dessa alternativ . Om du föredrar att skapa /
redigera innehållsförteckningen för hand, konvertera till EPUB eller AZW3 format och markera kryssrutan längst ner
i innehållsförteckningen i dialogrutan omvandlingen som säger Manuellt finjustera innehållsförteckning efter konverteringen är klar. Detta startar Redigeraren för innehållsförteckningen efter konverteringen. Det låter dig skapa poster
i innehållsförteckningen genom att klicka på platsen i boken där du vill att posten ska peka till. Du kan också använda
innehållsförteckningen Editor av sig själv, utan att göra en konvertering. Gå till Inställningar->Verktyg och lägga redigeraren för innehållsförteckningen till huvudverktygsraden. Sedan är det bara att välja den bok du vill redigera och
klicka på innehållsförteckningredigeringsknappen.
1.4. E-bokkonvertering
59
calibre Användarhandbok, Utgåva 2.22.0
Det första alternativet är Använd alltid den automatiskt skapade innehållsförteckningen. Genom att markera det här
alternativet kan du låta calibre åsidosätta innehållsförteckning som finns i metadata för indatadokumentet med automatiskt genererade en.
Det normala sättet att skapandet av autogenererade innehållsförteckningen fungerar är att, calibre först kommer att
försöka lägga alla upptäckta kapitel till den genererade innehållsförteckningen. Du kan lära dig hur du anpassar upptäckt av kapitel i Struktrurdetektion (sida 58) ovan. Om du inte vill ha med ett detekterade kapitel i den genererade
innehållsförteckningen, se Lägg inte till upptäcka kapitel i innehållsförteckningen-alternativet.
Om mindre än Kapiteltröskel antal kapitel hittades kommer calibre lägga till alla hyperlänkar som hittas i indatadokumentet till innehållsförteckningen. Detta fungerar ofta väl, många indatadokument innehåller en hyperlänkad
innehållsförteckning precis i början. Antal länkar alternativet kan användas för att styra detta beteende. Om värdet är
noll, kommer inga länkar läggas till. Om satt till ett tal större än noll, kommer på sin höjd att antalet länkar läggs till.
calibre kommer automatiskt att filtrera dubbletter från den genererade innehållsförteckningen. Men om det finns några
ytterligare oönskade poster kan du filtrera dem genom att använda Innehållsförteckningsfilter-alternativet. Detta är ett
reguljärt uttryck som söker titeln på poster i den genererade innehållsförteckningen. När en träff hittas, kommer den
att tas bort. Till exempel, för att ta bort alla titlar “Nästa” eller “Föregående” användning:
Next|Previous
Med Nivå 1,2,3 innehållsförteckning-alternativet kan du skapa en sofistikerad flera nivåer Innehållsförteckning. De
är XPath-uttryck som passsar etiketter i medan XHTML produceras av konverteringsrörledningen. Se Introduktion
(sida 53) för hur du får tillgång till denna XHTML. Läs också XPath Handledning (sida 153), att lära sig att konstruera XPath-uttryck. Bredvid varje alternativ finns en knapp som startar en guide för att hjälpa till med att skapa
grundläggande XPath-uttryck. Följande enkla exempel visar hur man använder de här alternativen.
Anta att du har en indatadokument som resulterar i XHTML som ser ut så här:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample document</title>
</head>
<body>
<h1>Chapter 1</h1>
...
<h2>Section 1.1</h2>
...
<h2>Section 1.2</h2>
...
<h1>Chapter 2</h1>
...
<h2>Section 2.1</h2>
...
</body>
</html>
Sedan sätter vi alternativ som:
Level 1 TOC : //h:h1
Level 2 TOC : //h:h2
Detta kommer att resultera i ett automatiskt genererat tvånivåers Innehållsförteckning som ser ut som:
Chapter 1
Section 1.1
Section 1.2
Chapter 2
Section 2.1
60
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Varning: Inte alla utdataformat stödjer en innehållsförteckning med multinivåer. Du bör först försöka med EPUButdata. Om det fungerar, sedan prova ditt var av format.
1.4.8 Att använda bilder som kapitelrubriker när du konverterar HTMLinmatningsdokument
Anta att du vill använda en bild som din kapitelrubrik, men ändå vill kunna att calibre automatiskt generera en innehållsförteckning för dig från kapiteltitlar. Använd följande HTML-kod för att uppnå detta
<html>
<body>
<h2>Chapter 1</h2>
<p>chapter 1 text...</p>
<h2 title="Chapter 2"><img src="chapter2.jpg" /></h2>
<p>chapter 2 text...</p>
</body>
</html>
Ställ in Nivå 1 innehållsförteckning inställning till //h:h2. Då, för kapitel två, kommer calibre ta titeln från värdet
av titel-attribut på ‘‘<h2> ‘‘ etikett, eftersom etiketten inte har någon text.
1.4.9 Använda etikettattribut för att leverera texten för posterna i innehållsförteckningen
Om du har speciellt långa kapitelrubriker och vill förkortade versioner i innehållsförteckningen, kan du använda attributet titel för att uppnå detta, till exempel:
<html>
<body>
<h2 title="Chapter 1">Chapter 1: Some very long title</h2>
<p>chapter 1 text...</p>
<h2 title="Chapter 2">Chapter 2: Some other very long title</h2>
<p>chapter 2 text...</p>
</body>
</html>
Ställ in Nivå 1 TOC inställning till //h:h2/@titel. Då tar calibre titeln från värdet på titel attribut på <h2>
etiketter, istället för att använda texten i etiketten. Observera den avslutande /@titel på XPath-uttryck kan du
använda det här formuläret för att berätta calibre för att få text från alla attribut du vill.
1.4.10 Hur alternativen är inställda/sparade för Konvertering
Det finns två platser där konverteringsalternativ kan ställas in i calibre. Den första är i Inställningar->Konvertering.
Dessa inställningar är standardinställningar för konverteringsalternativen. När du försöker konvertera en ny bok kommer inställningarna som finns här användas som standard.
Du kan också ändra inställningarna i dialogrutan konvertering för varje bokkonvertering. När du konverterar en bok,
minns calibre de inställningar du använt för den boken, så att om du konverterar det igen, kommer de sparade inställningarna för den enskilde boken har företräde framför standardinställningarna som anges i Inställningar. Du kan
återställa enskilda inställningar till standard genom att använda Återställ till standardvärden knapp i individuell bokkonverteringsdialog. Du kan ta bort sparade inställningar för en grupp av böcker genom att välja alla böcker och sedan
klicka på redigera metadata-knappen för att bulk metadata redigeringsdialogen, nära botten av dialogen är ett alternativ
att ta bort lagrade konverteringsinställningar.
1.4. E-bokkonvertering
61
calibre Användarhandbok, Utgåva 2.22.0
När du masskonvertera en uppsättning böcker, tas inställningarna i följande ordning (sista vinner):
• Från standardvärdena som i Inställningar->Konvertering
• Från de sparade konverteringsinställningarna för varje bok som konverteras (om någon). Detta kan stängas av
alternativ i det övre vänstra hörnet av dialogrutan masskonvertering.
• Från inställningarna i masskonverteringsdialogen
Observera att de slutliga inställningar för varje bok i en masskonvertering kommer att sparas och återanvändas om
boken omvandlas igen. Eftersom högsta prioritet av masskonvertering ges till inställningarna av dialogrutan masskonvertering kommer dessa åsidosätta bokens specifika inställningar. Så du ska bara masskonvertera böcker tillsammans
som behöver liknande inställningar. Undantaget är metadata och specifika inställningar för indataformat. Eftersom
masskonveringsdialogrutan inte har inställningar för dessa två kategorier, kommer de att tas från boken specifika inställningar (om någon) eller standardvärdena.
Observera: Du kan se de verkliga inställningar som används under någon konvertering genom att klicka på roterande
ikon i det nedre högra hörnet och sedan dubbelklicka på individuella konverteringsjobbet. Då visas en konverteringslogg som ska innehålla de verkliga inställningar som används, nära toppen.
1.4.11 Formatspecifika tips
Här hittar du tips som är specifika för konvertering av vissa format. Alternativ specifika för visst format, oavsett indata
eller utdata finns i dialogrutan konvertering under eget avsnitt, till exempel TXT indata eller EPUB utdata.
Konvertera Microsoft Word dokument
calibre kan automatiskt konvertera .docx filer som skapats av Microsoft Word 2007 och nyare. Lägg bara till den fil
till calibre och klicka konvertera (se till att du kör den senaste versionen av calibre eftersom stöd för .docx filer är
mycket nytt).
Observera: Det finns en ‘demo docx-fil <http://calibre-ebook.com/downloads/demos/demo.docx> ‘_ som visar funktionerna i calibre-konvertering. Bara ladda ner den och omvandla den till EPUB eller AZW3 att se vad calibre kan
göra.
calibre kommer att automatiskt generera en innehållsförteckning som baseras på rubrikerna om du markerar dina
rubriker med Rubrik 1, ‘rubrik 2‘ etc. stilar i Word. Öppna utdata e-bok i calibre läsare och klicka på innehållsförteckningen för att visa den genererade innehållsförteckningen.
Äldre .doc filer
För äldre doc-filer, kan du spara dokumentet som HTML med Microsoft Word och sedan konvertera den resulterande
HTML-filen med calibre. När du sparar som HTML, se till att använda “Spara som webbsida, filtrerad” alternativet
eftersom detta kommer att producera ren HTML som kommer att konverteras bra. Observera att Word producerar en
riktigt rörig HTML, omvandla det kan ta lång tid, så ha tålamod. Om du har en nyare version av Word tillgänglig kan
du också direkt spara den som docx.
Ett annat alternativ är att använda fria Openoffice som är gratis. Öppna din doc-fil i Openoffice och spara den i
Openoffice-formatet .odt. calibre kan direkt konvertera .odt filer.
62
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Konvertera TXT-dokument
TXT-dokument har något väldefinierat sätt att ange formatering som fet, kursiv, etc, eller dokumentstruktur som stycken, rubriker, sektioner och så vidare, men det finns en mängd olika konventioner som vanligen används. Som standard
försöker calibre automatisk detektering av korrekt formatering och uppmärkning utifrån dessa konventioner.
TXT-indata stöder ett antal alternativ för att differentiera hur stycken upptäcks.
Styckeformat: auto Analyserar textfilen och försök att automatiskt avgöra hur styckena är definierade.
Detta val kommer i allmänhet fungerar bra, om du uppnår oönskade resultat prova ett av de manuella
alternativen.
Styckeformat: block Förutsätter en eller flera tomma rader är en styckesgräns:
This is the first.
This is the
second paragraph.
Styckeformat: single Förutsätter varje rad är ett stycke:
This is the first.
This is the second.
This is the third.
Styckeformat: Print Förutsätter att varje stycke börjar med en indragning (antingen en tabulering eller
2+ mellanslag). Styckena avslutas när nästa rad som börjar med en indragning nås:
This is the
first.
This is the second.
This is the
third.
Styckeformat: unformatted Förutsätter att dokumentet inte har någon formatering, men använder hårda
radbrytningar. Skiljetecken och medianradslängd används för att försöka återskapa stycken.
Formatmall: auto Försök att känna av vilken formatering uppmärkning som används. Om ingen markup
används då kommer heuristisk formatering att tillämpas.
Formatmall: Heuristisk Analyserar dokumentet för gemensamma kapitelrubriker, scenbrott och kursiverade ord och tillämpar lämpliga HTML-kod under konverteringen.
Formatmall: Markdown calibre stöder också kör TXT-indata genom en tranformationspreprocessor som kallas markdown. Markdown möjliggör grundläggande formatering som ska läggas till TXT-dokument, till exempel fet, kursiv, avsnittsrubriker, tabeller, listor, en innehållsförteckning, etc. Markeringskapitelrubriker med en ledande # och sätta XPathkapiteldetekteringsuttryck för “//h:h1” är det enklaste sättet att få en korrekt innehållsförteckning att genereras från ett TXT-dokument. Du kan läsa mer om markdown syntax i daringfireball
<http://daringfireball.net/projects/markdown/syntax> _.
Formatmall: none Använder ingen speciell formatering av texten, dokumentet konverteras till HTML
utan några ändringar.
Konvertera PDF-dokument
PDF-dokument är en av de värsta format för att konvertera från. De är en fast sidstorlek och textplaceringsformat.
Mening, är det mycket svårt att avgöra var en stycke slutar och en annat börjar. calibre kommer att försöka packa
stycken med en konfigurerbar, Radbrytningsfaktor. Detta är en skala som används för att bestämma längden, vid
1.4. E-bokkonvertering
63
calibre Användarhandbok, Utgåva 2.22.0
vilken en rad bör radbruten. Giltiga värden är ett decimaltal mellan 0 och 1. Standardinställningen är 0,45, strax under
medianradslängden. Sänk detta värde att inkludera mer text i uppackning. Öka till att omfatta mindre. Du kan justera
detta värde i konverteringsinställningarna under PDF-indata.
De har också ofta sidhuvud och sidfot som en del av dokumentet som kommer att bli inkluderat med texten. Använd
Sök och ersätt panel för att ta bort sidhuvud och sidfot för att lindra problemet. Om sidhuvuden och sidfötter inte tas
bort från texten kan den ge upp uppackning. Om du vill veta hur du använder sidhuvud och sidfot borttagningsalternativ, läs Allt om att använda reguljära uttryck i calibre (sida 199).
Vissa begränsningar i PDF-indata är:
• Komplex, flera kolumner, och bildbaserade dokument stöds inte.
• Extraction of vector images and tables from within the document is also not supported.
• Vissa PDF-filer använder speciella glyfer för att representera ll eller ff eller fi, etc. Konvertering av dessa kanske
eller kanske inte fungerar beroende på hur de representeras internt i PDF.
• Länkar och innehållsförteckningar stöds inte
• PDF-filer med inbäddade icke-Unicode-teckensnitt för att representera icke-engelska tecken kommer att resultera i förvrängt utdata för dessa tecken
• Vissa PDF-filer är uppbyggda av fotografier av sidan med OCRed text bakom dem. I sådana fall använder calibre
OCR-text, vilket kan vara mycket annorlunda från vad du ser när du visar PDF-filen
• PDF-filer som används för att visa komplexa texter, liksom höger till vänster språk och matematiksättning kommer inte konverteras korrekt
För att återupprepa PDF är en riktigt, riktigt dåligt format att användas som indata. Om du absolut måste använda
PDF, sedan förberedas för ett utdata som varierar allt från anständigt att oanvändbara, beroende på indata PDF.
Serieboksamlingar
En serietidningssamling är en .cbc fil. En .cbc fil är en zip-fil som innehåller andra CBZ/CBR-filer. Dessutom .cbc
filen måste innehålla en enkel textfil som heter comics.txt, kodade i UTF-8. Den comics.txt-filen måste innehålla en
förteckning över de serier filerna inuti .cbc filen i form filnamnet: titel, enligt nedan:
one.cbz:Chapter One
two.cbz:Chapter Two
three.cbz:Chapter Three
.cbc-filen kommer då innehålla:
comics.txt
one.cbz
two.cbz
three.cbz
calibre kommer automatiskt omvandla denna .cbc fil till en e-bok med en innehållsförteckning som pekar på varje post
i comics.txt.
EPUB avancerad formateringsdemo
Olika avancerad formatering för EPUB-filer demonstreras i det här demofil <http://calibreebook.com/downloads/demos/demo.epub> _. Filen skapades från handkodat HTML med calibre och är tänkt
att användas som en mall för dina egna EPUB skapande insatser.
Källan HTML som det skapades från är tillgänglig demo.zip <http://calibre-ebook.com/downloads/demos/demo.zip>
_. De inställningar som används för att skapa EPUB från ZIP-filen är:
64
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
ebook-convert demo.zip .epub -vv --authors "Kovid Goyal" --language en --level1-toc '//*[@class="titl
Observera att eftersom den här filen utforskar potentialen i EPUB, kommer inte de flesta av de avancerade formatering
att fungera på läsarna mindre kapabla än calibres inbyggda EPUB-visare.
Konvertera ODT-dokument
calibre kan direkt konvertera ODT (Opendocument Text) filer. Du bör använda stilar för att formatera ditt dokument
och minimera användningen av direkt formatering. När bilder infogas i ditt dokument måste du förankra dem till
stycke, förankrade bilder till en sida kommer alla hamna på framsidan av konverteringen.
Om du vill aktivera automatisk detektering av kapitlen, måste du markera dem med inbyggd stilar som kallas “Rubrik
1”, “Rubrik 2”, ..., “Rubrik 6 ‘(‘ Rubrik 1” motsvarar HTML-etiketten <h1> , “Rubrik 2” till <h2> etc). När du
konverterar i calibre kan du ange vilken stil du använde i “Identifiera kapitel på” rutan. Exempel:
• Om du markerar kapitel med stil “Rubrik 2”, måste du ställa in “Detektera kapitel på” rutan till //h:h2
• För en kapslad innehållsförteckning med avsnitten märkta med “Rubrik 2” och de kapitel som är markerade
med “Rubrik 3” du måste ange //h:h2|//h:h3. På Konvertera - innehållsförteckningssidan satt den “nivå 1
innehållsförteckning” rutan till //h:h2 och “nivå 2 innehållsförteckning” rutan till //h:h3.
Välkända dokumentegenskaper (titel, sökord, Beskrivning, Skapare) känns igen och calibre kommer att använda den
första bilden (inte för liten, och med god aspektförhållande) som omslagsbild.
Det finns också ett avancerat egenskapskonverteringsläge, som aktiveras genom att ställa den anpassade egenskapen opf.metadata (“Ja eller Nej” typ) till Ja i ODT-dokument (Fil> Egenskaper-> Anpassade egenskaper). Om
egenskapen detekteras av calibre är följande anpassade egenskaper igenkända (opf.authors åsidosättningar dokumentets skapare):
opf.titlesort
opf.authors
opf.authorsort
opf.publisher
opf.pubdate
opf.isbn
opf.language
opf.series
opf.seriesindex
Utöver detta kan du ange vilken bild som ska användas som omslag genom att namnge den opf.cover (högerklicka,
Bild-> Alternativ-> Namn) i ODT. Om ingen bild med detta namn hittas, används den “smarta” metoden. Eftersom
omslagsupptäckt kan leda till dubbla omslag i vissa utdataformat, kommer processen att ta bort stycken (endast om
det enda innehållet är omslaget!) från dokumentet. Men detta fungerar bara med namngiven bild!
För att inaktivera omslagsupptäckt kan du ställa in den anpassade egenskapen opf.nocover (“Ja eller Nej” typ) till
Ja i avancerat läge.
Konvertera till PDF
Den första, viktigaste, inställning för att bestämma när du konverterar till PDF är sidstorleken. Som standard använder
calibre en sidstorlek som definieras av det aktuella utdataprofil. Så om din utskriftsprofil är inställd på Kindle, kommer
calibre skapa en PDF med sidstorlek lämplig för visning på den lilla Kindle skärmen. Men om du visar den här PDFfilen på en datorskärm, så kommer det att synas att ha för stora tecken. För att skapa “normal” storlek på PDF-filer,
använd Åsidosätt sidstorlek alternativ under PDF-utdata i dialogrutan omvandlingen
1.4. E-bokkonvertering
65
calibre Användarhandbok, Utgåva 2.22.0
Sidhuvud och sidfötter
Du kan infoga godtyckliga sidhuvud och sidfot på varje sida i PDF genom att ange sidhuvud och sidfot mallar. Mallar är
bara fragmentsnuttar av HTML-kod som blir utförda i sidhuvud och sidfot platser. Till exempel, för att visa sidnummer
centrerat längst ner på varje sida, i grönt, använd följande sidfotsmall
<p style="text-align:center; color:green">Page _PAGENUM_</p>
calibre ersätter automatiskt _PAGENUM_ med det aktuella sidnumret. Du kan även sätta olika innehåll på jämna och
udda sidor, till exempel följande rubrikmall visar titeln på udda sidor och författaren på jämna sidor:
<p style="text-align:right"><span class="even_page">_AUTHOR_</span><span class="odd_page"><i>_TITLE_<
calibre ersätter automatiskt _TITLE_ och _AUTHOR_ med titel och författare av dokumentet som konverteras. Du
kan även visa text på vänster och höger sida och ändra teckenstorlek, vilket visas med den här rubrikmallen:
<div style="font-size:x-small"><p style="float:left">_TITLE_</p><p style="float:right;"><i>_AUTHOR_</
Detta kommer att visa titeln till vänster och författare till höger, i en teckenstorlek som är mindre än huvudtexten.
Du kan också använda det aktuella avsnittet i mallar, enligt nedan:
<p style="text-align:right">_SECTION_</p>
_SECTION_ ersätts med vad namnet på det aktuella avsnittet är. Dessa namn är taget från metadatats innehållsförteckningen i dokumentet (PDF Outline). Om dokumentet inte har någon innehållsförteckning kommer det att ersättas
av tom text. Om en PDF-sida har flera sektioner, kommer det första avsnittet på sidan användas.
Du kan även använda javascript inne i sidhuvud och sidfot mallar, till exempel, kommer följande mall resultera i att
sidnummer börjar vid 4 istället för på 1:
<p id="pagenum" style="text-align:center;"></p><script>document.getElementById("pagenum").innerHTML =
Observera: När du lägger till sidhuvud och sidfot se till att du ställa in sidan övre och nedre marginal till tillräckligt
stora värden, under avsnittet Utskriftsformat i konverteringsdialogrutan.
Utskrivbar/tryckbar innehållsförteckning
Du kan också infoga en utskrift/tryckbar innehållsförteckning i slutet av PDF som listar sidnummer för varje avsnitt.
Detta är mycket användbart om du tänker skriva ut PDF till papper. Om du vill använda PDF på en elektronisk produkt,
PDF Outline ger då denna funktionalitet och som genereras som standard.
Du kan anpassa utseendet på den genererade Innehållsförteckning med hjälp av extra CSS konvertering inställning
under Utseende del av konverteringsdialogen. Standard css som används är listade nedan, helt enkelt kopiera den och
göra de ändringar du vill.
.calibre-pdf-toc table { width: 100%% }
.calibre-pdf-toc table tr td:last-of-type { text-align: right }
.calibre-pdf-toc .level-0 {
font-size: larger;
}
.calibre-pdf-toc .level-1 td:first-of-type { padding-left: 1.4em }
.calibre-pdf-toc .level-2 td:first-of-type { padding-left: 2.8em }
66
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.5 Redigera e-böcker
calibre har en integrerad e-bokeditor som kan användas för redigera böcker i EPUB- och AZW3(Kindle)-formaten.
Editorn visar dig HTML och CSS som används internt i bokfiler, med en direkt förhandsgranskning som uppdateras
allt eftersom du gör ändringar. Den innehåller också olika automatiserade verktyg för att utföra vanliga uppsnyggningoch justeringsuppgifter.
Du kan använda denna editor genom att högerklicka på valfri bok i calibre och välja Redigera bok.
1.5. Redigera e-böcker
67
calibre Användarhandbok, Utgåva 2.22.0
Innehåll
• Grundläggande arbetsflöde (sida 68)
• Filbläddraren (sida 71)
– Byter namn på filer (sida 72)
– Slår samman filer (sida 72)
– Ändrar textfilordning (sida 72)
– Märkning av omslaget (sida 72)
– Radera filer (sida 73)
– Export av filer (sida 73)
– Lägga till nya bilder / fonts / etc. eller skapa nya tomma filer (sida 73)
– Byta filer (sida 73)
– Länka stilmallar till HTML-filer effektivt (sida 73)
• Sök och ersätt (sida 73)
– Sparade sökningar (sida 74)
– Funktionsläge (sida 74)
• Automatiserade verktyg (sida 74)
– Redigera innehållsförteckningen (sida 74)
– Kontrollera bok (sida 76)
– Lägg till ett omslag (sida 77)
– Inbäddadningsrefererade teckensnitt (sida 77)
– Använder delmängd av inbäddade typsnitt (sida 77)
– Förbättrad skiljeteckenhantering (sida 77)
– Tar bort oanvända CSS-stilregler (sida 77)
– Justera HTML (sida 77)
– Försköna filer (sida 78)
– Inför innehållsförteckning på raden (sida 78)
– Sätt semantik (sida 78)
– Filtrera stil Information (sida 78)
• Kontrollpunkt (sida 78)
• Panelen för direkt förhandsgranskning (sida 80)
– Dela upp HTML-filer (sida 81)
• Direkta CSS-panelen (sida 82)
• Diverse verktyg (sida 82)
– Innehållsförteckningsvyn (sida 82)
– Kontroll av stavning av ord i boken (sida 83)
– Infoga specialtecken (sida 84)
– Kodinspektörvyn (sida 84)
– Ordna filer i mappar efter typ (sida 85)
– Importera filer i andra e-boksformat som EPUB (sida 85)
– Rapportverktyget (sida 93)
• Speciella funktioner i kodeditorn (sida 93)
– Syntaxmarkering (sida 93)
– Sammanhangsberoende hjälp (sida 94)
– Komplettera automatiskt (sida 94)
– Snuttar (sida 94)
1.5.1 Grundläggande arbetsflöde
Observera: En videogenomgång av calibre editorn finns här23 .
23 http://calibre-ebook.com/demo#tutorials
68
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
När du först öppnar en bok med bokredigeringsverktyget, kommer få se en list av filer på vänster sida. Dessa är
individuella HTML-filer, stilmallar, bilder, etc. som tillsammans utgör innehållet av boken. Genom dubbelklicka på
en fil startar du enkelt redigering av den. Notera att om du vill göra något mer sofistikerat än små justeringar, kommer
du behöva känna till HTML-handledning24 och CSS-handledning25 .
Allt eftersom du gör ändringar till HTML eller CSS i editors, kommer du direkt kunna förhandsgranska förändringarna
i förhandsgranskningsvyn till höger. När du är nöjd med ändringarna och dess utseende, klicka på sparaknappen eller
använd Fil->Spara för att spara dina ändringar i e-boken.
En användbar funktion är Kontrollpunkter. Innan du går och påbörjar en ambitiös uppsättning redigeringar, kan du
skapa en kontrollpunkt. Kontrollpunkten kommer att bevara det aktuella läget i din bok, så om du i framtiden bestämmer du inte gillar de ändringar du har gjort i du kan gå tillbaka till staten när du skapade kontrollpunkten. För att skapa
en kontrollpunkt, använd Redigera-> Skapa kontrollpunkt. Kontrollpunkter kommer också att skapas automatiskt för
dig när du kör något automatiserat verktyg som global sök och ersätt. Den kontrollpunktsförfarande funktionaliteten
är utöver det normala Ångra / gör om mekanismen vid redigering av enskilda filer. Kontrollpunkter är användbara för
när ändringar är spridda över flera filer i boken.
Det är det grundläggande arbetsflödet för redigering böcker – Öppna en fil, göra ändringar, förhandsgranska och spara.
Resten av denna handbok kommer att diskutera de olika verktyg och funktioner som finns så att du kan utföra specifika
uppgifter effektivt.
24 http://html.net/tutorials/html/
25 http://html.net/tutorials/css/
1.5. Redigera e-böcker
69
calibre Användarhandbok, Utgåva 2.22.0
70
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.5.2 Filbläddraren
1.5. Redigera e-böcker
71
calibre Användarhandbok, Utgåva 2.22.0
Med Filbläddrare får du en översikt över de olika filerna inne i boken som du redigerar. Filerna är ordnade efter
kategori, med text (HTML) filer i toppen, följt av stilmallar (CSS) filer, bilder och så vidare. Helt enkelt dubbelklicka
på en fil för att börja redigera den. Redigering stöds för HTML, CSS och bildfiler. Ordningen på textfiler är samma
ordning som de skulle visas i, om du läser boken. Alla andra filer är ordnade i bokstavsordning.
Genom att dra muspekaren över en post, kan du se dess storlek, men också, längst ner på skärmen, den fullständiga
sökvägen till filen inne i boken. Observera att filer i e-böcker är komprimerade, så storleken på den sista boken är inte
summan av de enskilda filstorlekar.
Många filer har speciell betydelse, i boken. Dessa har normalt en ikon bredvid deras namn, med angivande av speciell
betydelse. Till exempel, på bilden till vänster, kan du se att filerna cover_image.jpg och titlepage.xhtml som har ikonen
av ett omslag bredvid dem, indikerar detta att de är bokomslaget bilden och titlepage. På liknande sätt har content.opf‘filen en metadata ikon bredvid sig, vilket indikerar boken metadata finns i den och toc.ncx-filen har en T ikon bredvid
sig, vilket indikerar att det är innehållsförteckningen.
Du kan utföra många åtgärder på enskilda filer, genom att högerklicka på dem.
Byter namn på filer
Du kan byta namn på en enskild fil genom att högerklicka på den och välja Byt namn. Byta namn på en fil uppdaterar
automatiskt alla länkar och referenser till den i hela boken. Så allt du behöver göra är att ge det nya namnet kommer
calibre tar hand om resten.
Du kan också massbyta namn på många filer på en gång. Detta är användbart om du vill att filerna ha några enkla
namn mönster. Till exempel kanske du vill byta namn på alla HTML-filer för att ha namn kapitel-1.html, kapitel2.html osv. Markera de filer du vill bulk bytt namn genom att hålla nere Skift eller Ctrl-tangenten och klicka på filerna.
Högerklicka och välj Massändring av namn. Ange ett prefix och vilket nummer du vill att automatisk numrering för
att börja på, klicka på OK och du är klar.
Slår samman filer
Ibland kanske du vill slå samman två HTML-filer eller två CSS-filer tillsammans. Det kan ibland vara bra att ha allt i
en enda fil. Var försiktig dock, att sätta en hel del innehåll i en enda fil orsakar prestandaproblem när du tittar på boken
i en typisk e-boksläsare.
För att sammanfoga flera filer tillsammans, markera dem genom att hålla Ctrl-tangenten och klicka på dem (se till att
du bara välja filer av en typ, antingen alla HTML-filer eller alla CSS-filer och så vidare). Högerklicka och välj slå
samman. Det är allt, calibre kommer slå ihop filerna automatiskt, ta hand om migrera alla länkar och referenser till de
fusionerade filerna. Observera att samgående filer ibland kan orsaka textformatering förändras, eftersom de enskilda
filerna kunde ha använt olika stilmallar.
Ändrar textfilordning
Du kan arrangera i vilken ordning texten (HTML) filer öppnas när du läser boken genom att helt enkelt dra och släppa
dem i filer webbläsaren. För den tekniskt kunnige, kallas detta omordning av bokryggen. Observera att du måste släppa
objekt mellan andra objekt, inte på dem, kan det vara lite krångliga tills du vänjer det.
Märkning av omslaget
E-böcker har normalt en omslagsbild. Bilden visas i Filbläddraren med ikonen av en brun bok bredvid bildnamnet.
Om du vill ange en annan bild som omslag, kan du göra det genom att högerklicka på filen och välja Välj som omslag.
Dessutom har EPUB-filer begreppet titel. En titelsidan finns en HTML-fil som fungerar som titelbladet/omslaget till
boken. Du kan markera en HTML-fil som Titel vid EPUB-redigering genom att högerklicka. Var noga med att filen du
72
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
markerar innehåller endast omslagsinformationen. Om det innehåller annat innehåll, till exempel det första kapitlet,
då det innehållet kommer att förloras om användaren någonsin omvandlar EPUB-filen i calibre till ett annat format.
Detta beror på att när du konverterar, förutsätter calibre att den markerade titeln sidan innehåller bara omslaget och
inget annat innehåll.
Radera filer
Du kan ta bort filer genom att antingen högerklicka på dem eller genom att markera dem och trycka på Deletetangenten. Ta bort en fil tar bort alla hänvisningar till filen från OPF-filen, sparar dig detta grovgöra. Men referenser
på andra platser tas inte bort, du kan använda “Kontrollera bok”-verktyg för att enkelt hitta och ta bort / byta ut dem.
Export av filer
Du kan exportera en fil från bokens till någon annanstans på datorn. Detta är användbart om du vill arbeta på filen i
sig, med specialverktyg. För att göra detta, helt enkelt högerklicka på filen och välj Exportera.
När du är klar arbetar på den exporterade filen kan du importera den i boken, genom att högerklicka på filen igen och
välja Ersätt med fil... vilket gör att du kan byta ut filen i boken med den tidigare exporterad fil.
Lägga till nya bilder / fonts / etc. eller skapa nya tomma filer
Du kan lägga till en ny bild, teckensnitt, format, etc. från datorn in i boken genom att klicka på Fil->Ny fil. Det gör att
du antingen importera en fil genom att klicka på Importera resursfilen-knappen Importera resurs eller skapa en ny tom
html-fil eller stilmallen genom att helt enkelt skriva in filnamnet i rutan för den nya filen.
Du kan även importera flera filer till boken på en gång genom att använda Fil->Importera filer till bok.
Byta filer
Du kan enkelt byta ut befintliga filer i boken, genom att högerklicka på filen och välja ersätta. Detta kommer automatiskt att uppdatera alla länkar och referenser, om ersättningsfilen har ett annat namn än filen som ersätts.
Länka stilmallar till HTML-filer effektivt
Som en bekvämlighet kan du välja flera HTML-filer i Filbläddraren, högerklicka och välj Länka stilmallar för att ha
calibre automatiskt infoga <link> etiketter för dessa stilmallar i alla markerade HTML-filer.
1.5.3 Sök och ersätt
Redigera bok har en mycket kraftfull sök- och ersättsgränssnitt som låter dig söka och ersätta text i den aktuella filen,
över alla filer och till och med i ett markerat område av den aktuella filen. Du kan söka med hjälp av en vanlig sökning
eller använda reguljära uttryck. För att lära dig att använda reguljära uttryck för avancerad sökning, se Allt om att
använda reguljära uttryck i calibre (sida 199).
Starta sök och ersätt via Sök->Sök/Ersätt -menyalternativet (du måste redigera en HTML-eller CSS-fil).
1.5. Redigera e-böcker
73
calibre Användarhandbok, Utgåva 2.22.0
Fyll i texten du vill söka efter i rutan Sök och dess ersättning i rutan Ersätt. Du kan klicka på lämpliga knappar för att
hitta nästa träff, byt den aktuella träffen och ersätta alla passande träffar.
Använda rullgardinsmenyer i botten av lådan, kan du söka arbeta över den aktuella filen, alla textfiler, alla stilfiler eller
alla filer. Du kan också välja sökläget för att vara en normal (sträng) sökning eller ett reguljärt uttryckssökning.
Du kan räkna alla träffar för ett sökuttryck via Sök->Räkna alla. Räkningen kommer att köra över allt vad filer/regioner
som du har valt i rullgardinsrutan.
Du kan också gå till en specifik rad i den öppna editorn via Sök->Gå till rad.
Observera: Kom ihåg, att utnyttja den fulla kraften i sök och ersätt, måste du använda reguljära uttryck. Se Allt om
att använda reguljära uttryck i calibre (sida 199).
Sparade sökningar
Du kan spara ofta använda sök/ersätt-uttryck och återanvända dem flera gånger. Om du vill spara en sökning högerklicka bara i rutan Spara aktuell sökning.
Du kan öppna dialogrutan för sparade sökningar via Sök->Sparade sökningar. Detta kommer att visa dig en lista med
sök och ersätt uttryck som du kan använda. Du kan även välja flera poster i listan genom att hålla ned CTRL-tangenten
samtidigt som du klickar för att köra flera sök och ersätt uttryck i en enda operation.
Funktionsläge
Med funktionsläget kan du skriva godtyckliga och starka python-funktioner som körs på varje Hitta/ersätt. Du kan
göra i stort sett alla texthantering du vill i funktionsläge. För mer information se Funktionsläge för Sök & Ersätt i
editorn (sida 85).
1.5.4 Automatiserade verktyg
Redigera bok har olika verktyg för att hjälpa till med vanliga uppgifter. Dessa nås via menyn Verktyg.
Redigera innehållsförteckningen
Det finns en särskild verktyg för att underlätta redigeringen av innehållsförteckningen. Starta det med Verktyg>Innehållsförteckning->Redigera innehållsförteckning.
74
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Redigera innehållsförteckning-verktyget visar den aktuella innehållsförteckningen (om någon) till vänster. Helt enkelt
dubbelklicka på en post för att ändra texten. Du kan också arrangera poster genom att dra och släppa eller genom att
använda knapparna till höger.
För böcker som inte har en befintlig innehållsförteckning, ger verktyget dig olika alternativ för att automatiskt generera
en innehållsförteckning från texten. Du kan generera från rubrikerna i dokumentet, från länkar, från enskilda filer och
så vidare.
Du kan redigera enskilda poster genom att klicka på dem och sedan klicka på Ändra platsen denna startpunkt pekar
på-knappen. Detta kommer att öppna upp ett mini-förhandsvisning av boken, bara flytta muspekaren över boken vyn
panelen och klicka där du vill att posten att peka på. En tjock grön linje visar dig platsen. Klicka på OK när du är nöjd
med platsen.
1.5. Redigera e-böcker
75
calibre Användarhandbok, Utgåva 2.22.0
Kontrollera bok
Kontrollera bok-verktyget söker igenom din bok efter problem som kan förhindra det fungerar som avsett på faktiska
läsaranordningar. Aktivera den via Verktyg->Kontrollera bok.
Eventuella problem som finns redovisas i en trevlig, lätt att använda listan. Genom att klicka på en post i listan visas
lite hjälp om felet samt ger dig möjlighet att automatiskt åtgärda detta fel, om felet kan åtgärdas automatiskt. Du kan
också dubbelklicka på felet för att öppna platsen för fel i en editor, så du kan fixa det själv.
En del av de kontroller som gjorts är:
• Felaktigt HTML-kod. Alla HTML-kod som inte kan tolkas som välformad XML rapporteras. Korrigera det
kommer att se till att din kod fungerar som det ska i alla sammanhang. calibre kan även automatiskt åtgärda
felen, men auto-rättning kan ibland få oväntade effekter, så använd den med försiktighet. Som alltid, skapas en
kontrollpunkt innan auto-rättning så att du enkelt kan återställa alla förändringar. Auto-rättning fungerar genom
att tolka markeringen med hjälp av HTML5-algoritmen, som är mycket feltolerant och sedan konvertera till
välformade XML.
76
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• Felaktiga eller okända CSS-format. Alla CSS som inte är giltig eller som har egenskaper som inte är definierade
i standarden CSS 2.1 (plus några från CSS 3) rapporteras. CSS kontrolleras i alla stilmallar, stilattribut på raden
och <style> etiketter i HTML-filer.
• Trasiga länkar. Länkar som pekar på filer i boken som saknas rapporteras.
• Orefererade filer. Filer i boken som inte refereras till av någon annan fil eller inte finns på bokryggen redovisas.
• Olika vanliga problem i OPF filer såsom dubbletter av bokryggar eller uppenbara poster, trasiga idrefs eller
metaomslagsetiketter, saknade nödvändiga sektioner och så vidare.
• Olika kompatibilitets kontroller för kända problem som kan orsaka boken inte fungerar på läsenheter.
Lägg till ett omslag
Du kan enkelt lägga till ett omslag till boken via Verktyg->Lägg till omslag. Detta gör att du kan antingen välja
en befintlig bild i boken som omslag eller importera en ny bild in i boken och göra den till omslag. När du redigerar
EPUB-filer är HTML-täckbladet för omslaget automatiskt. Om en befintlig omslag i boken hittas, ersätts det. Verktyget
tar automatiskt hand om korrekt märkning av omslagsfiler som omslag i OPF.
Inbäddadningsrefererade teckensnitt
Nås via Verktyg->Bädda in refererade teckensnitt, finner detta verktyg alla teckensnitt som refereras i boken, och om
de inte redan är inbäddade, söker igenom datorn efter dem och bäddar in dem i boken, om de hittas. Se till att du har
de nödvändiga Upphovsrätter för inbäddning av kommersiellt licensierade typsnitt, innan du gör detta.
Använder delmängd av inbäddade typsnitt
Nås via Verktyg->Använd delmängd av inbäddade typsnitt, reducerar detta verktyg alla teckensnitt i boken att bara
innehålla tecken för texten som faktiskt finns i boken. Detta minskar ofta storleken på teckensnittsfiler med ~ 50%.
Dock var medveten om att när teckensnitten är en delmängd, om du lägger till ny text vars tecken är inte tidigare
förekommer i den undergrupp typsnitt, kommer teckensnittet inte att fungera för den nya texten. Så gör det bara som
detta som sista steget i arbetsflödet.
Förbättrad skiljeteckenhantering
Konvertera oformaterad textstreck, ellips, citationstecken, flera bindestreck, etc. i sina typografisk korrekta motsvarigheter. Observera att algoritmen ibland kan generera felaktiga resultat, speciellt när apostrof i början av sammandragningar är inblandade. Nås via Verktyg->Förbättrad skiljeteckenhantering.
Tar bort oanvända CSS-stilregler
Ta bort alla oanvända CSS-regler från mallar och <style> etiketter. Några böcker som skapas från produktionsmallar
kan ha ett stort antal extra CSS-regler som inte passar något materiellt innehåll. Dessa extra regler kan bromsa läsare
som behöver bearbeta dem alla. Nås via Verktyg->Ta bort oanvända CSS.
Justera HTML
Detta verktyg omvandlar HTML som inte kan tolkas som XML till välformad XML. Det är mycket vanligt i böcker för
att ha icke-välformad XML, så detta verktyg automatiserar helt enkelt processen med att fastställa en sådan HTML.
Verktyget fungerar genom att tolka HTML med hjälp av HTML5-algoritmen (den algoritm som används i alla moderna
webbläsare) och sedan omvandla resultatet till XML. Var medveten om att auto-rättning ibland kan ha kontraintuitivt
1.5. Redigera e-böcker
77
calibre Användarhandbok, Utgåva 2.22.0
resultat. Om du vill kan du använda Check Book-verktyget som diskuteras ovan för att hitta och manuellt korrigera
problem i HTML. Nås via Verktyg->Laga HTML.
Försköna filer
Detta verktyg används för att automatiskt formatera alla HTML och CSS-filer så att de “ser fina ut”. Koden automat
indenteras så att indragen justerar upp text fint, tomma rader införs vid behov och så vidare. Observera att förskönande också auto-justerar trasig HTML / CSS. Därför, om du inte vill ha någon automatisk justering som ska utföras,
använd först Kontrollera bok-verktyget för att rätta till alla problem och först därefter köra försköna. Nås via Verktyg>Försköna alla filer.
Observera: I HTML kan finnas text med betydande mängd mellanslag, via CSS-blank direktivet. Därför skulle
försköning eventuellt ändra rendering av HTML. För att undvika detta så långt som möjligt, försköningsalgoritmen
förskönar bara på blocknivå etiketter som innehåller andra blocknivåetiketter. Så, till exempel, text i en <p> tag kommer inte att ha sina mellanslag förändrade. Men en <body> etiketter som innehåller bara andra <p> och <div> etiketter
kommer att förskönas. Detta kan ibland innebära att en viss fil inte kommer att påverkas av försköning eftersom den
inte har lämpliga blocknivåetiketter. I sådana fall kan du prova olika försköning verktyg, som är mindre försiktiga, till
exempel: HTML Tidy26 .
Inför innehållsförteckning på raden
Normalt i e-böcker, är innehållsförteckningen separat från huvudtexten och är vanligtvis nås via en speciell innehållsförteckningsknapp / meny i e-bokens läsenhet. Du kan också låta calibre automatiskt generera en innehållsförteckning
på raden som blir en del av texten i boken. Det genereras utifrån definierade innehållsförteckningen.
Om du använder det här verktyget flera gånger kommer varje anrop orsaka den tidigare skapade innehållsförteckningen
på raden att bytas ut. Verktyget kan nås via Verktyg->Innehållsförteckning->Infoga en innehållsförteckning.
Sätt semantik
Detta verktyg används för att ställa in semantik i EPUB-filer. Semantik är helt enkelt, länkar i OPF som identifierar
vissa platser i boken som har särskild betydelse. Du kan använda dem för att identifiera förordet, engagemang, omslag,
innehållsförteckning, osv. Välj bara vilken typ av semantisk information som du vill ange och välj sedan platsen i
boken som länken ska peka på. Detta verktyg kan nås via Verktyg->Sätt semantik.
Filtrera stil Information
Detta verktyg kan användas för att enkelt ta bort specificerade CSS-stilmallar från hela boken. Du kan tala om vilka
egenskaper du vill ha bort, till exempel färg, bakgrundsfärg, radhöjd och det kommer att ta bort dem överallt de inträffar
- stilmallar, <style> etiketter och radformateringsattribut. Efter borttag av stilinformationen, en sammanfattning av
alla de ändringar som gjorts visas så att du kan se exakt vad som ändrats. Verktyget kan nås via Verktyg->Filtrera
stilinformation.
1.5.5 Kontrollpunkt
Kontrollpunkter är ett sätt att markera det aktuella läget i boken som “speciellt”. Du kan sedan gå vidare till att göra de
ändringar du vill på boken och om du inte gillar resultatet, återgå till kontrollpunktstillståndet. Kontrollpunkter skapas
automatiskt varje gång du kör någon av de automatiserade verktyg som beskrivs i föregående avsnitt.
26 http://infohound.net/tidy/
78
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Du kan skapa en kontrollpunkt via Redigera->Skapa kontrollpunkt. Och gå tillbaka till en tidigare kontrollpunkt med
Redigera->Återställ till ...
Kontrollpunktsfunktionen är utöver det normala ångra/gör om mekanismen vid redigering av enskilda filer. Kontrollpunkter är särskilt användbara för när ändringar är spridda över flera filer i boken eller om du vill kunna återställa en
stor grupp relaterade förändringar som helhet.
Du kan se en lista över tillgängliga kontrollpunkter via Visa->Kontrollpunkter. Du kan jämföra det nuvarande läget
i boken till en angiven kontrollpunkt med Jämför e-böcker (sida 94)-verktyget - genom att välja kontrollpunkt av
intresse och klicka på knappen Jämför . Revert to-knappen återställer boken till den valda kontrollpunkten, ångra alla
ändringar efter den kontrollpunkten skapades.
1.5. Redigera e-böcker
79
calibre Användarhandbok, Utgåva 2.22.0
1.5.6 Panelen för direkt förhandsgranskning
Förhandsgranska fil ger dig en direkt överblick över de olika filerna i förhandsgranskningspanelen som visar dig
hitta de ändringar du gör direkt (med en sekund eller två av försening). När du redigerar HTML eller CSS-filer,
är uppdateras förhandsgranskningspanelen automatiskt för att återspegla ändringarna. När du flyttar runt markören i
editorn kommer förhandsgranskningspanelen spåra dess plats och visar motsvarande plats i boken. Genom att klicka i
förhandsgranskningspanelen gör att markören i editorn placeras över element du klickade. Om du klickar på en länk
80
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
som pekar på en annan fil i boken, kommer filen automatiskt att öppnas i redigerings- och förhandsgranskningspanelen.
Du kan stänga av automatisk synkronisering av läget och direkt förhandsvisning av ändringar - med knapparna under
förhandsgranskningspanelen. Den direkta uppdateringen av förhandsvisningspanelen händer bara när du inte aktivt
skriver i editorn, för att inte vara störande eller sakta ner dig, väntar förhandsvisningen med att göra detta.
Förhandsgranskningspanelen visar hur texten kommer att se ut när de visas. Dock är förhandsgranskningspanelen inte
en ersättning för faktiskt testa din bok på en verklig läsenhet. Det är både mer och mindre kapabel än en verklig läsare.
Det kommer att tolerera fel och slarviga språkmarkeringar mycket bättre än de flesta läsaranordningar. Det kommer
också att inte visa dig sidmarginaler, sidbrytningar och inbäddade typsnitt som använder teckensnittsersättning. Använd förhandsgranskningspanelen medan du arbetar på boken, men när du är klar, granska den i en verklig läsenhet
eller programvaruemulator.
Observera: Förhandsgranskningspanelen stöder inte inbäddade typsnitt om namnet på teckensnittet inuti teckensnittsfil inte passar namnet i “CSS @font-face”-regeln. Du kan använda kontrollera bok-verktyg för att snabbt hitta
och åtgärda sådana problem typsnitt.
Dela upp HTML-filer
Ett, kanske icke uppenbara, är användningen av förhandsgranskningspanelen för att dela upp långa HTML-filer. Medan
. Sedan helt
du tittar på filen som du vill dela, klicka på Delat läge-knappen under förhandsgranskningspanelen
enkelt flytta musen till den plats där du vill dela filen och klicka. En tjock grön linje kommer att visa dig exakt var
uppdelningen kommer att hända när du flyttar musen. När du har hittat den plats du vill, klicka och delning kommer
att utföras.
Filuppdelningen kommer automatiskt uppdatera alla länkar och referenser som pekade in i den nedre halvan av filen
och kommer att öppna den nyligen delade filen i en editor.
Du kan också dela upp en enda HTML-fil på flera platser automatiskt, genom att högerklicka inne i filen i editorn och
välja Dela upp på flera ställen. Detta gör att du enkelt delar upp en stor fil på alla rubriketiketter eller alla etiketter
som har en viss klass och så vidare.
1.5. Redigera e-böcker
81
calibre Användarhandbok, Utgåva 2.22.0
1.5.7 Direkta CSS-panelen
Gälllande CSS visar alla stilregler som gäller för etiketten som du för närvarande redigerar. Namnet på etiketten,
tillsammans med dess radnummer i editorn visas, följt av en lista med passande stilregler.
Det är ett bra sätt att snabbt se vilken stilregler som gäller för varje etikett. Visningen har också klickbara länkar (i
blått), som tar dig direkt till den plats där stilen definierades, om du vill göra några ändringar i stilregler. Stilregler som
gäller direkt på etiketten, liksom regler som ärvs från överetiketter visas.
Panelen visar även hur de slutligen beräknade stilar för etiketten är. Egenskaper i listan som ersätts av högre prioriteringsregler visas med en linje genom dem.
Du kan aktivera CSS-panelens direktvisning via Visa->Gällande CSS.
1.5.8 Diverse verktyg
Det finns några fler verktyg som kan vara användbara när du redigerar boken.
Innehållsförteckningsvyn
Innehållsförteckningsvyn visar aktuell innehållsförteckning i boken. Genom att dubbelklicka på en post öppnar den
plats som posten pekar på i en editor. Du kan högerklicka för att redigera innehållsförteckningen, uppdatera vyn eller
82
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
expandera / komprimera alla objekt. Åtkomst till denna vy via Visa->Innehållsförteckning.
Kontroll av stavning av ord i boken
Du kan köra en stavningskontroll via Verktyg->Kontrollera stavning.
Ord visas med antalet gånger de förekommer i boken och språket ordet tillhör. Språkinformation tas från böckernas
metadata och från lang-attribut i HTML-filer. Detta gör att stavningskontrollen fungerar bra även med böcker som
innehåller text på flera språk. Till exempel i följande HTML utdrag, ordet färgen kommer att kontrolleras med hjälp
av amerikansk engelska och ordet färg med brittisk engelska:
<div lang="en_US">color <span lang="en_GB">colour</span></div>
Observera: Du kan dubbelklicka på ett ord för att markera nästa förekomst av det ordet i editorn. Detta är användbart
1.5. Redigera e-böcker
83
calibre Användarhandbok, Utgåva 2.22.0
om du vill manuellt redigera ordet eller se vilket sammanhang det är i.
För att ändra ett ord, helt enkelt dubbelklicka en av de föreslagna alternativa stavningar på höger eller skriv in ditt eget
korrigerade stavning och klicka på Ändra valda ord till-knappen. Detta kommer att ersätta alla förekomster av ordet i
boken. Du kan också högerklicka på ett ord i huvud ordlistan ändra ordet lämpligen från högerklicksmenyn.
Du kan låta stavningskontrollen ignorerar ett ord för den aktuella sessionen genom att klicka på knappen Ignorera.
Du kan även lägga till ett ord i ordlistan genom att klicka på Lägg till ordlista. Stavningskontrollen har stöd för flera
ordlistor, så att du kan välja den ordlista du vill att ordet läggs till.
Du kan även få stavningskontrollen visa alla ord i din bok, inte bara de felstavade sådana. Detta är användbart för att
se vilka ord är vanligast i din bok och köra en enkel sökning och ersätta på enskilda ord.
Observera: Om du gör några ändringar i boken genom att redigera filer medan stavningskontroll-verktyget är öppet,
ska du klicka på knappen Uppdatera i stavningskontroll-verktyget. Om du inte gör detta och fortsätter att använda
stavningskontroll -verktyget, kan du förlora de ändringar du har gjort i editorn.
Lägga till nya ordböcker
Stavningskontrollen kommer med BUILTIN ordlistor för engelska och spanska. Du kan installera egna ordlistor via
Redigera->Inställningar->Editorinställningar->Hantera stavningsordlistor. Stavningskontrollen kan använda ordböcker från Openoffice-programmet (i .oxt format). Du kan ladda ner dessa ordlistor från The OpenOffice Extensions
repository27 .
Infoga specialtecken
Du kan infoga tecken som är svåra att skriva med hjälp av Redigera->Inforga specialtecken-verktyget. Detta visar alla
Unicode-tecken, klicka på det tecken du vill skriva. Om du håller Ctrl samtidigt som du klickar, fönstret kommer stänga
sig själv efter att det valda tecknet förts in . Detta verktyg kan användas för att infoga specialtecken i huvudtexten eller
i någon annan del av användargränssnittet, till exempel sök och ersätt-verktyg.
Eftersom det finns en hel del tecken kan du definiera dina egena Favorit karaktärer, som kommer att visas först.
Högerklicka på ett tecken för att markera den som favorit. Du kan också högerklicka på en karaktär i favoriter för att
ta bort den från favoriter. Slutligen kan du arrangera ordningen på tecknen i favoriter genom att klicka på arrangera
favoriter knappen och sedan dra och släppa tecknen i favoriter runt omkring.
Du kan också skriva direkt i specialtecken med hjälp av tangentbordet. För att göra detta skriver du Unicode-koden
för tecknet (i hexadecimal) och tryck sedan på Alt+X-tangenten som omvandlar tidigare skrivit koden i motsvarande
tecken. Till exempel, för att skriva ÿ du skulle skriva ff och sedan Alt + X. För att skriva ett fast mellanslag som du
skulle använda a0 och sedan Alt+X, för att skriva den horisontella ellips du skulle använda 2026 och Alt+X och så
vidare.
Slutligen kan du skriva in specialtecken med hjälp av HTML-enheter. Till exempel, att skriva   kommer att
ersättas av ett hårt mellanslag när du skriver semikolon. Bytet sker bara när du skriver semikolon.
Kodinspektörvyn
Denna vy visar HTML-kodning och CSS som gäller för det aktuella elementet av intresse. Du öppnar den genom att
högerklicka på en plats i förhandsvisningspanelen och välja Granska. Det gör att du kan se HTML-kodning för det
elementet och ännu viktigare, de CSS-format som gäller för den. Du kan till och med dynamiskt redigera stilar och
se vilken effekt ändringarna har direkt. Observera att redigera stilar faktiskt inte gör ändringar i bokens innehåll, det
innebär bara ett snabb experimenterande. Förmågan att redigera direkt inne i inspektören är under utveckling.
27 http://extensions.openoffice.org/
84
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Ordna filer i mappar efter typ
Ofta när du redigerar EPUB-filer som du får från någonstans, kommer du att finna att filerna inuti EPUB är ordnade
på måfå, i olika undermappar. Detta verktyg gör det möjligt att automatiskt flytta alla filer i undermappar baserat på
deras typer. Åtkomst det via Verktyg->Ordna i mappar. Observera att detta verktyg ändrar bara hur filerna är ordnade
inne i EPUB, det betyder inte att det ändras hur de visas i filbläddraren.
Importera filer i andra e-boksformat som EPUB
Editorn inkluderar möjligheten att importera filer i vissa andra e-boksformat direkt som en ny EPUB, utan att gå
igenom en full konvertering. Detta är särskilt användbart för att direkt skapa EPUB-filer från dina egna handredigerade
HTML-filer. Du kan göra detta via Fil->Importera en HTML- eller DOCX-fil som en ny bok.
Funktionsläge för Sök & Ersätt i editorn
Verktyget Sök & Ersätt i editorn stöder ett “funktionsläge”. I detta läge kan du kombinera reguljära uttryck (see Allt
om att använda reguljära uttryck i calibre (sida 199)) med godtyckliga kraftfulla python-funktioner för att göra alla
typer av avancerad textbehandling.
I vanliga regexp läget för sök och ersätt kan du ange både ett reguljärt uttryck för att söka efter såväl som en mall som
används för att ersätta alla funna träffar. I funktionsläge, i stället för använda en fast mall, kan du ange en godtycklig
funktion i programmeringsspråket python28 . Detta gör att du kan göra massor av saker som inte är möjligt med enkla
mallar.
Tekniker för att använda funktionsläge och syntaxen beskrivs med hjälp av exempel, som visar dig hur du skapar
funktioner för att utföra allt mer komplexa uppgifter.
Automatiskt justera skiftläget med rubrikerna i dokumentet Här kommer vi att utnyttja en av de inbyggda
funktioner i editorn för att automatiskt ändra skiftläget för all text i rubriketiketter till versal:
Find expression: <([Hh][1-6])[^>]*>.+?</\1>
För funktionen, helt enkelt välj inbyggd funktion Titelskiftlägestext. Det kommer att ändra titlar som ser ut:
<h1>någon TITEL</h1> till <h1>Någon Titel</h1>. Det kommer även att fungera om det finns andra
HTML-etiketter inuti rubriketiketter.
Din första egna funktion - smarta bindestreck Den verkliga kraften i funktionsläge kommer från att kunna skapa
egna funktioner för att bearbeta text på godtyckliga sätt. Verktyget Snygga till Skiljetecken i editorn lämnar enskilda
bindestreck i fred, så att du kan använda denna funktion för att ersätta dem med em-streck.
För att skapa en ny funktion, klickar du bara på knappen Skapa/Redigera för att skapa en ny funktion och kopiera
python-koden från nedan.
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
return match.group().replace('--', '--').replace('-', '--')
28 https://docs.python.org/2.7/
1.5. Redigera e-böcker
85
calibre Användarhandbok, Utgåva 2.22.0
Varje Sök och Ersätt anpassad funktion måste ha ett unikt namn och består av en python-funktion som heter ersätta,
som accepterar alla argument som visas ovan. För tillfället ska vi inte oroa för alla olika argument till replace()funktionen. Bara fokusera på match argumentet. Det representerar en träff när man kör en sök och ersätt. Dess fulla
dokumentation finns tillgänglig här29 . match.group() helt enkelt tillbaka all den passande texten och allt vi gör är
att ersätta bindestreck i den texten med em-streck, först ersätt dubbla bindestreck och sedan enstaka bindestreck.
Använd denna funktion med att hitta reguljära uttrycket:
>[^<>]+<
Och det kommer att ersätta alla bindestreck med em-streck, men bara i själva texten och inte inne i HTMLetikettdefinitioner.
Kraften i funktionsläge - med hjälp av en stavningsordlistan att fixa felaktigt avstavade ord Ofta innehåller
böcker skapade av genomsökningar av tryckta böcker felavstavade ord – ord som delades vid slutet av raden på den
utskrivna sidan. Vi kommer att skriva en enkel funktion för att automatiskt hitta och åtgärda sådana ord.
import regex
from calibre import replace_entities
from calibre import prepare_string_for_xml
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
def replace_word(wmatch):
# Try to remove the hyphen and replace the words if the resulting
# hyphen free word is recognized by the dictionary
without_hyphen = wmatch.group(1) + wmatch.group(2)
if dictionaries.recognized(without_hyphen):
return without_hyphen
return wmatch.group()
# Search for words split by a hyphen
text = replace_entities(match.group()[1:-1]) # Handle HTML entities like &
corrected = regex.sub(r'(\w+)\s*-\s*(\w+)', replace_word, text, flags=regex.VERSION1 | regex.UNIC
return '>%s<' % prepare_string_for_xml(corrected) # Put back required entities
Använd denna funktion med samma uttryck som tidigare, det vill säga:
>[^<>]+<
Och det kommer magiskt fixa alla felavstavade ord i texten i boken. Huvudtricket är att använda en av de användbara
extra argument till replace-funktionen dictionaries. Detta syftar på de ordlistor editorn själv använder för att
stavningskontrollera text i boken. Vad denna funktion gör är att leta efter ord separerade med ett bindestreck, tar bort
bindestrecket och kontrollerar om ordlistan godkänner sammansatt ordet, om den gör det, ersättas de ursprungliga
orden med de bindestrecksfria sammansatta orden.
Observera att en begränsning med denna teknik är att det kommer bara att fungera för enspråkiga böcker, därför att,
som standard använder, dictionaries.recognized() det huvudsakliga språket i boken.
Numrera sektioner automatiskt Nu kommer vi att se något lite annorlunda. Anta att din HTML-fil har många
sektioner, var och en med en rubrik i en <h2> etikett som ser ut som <h2>Någon text</h2>. Du kan skapa
en anpassad funktion som automatiskt numrerar dessa rubriker med avsnittsnummer i följd, så att de ser ut <h2>1.
Någon text</h2>.
29 https://docs.python.org/2.7/library/re.html#match-objects
86
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
section_number = '%d. ' % number
return match.group(1) + section_number + match.group(2)
# Ensure that when running over multiple files, the files are processed
# in the order in which they appear in the book
replace.file_order = 'spine'
Använd det för att hitta uttryck:
(?s)(<h2[^<>]*>)(.+?</h2>)
Placera markören i början av filen och klicka Ersätt alla.
Denna funktion använder andra användbara extra argumenten för replace(): number argumentet. När alternativet
Ersätt alla används räknas numret upp automatiskt för varje efterföljande träff.
En annan nyhet är att använda replace.file_order – inställning som till ’spine’ innebär att om sökningen
körs på flera HTML-filer, bearbetas filerna i den ordning som de visas i boken. Se Välj filordning när flera HTML-filer
körs (sida 89) för detaljer.
Skapa innehållsförteckning automatiskt Slutligen, låt oss prova något lite mer ambitiöst. Antag att din bok har
rubriker i h1 och h2 etiketter som ser ut som <h1 id=someid">Någon Text</h1>. Vi kommer automatiskt
generera en HTML-innehållsförteckning baserad på dessa rubriker. Skapa den anpassade funktionen nedan:
from
from
from
from
calibre import replace_entities
calibre.ebooks.oeb.polish.toc import TOC, toc_to_html
calibre.gui2.tweak_book import current_container
calibre.ebooks.oeb.base import xml2str
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
if match is None:
# All matches found, output the resulting Table of Contents.
# The argument metadata is the metadata of the book being edited
if 'toc' in data:
toc = data['toc']
root = TOC()
for (file_name, tag_name, anchor, text) in toc:
parent = root.children[-1] if tag_name == 'h2' and root.children else root
parent.add(text, file_name, anchor)
toc = toc_to_html(root, current_container(), 'toc.html', 'Table of Contents for ' + metad
print (xml2str(toc))
else:
print ('No headings to build ToC from found')
else:
# Add an entry corresponding to this match to the Table of Contents
if 'toc' not in data:
# The entries are stored in the data object, which will persist
# for all invocations of this function during a 'Replace All' operation
data['toc'] = []
tag_name, anchor, text = match.group(1), replace_entities(match.group(2)), replace_entities(m
data['toc'].append((file_name, tag_name, anchor, text))
return match.group() # We dont want to make any actual changes, so return the original match
# Ensure that we are called once after the last match is found so we can
# output the ToC
replace.call_after_last_match = True
# Ensure that when running over multiple files, this function is called,
1.5. Redigera e-böcker
87
calibre Användarhandbok, Utgåva 2.22.0
# the files are processed in the order in which they appear in the book
replace.file_order = 'spine'
Och använd den med sökuttrycket:
<(h[12]) [^<>]* id=['"]([^'"]+)['"][^<>]*>([^<>]+)
Kör sökningen på Alla textfiler och vid slutet av sökningen, kommer ett fönster dyka upp med “Felsök utdata från den
funktion” vilken kommer ha HTML-innehållsförteckning, klar att klistras in i toc.html.
Funktionen ovan är kraftigt kommenterad, så det borde vara lätt att följa. Det viktigaste nya funktionen är att använda
ett annan användbart extra argument till replace() funktion, data objektet. data objektet är en python dict som
kvarstår mellan alla efterföljande anrop av replace() under en enda Ersätt alla operation.
En annan ny funktion är användning av call_after_last_match – genom att sätta denna till True på
replace() funktionen innebär att editorn kommer anropa replace() en extra gång efter alla träffar hittats. För
detta extra anrop, kommer träffobjektet vara None.
Det var bara en demonstration för att visa styrkan av funktionsläge, om du verkligen behöver skapa en innehållsförteckning från rubriker i din bok, kommer du ha större nytta av att använda det dedikerade innehållsförteckningsverktyget i
Vertyg->Innehållsförteckning.
API för funktionsläget Alla funktionsläge funktioner måste vara python-funktioner som heter “replace” med följande signatur:
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
return a_string
När en sök/ersätt körs, för varje träff som hittas kommer funktionen replace() att kallas, den måste returnera
ersättningssträngen för träffen. Om inga ersättare finns att göra, bör den returnera tillbaka, match.group() som är
den ursprungliga strängen. De olika argument till replace() funktion dokumenteras nedan.
match argumentet match argumentet representerar den aktuella funna träffen. Det är ett python objekt30 . Det mest
användbara metoden är group() som kan användas för att få den passande texten motsvarar enskilda fångstgrupper
i reguljära sökuttrycket.
number argumentet number argumentet är numret på den aktuella träffen. När du kör Ersätt alla, kommer varje
efterföljande träff få replace() att anropas med ett ökande nummer. Den första träffen har nummer 1.
file_name argumentet Detta är filnamnet på den fil i vilken den aktuella träffen hittades. När du söker inne i
markerad text file_name är tom. file_name i kanonisk form, en relativ sökväg till roten av boken, med hjälp av
/ som sökvägsavgränsare.
metadata argumentet This represents the metadata of the current book, such as title, authors, language, etc. It is
an object of class calibre.ebooks.metadata.book.base.Metadata (sida 195). Useful attributes include,
title, authors (a list of authors) and language (the language code).
dictionaries argumentet Detta innebär insamling av ordlistor som används för stavningskontroll den aktuella
boken. en mest användbara metoden dictionaries.recognized(word) vilken som kommer returnera True
om givet inord känns igen av ordlista för den aktuella bokens språk.
30 https://docs.python.org/2.7/library/re.html#match-objects
88
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
data argumentet Detta en enkel python dict. När du kör Ersätt alla, kommer varje efterföljande träff orsaka
replace() att kallas med samma dict som data. Du kan alltså använda den för att lagra godtyckliga data mellan
anrop av replace() under en Replace All operation.
functions argumentet functions argumentet ger dig tillgång till alla andra användardefinierade funktioner.
Detta är användbart för kodåteranvändning. Du kan definiera nyttofunktioner på ett ställe och återanvända dem i alla
dina andra funktioner. Anta till exempel att du skapar ett funktionsnamn My Function så här:
def utility():
# do something
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
...
Sedan i en annan funktion kan du accessa utility() funktionen så här:
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
utility = functions['My Function']['utility']
...
Du kan även använda funktionsobjekt för att lagra beständiga data, som kan återanvändas av andra funktioner. Till
exempel kan du ha en funktion som när det körs med Ersätt alla samlar några uppgifter och en annan funktion som
använder det när det körs i efterhand. Betrakta följande två funktioner:
# Function One
persistent_data = {}
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
...
persistent_data['something'] = 'some data'
# Function Two
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
persistent_data = functions['Function One']['persistent_data']
...
Felsöka dina funktioner Du kan felsöka de funktioner som du skapar med hjälp av standard print() funktionen
från python. Utskrift från print kommer visas i ett extrafönster efter att sök/ersätt är klar. Du såg ett exempel på att
använda print() för att mata ut en hel innehållsförteckning ovan.
Välj filordning när flera HTML-filer körs När du kör Ersätt alla på flera HTML filer, beror ordningen för vilka
filer behandlas på vilka filer du har öppnat för redigering. Du kan tvinga sökningen att behandla filer i den ordning de
dyker upp genom att sätta file_order attributet på din funktion, så här.
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
...
replace.file_order = 'spine'
file_order accepterar två värden, spine och spine-reverse vilka får sökprocessen att behandla multipla
filer i den ordning de dyker upp i boken, antingen framlänges eller baklänges.
Med din funktion kallad en extra tid efter den sista träffen hittas Ibland, som i automatisk skapa innehållsförteckning som i exemplet ovan, är det användbart att din funktion anropas en extra gång efter sista träffen hittades. Du
kan göra detta genom att sätta call_after_last_match attributet på din funktion, så här:
1.5. Redigera e-böcker
89
calibre Användarhandbok, Utgåva 2.22.0
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
...
replace.call_after_last_match = True
Snuttar
Den kaliber Redigeraren stöder snuttar. En snutt är ett stycke text som antingen återanvänds ofta eller innehåller
mycket överflödig text. Editorn kan du infoga en snutt med endast ett fåtal knapptryckningar. Anta till exempel att du
ofta befinner dig sätta in etikettlänk när du redigerar HTML-filer, då kan du helt enkelt skriva <a i editorn och trycka
Control+J. Editorn kommer att expandera den till:
<a href="filename"></a>
Inte bara det, kommer ordet filnamn väljas, med markören placeras över det, så att du enkelt kan skriva i den
verkliga filnamnet, använder redaktörens fiffiga Komplettera automatiskt (sida 94)-funktionen. Och när du är klar att
skriva filnamnet tryck Control+J igen och markören hoppar till positionen i mellan <a> etiketter så att du enkelt
kan skriva in texten för länken.
Snuttsystemet i editorn är mycket sofistikerad, finns det några inbyggda snuttar och du kan skapa din egen för att passa
din redigeringsstil.
Följande diskussion av de inbyggda snuttar bör hjälpa illustrera kraften i snuttsystemet.
Observera: Du kan också använda snuttar i textinmatningsfält i Sök och ersätt-panelen, dock platshållare (med
Control+J för att hoppa runt) kommer inte att fungera.
Inbyggda snuttar De inbyggda snuttar beskrivs nedan. Observera att du kan åsidosätta dem genom att skapa egna
snuttar med samma textutlösare.
Infogar fyllnadstext [Lorem] Den första inbyggda snutten (kodavsnitt), och det enklaste används för att infoga fyll
text i ett dokument. Fyllnadstexten är hämtad från De finibus bonorum et malorum31 ett filosofiskt verk av Cicero
(översatt till engelska). För att använda den helt enkelt skriva Lorem i en HTML-fil och tryck Control+J. Det
kommer att ersättas av ett par stycken av fyllnadstext.
Definitionen av denna snutt är mycket enkel, textutlösaren definieras som Lorem och mallen definieras helt enkelt
som den bokstav texten som ska infogas. Du kan enkelt anpassa den för att använda din favorit form av fyllnadstext.
Infoga en självstängande HTML-etikett [<>] Nu ska vi titta på ett enkelt exempel på den kraftfulla begreppet
platshållare. Säg att du vill infoga självstängande etiketten <hr/>. Skriv bara <> och tryck Control+J så kommer
editorn expandera snutten till:
<|/>
Här, representerar | symbolen den aktuella markörpositionen. Du kan sedan skriva hr och trycka Control+J för
att flytta markören till efter slutet av etiketten. Denna snutt definieras som:
Trigger: <>
Template: <$1/>$2
31 http://en.wikipedia.org/wiki/De_finibus_bonorum_et_malorum
90
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Platshållare är helt enkelt dollar ($)-tecken följt av ett nummer. När snutten utökas genom att trycka Control+J är
markören placerad vid den första platshållaren (platshållaren med det lägsta numret). När du trycker på Control+J
igen markören hoppar till nästa platshållare (platshållaren med nästa högre nummer).
Infoga en HTML-länketikett [<a] HTML-länketiketter delar alla en gemensam struktur. De har ett href-attribut
och lite text mellan start- och slutetiketten. En snutt att skriva in dem mer effektiva kommer att introducera oss till
några fler funktioner i platshållare. För att använda denna textsnutt, skriv helt enkelt <a och tryck Control+J.
Editorn kommer att utöka detta till:
<a href="filename|"></a>
Inte bara det, kommer ordet filnamn väljas, med markören placeras över det, så att du enkelt kan skriva i den
verkliga filnamnet, använder editorns fiffiga Komplettera automatiskt (sida 94)-funktionen. Och när du är klar att
skriva filnamnet trycker Control+J igen och markören hoppar till positionen i mellan <a> etiketter så att du enkelt
kan skriva in texten för länken. När du är klar skriver texten, tryck Control+J igen för att hoppa till positionen efter
den avslutande etiketten. Denna snutten definieras som:
Trigger: <a
Template: <a href="${1:filename}">${2*}</a>$3
Det finns ett par nya funktioner här. Först $1 platshållare har blivit mer komplex. Den innehåller nu en del standardtext
(ordet ‘‘ filename‘‘ Om en platshållare innehåller standardtext, är standardtexten i stället för platshållaren när snutten
utvidgas. Även när du hoppar till en platshållare med standardtext som använder Control+J, väljs standardtexten.
På detta sätt kan du använda standardtexten som en påminnelse till dig att fylla i viktiga delar av mallen. Du kan ange
standardtext för en platshållare genom att använda syntaxen: ${<number>:default text}.
Den andra nyheten är att den andra platshållaren har en asterisk efter det (${2*}). Det innebär att all text som
valdes innan expansion ersätts mallen av platshållaren. För att se detta i handling, markera lite text i editorn, tryck
Control+J, typ <a och tryck Control+J igen, mallen kommer att utökas till:
<a href="filename">whatever text you selected</a>
Infoga en HTML-bildetikett [<i] Detta är mycket likt att infoga en HTML-länk, som vi såg ovan. Det gör att du
snabbt kan mata in en <img src=filenameält=description"/>-etikett och hoppa mellan src och alt
attribut:
Trigger: <i
Template: <img src="${1:filename}" alt="${2*:description}" />$3
Infoga en godtycklig HTML-etikett [<<] Detta gör att du kan sätta in en godtycklig full HTML-etikett (eller linda
in tidigare valda texten i etiketten). För att använda den, skriv helt enkelt ‘‘<< ‘‘ och tryck Control+J. Editorn
kommer att expandera den till:
<|></>
Skriv etikettnamnet, till exempel: span och tryck Control+J, som kommer att resultera i:
<span>|</span>
Du kommer att notera att den avslutande etiketten automatiskt har fyllts med span. Detta uppnås med ännu ett annat
särdrag av platshållare, spegling. Spegling betyder helt enkelt att om du anger provplatshållaren mer än en gång i en
mall, den andra och alla senare positioner kommer automatiskt fyllas i med vad du skriver i det första positionen, när
du trycker Control+J. Definitionen för denna snutten är:
1.5. Redigera e-böcker
91
calibre Användarhandbok, Utgåva 2.22.0
Trigger: <<
Template: <$1>${2*}</$1>$3
Som ni kan se, har den första platshållaren ($1) specificerats två gånger, andra gången i den avslutande etiketten, som
helt enkelt kommer att kopiera vad du skriver i öppningsetiketten.
Infoga en godtycklig HTML-etikett med ett klassattribut [<c] Detta är mycket likt infogningen av godtycklig
etikett i exemplet ovan, förutom att det förutsätter att du vill ange en klass för etiketten:
Trigger: <c
Template: <$1 class="${2:classname}">${3*}</$1>$4
Detta gör att du kan först skriva etikettnamnet, tryck Control+J, skriv klassnamnet, tryck Control+J, skriv
innehållet i etiketten och tryck Control+J en sista gång för att hoppa ur etiketten. Den avslutande etiketten kommer
att automatiskt fyllas.
Skapa dina egna snuttar Snuttar verkligen lysa eftersom du kan skapa dina egna för att passa din redigeringsstil. För
att skapa egna snuttar gå till Redigera->Inställningar->Editorinställningar->Hantera snuttar i editorn. Detta kommer
att ta fram en lättanvänd dialogruta för att hjälpa dig att skapa dina egna snuttar. Klicka bara på Lägg snuttar-knappen
och du kommer att se en dialogruta som ser ut:
Först ge din snutt ett namn, något beskrivande, för att hjälpa till att identifiera (text)snutten i framtiden. Ange sedan
textutlösare. En textutlösare är helt enkelt den text som du måste skriva i editorn innan du trycker Control+J för att
expandera snutten.
Ange sedan snuttmallen. Du bör börja med en av exemplet ovan och ändra det för att passa dina behov. Slutligen,
ange vilka filtyper du vill att snutten ska vara aktiv för. På så sätt kan du ha flera snuttar med samma textutlösare som
fungerar olika i olika filtyper.
92
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Nästa steg är att testa din nyskapade snutt. Använd Test-rutan längst ner. Skriv in textutlösaren och tryck Control+J
att utöka snutten och hoppa mellan platshållarna.
Rapportverktyget
Editorn har ett trevligt *Rapport*verktyg (via: guilabel: Verktyg->Reporter) som visar sammanfattningar av filer,
bilder, ord, tecken och stilar som används i boken. Varje rad i rapporten är hyperlänkad. Dubbel klicka på en linje
hoppar till den plats i boken där objektet används eller definieras (i förekommande fall) Till exempel i Länkar vy kan
du dubbelklicka poster på Källa kolumnen för att hoppa till där länken är definierad och poster i Mål kolumnen för att
hoppa till där länken pekar.
1.5.9 Speciella funktioner i kodeditorn
calibres HTML-editor är mycket kraftfull. Den har många funktioner som gör redigering av HTML (och CSS) lättare.
Syntaxmarkering
HTML-editorn har mycket sofistikerad syntaxmarkering. Funktioner inkluderar:
• Texten inne i fet, kursiv och rubriketiketter görs fet/kursiv
• När du flyttar markören genom HTML, är passande HTML-etikettpar markerade
• Felaktig HTML markeras med en röd understrykning
• Stavfel i texten inuti HTML-etiketter och attribut som titel är markerade. Stavningskontrollen är språkmedveten,
baserat på värdet av lang-attributet av den aktuella etiketten och det övergripande bokspråket.
• CSS inbäddade inuti <style>-etiketter är markerad
• Specialtecken som kan vara svåra att skilja såsom icke-brytande mellanslag, olika typer av bindestreck etc. är
markerade.
• Länkar till andra filer i <a>-etiketter, <img>- och <link>-etiketter har alla filnamnen markerade. Om filnamnet de pekar på finns inte, markeras filnamnet med en röd understrykning.
1.5. Redigera e-böcker
93
calibre Användarhandbok, Utgåva 2.22.0
Sammanhangsberoende hjälp
Du kan högerklicka på ett HTML-etikettnamn eller ett CSS-egenskapsnamn för att få hjälp för den etiketten eller
egenskapen.
Du kan också hålla nere Ctrl-tangenten och klicka på godtyckligt filnamn inuti en länketikett för att automatiskt öppna
filen i editorn.
Komplettera automatiskt
När du redigerar en e-bok, är en av de mest tråkiga uppgifter att skapa länkar till andra filer inne i boken, eller till
CSS-mallar eller bilder. Du måste räkna ut rätt filnamn och relativ sökväg till filen. Editorn kompletterar automatiskt
för att göra det lättare.
När du skriver ett filnamn, tar editorn automatiskt fram förslag. Använd bara Tab-tangenten för att välja rätt filnamn.
Editorn erbjuder även förslag på länkar som pekar på ett ankare inuti en annan HTML-fil. När du har skrivit tecknet #,
kommer editorn visa en lista över alla ankare i målfilen, med en liten snutt av text för att hjälpa dig välja rätt ankare.
Observera att till skillnad från de flesta övriga system med automatisk komplettering, använder editorns kompletteringssystem delsekvensträffar. Detta innebär att du behöver bara skriva bara två eller tre tecken från någonstans i
filnamnet att slutföra filnamnet. Till exempel, låt säga att du önskar filnamnet ../images/arrow1.png, kan du
helt enkelt skriva ia1 och tryck Tab för att slutföra filnamn. När du söker efter träffar, prioriterar kompletteringssystemet tecken som är i början av ett ord, eller omedelbart efter en sökvägsavskiljare. När man vänjer sig detta system,
finner du det sparar mycket tid och ansträngning.
Snuttar
calibre editorn stöder snuttar. En snutt är ett stycke text som antingen återanvänds ofta eller innehåller mycket överflödig text. Editorn kan du infoga en snutt med endast ett fåtal knapptryckningar. De snuttar är mycket kraftfull, med
många funktioner, som platshållare som du kan hoppa mellan, automatisk spegling av upprepad text och så vidare. För
mer information se Snuttar (sida 90).
1.6 Jämför e-böcker
calibre innehåller en integrerad e-boks jämförelseverktyg som kan användas för att se vad som har förändrats inuti en
e-bok efter redigering eller konvertera den. Det kan jämföra böcker i ePub-och AZW3 format.
För att använda den, antingen öppna e-bok i verktyget för Redigera e-böcker (sida 67) och sedan klicka på Fil->Jämför
med annan bok eller använd Bokinformation (sida 15)-panelen. Om du gör en konvertering från EPUB till EPUB,
kommer den ursprungliga EPUB-filen sparas som ORIGINAL_EPUB. Högerklicka på ORIGINAL_EPUB posten i
Bokdetaljpanelen och välj Jämför med EPUB-format.
Jämförelseverktyg som öppnas kommer att se ut som skärmdumpen nedan. Det visas skillnader i text, färger och bilder
i de valda böckerna.
94
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.6.1 Förstå jämförelsevyn
Som framgår av skärmdumpen ovan, jämförelse vyn visar skillnaderna mellan de två böcker sida vid sida. Endast
skillnaderna, med några rader av sammanhang runt dem visas. Detta gör det enkelt att snabbt se bara vad som har
ändrats i ett stort dokument som en bok.
Tillagd text visas med en grön bakgrund, borttagen text med en röd bakgrund och ändrad text med en blå bakgrund.
Radnummer för all text som förändrats visas på sidorna, vilket gör det lätt att gå till en viss förändring i editorn. När
du öppnar jämförelseverktyget inifrån editorn, kan du också dubbelklicka på en rad i den högra panelen för att gå till
den raden i editorn automatiskt.
En användbar teknik när man jämför böcker är att tala om för jämförelseverktyget för att försköna de text-och Stil-filer
innan du beräknar skillnader. Detta kan ofta resultera i renare och lättare att följa skillnader. Det gör du genom att klicka
på Alternativ-knappen i det nedre högra och välj Försköna filer innan man jämför dem. Observera att förskönande kan
1.6. Jämför e-böcker
95
calibre Användarhandbok, Utgåva 2.22.0
ibland ha oönskade effekter, eftersom det kan orsaka ogiltig uppmärkning ändras för att göra det giltigt. Du kan också
ändra antalet rader av sammanhang visade runt skillnader via Inställningar knappen.
Du kan söka efter all text i skillnaderna via sökfältet längst ner. Du måste ange vilken panel för att söka, Vänster eller
Höger.
1.6.2 Hur att starta jämförelseverktyget
Jämförelse verktyget är mest användbart när du har två versioner av samma bok och du vill se vad som skiljer mellan
dem. För detta ändamål finns det flera sätt att starta verktyget.
Jämför två e–bokfiler
Öppna den första filen i Redigera e-böcker (sida 67) verktyget. Klicka nu på Fil->Jämför med en annan bok och välj
den andra filen (det måste vara i samma format som den första). Jämförelsen vyn öppnas med filen som redigeras till
höger och den andra filen till vänster.
Jämför ORIGINAL_FMT med FMT
När du gör en omvandling i calibre från en FMT till sig själv, den ursprungliga filen sparas som ORIGINAL_FMT. Du
kan se vad som har ändrats genom omvandling, genom att högerklicka på ORIGINAL_FMT posten i Bokinformation
(sida 15) panelen i huvud calibre fönstret och välj Jämför med FMT. Jämförelsevyn öppnas med ORIGINAL_FMT
till vänster och FMT till höger.
Jämför en kontrollpunkt för det aktuella tillståndet av boken under redigering
Redigera e-böcker (sida 67) verktyget har en mycket användbar funktion, som kallas Kontrollpunkt (sida 78). Detta
gör att du kan spara det aktuella tillståndet i boken som en namngiven kontrollpunkt, som du kan återgå till, om du inte
gillar de ändringar du har gjort sedan skapa kontrollpunkten. Kontrollpunkter skapas också automatiskt när du utför
olika automatiska åtgärder i editorn. Du kan se listan med kontrollpunkter genom att gå till Visa->Kontrollpunkter och
använd sedan Jämför knappen för att jämföra boken på den valda kontrollpunkten med det aktuella läget. Jämförelsen
Verktyget visar kontrollpunkt till vänster och det aktuella läget till höger.
1.7 Redigera e-boks metadata
Innehåll
• Redigera metadata av en bok i taget (sida 97)
– Nedladdning av metadata (sida 97)
– Hantering bokformat (sida 97)
– Allt om omslag (sida 97)
• Redigera metadata för flera böcker på en gång (sida 97)
– Sök och ersätt (sida 98)
– Massnerladdning av metadata (sida 99)
E-böcker finns i alla former och storlekar, och oftare än inte, (saker som titel / författare / serie / utgivare) är ofullständig
eller felaktig sin metadata. Det enklaste sättet att ändra metadata i calibre är att helt enkelt dubbelklicka på en post
och skriv rätt ersättare. För mer sofistikerade, “power redigering” använda redigeringsmetadataverktyg som diskuteras
nedan.
96
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.7.1 Redigera metadata av en bok i taget
Klicka på den bok du vill redigera och klicka sedan på Redigera metadata-knappen eller tryck på E nyckel. En dialogruta öppnas som låter dig redigera alla aspekter av metadata. Den har olika funktioner för att göra redigeringen
snabbare och effektivare. En lista över de vanligaste tips:
• Du kan klicka knappen mellan titel och författare för att växla dem automatiskt.
• Du kan klicka på knappen bredvid författaren sorterings för att ha calibre automatiskt fylla i med hjälp av
sorteringsvärden som lagrats med varje upphovsman. Använd Hantera Författare dialog att se och ändra författarnas sorteringsvärden. Denna dialogruta kan öppnas genom att klicka och hålla in knappen bredvid författaren
sortera.
• Du kan klicka på knappen bredvid etiketter att använda Etikett Editor för att hantera etiketter i samband med
boken.
• ISBN rutan kommer att ha en röd bakgrund, om du anger ett ogiltigt ISBN. Det kommer att vara grönt för giltiga
ISBN
• Författaren sorterings rutan blir röd om författaren sorterings värdet skiljer sig från det som calibre tycker att
det borde vara.
Nedladdning av metadata
Den trevligaste funktionen i dialogrutan redigera metadata är dess förmåga att automatiskt fylla i många metadatafält
genom att få metadata från olika webbplatser. För närvarande calibre använder isbndb.com, Google Books, Amazon
och bibliotek Thing. Metadata nedladdning kan fylla i titel, författare, serier, etiketter, betyg, beskrivning och ISBN
för dig.
För att använda nedladdning, fyll i titel och författare och tryck Hämta metadata. calibre kommer att visa dig en lista
på böcker som närmast passar titel och författare. Om du fyller i ISBN-fältet först, kommer det att användas i stället
för titeln och författare. Om inga passade träffar hittas, försök att göra din sökning lite mindre specifik genom att ta
med endast några nyckelord i titeln och bara författarens efternamn.
Hantering bokformat
I calibre, kan en enda bokpost har många olika format i samband med det. Till exempel kan du ha fått de samlade
verk av Shakespeare i EPUB-format och senare konverterade den till MOBI att läsa på din Kindle. calibre hanterar
automatiskt flera format för dig. I Tillgängliga format i dialogrutan Redigera metadata, kan du hantera dessa format.
Du kan lägga till ett nytt format, ta bort ett befintligt format och även be calibre för att ange metadata och täcka för
boken posten från metadata i ett av formaten.
Allt om omslag
Du kan be calibre ladda ner bokomslag för dig, förutsatt att boken har en känd ISBN. Alternativt kan du ange en fil på
din dator som ska användas som omslag. calibre kan även generera ett standardomslag med grundläggande metadata
om det för dig. Du kan dra och släppa bilder på locket för att byta den och även högerklicka för att kopiera / klistra in
omslagsbilder.
Dessutom finns det en knapp för att automatiskt justera gränser från omslag, om din omslagsbild har en ful kant.
1.7.2 Redigera metadata för flera böcker på en gång
Välj först de böcker du vill redigera genom att hålla ner Ctrl eller Skift och klicka på dem. Om du väljer mer än en bok,
klicka på Redigera metadata-knappen kommer att orsaka en ny Mass metadata redigeringsdialogruta för att öppna.
1.7. Redigera e-boks metadata
97
calibre Användarhandbok, Utgåva 2.22.0
Med den här dialogrutan kan du snabbt ställa författaren /förlag/betyg/etikett/serie etc av ett gäng böcker till samma
värde. Detta är särskilt användbart om du just har importerat ett antal böcker som har någon metadata gemensamt.
Denna dialog är mycket kraftfullt, till exempel, har det en Sök och ersätt flik som du kan använda för att utföra
massoperationer på metadata och med kopiera metadata från en kolumn till en annan.
Normala redigeringsdialogen för metadata har också knapparna Nästa och Föregående som du kan använda för att
redigera metadata för flera böcker efter varandra.
Sök och ersätt
Massmetadata redigeringsdialogrutan låter dig utföra godtyckligt kraftfulla sök och ersätt operationer på de valda
böckerna. Som standard använder en enkel textsökning och ersätta, men det stöder också reguljära uttryck. För mer
information om reguljära uttryck finns Allt om att använda reguljära uttryck i calibre (sida 199).
Som nämnts ovan finns det två sök- och ersättningslägen: teckenpassning och reguljära uttryck. Teckenpassning kommer att se i Sök-fältet du väljer för de tecken du skriver i söka efter‘-rutan och ersätta dessa tecken med vad du skriver
i ersätta med-rutan. Varje förekomst av söktecknen på området kommer att ersättas. Antag till exempel fältet som
sökte innehåller en len sten. om du söker på en ersättas med‘ HELLO‘, då resultatet kommer att bli HELLO lHELLO
stHELLO.
Om fältet du söker på är ett multi-fält som etiketter, då varje etikett behandlas separat. Till exempel, om dina etiketter
innehåller Skräck, Kuslig, sökuttrycket‘ r kommer inte passa mot något eftersom uttrycket först kommer att tillämpas
på Skräck‘ och sedan till Kuslig.
Om du vill sökning ska vara skifteslägeokänslig, bocka Case sensitive rutan.
Du kan låta calibre ändra det gäller resultatet (information efter det att ersättning har hänt) genom att välja en av
funktionerna från Verkställ funktion efter ersätta-rutan. Möjliga åtgärder är:
• Lower case – ändra alla tecken i fältet till gemener
• Upper case – ändra alla tecken i fältet till versaler
• Title case – Varje ord med bara versaler.
Den Din test-rutan finns för dig att skriva in text för att kontrollera att sök/ersätt gör vad du vill. I de flesta fall kommer
bokens provrutorna att räcka, men det är möjligt att det finns ett fall som du vill kontrollera som inte visas i dessa rutor.
Skriv in det målet i Din test.
Reguljära uttrycksläget har vissa skillnader från teckenläge, förutom (naturligtvis) användning av reguljära uttryck.
Den första är att funktionerna tillämpas på de delar av strängen som passar mot söksträngen, inte hela fältet. Det andra
är att funktionerna gäller ersättningssträngen, inte hela fältet.
Den tredje och viktigaste är att ersättningssträngen kan hänvisa till delar av söksträngen med bakåtreferenser. En
bakåtreferens är \\n där n är ett heltal som hänvisar till den n:te parentesgrupp i sökuttrycket. Till exempel, givet
samma exempel som ovan, en dålig katt, ett sökuttryck en (...) (...) ‘, och ersätter uttrycket ‘en \2 \1, resultatet kommer
vara en katt dålig. Se Allt om att använda reguljära uttryck i calibre (sida 199) för mer information om bakåtreferenser.
Ett användbart mönster: anta att du vill ändra skiftläge för ett helt fält. Det enklaste sättet att göra detta är att använda teckenläge, men låt oss vidare anta att du vill använda reguljära uttrycksläge. Sökningen uttrycket ska vara (.*)
ersättningsuttrycket ska vara \1 och önskad förändringsfunktion bör väljas.
Slutligen, i reguljära uttrycksläget kan du kopiera värden från ett fält till ett annat. Helt enkelt göra fältets källa och
destination annorlunda. Kopian kan ersätta destinationsfältet lägger du till fältet (lägg till i början), eller lägga till fältet
(lägg till på slutet). Den &#x27använd kommatecken&#x27 kryssrutan berättar calibre lägga till (eller inte) lägga till
ett kommatecken mellan texten och destinationsfältet i lägg till före och efter lägen. Om destinationen är flera (t.ex.
etiketter), kan du inte avmarkera rutan
Sök och ersätt görs efter alla andra metadataändringar i de andra flikarna tillämpas. Detta kan leda till en viss förvirring, eftersom testrutorna visar informationen innan andra förändringar, men åtgärden kommer att tillämpas efter
98
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
övriga förändringar. Om du har några tvivel om vad som kommer att hända, blanda inte ihop sök/ersätt med andra
förändringar.
Massnerladdning av metadata
Om du vill hämta metadata för flera böcker på en gång, högerklickar du på Redigera metadata-knappen och välj
Hämta metadata. Du kan välja att hämta endast metadata, bara omslag, eller båda.
1.8 Vanliga frågor och svar
Innehåll
•
•
•
•
E-bok formatkonvertering (sida 99)
Enhetsintergration (sida 102)
Bibliotekshantering (sida 109)
Diverse (sida 114)
1.8.1 E-bok formatkonvertering
Innehåll
•
•
•
•
•
•
Vilka format stöder calibre konvertering till/från? (sida 99)
Vilka är de bästa källformaten att konvertera? (sida 100)
Jag konverterade en PDF-fil, men resultatet har diverse problem? (sida 100)
Hur konverterar jag min fil som innehåller icke-engelska tecken, eller typografiska citattecken? (sida 100)
Vad är det med innehållsförteckningen i MOBI-filer? (sida 100)
Omslagen till mina MOBI-filer har slutat dyka upp i Kindle för PC / Kindle for Android / iPad etc.
(sida 101)
• Hur konverterar jag en samling HTML-filer i en viss ordning? (sida 101)
• EPUB som producerades med calibre är inte giltig? (sida 102)
• Hur använder jag en del av de avancerade funktionerna i omvandlingsverktyget? (sida 102)
Vilka format stöder calibre konvertering till/från?
calibre stöder konvertering av många indataformat till många utdataformat. Den kan konvertera alla indataformat i
följande list, till alla utdataformat.
Indataformat: AZW, AZW3, AZW4, CBZ, CBR, CBC, CHM, DJVU, DOCX, EPUB, FB2, HTML, HTMLZ, LIT,
LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ
Utdataformat: AZW3, EPUB, FB2, OEB, LIT, LRF, MOBI, HTMLZ, PDB, PMLZ, RB, PDF, RTF, SNB, TCR, TXT,
TXTZ, ZIP
Observera: PRC är ett generiskt format calibre stöder PRC-filer med TextRead och MOBIBook rubriker. PDB är
också en generisk format. calibre stöder läsplatta, Plucker, PML och zTxt preliminära filer. DjVu stöd endast för
att konvertera DjVu-filer som innehåller inbäddade text. Dessa är oftast genereras av OCR-program. MOBI böcker
kan vara av två typer Mobi6 och KF8. calibre stöder båda fullt ut. MOBI filer har ofta .azw eller .azw3 filändelser.
Docx-filer från Microsoft Word 2007 och nyare stöds.
1.8. Vanliga frågor och svar
99
calibre Användarhandbok, Utgåva 2.22.0
Vilka är de bästa källformaten att konvertera?
I fallande preferens: LIT, MOBI, AZW, EPUB, AZW3, FB2, DOCX, HTML, PRC, ODT, RTF, PDB, TXT, PDF
Jag konverterade en PDF-fil, men resultatet har diverse problem?
PDF är ett hemskt format att konvertera från. För en lista av diverse problem du kommer stöta på vid PDF-konvertering,
se: Konvertera PDF-dokument (sida 63).
Hur konverterar jag min fil som innehåller icke-engelska tecken, eller typografiska citattecken?
Det finns två aspekter på detta problem:
1. Att veta kodningen av källfilen: calibre försöker gissa vilken teckenkodning källfilerna använder, men ofta
är detta omöjligt, så du måste tala om vad kodning att använda. Detta kan göras i GUI via Teckenkodning
för indata fältet i Utseende sektion. De kommandoradsverktyg alla har: option: –input-encoding alternativ.
2. När du lägger till HTML-filer till calibre, kan du behöva tala om för calibre vad filerna är kodade i. För att
göra detta går du till Inställningar->Tillägg->Filtyp tlllägg och anpassa HTML2Zip-tlllägget, berätta för
det vad dina HTML-filer är kodade i. Nu när du lägger HTML-filer till calibre kommer de att behandlas på
rätt sätt. HTML-filer från olika källor har ofta olika kodningar, så du kan behöva ändra denna inställning
upprepade gånger. En gemensam kodning för många filer från webben är ‘‘ cp1252‘‘ och jag föreslår
att du prova det först. Observera att när du konverterar HTML-filer, lämna indata kodningsinställningen
ovan nämnda tomt. Detta beror på att HTML2Zip-tillägg automatiskt konverterar de HTML-filer till en
standardkodning (UTF-8).
Vad är det med innehållsförteckningen i MOBI-filer?
Det första man måste inse är att de flesta e-böcker har två innehållsförteckningar. Den ena är den traditionella innehållsförteckningen, som innehållsförteckningen du hittar i pappersboken. Denna innehållsförteckning är en del av
huvuddokumentflödet och kan titulera hur du vill. Detta innehållsförteckningen kallas innehålls innehållsförteckningen.
Sedan är det metadatats innehållsförteckningen. En metadatas innehållsförteckningen är en innehållsförteckning som
inte är en del av bokens text och vanligtvis nås av någon speciell knapp på en läsare. Till exempel i calibre läsare
använder du Visa innehållsförteckningen för att se den här innehållsförteckningen. Denna innehållsförteckningen kan
inte anpassas av bokens skapare. Hur det representeras är upp till läsarprogrammet.
I MOBI-formatet är situationen lite förvirrad. Detta beror på att MOBI-format, ensamt bland vanliga e-bokformat, inte
har ordentlig stöd för ett metadatainnehållsförteckning. En MOBI-bok simulerar närvaron av en metadatainnehållsförteckning genom att sätta en extra innehållsförteckning i slutet av boken. När du klickar på Gå Innehållsförteckning på
din Kindle, är det denna extra Innehållsförteckning Kindle tar.
Nu kan det väl verka för dig att MOBI bok har två identiska innehållsförteckningar. Kom ihåg att en är semantiskt
ett innehåll innehållsförteckningen och den andra är en metadatainnehållsförteckningen, även om båda kan ha exakt
samma poster och ser likadana ut. Ena kan nås direkt från Kindle menyer, den andra inte kan.
Vid konvertering till MOBI, upptäcker Calibre metadatainnehållsförteckning i inmatningsdokumentet och genererar en slut-på-fil innehållsförteckning i utdata MOBI-filen. Du kan stänga av detta med ett alternativ i MOBIutdatainställningarna. Du kan också berätta för Calibre att sätta den i början eller slutet av boken via ett alternativ
i MOBI -utdatainställningarna. Kom ihåg detta innehållsförteckning är semantiskt en metadatainnehållsförteckning,
på annat MOBI-format kan det inte vara en del av texten. Det faktum att det är en del av texten i MOBI är en olycka som
100
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
orsakats av begränsningar i MOBI. Om du vill ha en innehållsförteckning på en viss plats i dokumentets text, skapa en
efter hand. Så vi rekommenderar att du lämnar standardinställning som den är, det vill säga med metadatainnehållsförteckningen i slutet av boken. Observera också att om du inaktiverar generering av slut-på-fil innehållsförteckning
kanske den resulterande MOBI-filen inte fungerar korrekt på en Kindle, eftersom Kindle använder metadatainnehållsförteckningen för många saker, bland annat sidväxlingsfunktionen.
Om du har en handredigerad innehållsförteckning i inmatningsdokumentet kan du använda alternativen innehållsförteckningsupptäckt i Calibre för att automatiskt generera metadatainnehållsförteckning från den. Se omvandlingsavsnittet i användarhandboken för mer information om hur du använder de här alternativen.
Slutligen uppmanar jag dig att dumpa innehållet iinnehållsförteckningen och bara har en metadatainnehållsförteckningen i dina e-böcker. Metadatainnehållsförteckningen kommer att ge människor som läser dina e-böcker en mycket
överlägsen navigeringserfarenhet (utom på Kindle, där de är i princip samma som en innehållsförteckningen).
Observera: Den nyare AZW3-formatet har ordentligt stöd för metadatainnehållsförteckning. Dock tenderar Kindle
firmware inte fungerar om du avaktiverar generationen av slut-påfil-radbaserad innehållsförteckning. Så det rekommenderas att du lämnar den genererade innehållsförteckningen i fred. Om du skapar en AZW3-fil med metadatainnehållsförteckning och inget slut-på-fil som genererad innehållsförteckning, kommer en del funktioner på Kindle inte
fungerar, till exempel sidväxlingsfunktionen.
Omslagen till mina MOBI-filer har slutat dyka upp i Kindle för PC / Kindle for Android / iPad etc.
Detta orsakas av en bugg i Amazonas programmet. Du kan lösa det genom att gå till Inställningar->Alternativ för
utdata-> MOBI utdata och ställa in “Aktivera delning av bokinnehåll” alternativet. Om du kodar om en tidigare
konverterade bok, måste du också aktivera alternativet i omvandlingsdialogrutan för att enskild bok (som per bok
konverteringsinställningar sparas och har företräde).
Observera att detta kommer att innebära att den genererade MOBI kommer att dyka upp i personliga dokument i stället
för böcker på Kindle Fire och Amazon Whispersync kommer inte att fungera, men omslagen kommer. Det är ditt val
vilken funktion som är viktigare för dig. Jag uppmuntrar dig att kontakta Amazon och be dem att åtgärda detta fel.
Felet i Amazons mjukvara är att när du skriver en MOBI-fil på en Kindle, om inte filen är markerad som en personligt
dokument, förutsätter Amazon att du köpte boken från dem och försöker hämta omslagsminiatyren för den från deras
servrar. När hämtningen misslyckas, vägrar den att gå tillbaka till omslaget som definieras i MOBI-filen. Detta är
sannolikt avsiktligt från Amazons sida att försöka tvinga författare att endast sälja genom dem. Med andra ord, Kindle
visar endast omslag av böcker markerade som personliga dokument eller av böcker som köps direkt från Amazon.
Om du skickar en MOBI-fil till en Kindle med calibre med en USB-anslutning, arbetar calibre runt detta Amazon-fel
genom att ladda upp en omslagsikon. Dock är endast möjligt att komma runt problemet när du använder en USBanslutning och skicka med calibre. Observera att om du skickar via e-post, kommer Amazon automatiskt markera
MOBI-filen som ett personligt dokument och omslaget kommer att fungera, men boken kommer att dyka upp i personliga dokument.
Hur konverterar jag en samling HTML-filer i en viss ordning?
För att omvandla en samling HTML-filer i en viss ordning, måste du skapa en innehållsförteckningsfil. Det vill säga,
en annan HTML-fil som innehåller länkar till de andra filerna i önskad ordning. En sådan fil ser ut som:
<html>
<body>
<h1>Table of Contents</h1>
<p style="text-indent:0pt">
<a href="file1.html">First File</a><br/>
<a href="file2.html">Second File</a><br/>
.
1.8. Vanliga frågor och svar
101
calibre Användarhandbok, Utgåva 2.22.0
.
.
</p>
</body>
</html>
Sedan är det bara lägga till den här HTML-filen till grafiska gränssnittet och använd knappen Konvertera för att skapa
din e-bok. Du kan använda alternativet i innehållsförteckningsavsnittet i dialogrutan för att styra omvandlingen hur
innehållsförteckningen genereras.
Observera: Som standard när du lägger till HTML-filer, följer calibre länkar i filerna i djup först ordning. Detta
innebär att om filen A.html länkarna för att B.html och C.html och D.html, men B.html också länkar till D.html, då
filerna kommer att vara i ordning a.html, B.html, D Html, C.html. Om du istället vill att för att bli a.html, B.html,
C.html, D.html då måste du berätta calibre att lägga dina filer i bredden först ordning. Gör detta genom att gå till
Inställningar->Tillägg och anpassa HTML till ZIP-tillägg.
EPUB som producerades med calibre är inte giltig?
calibre garanterar inte att en EPUB som produceras är giltigt. Den enda garantin det gör är att om du matar den giltig
XHTML 1.1 + CSS 2.1 matar den ut en giltig EPUB. calibre försöker hårt för att säkerställa att EPUB den producerar
faktiskt fungerar som det är tänkt på en mängd olika enheter, ett mål som inte är förenligt med att producera giltiga
EPUBs, och en som är mycket viktigare att de allra flesta av sina användare. Om du behöver ett verktyg som alltid ger
tillförlitliga EPUB är calibre inte för dig. Detta innebär, att om du vill skicka en calibre som produceras EPUB till en
online-butik som använder en EPUB giltighetskontroller, måste du se till att EPUB är giltig, calibre kommer inte göra
det åt dig - med andra ord måste du mata calibre med giltig XHTML + CSS som ingångsdokument.
Hur använder jag en del av de avancerade funktionerna i omvandlingsverktyget?
Du kan få hjälp av någon enskild egenskap hos omvandlarna genom att föra musen över den i GUI eller köra
ebook-convert dummy.html .epub -h vid en terminal. Ett bra ställe att börja är att titta på följande demo-fil
som visar en del av de avancerade funktioner html-demo.zip32
1.8.2 Enhetsintergration
32 http://calibre-ebook.com/downloads/html-demo.zip
102
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Innehåll
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Vilken enhet stöder calibre? (sida 103)
Hur kan jag hjälpa till för att få stöd för min enhet i calibre? (sida 103)
Enheten upptäcks inte av calibre? (sida 103)
Min enhet är icke-standard eller ovanligt. Vad kan jag göra för att ansluta till den? (sida 104)
Hur hanterar calibre samlingar på min SONY-läsare? (sida 104)
Kan jag använda både calibre och SONY programvara för att hantera min läsare? (sida 105)
Hur använder jag calibre med min iPad / iPhone / iPod touch? (sida 105)
Hur använder jag calibre med min Android-telefon / surfplatta eller Kindle Fire HD? (sida 106)
Kan jag komma åt mina calibre-böcker med hjälp av webbläsaren i min Kindle eller annan läsenhet?
(sida 107)
Jag får felmeddelandet “Det gick inte att starta mediaservern: Port 8080 inte ledig “0.0.0.0””? (sida 108)
Jag kan inte skicka e-post med hjälp av calibre? (sida 108)
Varför är min enhet inte registrerad i linux? (sida 108)
Min enhet är monterat skrivskyddad i linux, så calibre kan inte ansluta till det? (sida 109)
Varför stöder calibre inte samlingar på Kindle eller hyllor på Nook? (sida 109)
Jag får ett felmeddelande när jag försöker använda calibre med min Kobo Touch/Glo/etc.? (sida 109)
Vilken enhet stöder calibre?
calibre kan direkt ansluta till alla stora (och de flesta av de mindre) e-boksläsenheter, smarta mobiler, surfplattor, etc.
Dessutom används Anslut till mapp-funktionen kan du använda den med någon e-boksläsare som exporterar sig som
en USB-disk. Du kan även ansluta till Apple-enheter (via iTunes), med hjälp av Anslut till iTunes-funktionen.
Hur kan jag hjälpa till för att få stöd för min enhet i calibre?
Om enheten visas som en USB-disk för operativsystemet, att lägga till stöd för calibre är mycket enkelt. Vi behöver
bara lite information från dig:
• Komplett lista över e-bokformat som enheten stöder.
• Finns det en särskild katalog på enheten där alla e-bokfiler ska placeras? Också om inte enheten upptäcker filer
som placeras i underkataloger?
• Vi behöver också information om enheten som calibre samlar automatiskt. Först, om enheten har stöd för SDkort, sätt in dem. Anslut sedan enheten till datorn. I calibre gå till Inställningar->Diverse och klicka på knappen”
Felsök enhetsupptäckt ”. Detta kommer att skapa en del felsökningsutskrifter. Kopiera den till en fil och upprepa
processen, den här gången med enheten bortkopplad från datorn.
• Skicka båda de ovanstående utdata till oss med andra uppgifter och vi kommer att skriva en drivrutin för enheten.
När du skickar utdata för ett visst operativsystem, kommer stöd för enheten i det operativsystemet visas i nästa version av calibre. För att skicka utdata, öppna en felrapport och fäst utdata till den. Se calibre bugs <http://calibreebook.com/bugs>‘_.
Enheten upptäcks inte av calibre?
Gör så här för att hitta problemet:
• Se till att du ansluter en enda enhet till datorn åt gången. Använd inte någon annan calibre-stöd enhet som
iPhone/iPad etc. samtidigt.
1.8. Vanliga frågor och svar
103
calibre Användarhandbok, Utgåva 2.22.0
• Om du ansluter en Apple iDevice (iPad, iPod Touch, iPhone), använder du “Anslut till
iTunes”-metod i “Komma igång” instruktioner i Calibre + Apple iDevices: Börja här.
<http://www.mobileread.com/forums/showthread.php?t=118559>‘_.
• Se till att du kör den senaste versionen av calibre. Den senaste versionen kan alltid laddas ner från calibres webbplats33 . Du kan se vilken version av calibre du kör genom att titta på den nedersta raden i calibre-huvudfönster.
• Försäkra ditt operativsystem är att ser enheten. Det vill säga, att enheten ska visa upp i Utforskaren (Windows)
eller Finder (i OS X).
• I calibre, gå till Inställningar->Ignorerade enheter och kolla att din enhet inte ignoreras
• Om alla dessa åtgärder misslyckas, gå till Inställningar->Diverse och klicka Felsök enhetsdetektion med enheten
ansluten och skicka resultatet som en biljett på calibres bug tracker34 .
Min enhet är icke-standard eller ovanligt. Vad kan jag göra för att ansluta till den?
Förutom Anslut till mapp finns under Anslut till mapp-knappen ger calibre en användardefinierad enhetstillägg
som kan användas för att ansluta till en USB-enhet som dyker upp som en hårddisk i operativsystemet.
OBS: I Windows måste enheten ha en enhetsbeteckning för calibre för att använda den. Se anordningen
enhetstillägg
Inställningar->Avancerat->Tillägg->Enhetstillägg->User Defined
and
Inställningar->Diverse->Få information om att stilla in användardefinierad
enhet för mer information. Observera att om du är med hjälp av användardefinierade tillägg för en enhet
som normalt upptäcks av en inbyggd calibre-tillägg, måste du inaktivera den inbyggda tillägg först, så att ditt
användardefinierade tillägg används istället.
Hur hanterar calibre samlingar på min SONY-läsare?
När calibre ansluter med läsaren, hämtar det alla kollektioner av böcker på läsaren. Samlingarna av vilka böcker är
medlemmar visas på enheten.
När du skickar en bok till läsaren, kommer calibre lägga boken till samlingar som baseras på metadata för den boken.
Som standard kollektioner skapas från etiketter och serier. Du kan styra vilka metadata används genom att gå till
Inställningar->Tillägg->Enhetsgränssnitt tillägg och anpassa SONY tillägget för enhetsgränssnitt. Om du tar bort
alla värden, kommer calibre inte lägga boken till någon samling.
Samlingshantering styrs till stor del av “Metadatas hantering” alternativet finns på Inställningar->Import/Export>Skickar böcker till enheter. Om satt till “Manual” (standard), lämnas hantering av samlingar till användaren; calibre
kommer inte att ta bort redan befintliga samlingar för en bok på läsaren när du skicka boken till läsaren, men calibre
kommer att lägga boken till samlingar vid behov. För att säkerställa att samlingarna för en bok bygger enbart på aktuell
calibre metadata, först ta bort böckerna från läsaren, sedan skicka om böckerna. Du kan redigera samlingar direkt på
enhets genom att dubbelklicka eller högerklicka i samlingarna kolumnen.
Om “Metadata hantering” är satt till “Endast vid sändning”, så kommer calibre att hantera samlingar mer aggressivt.
Samlingar byggs exklusivt med calibre-metadata. Skicka en bok till läsaren kommer att korrigera samlingarna för
boken så samlingarna exakt passar bokens metadata, vid behov lägga till och ta bort samlingarna. Redigera samlingar
på enhetsvisningen är inte tillåtet, eftersom samlingarna som inte finns i metadata kommer att tas bort automatiskt.
Om “Metadata management” är inställd på “Automatisk hantering”, då kommer calibre att uppdatera metadata och
samlingar både när läsaren är ansluten och när böcker skickas. När calibre upptäcker läsaren och genereras en lista
över böcker på läsaren kommer den att sända metadata från biblioteket till läsaren för alla böcker på läsaren som
finns i biblioteket (På enheten är Sann), lägga till och ta bort böcker från samlingarna som indikeras av metadata och
enhetsanpassning. När en bok skickas, korrigerar calibre metadata för den boken, samlingar läggs till och tas bort.
33 http://calibre-ebook.com/download
34 https://bugs.launchpad.net/calibre
104
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Manuell redigering av metadata på enheten är inte tillåtet. Observera att det här alternativet anger att skicka metadata,
inte böcker. Bokens filer på läsaren ändras inte.
Sammanfattningsvis välj “manuell hantering” om du vill hantera samlingar själv. Samlingar för en bok kommer aldrig
att tas bort av calibre, men kan tas bort av dig genom att redigera på enheten. Välj “Endast vid sändning” om du vill att
calibre ska hantera samlingar när du skickar en bok, lägga böcker till och ta bort böcker från samlingarna som behövs.
Välj “Automatisk hantering” om du vill att calibre ska hålla samlingarna uppdaterade när läsaren är ansluten.
Om du använder flera installationer av calibre för att hantera din läsare, då alternativet “Automatisk hantering” kanske
inte är vad du vill. Anslutning av läsaren till ett bibliotek återställer metadata till vad som finns i det biblioteket.
Anslutning till andra bibliotek återställer metadata till vad som är i den andra bibliotek. Metadata i böcker som finns i
båda biblioteken kommer att hoppa fram och tillbaka.
Kan jag använda både calibre och SONY programvara för att hantera min läsare?
Ja, du kan använda båda, förutsatt att du inte kör dem samtidigt. Det vill säga, du bör använda följande sekvens: Anslut
läsare-> Använd någon av program-> Koppla läsare. Anslut läsare-> Använd den andra program> Koppla läsare.
Den bakomliggande orsaken är att läsaren använder en enda fil för att hålla reda på “meta” information, såsom samlingar, och det skrivs till av både calibre och Sonys programvara när något uppdateras på läsaren. Filen kommer att
sparas när läsaren är (säkert) bortkopplad, så att använda det ena eller det andra är säkert om det finns en frånkoppling
mellan dem, men om du inte är den typen att komma ihåg detta, så det enkla svaret är att hålla sig till en eller det andra
för överföring och bara export / import från / till den andra via datorns hårddisk.
Om du behöver återställa metadata på grund av problem som orsakas av att använda både på samma gång, i så fall bara
radera media.xml filen på läsaren med hjälp av datorns filhanterare och det kommer att återskapas efter frånkoppling.
Med de senaste läsariterationer, SONY, i all sin vishet beslutat att försöka tvinga dig att använda deras programvara.
Om du installerar det, auto-startar det när du ansluter läsaren. Om du inte vill avinstallera det helt och hållet, det finns
ett par knep du kan använda. Det enklaste är att helt enkelt byta namn på körbar fil som startar biblioteksprogrammet.
Mer i detalj i forumen <http://www.mobileread.com/forums/showthread.php?t=65809>‘_.
Hur använder jag calibre med min iPad / iPhone / iPod touch?
Över luftsnitt
Det enklaste sättet att bläddra i din calibre-samling på din Apple-enhet (iPad / iPhone / iPod) är att använda calibre
innehållsservern, vilket gör din samling tillgänglig över nätet. Utför först följande steg i calibre
• Ställ önskat utdataformat i calibre till EPUB (Utdataformatet kan ställas in under Inställningar->Gränssnitt>Beteende)
• Ställ in utdatasprofil till iPad (detta kommer att fungera för iPhone / iPod också), enligt Inställnigar>Konvertera->Vanliga alternativ->Sidinställning
• Konvertera de böcker du vill läsa på din i-enhet till EPUB-format genom att markera dem och klicka på knappen
Konvertera.
• Slå på innehållsserver genom att klicka på Anslut / Dela-knappen och lämna calibre igång. Du kan även tala om
för calibre att automatiskt starta innehållsservern via Inställningar->Dela->Dela på nätet.
Det finns många appar till din i-enhet som kan ansluta till calibre. Här beskriver vi med hjälp av två av dem, iBooks
och Stanza.
1.8. Vanliga frågor och svar
105
calibre Användarhandbok, Utgåva 2.22.0
Använda Stanza Du bör kunna komma åt dina böcker på din iPhone genom att öppna Stanza. Gå till “Get Books”
och klicka sedan på “Shared” fliken. Under Shared du att se en post “Books i calibre”. Om du inte, se till att din iPad
/ iPhone är ansluten med hjälp av WiFi-nätverk i ditt hus, inte 3G. Om calibre katalogen fortfarande inte upptäcks i
Stanza, kan du lägga till den manuellt i Stanza. Det gör du genom att klicka på “Shared” fliken, klicka sedan på “Edit”
och sedan på “Add book source” för att lägga till en ny bok källa. I Add book source bilden anger vilket namn du vill
och i fältet URL anger du följande:
http://192.168.1.2:8080/
Ersätt 192.168.1.2 med den lokala IP-adressen till den dator som kör calibre. Om du har ändrat porten calibre innehållsservern körs på, måste du ändra 8080 samt till den nya porten. Den lokala IP-adress är IP-adressen som du dator
tilldelas i ditt hemmanätverk. En snabb Google-sökning kommer att berätta hur du hittar din lokala IP-adress. Klicka
nu på “Spara” och du är klar.
Om du får tidbegränsningsfel medan du surfar på calibre katalogen i Stanza, prova att öka anslutnings “timeout”-värdet
i stanza inställningar. Gå till Info->Settings och öka värdet på Download Timeout.
Använda iBooks Starta webbläsaren Safari och skriv in IP-adressen och porten på den dator som kör calibre servern,
så här:
http://192.168.1.2:8080/
Ersätt 192.168.1.2 med den lokala IP-adressen till den dator som kör calibre. Om du har ändrat porten calibre innehållsservern körs på, måste du ändra 8080 samt till den nya hamnen. Den lokala IP-adress är IP-adressen som du dator
tilldelas i ditt hemmanätverk. En snabb Google-sökning kommer att berätta hur du hittar din lokala IP-adress.
Du kommer att se en lista över böcker i Safari, klicka bara på länken epub för vilket som bok du vill läsa, kommer
Safari då att uppmana dig att öppna den med iBooks.
Med USB-kabeln + iTunes
Använd ‘Anslut till iTunes’ metoden i ‘Getting started’ instructioner i Calibre + Apple iDevices: Start here35 .
Denna metod fungerar endast på Windows Vista och senare, och OS X upp till 10.8 och högre. Linux stöds inte (iTunes
är inte tillgänglig i Linux) och OS X nyare än 10.8 stöds inte, eftersom Apple tagit bort möjligheten att använda iTunes
för att hantera böcker och ersatt den med iBooks.
Hur använder jag calibre med min Android-telefon / surfplatta eller Kindle Fire HD?
Det finns två sätt som du kan ansluta din Android-enhet till calibre. Med hjälp av en USB-kabel - eller trådlöst, via
etern. Det första steget till att använda en Android-enhet är att installerar en e-bok att läsa program på den. Det finns
många gratis och betalal e-bokläsningsapplikationer för Android: Några exempel (utan inbördes ordning): FBReader36 ,
Moon+37 , Mantano38 , Aldiko39 , Kindle40 .
Med hjälp av en USB-kabel
Anslut bara enheten till datorn med en USB-kabel. calibre ska automatiskt upptäcka enheten och sedan kan du överföra
böcker till den genom att klicka på Skicka till enhet knappen. calibre har inte stöd för varje Android-enhet där ute, så
35 http://www.mobileread.com/forums/showthread.php?t=118559
36 https://play.google.com/store/apps/details?id=org.geometerplus.zlibrary.ui.android&hl=en
37 https://play.google.com/store/apps/details?id=com.flyersoft.moonreader&hl=en
38 https://play.google.com/store/apps/details?id=com.mantano.reader.android.lite&hl=en
39 https://play.google.com/store/apps/details?id=com.aldiko.android&hl=en
40 https://play.google.com/store/apps/details?id=com.amazon.kindle&feature=related_apps
106
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
om enheten inte identifieras automatiskt, följ instruktionerna i Hur kan jag hjälpa till för att få stöd för min enhet i
calibre? (sida 103) för att få din enhet stöds i calibre.
Observera: Med nyare Android-enheter, stöds inte USB-anslutningen i Windows XP och OS X innan Mavericks
(10,9). Om du är på Windows XP eller äldre versioner av OS X, bör du använda en av de trådlösa anslutningsmetoder.
Över luftsnitt
Det enklaste sättet att överföra böcker trådlöst till din Android-enhet är att använda Calibre Companion41 Android app.
Denna app underhålls av en Calibre utvecklare och låter calibre för att ansluta till din Android-enhet trådlöst, precis
som om du satt i enheten med en USB-kabel. Du kan bläddra bland filer på enheten i calibre och använda Skicka till
enhet för att överföra filer till enheten trådlöst.
calibre har också en inbyggd webbserver, mediaserver. Du kan bläddra i din calibre samling på din Android-enhet är
att använda calibre mediaservern, vilket gör din samling tillgängligt över nätet. Utför först följande steg i calibre
• Ställ in Önskat utformat i calibre till EPUB för normala Android-enheter eller MOBI för Kindles (Utdataformatet kan ställas in under Inställningar->Gränssnitt->Beteende)
• Konvertera de böcker du vill läsa på din enhet till EPUB / MOBI-format genom att markera dem och klicka på
knappen Konvertera.
• Slå på mediaserver i calibre inställningar och lämna calibre igång.
Nu på din Android-enhet, öppna webbläsaren och gå till
http://192.168.1.2:8080/
Ersätt 192.168.1.2 med den lokala IP-adressen till den dator som kör calibre. Om ditt lokala nätverk stöder användning av datornamn, kan du byta ut IP-adressen med nätverket namnet på datorn. Om du har ändrat porten calibremediaservern körs på, måste du ändra 8080 samt till den nya porten.
Den lokala IP-adress är IP-adressen som du dator tilldelas i ditt hemmanätverk. En snabb Google-sökning kommer
att berätta hur du hittar din lokala IP-adress. Nu kan du bläddra i din boksamling och hämta böcker från calibre till
enheten för att öppna med vad e-bokläsprogram du har på din Android-enhet.
Vissa läsprogram stöder surfa på calibre-biblioteket direkt. Till exempel i Aldiko Klicka på Mina kataloger, då +
lägga till en katalog, sedan ge katalogen en titel som “Calibre” och ge adressen som anges ovan. Nu kan du bläddra i
Calibre-biblioteket och ladda ner direkt till läsprogram.
Kan jag komma åt mina calibre-böcker med hjälp av webbläsaren i min Kindle eller annan läsenhet?
calibre har en mediaerver som exporterar böcker i calibre som en webbsida. Du kan slå på den under Inställningar>Dela på nätet. Sedan är det bara peka webbläsaren på enheten till datorn som kör mediaserver och du kommer att
kunna bläddra i din boksamling. Till exempel, om den dator som kör servern har IP-adressen 63.45.128.5 i webbläsaren
skriver du:
http://63.45.128.5:8080
Vissa enheter, t.ex. Kindle (1/2/DX), tillåter inte att du kan kommer åt port 8080 (standard port som mediaservern
körs. I så fall ändra porten i calibre Inställningar till 80 (på vissa operativsystem, kan du inte att kunna köra servern
på ett portnummer under 1024 på grund av säkerhetsinställningar. I detta fall den enklaste lösningen är att anpassa din
router att vidarebefordra förfrågningar på port 80 till port 8080).
41 http://www.multipie.co.uk/calibre-companion/
1.8. Vanliga frågor och svar
107
calibre Användarhandbok, Utgåva 2.22.0
Jag får felmeddelandet “Det gick inte att starta mediaservern: Port 8080 inte ledig “0.0.0.0””?
Den troligaste orsaken till detta är antivirusprogrammet. Försök att tillfälligt inaktivera det och se om det gör susen.
Jag kan inte skicka e-post med hjälp av calibre?
På grund av den stora mängden av spam e-post, kan e-post sändning vara knepigt, eftersom olika e-postservrar använder olika strategier för att blockera e-post. Det vanligaste problemet är om du skickar e-post direkt (utan postvidarebefordran) i calibre. Många servrar (t.ex. Amazon) blockera e-post som inte kommer från en välkänd vidarebefordran.
Det mest robusta sättet att installera e-sändning i calibre är att göra följande:
• Skapa ett gratis GMX konto på GMX42 .
• Gå till Inställningar->Dela med e-post i calibre och klicka på Använd GMX knappen och fyll i den information
som efterfrågas.
• calibre kommer sedan att använda GMX att skicka e-post.
• Om du skickar till din Kindle, kom ihåg att uppdatera e-postinställningar på Amazon Kindle-sidan för att möjliggöra att e-post skickas från GMX e-postadress. Observera också att Amazon inte tillåter e-postleverans av
AZW3 och ny stil (KF8) MOBI-filer.
Även efter att ha gjort detta, kan du få problem. En vanlig källa till problem är att vissa dåligt utformade antivirusprogram blockerar calibre från att öppna en anslutning för att skicka e-post. Prova att lägga ett undantag för calibre i
antivirusprogrammet.
Observera: Microsoft / Google kan stänga av ditt konto om du använder den för att skicka stora mängder e-post. Så
när du använder Hotmail / Gmail för att skicka e-post calibre begränsar sig automatiskt till att skicka en bok var femte
minut. Om du inte har något emot att riskera ditt konto blockeras kan du minska denna vänta intervall genom att gå
till Inställningar->Avancerat->Justeringar i calibre.
Observera: Google nyligen medvetet bröt sitt protokoll (SMTP) stöd e-post att skicka i ett försök att tvinga alla att
använda deras webbgränssnitt så att de kan visa dig flera annonser. De försöker hävda att SMTP är osäkert, det är fel
och helt enkelt en ursäkt. Om du har problem med gmail måste du tillåta allow less secure apps as descibed here43 .
Observera: Om du är orolig för att ge calibre åtkomst till ditt e-postkonto, helt enkelt skapa en ny gratis e-postkonto
med GMX eller Hotmail och använder den endast för calibre.
Varför är min enhet inte registrerad i linux?
calibre behöver att din Linux-kärnan har ställts in på rätt sätt för att upptäcka enheter. Om dina enheter inte upptäcks,
utför följande tester:
grep SYSFS_DEPRECATED /boot/config-`uname -r`
Du bör se någonting som liknar CONFIG_SYSFS_DEPRECATED_V2 är inte inställd. Också,
grep CONFIG_SCSI_MULTI_LUN /boot/config-`uname -r`
måste återvända CONFIG_SCSI_MULTI_LUN = y. Om du inte ser någon, måste du kompilera din kärna med rätt
inställningar.
42 http://www.gmx.com
43 https://support.google.com/accounts/answer/6010255
108
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Min enhet är monterat skrivskyddad i linux, så calibre kan inte ansluta till det?
Linuxkärnor montera enheter skrivskyddad när deras filsystem har fel. Du kan reparera filsystemet med:
sudo fsck.vfat -y /dev/sdc
Ersätt /dev/sdc med sökvägen till enhetsnoden på din enhet. Du hittar enhetsnoden av enheten, som alltid kommer att
vara under /dev genom att undersöka utdata av:
mount
Varför stöder calibre inte samlingar på Kindle eller hyllor på Nook?
Varken Kindle eller Nook ger något sätt att manipulera samlingar över en USB-anslutning. Om du verkligen bryr dig
om hur du använder samlingar, vill jag uppmana dig att sälja din Kindle / Nook och få en Kobo. Endast Kobo verkar
förstå att livet är för kort för att mata in samlingarna en efter en på en e-ink skärm :)
Observera att i fallet med Kindle, finns det ett sätt att manipulera samlingar via USB, men det kräver att Kindle startas
om varje gång den kopplas bort från datorn, för ändringar i samlingarna ska erkännas. Som sådan, är det osannolikt att
någon calibre utvecklare någonsin kommer att känna sig motiverade nog att stödja det. Det finns dock en calibre-tillägg
som låter dig skapa samlingar på din Kindle från calibre-metadata. Det finns från här44 .
Observera: Amazon har tagit bort möjligheten att manipulera samlingar fullständigt i sina nyare modeller, som Kindle
Touch och Kindle Fire, vilket även gör ovanstående tillägg värdelöst, om du inte “rootar” din Kindle och installerar
anpassad firmware.
Jag får ett felmeddelande när jag försöker använda calibre med min Kobo Touch/Glo/etc.?
Den Kobo har firmware med mycket fel. Anslutning till den har varit känt att slumpmässigt misslyckas. Vissa kombinationer av moderkort, USB-portar/kablar/hubbar kan förvärra denna tendens att misslyckas. Om du får ett felmeddelande när du ansluter till din beröring med calibre prova följande, som var och en har löst problemet för vissa
calibre-användare.
• Anslut Kobo direkt till datorn, inte via USB-hubb
• Försök med en annan USB-kabel och en annan USB-port på datorn
• Försök med en annan dator, i synnerhet Kobo inte fungerar bra med vissa Windows XP-maskiner. Om du är på
Windows XP, prova en dator med en nyare version av Windows.
• Försök uppgradera firmware på Kobo Touch till den senaste
• Prova att återställa Kobo (ibland botar problemet för ett tag, men sedan visas på nytt, i vilket fall du måste
återställa igen och igen)
• Försök bara att sätta en eller två böcker på Kobo i taget och ha inte stora samlingar på Kobo
1.8.3 Bibliotekshantering
44 http://www.mobileread.com/forums/showthread.php?t=244202
1.8. Vanliga frågor och svar
109
calibre Användarhandbok, Utgåva 2.22.0
Innehåll
•
•
•
•
•
•
•
•
•
Vilka format läser calibre metadata från? (sida 110)
Var finns boken filer som lagras? (sida 110)
Hur hanterar calibre författarnamn och sortering? (sida 110)
Varför inte calibre låta mig lagra böcker i min egen katalogstruktur? (sida 111)
Varför inte calibre har en foo-kolumn? (sida 112)
Kan jag ha en kolumn som visar format eller ISBN? (sida 112)
Hur flyttar jag min calibre-biblioteket från en dator till en annan? (sida 112)
Listan över böcker i calibre är tom! (sida 113)
Jag får fel med min calibre-biblioteket på en nätverksenhet/NAS? (sida 113)
Vilka format läser calibre metadata från?
calibre läser metadata från följande format: CHM, LRF, PDF, LIT, RTF, OPF, MOBI, PRC, EPUB, FB2, IMP, RB,
HTML. Dessutom kan skriva metadata till: LRF, RTF, OPF, EPUB, PDF, MOBI
Var finns boken filer som lagras?
När du först kör calibre, kommer det att be dig om en mapp där du vill spara dina böcker. När du lägger till en bok till
calibre, kommer det att kopiera boken i den mappen. Böcker i mappen snyggt ordnade i undermappar efter författare
och titel. Observera att innehållet i den här mappen automatiskt hanteras av calibre, lägg inte till några filer / mappar
manuellt till den här mappen, eftersom de kan tas bort automatiskt. Om du vill lägga till en fil associerad till en viss
bok, använd det övre högra området av dialogrutan Redigera metadata för att göra det. Då kommer calibre automatiskt
sätta filen i rätt mapp och flytta runt när titeln / författare förändras.
Metadata om böckerna lagras i filen metadata.db på den översta nivån i biblioteksmappen här filen finns en SQLite
databas. När du säkerhetskopierar ditt bibliotek att du kopierar hela mappen och alla dess undermappar.
Mappen biblioteket och alla dess innehåll utgör vad som kallas en calibre bibliotek. Du kan ha flera sådana bibliotek.
För att hantera biblioteken, klickar du på ikonen calibre i verktygsfältet. Du kan skapa nya bibliotek, ta bort / byta
namn på befintliga och växla mellan biblioteken lätt.
Du kan kopiera eller flytta böcker mellan olika bibliotek (när du har mer än ett bibliotek inställning) genom att högerklicka på en bok och välj Kopiera till bibliotek åtgärd.
Hur hanterar calibre författarnamn och sortering?
Författarnamn är komplexa och i synnerhet de kulturer, se denna anmärkning45 för vissa av komplexiteter. calibre har
en mycket flexibel strategi för att hantera författarnamn. Det första man måste förstå är att böcker och författare är
separata enheter i calibre. En bok kan ha mer än en författare, och en författare kan ha mer än en bok. Du kan hantera
författarna till en bok av dialogrutan redigera metadata. Du kan hantera enskilda författare genom att högerklicka på
författaren i etikettbläddraren till vänster om calibre-huvudskärmen och välja Hantera Författare. Genom att använda
den här dialogrutan kan du ändra namnet på en författare och även hur det namnet sorteras. Detta kommer automatiskt
att ändra namnet på författaren i alla böcker i denna författare. När en bok har flera författare, separera deras namn
med hjälp av och karaktär.
Nu kommer vi till författarnamnssortering:
• När en ny författare läggs till calibre (det händer varje gång en bok av en ny författare läggs till), beräknar calibre
automatiskt en sorts sträng för både boken och författaren.
45 http://www.w3.org/International/questions/qa-personal-names.en.php?changelang=en
110
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• Författare i etikettbläddraren sorteras efter sorteringsvärde för författarna. Kom ihåg att detta skiljer sig från den
Författaresorteringsfältet för en bok.
• Som standard antar denna sortingsalgoritm att författaren heter i Förnamn Efternamn format och genererar ett
Efternamn, Förnamn-sorteringsvärdet.
• Du kan ändra denna algoritm genom att gå till Inställningar->Avancerat->Justeringar och ställa in author_sort_copy_method justering.
• Du kan tvinga calibre att räkna om författarssorteringsvärdena för varje författare genom att högerklicka på en
författare och välja Hantera Författare, sedan trycka på Beräkna om alla författare slags värden-knappen. Gör
detta efter att du har ställt in author_sort_copy_method för att justera vad du vill.
• Du kan tvinga calibre att räkna om författarsorteringsvärden för alla böcker med hjälp av mass redigera metadata dialogrutan (välj alla böcker och klicka på redigera metadata, kontrollera ‘automatiskt ställ in författarsorterings‘rutan, tryck sedan på OK.)
• Vid omräkning av författarsorteringsvärden för böcker, använder calibre författarsorteringsvärden för varje enskild författare. Se därför till att de enskilda författarsorteringsvärden är korrekta innan omräkning av böckernas
författarsorteringsvärden.
• Du kan styra om de etikettbläddrarens visar författare genom att använda deras namn eller deras sorteringsvärden
genom att ställa in categories_use_field_for_author_name justering i Inställningar->Avancerat->Justeringar
Observera att du kan ställa in en enskild författares sorteringsvärde till vad du vill med hjälp av Hantera Författare.
Detta är användbart när det handlar om namn som calibre inte kommer att få rätt, till exempel komplexa flerdelade
namn som Miguel de Cervantes Saavedra eller när behandlar asiatiska namn som Sun Tzu.
Med all denna flexibilitet, är det möjligt att ha calibre hantera dina författarnamn som du vill. Till exempel är en gemensam beg
• Ställ in author_sort_copy_method justera kopiera såsom beskrivits ovan.
• Starta calibre. Ändra inte någon boks metadata innan du gör de återstående stegen.
• Ändra alla författarnamn till LN, FN använder dialogrutan Hantera författare.
• När du har ändrat alla författare, tryck på Räkna all författaren slags värden-knappen.
• Tryck på OK, vid vilken punkt calibre kommer att ändra författarna i alla dina böcker. Detta kan ta ett tag.
Observera:
Vid byte från FN LN till LN, FN, är det ofta så att värdena i author_sort är redan i LN, FN-format. Om detta är fallet, gör följa
• ställa in author_sort_copy_method justera kopiera såsom beskrivits ovan.
• omstarta calibre. Ändra inte någon bok metadata innan du gör de återstående stegen.
• Öppna dialogrutan Hantera författare. Tryck på kopian alla författare sortera värden till författaren knappen.
• Kolla igenom författarna för att vara säker på att du är nöjd. Du kan fortfarande trycka på Avbryt för att
överge ändringarna. När du trycker på OK, det finns inget att ångra.
• Tryck på OK, vid vilken punkt calibre kommer att ändra författarna i alla dina böcker. Detta kan ta ett tag.
Varför inte calibre låta mig lagra böcker i min egen katalogstruktur?
Hela poängen med calibre-bibliotekhanteringsfunktioner är att de ger en sökning och sortering baserat gränssnitt för
att lokalisera böcker som är mycket effektivare än någon eventuell katalogschema du kunde komma på för din samling.
1.8. Vanliga frågor och svar
111
calibre Användarhandbok, Utgåva 2.22.0
Ja, när du blir bekväm med calibre-gränssnitt för att hitta, sortera och bläddra i din samling, kommer du inte någonsin
känna ett behov av att jaga igenom filerna på din hårddisk för att hitta en bok igen. Genom att hantera böcker i sin egen
katalogstruktur Författare -> Titel -> Boka filer är calibre kan uppnå en hög grad av tillförlitlighet och standardisering.
För att illustrera varför en sökning / märkning baserat gränssnitt är överlägsen mappar, tänka på följande. Anta att din
boksamling är snyggt sorterade i mappar med följande schema:
Genre -> Author -> Series -> ReadStatus
Nu gör det mycket enkelt att hitta till exempel alla science fiction böcker av Isaac Asimov i stiftelsen serien. Men antar
att du vill hitta alla olästa science fiction böcker. Det finns inget enkelt sätt att göra detta med den här mappen system,
du måste i stället ha en mapp system som ser ut som:
ReadStatus -> Genre -> Author -> Series
I calibre, skulle du istället använda etiketter för att markera genre och läsa status och sedan bara använda en enkel
sökfråga som “etikett: scifi och inte : läsa‘‘. calibre har även en fint grafiskt gränssnitt, så att du inte behöver lära sig
sitt sökspråk istället kan du bara klicka på etiketter för att inkludera eller exkludera dem från sökningen.
Till er som hävdar att du behöver tillgång till filsystemet på så att du kan få tillgång till dina böcker över nätet, har
calibre en utmärkt innehållsserver som ger dig tillgång till ditt calibre-biblioteket över nätet.
Om du är orolig att en dag calibre kommer att upphöra att utvecklas och att lämna alla dina böcker strandsatta i sin
mappstruktur, utforska den kraftfulla “Spara till disk”-funktionen i calibre som låter dig exportera alla dina filer i en
mappstruktur för godtycklig komplexitet baserat på sina metadata.
Slutligen, anledningen finns det siffror i slutet av varje titelmapp är för robusthet. Det antalet är ID-nummer av bokregistreringen i calibre-databasen. Med närvaron av numret kan du ha flera poster med samma titel och författarnamn.
Det är också en del av det som gör calibre magiskt regenerera databas med all metadata om databasfilen blir korrupt.
Med tanke på att calibre uppdrag är att få dig att sluta lagra metadata i filnamn och sluta använda filsystemet för att
hitta saker, är den ökade robust ges av id-nummer väl värt de fulare mappnamn.
Om du fortfarande inte övertygad, så jag är rädd calibre är inte för dig. Leta någon annanstans för din bok katalogisering behov. Bara så att vi är klara, detta kommer inte att förändras. Vänligen kontakta inte oss i ett försök att få oss att
ändra på detta.
Varför inte calibre har en foo-kolumn?
calibre är konstruerad för att ha kolumner för de mest frekvent och mest använda fälten. Dessutom kan du lägga till
några kolumner som du gillar. Kolumner kan läggas till via Inställningar->Gränssnitt->Lägg till dina egna kolumner.
Titta på handledningen UI Power tips46 för att lära sig att skapa egna kolumner, eller läs detta blogginlägg47 .
Du kan också skapa “virtuella kolumner” som innehåller kombinationer av metadata från andra kolumner. I dialogrutan
Lägg till kolumnen använda :guilabel: Snabb create-länkar för att enkelt skapa kolumner för att visa bokens ISBN
eller format. Du kan använda kraftfulla calibre mallspråk att göra mycket mer med kolumner. För mer information, se
calibre språkmall (sida 155).
Kan jag ha en kolumn som visar format eller ISBN?
Ja, det kan du. Följ instruktionerna i svaret ovan för att lägga till egna kolumner.
Hur flyttar jag min calibre-biblioteket från en dator till en annan?
Bara kopiera mappen med calibre-biblioteket från den gamla till den nya datorn. Du kan ta reda på var biblioteksmappen är genom att klicka på ikonen calibre i verktygsfältet. Den allra första punkten är sökvägen till biblioteksmappen.
46 http://calibre-ebook.com/demo#tutorials
47 http://blog.calibre-ebook.com/2011/11/calibre-custom-columns.html
112
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Nu på den nya datorn, starta calibre för första gången. Det kommer Välkomstguiden att köras som ber dig om placeringen av calibre-biblioteket. Hänvisa den till den tidigare kopierade mappen. Om datorn du överför till redan har en
calibre-installation, kommer inte Välkomstguiden att köras. I så fall, högerklicka på ikonen calibre i verktygsfältet och
led den till den nyligen kopierade katalogen. Du kommer nu att ha två calibre-bibliotek på din dator och du kan växla
mellan dem genom att klicka på ikonen calibre i verktygsfältet. Överföra ditt bibliotek på detta sätt bevarar alla dina
metadata, etiketter, anpassade kolumner, etc.
Observera att om du överför mellan olika typer av datorer (till exempel Windows till OS X) sedan efter att ha gjort
ovanstående bör du också högerklicka på ikonen calibre i verktygsfältet, välj Biblioteksunderhåll och utför åtgärden
Kontrollera bibliotek. Det kommer att varna dig om eventuella problem i biblioteket, som du bör åtgärda på för hand.
Observera: Ett calibre bibliotek är bara en mapp som innehåller alla bokfiler och deras metadata. All metadata lagras
i en enda fil som heter metadata.db, i den översta mappnivån. Om filen blir skadad, kan det hända att en tom lista över
böcker i calibre. I så fall kan du be calibre återställa dina böcker genom att göra en högerklicka på calibre -ikonen i
verktygsfältet och välja Biblioteksunderhåll-> Återställ databasen
Listan över böcker i calibre är tom!
För att förstå varför det hände, måste du förstå vad calibre-biblioteket är. På den mest grundläggande nivån, är ett
calibre-bibliotek bara en mapp. När du lägger till en bok till calibre, är att bokens filer kopieras till denna mapp
(ordnade i undermappar efter författare och titel). Inne i calibre-biblioteksmappen, på den högsta nivån, kommer du
att se en fil som heter metadata.db. Den här filen är där calibre lagrar metadata som titel / författare / betyg / etiketter
etc. för varje bok i ditt calibre-biblioteket. Listan över böcker som calibre visar skapas genom att läsa innehållet i
denna metadata.db filen.
Det kan finnas två skäl till att calibre visar en tom lista över böcker:
• Din calibre-biblioteksmapp bytte plats. Detta kan hända om det var på en extern hårddisk och enhetsbeteckningen för den disken förändrats. Eller om du av misstag flyttat mappen. I detta fall kan calibre inte hitta sitt
bibliotek och så startar med ett tomt bibliotek istället. För att råda bot på detta, gör en högerklicka på ikonen
calibre i calibre-verktygsfältet och välj Växla/skapa bibliotek. Klicka på den lilla blå ikonen för att välja den nya
platsen för ditt calibre-biblioteket och klicka på OK. Om du inte vet den nya platsen söka igenom datorn efter
filen metadata.db.
• Din metadata.db raderades / skadades. I så fall kan du be calibre att bygga om metadata.db från sina säkerhetskopior. Högerklicka på ikonen calibre i calibre-verktygsfältet och välj Biblioteksunderhålls> Återställ databas.
calibre kommer automatiskt återuppbygga metadata.db.
Jag får fel med min calibre-biblioteket på en nätverksenhet/NAS?
Lägg inte ditt calibre-bibliotek på en nätverksenhet.
Ett filsystem är ett komplext odjur. De flesta nätverksfilsystem saknar olika filsystemsfunktioner som calibre använder.
Vissa stöder inte fillåsning, vissa stöd inte hårda länkar, vissa är bara opålitliga. Dessutom är calibre en enda användare
program, om du råkar köra två kopior av calibre på samma nätverksbiblioteket, kommer dåliga saker hända. Slutligen
olika operativsystem införa olika begränsningar av filsystem, så om du delar din nätverksenhet över operativsystem,
återigen, kommer dåliga saker hända.
Överväg att använda calibre mediaserver för att göra dina böcker tillgängliga på andra datorer. Kör calibre på en enda
dator och komma åt den via mediaserver eller en Remote Desktop-lösning.
Om du måste dela det faktiska biblioteket, använd ett filsynkroniseringsverktyg som DropBox eller rsync istället
för en nätverksenhet. Om du använder ett filsynkroniseringsverktyg är det viktigt att du ser till att både calibre och
filsynkroniseringsverktyget inte försöker komma åt calibre bibliotek samtidigt. Med andra ord, kör inte filsynkroniseringsverktyget och calibre samtidigt.
1.8. Vanliga frågor och svar
113
calibre Användarhandbok, Utgåva 2.22.0
Även med dessa verktyg finns det risk för datakorruption eller förlust, så gör bara detta om du är villig att leva med den risken. Framför allt, tänk på att Google Drive är oförenlig med calibre, om
du sätter ditt calibre biblioteket i Google Drive, du kommer att drabbas dataförlust. Se this thread
<http://www.mobileread.com/forums/showthread.php?t=205581>
1.8.4 Diverse
Innehåll
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Jag vill att calibre hämtar nyheter från min favoritnyhetssajten. (sida 114)
Varför namnet Calibre? (sida 114)
Varför visar calibre bara några av mina typsnitt på OS X? (sida 115)
calibre startar inte på Windows? (sida 115)
caliber fryser / kraschar ibland? (sida 115)
Med hjälp av läsare eller gör några konverteringar resulterar i ett tillstånd som nekas fel på Windows
(sida 116)
calibre startar inte på OS X? (sida 116)
Jag laddade ner installationsprogrammet, men det fungerar inte? (sida 117)
Mitt antivirusprogram påstår calibre är ett virus / trojan? (sida 117)
Hur säkerhetskopierar calibre? (sida 118)
Hur använder jag köpta EPUB-böcker med calibre (eller vad ska jag göra med .acsm filer)? (sida 118)
Jag får ett “Permission Denied” fel? (sida 118)
Kan jag få kommentarsmetadata att dyka upp på min läsare? (sida 118)
Hur får jag calibre att använda min HTTP-proxy? (sida 119)
Jag vill ha lite funktionstilllägg i calibre. Vad kan jag göra? (sida 119)
Varför har inte calibre en automatisk uppdatering? (sida 119)
Hur är calibre licensierad? (sida 119)
Hur kör jag calibre från mitt USB-minne? (sida 120)
Hur kör jag delar av calibre som nyhetsnedladdning och mediaservern på min egen Linux-server? (sida 120)
Jag vill att calibre hämtar nyheter från min favoritnyhetssajten.
Om du är någorlunda skicklig med datorer, kan du lära calibre att hämta nyheter från en webbplats som du väljer. Om
du vill veta hur du gör detta se Lägga till din favorit nyhetswebbplats (sida 121).
Annars kan du begära en viss nyhetssajt genom att posta i calibre Recipes forum48 .
Varför namnet Calibre?
Gör ditt val:
• Convertor And LIBRary for Ebooks
• En stor calibre produkt
• En hyllning till SONY Librie som var den första e-bokläsare baserade på elektroniskt bläck
• Min fru valde det ;-)
calibre uttalas som kal-i-ber inte ka-li-bre. Om du undrar, calibre är den brittiska/ samväldets stavning för caliber. Att
vara indisk, det är den naturliga stavningen för mig.
48 http://www.mobileread.com/forums/forumdisplay.php?f=228
114
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Varför visar calibre bara några av mina typsnitt på OS X?
calibre bäddar in teckensnitt i e-bokfiler som skapas. E-bokfiler stöder endast inbäddning av Truetype och Opentype
(.ttf och .otf) teckensnitt. De flesta typsnitt på OS X-system är i .dfont format, vilket de inte kan bäddas in. calibre
visar endast Truetype och Opentype-teckensnitt som finns på ditt system. Du kan få många sådana typsnitt på webben.
Helt enkelt ladda ner .ttf / .otf filer och lägga till dem i Bibliotek / Fonts katalogen i din hemkatalog.
calibre startar inte på Windows?
Det kan finnas flera orsaker för detta:
• Om du är på Windows XP, eller på en dator med en processor som inte stödjer SSE2 (t.ex. AMD-processorer
från före 2003) försöka installera calibre version 1.48 <http://download.calibre-ebook.com/1.48.0/> _. calibre
2.0 och nyare använda Qt 5 som är känd för att vara kompatibelt med Windows XP-maskiner, och kräver SSE2.
Helt enkelt avinstallera calibre och sedan installera version 1.48, detta kommer inte att påverka dina böcker /
inställningar.
• Om du får ett felmeddelande om att calibre inte kunna öppna en fil eftersom den används av ett annat program,
gör följande:
– Avinstallera calibre
– Boota om din dator
– Återinstallera calibre, men starta inte calibre från installationsguiden.
– Tillfälligt deaktivera ditt antivirus program (koppla bort från internet innan du gör det, för att vara säker)
– Titta inne i mappen du valt till ditt calibre-bibliotek. Om du ser en fil vid namn metadata.db, ta bort den.
– Starta calibre
– Från och med nu bör du kunna starta calibre normalt.
• Om du får ett fel i en Python-funktion som avslutas oväntat efter en uppgradering av calibre, först avinstallera calibre, sedan ta bort mappar (om det finns några) C:\Program Files\Calibre och C:\Program
Files\Calibre2. Nu återinstallera och du bör vara OK.
• Om du får ett fel i välkomstguiden vid en initieringsköring av calibre, försök välja en mapp som C:\library
för calibre-biblioteket (eftersom ibland har calibre problem med biblioteksplatser om sökvägen innehåller ickeengelska tecken, eller bara siffror etc.)
• Försök köra som administratör (högerklicka på ikonen och välj “Kör som administratör”)
Om det fortfarande inte startar, starta en kommandotolk (tryck på Windows-tangenten och R, skriv sedan: kommando:
cmd.exe i dialogrutan Kör som visas). I kommandotolken skriver du följande kommando och tryck på Retur
calibre-debug -g
Lägg upp något utdata som du ser i ett hjälpmeddelande på Forum49 .
caliber fryser / kraschar ibland?
Det finns flera möjliga saker som jag känner till, som kan orsaka detta:
• Du kopplade nyligen en extern bildskärm eller TV till datorn. I detta fall, när calibre öppnas ett nytt fönster
som metadataredigerinsfönstret eller konverteringsdialogrutan, visas det på den andra bildskärmen där du inte
märker det, och så du tror calibre har frusit. Koppla in andra bildskärmen och starta calibre.
49 http://www.mobileread.com/forums/forumdisplay.php?f=166
1.8. Vanliga frågor och svar
115
calibre Användarhandbok, Utgåva 2.22.0
• Om du använder RoboForm är det känt för att orsaka calibre kraschar. Lägg calibre till den svarta listan över
program i RoboForm för att fixa detta. Eller avinstallera RoboForm.
• Logitechs inställningsprogram orsakar slumpmässiga krascher i calibre när den är öppen. Stäng det innan calibre.
• Constant Guard Protection från Xfinity orsakar krascher i calibre. Du måste manuellt tillåta calibre i det eller
avinstallera Constant Guard Protection.
• Spybot - Search & Destroy hindrar calibre från att komma åt sina temporära filer som förstör visning och
konvertering av böcker.
• Du använder en Wacom märkes USB-mus. Det finns en inkompatibilitet mellan Wacom-möss och grafisk verktygslåda calibre använder. Försök att använda en icke-Wacom-mus.
• På vissa 64-bitarsversioner av Windows finns säkerhetsprogramvara / inställningar som hindrar 64-bitars calibre
från att fungera korrekt. Om du använder 64-bitarsversionen av calibre försöka byta till 32-bitarsversionen.
• Om krascher händer speciellt när du använder en filöppningsdialog, som att klicka på knappen Lägg till böcker
eller spara till disk-knappen, då kan du ha ett problem med fönstren filöppningsdialoger på din dator. Vissa
calibre användare har rapporterat att avinstallera SpiderOak krypterings backup-programvara fixar även dessa
krascher. Om du inte vill avinstallera SpiderOak kan du också stänga av “Aktivera OS integration” i SpiderOakinställningar.
Om inget av ovanstående gäller för dig, så finns det något annat program på datorn som stör calibre. Först starta om
datorn i felsäkert läge, att ha så få program som körs som möjligt, och se om krascher fortfarande händer. Om de
inte gör det, då vet du att det är något program som orsakar problemet. Den mest sannolika boven i dramat är ett
sådant program som modifierar andra programs beteende, till exempel ett antivirusprogram, en drivrutin, något som
RoboForm (en automatisk ifyllnings app) eller hjälpmedel som röststyrning eller en skärmläsare.
Det enda sättet att hitta den skyldige är att eliminera program ett efter ett och se vilken som orsakar problemet. I grund
och botten, stoppa ett program, köra calibre, kontrollera om det krascher. Om det fortfarande händer, stoppa ett annat
program och upprepa.
Med hjälp av läsare eller gör några konverteringar resulterar i ett tillstånd som nekas fel på Windows
Något på datorn hindrar calibre från att komma åt sina egna temporära filer. Troligtvis behörighet på din Temp-mappen
är felaktig. Gå till mappen filen: C:\Användare\ANVÄNDARNAMN\AppData\Local i Utforskaren och högerklicka på
filen:‘ Temp‘ mapp, välj Egenskaper och gå till fliken Säkerhet. Se till att ditt användarkonto har full kontroll på den
här mappen.
Vissa användare har rapporterat att köra följande kommando i en administratörskommandotolk löser deras behörigheter. För att få en administratörskommandotolk sök efter cmd.exe i startmenyn, högerklicka på Kommandotolksposten
och välj Kör som administratör. I kommandotolken skriver du följande kommando och tryck på Retur:
icacls "%appdata%\..\Local\Temp" /reset /T
Alternativt kan du köra calibre som administratör, men detta kommer att leda till vissa problem, till exempel dra och
släppa inte fungerar.
Slutligen har en del användare rapporterat att inaktivera UAC löser problemet.
calibre startar inte på OS X?
En vanlig orsak till fel på OS X är användningen av tillgänglighetsteknik som är oförenliga med den grafiska verktygslåda calibre använder. Prova att stänga av Voiceover om du har den på. Också gå till System Inställningar-> System>
Hjälpmedel och stäng av inställningen för att ge tillgång till hjälpmedel i alla flikarna.
116
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Du kan få felsökningsinformation om varför calibre inte startar genom att köra Console.app. Felsökningsinformation
skrivs till den. Om felsökningsinformationen innehåller en rad som ser ut:
Qt: internal: -108: Error ATSUMeasureTextImage text/qfontengine_mac.mm
då problemet är troligen en skadad typsnittsbuffer. Du kan rensa bufferten genom att följa dessa instruktioner50 . Om det
inte löser det, leta efter en skadad typsnitts-fil på datorn, i ~/Library/Fonts eller liknande. Ett enkelt sätt att kontrollera
om det finns skadade typsnitt i OS X är att starta “Font Book”-programmet välja alla typsnitt och sedan på Arkivmenyn, välj “Verifiera typsnitt”.
Jag laddade ner installationsprogrammet, men det fungerar inte?
Nerladdning från Internet kan ibland resultera i en korrupt nedladdning. Om calibre installationsprogram du hämtat
inte startar, prova att ladda ner det igen. Om du laddar ner det och ändå inte fungerar, ladda ner det från en alternativ
plats <http://sourceforge.net/projects/calibre/files/> _. Om installationsprogrammet fortfarande inte fungerar, så finns
något på datorn som hindrar det från att köras.
• Försök att tillfälligt inaktivera antivirusprogrammet (Microsoft Security Essentials eller Kaspersky eller Norton
eller McAfee eller vad). Detta är troligen den skyldige om uppgraderingen hänger i mitten.
• Försök att starta om datorn och köra ett registerrensninsprogram som Wise Registry Cleaner51 .
• Prova en ren installation. Det vill säga, avinstallera calibre ta bort: file: C:\Program\Calibre2 (eller var du tidigare valde att installera calibre). Därefter ominstallera calibre. Observera att avinstallering inte rör dina böcker
eller inställningar.
• Prova att ladda ner installationsprogrammet med en alternativ webbläsare. Till exempel om du använder Internet
Explorer, prova att använda Firefox eller Chrome istället.
• Om du får ett felmeddelande om en saknad DLL i fönster, så mest sannolikt, är behörighet på din tillfälliga mapp
felaktig. Gå till mappen: filen: C:\Användare\ANVÄNDARNAMN\AppData\Local i Utforskaren och högerklicka
sedan på: file:‘ Temp‘ mappen och välj Egenskaper och gå till den Säkerhet-flik. Se till att ditt användarkonto
har full kontroll för den här mappen.
Om du ändå inte kan få installeraren att fungera och du är på Windows, kan du använda caliber bärbara installation
<http://calibre-ebook.com/download_portable> _, som inte behöver ett installationsprogram (det är bara en zip-fil).
Mitt antivirusprogram påstår calibre är ett virus / trojan?
Det första du bör kontrollera är att du laddar ner calibre från den officiella hemsidan: <http://calibreebook.com/download> _. Se till att du klicka på nedladdningslänkar till vänster, inte reklam till höger. calibre är
ett mycket populärt program och skrupelfria människor försöker installations webbplatser som erbjuder den för nedladdning för att lura oförsiktiga.
Om du har den officiella nedladdningen och antivirusprogrammet fortfarande hävdar calibre är ett virus är alltså felet
antivirusprogrammet. Antivirusprogram använder heuristik, mönsterkod som “ser misstänkt” för att upptäcka virus.
Det är ungefär som rasprofilering. calibre är en helt öppen källkodsprodukt. Du kan faktiskt bläddra i källkoden själv
(eller anlita någon att göra det åt dig) för att kontrollera att det inte är ett virus. Vänligen rapportera falska identifiering
till vad företaget du köper ditt antivirusprogram från. Om antivirusprogram hindrar dig från att ladda ner / installera
calibre inaktivera det temporärt, installera calibre och sedan återaktivera det.
50 http://www.macworld.com/article/1139383/fontcacheclear.html
51 http://www.wisecleaner.com
1.8. Vanliga frågor och svar
117
calibre Användarhandbok, Utgåva 2.22.0
Hur säkerhetskopierar calibre?
Det viktigaste för att säkerhetskopiera är calibre-biblioteksmapp som innehåller alla dina böcker och metadata. Detta
är den mapp du valde för din calibre-biblioteket när du körde calibre för första gången. Du kan få sökvägen till
biblioteksmappen genom att klicka på calibre-ikonen på verktygslisten. Du måste säkerhetskopiera den här hel mapp
med alla filer och undermappar.
Du kan växla calibre till att använda en säkerhetskopierad biblioteksmapp genom att klicka på calibre ikonen i verktygsfältet och välja din säkerhetskopierade biblioteksmapp. En säkerhetskopierad biblioteksmappen säkerhetskopierar
dina egna kolumner och sparade sökningar samt alla dina böcker och metadata.
Om du vill säkerhetskopiera calibres konfigurations/tillägg, måste du säkerhetskopiera konfigurationskatalogen. Du
hittar den här konfiguring mappen via Inställningar->Diverse. Observera att återställa konfigurationskataloger inte officiellt stöds, men bör fungera i de flesta fall. Bara kopiera innehållet i backup-katalogen i den aktuella konfigurationen
katalogen att återställa.
Hur använder jag köpta EPUB-böcker med calibre (eller vad ska jag göra med .acsm filer)?
Mest köpta EPUB böcker har DRM <http://drmfree.calibre-ebook.com/about#drm> _. Detta förhindrar calibre från
att öppna dem. Du kan fortfarande använda calibre att lagra och överföra dem till eboksläsare. Först måste du tillåta
dina läsare på en Windows-maskin med Adobe Digital Editions. När detta är gjort, överförs EPUB böcker med calibre
kommer att fungera bra på din läsare. När du köper en epub bok från en webbplats, kommer du att få en ”.acsm” filen.
Denna fil ska öppnas med Adobe Digital Editions, som sedan kommer att hämta själva ”.epub” ebook. Den e-bokfilen
sparas i mappen “Mina digitala upplagor”, där du kan lägga till det till calibre.
Jag får ett “Permission Denied” fel?
En tillståndsnekningsfel kan uppstå på grund av många möjliga orsaker, ingen av dem har något att göra med calibre.
• Du kan få tillståndsnekningsfel om du använder ett SD-kort med skrivskydd aktiverat.
• Om du, eller något program du använde ändrat filrättigheter av filerna i fråga att bara läsas.
• Om det finns ett filsystemsfel på enheten som orsakade operativsystemet att montera filsystemet i skrivskyddat
läge eller markera en viss fil som skrivskyddad för att återvinnas.
• Om filerna har sina ägare inställda till en annan användare än du .
• Om filen är öppen i ett annat program.
• Om filen finns på en enhet kan du ha nått gränsen för maximalt 256 filer i roten på enheten. I så fall måste du
formatera om enheten / sd-kort som refererades i felmeddelandet med ett FAT32-filsystem, eller ta bort några
filer från SD-kortet / enhetens minne.
Du måste rätta till det underliggande orsaken till behörighetsfelen innan du fortsätter använda calibre. Läs felmeddelandet noggrant, se vilken fil det pekar på och fixa behörigheterna på den filen eller dess mappar.
Kan jag få kommentarsmetadata att dyka upp på min läsare?
De flesta läsare stöder inte detta. Du ska klaga hos tillverkaren om det och förhoppningsvis om tillräckligt många
klagar, kommer saker och ting förändras. Under tiden kan du infoga metadata, med kommentarer till en “skyddsomslagssida” i början av e-bok, genom att använda alternativet “Infoga metadata som sidan i början på boken” under
konverteringen. Alternativet finns i Strukturdetektion-avsnittet av konverteringsinställningarna. Notera att för att detta
ska gälla måste du konvertera boken. Om din bok är redan i ett format som inte behöver konvertering kan du konvertera
från det formatet till samma format.
118
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Ett annat alternativ är att skapa en katalog i e-boksform innehållande en lista på alla böcker i ditt calibre-bibliotek, med
sina metadata. Klicka och håll knappen Konvertera för att komma åt skapa katalog verktyget. Och innan du frågar, nej
du kan inte ha den “länken direkt till” sortiment böcker på din läsare.
Hur får jag calibre att använda min HTTP-proxy?
Som standard använder calibre uppsatta proxy-inställningar oavsett vad som ställs in i ditt operativsystem. Ibland
är dessa felaktiga, till exempel på Windows om du inte använder Internet Explorer så kan det hända att proxyinställningarna inte är uppdaterade. Du kan uppmana calibre att använda en viss proxyserver genom att ställa in
http_proxy miljövariabel. Formatet på variabeln är: http://användarnamn:lösenord@servernamn du
bör fråga din nätverksadministratör för att ge dig rätt värde för denna variabel. Observera att calibre bara stödjer
HTTP-proxier inte SOCKS-proxy. Du kan se de aktuella proxier som används av kaliber i Inställningar->Diverse.
Jag vill ha lite funktionstilllägg i calibre. Vad kan jag göra?
Du har två val:
1. Skapa en lösning genom att hacka på calibre och skicka det till mig för granskning och inkludering. Se
Development52 .
2. Öppna en bugg som begär funktionen <http://calibre-ebook.com/bugs> _. Kom ihåg att även om du tror att
din funktion förfrågan är oerhört viktigt / mycket viktigt, calibre-utvecklare kanske inte håller med. Lyckligtvis är calibre öppen källkod, vilket innebär att du alltid har möjlighet att genomföra din funktion själv,
eller anställa någon att göra det åt dig. Vidare calibre har en omfattande tilläggsarkitektur, så du kanske
kan utveckla din funktion som ett tillägg, se Skriva dina egna tillägg för att utöka calibres funktionalitet
(sida 207).
Varför har inte calibre en automatisk uppdatering?
För många orsaker:
• Det finns ingen anledning att uppdatera varje vecka. Om du är nöjd med hur calibre kör stäng av anmälan om
uppdateringen och vara på god väg. Återkom för att se om du vill uppdatera en gång om året eller så. Det finns
en kryssruta för att stänga av uppdateringsmeddelandet, på själva uppdateringsanmälan.
• calibre-nedladdningar använder idag omkring 100TB bandbredd per månad53 . Implementera automatiska uppdateringar skulle kraftigt öka det och resulltera kostnad på tusentals dollar i månaden, vilket någon måste betala.
• Om jag implementerar en dialogruta som hämtar uppdateringen och släpper det, istället för att gå till webbplatsen
som det gör nu, som skulle rädda den ivrigaste calibre-uppdaterare, högst fem klick i veckan. Det finns betydligt
högre prioritet att göra i calibre-utveckling.
• Om du verkligen, verkligen hatar att ladda ner calibre varje vecka, men ändå vill vara upp till den senaste, jag
uppmuntrar dig att köra från källkod, vilket gör att uppdatera trivialt. Instruktioner: ref: finns här <utveckla>.
• Det finns automatiska tredjepartsuppdaterare för calibre gjorda av calibre användare på calibre forum54 .
Hur är calibre licensierad?
calibre licensieras under GNU General Public License v3 (en öppen källkod-licens). Det innebär att du är fri att
distributera calibre så länge du gör källkoden tillgänglig. Så om du vill sätta calibre på en CD med din produkt, måste
52 http://calibre-ebook.com/get-involved
53 http://calibre-ebook.com/dynamic/downloads
54 http://www.mobileread.com/forums/forumdisplay.php?f=238
1.8. Vanliga frågor och svar
119
calibre Användarhandbok, Utgåva 2.22.0
du också sätta calibre-källkod på CD. Källkoden är tillgänglig för nedladdning <http://download.calibre-ebook.com>
_. Du är fri att använda resultaten av konverteringar från calibre hur du vill. Du kan inte använda någon kod eller
bibliotek från calibre i programmet utan att göra din programvara med öppen källkod. För mer information, se GNU
GPL v3 <http://www.gnu.org/licenses/gpl.html> _.
Hur kör jag calibre från mitt USB-minne?
En bärbar version av finns här55 .
Hur kör jag delar av calibre som nyhetsnedladdning och mediaservern på min egen Linux-server?
Först måste du installera calibre på din Linux-server. Om servern använder en modern Linux-distributioner, bör du
inte ha några problem med att installera calibre på den.
Observera: calibre behöver GLIBC >= 2.13 och libstdc++ >= 6.0.17. Om du har en äldre server, kommer du antingen vara tvungen sammanställa dessa från källan, eller använda calibre 1.48 vilket kräver endast GLIBC >= 2.10.
Dessutom, även om calibres kommandoradsverktyg behöver inte ha en körande X-server, kräver en del av dem att Xserverns bibliotek ska installeras på ditt system. Detta beror på att användningen Qt, som länkar mot dessa bibliotek.
Om du får en ImportError om några Qt moduler, är det sannolikt du saknar vissa X-bibliotek.
Du kan köra calibre-servern med kommandot:
/opt/calibre/calibre-server --with-library /path/to/the/library/you/want/to/share
Du kan ladda ner nyheter och omvandla de till en e-bok med kommandot:
/opt/calibre/ebook-convert "Title of news source.recipe" outputfile.epub
Om du vill generera MOBI, använd outputfile.mobi istället och använd --output-profil Kindle.
Du kan skicka e-post med nedladdade nyheter med kommandot:
/opt/calibre/calibre-smtp
Jag lämnar att lista ut exakt kommandorad som en övning för läsaren.
Slutligen kan du lägga till nedladdade nyheter till calibre-biblioteket med:
/opt/calibre/calibredb add --with-library /path/to/library outfile.epub
Kom ihåg att läsa kommandoraden dokumentationsavsnittet av calibre i användarhandboken för mer information om
dessa och andra kommandon.
1.9 Handledning
Här hittar du handledningar för att komma igång med hjälp av calibrears mer avancerade funktioner, t.ex. XPath och
mallar.
55 http://calibre-ebook.com/download_portable
120
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.9.1 Lägga till din favorit nyhetswebbplats
calibre har en kraftfull, flexibel och lätt att använda ramverk för att hämta nyheter från Internet och omvandla dem till
en e-bok. Följande kommer att visa dig, med hjälp av exempel, hur man får nyheter från olika webbplatser.
För att få en förståelse för hur man använder ramverket, följ exemplen i den ordning som anges nedan:
• Helt automatisk hämtning (sida 121)
– calibre blogg (sida 121)
– bbc.co.uk (sida 122)
• Anpassa hämta processen (sida 123)
– Använda den tryckta versionen av bbc.co.uk (sida 123)
– Byte av artikelstilar (sida 124)
– Skivning och tärning (sida 125)
– Exempel i verkligheten (sida 136)
• Tips för att utveckla nya recept (sida 139)
• Ytterligare läsning (sida 139)
• API dokumentation (sida 139)
Helt automatisk hämtning
Om din nyhetskälla är enkel nog, skulle calibre mycket väl kunna hämta det helt automatiskt, allt du behöver göra att
ge webbadressen. calibre samlar all information som behövs för att ladda ner en nyhetskälla i ett recept . För att berätta
för calibre om en nyhetskälla, måste du skapa ett recept för det. Låt oss se några exempel:
calibre blogg
calibre blogg är en blogg av inlägg som beskriver många användbara calibre-funktioner på ett enkelt och lättillgängligt
sätt för nya calibre-användare. För att ladda ner den här bloggen till en e-bok, förlitar vi oss på RSS-flödet av bloggen:
http://blog.calibre-ebook.com/feeds/posts/default
Jag fick RSS URL genom att titta under “Prenumerera” längst ner på bloggsidan och välja Posts->Atom. För att få
calibre hämta flöden och omvandla dem till en e-bok, ska du högerklicka på Hämta nyheter knappen och sedan på
Lägg till en anpassad nyhetskälla menyalternativet och sedan Nytt recept knappen. En dialogruta liknande den som
visas nedan bör öppna sig.
1.9. Handledning
121
calibre Användarhandbok, Utgåva 2.22.0
Ange först calibre Blog i Recepttitel fält. Detta kommer att vara namnet på den e-bok som kommer att skapas
från artiklarna i de ovanstående flöden.
De nästa två fälten (Äldsta artikel och Max. number of articles) tillåter dig viss kontroll över hur många artiklar som
ska hämtas från varje flöde, och de är ganska självförklarande.
För att lägga till flöde till receptet, mata in flödestitel och flödes-URL och klicka på Lägg till flöde knappen. När du
har lagt till flöde, klicka på Spara knappen och du är klar! Stäng dialogrutan.
Så här testar du nya recept klicka på Anpassad nyhetskälla undermenyn klicka calibre blogg nyhetsknapp. Efter ett
par minuter, kommer den nyligen nedladdade e-boken av blogginlägget visas i huvudbiblioteksvyn (om du har dina
läsare ansluten kommer den att läggas ut på läsaren i stället för in i biblioteket). Välj det och tryck på Visa knappen
för att läsa!
Anledningen till att detta fungerat så bra, med så liten ansträngning är att bloggen ger fullt innehåll RSS flöden, det
vill säga, artikelns innehåll är inbäddat i själva flödet. För de flesta nyhetskällor som tillhandahåller nyheter på detta
sätt, med fullt innehåll flöden, du behöver inte någon mer ansträngning för att omvandla dem till e-böcker. Nu ska vi
titta på en nyhetskälla som inte ger fullständigt innehållsflöde. I sådana flöden är hela artikeln en webbsida och flödet
innehåller bara en länk till webbsidan med en kort sammanfattning av artikeln.
bbc.co.uk
Låt oss prova följande två flöden från BBC:
1. Nyheter framsida: http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml
122
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
2. Vetenskap/Natur: http://newsrss.bbc.co.uk/rss/newsonline_world_edition/science/nature/rss.xml
Följ proceduren som beskrivs i calibre blogg (sida 121) ovan för att skapa ett recept på BBC (med hjälp av flöde
ovan). Om man tittar på den nedladdade e-boken, ser vi att claibre har gjort ett förtjänstfullt arbete för att utvinna
bara innehållet som du bryr dig om från varje artikel hemsida. Emellertid är extraktionsprocessen inte perfekt. Ibland
lämnar oönskade innehåll som menyer och navigeringshjälpmedel, eller det tar bort innehåll som borde lämnas i fred,
som artikelrubriker. För att få perfekt innehållsutvinning, måste vi anpassa hämta processen, som beskrivs i nästa
avsnitt.
Anpassa hämta processen
När du vill att fullända hämtningen, eller hämta innehåll från en särskilt komplicerad webbplats kan du använda dig av
all den kraft och flexibilitet i ramen av recept. För att kunna göra det, i Lägg till anpassad nyhetskälla dialog, genom
att klicka på Växla till avancerat läge knappen.
Det enklaste och ofta mest produktiva anpassning är att använda den tryckta versionen av uppkopplade-artiklar. Den
tryckta versionen är oftast mycket mindre hantverk och översätter mycket smidigare till en e-bok. Låt oss försöka
använda den tryckta versionen av artiklarna från BBC.
Använda den tryckta versionen av bbc.co.uk
Det första steget är att titta på e-boken som vi hämtat tidigare från bbc.co.uk (sida 122) . Vid slutet av varje artikel, i
e-boken finns en liten baksidetext som talar om när artikeln hämtats från. Kopiera och klistra in denna webbadress i
en webbläsare. Nu på artikelwebbsidan leta efter en länk som pekar på “Utskrift”. Klicka på den för att se den tryckta
versionen av artikeln. Det ser mycket snyggare! Jämför nu de två webbadresser. För mig var de:
Artikel URL http://news.bbc.co.uk/2/hi/science/nature/7312016.stm
Utskriftsversion URL http://newsvote.bbc.co.uk/mpapps/pagetools/print/news.bbc.co.uk/2/hi/science/nature/7312016.stm
Så det ser ut att få den tryckta versionen måste vi prefix varje artikel URL med:
newsvote.bbc.co.uk/mpapps/pagetools/print/
Nu i Avancerat läge för Anpassad nyhetskällor dialogrutan ska du se något liknande (kom ihåg att välja BBC receptet
innan du växlar till avancerat läge):
Du kan se att fälten från Grundläge har omräknats med python-kod på ett enkelt sätt. Vi måste lägga till instruktioner
för att detta recept för att använda den tryckta versionen av artiklarna. Allt som behövs är att lägga till följande två
rader:
def print_version(self, url):
return url.replace('http://', 'http://newsvote.bbc.co.uk/mpapps/pagetools/print/')
Detta är python, så indenteringen(indrag) är viktigt. När du har lagt raderna ska det se ut:
1.9. Handledning
123
calibre Användarhandbok, Utgåva 2.22.0
I ovanstående, def print_version(self, url) definieras en metod som anropas av calibre för varje artikel.
url är webbadressen till den ursprungliga artikeln. Vad print_version gör är att den tar URL:n och ersätter den
med den nya URL:n som pekar på den tryckta versionen av artikeln. Om du vill veta om python56 se tutorial57 .
Nu klickar du på Lägg till/Uppdatera recept-knappen och dina ändringar sparas. Hämta e-boken igen. Du bör nu ha
en mycket förbättrad e-bok. Ett av problemen med den nya versionen är att typsnitten på utskriftsversion är för små.
Detta är automatiskt justerat vid konvertering till en e-bok, men även efter justeringsprocessen, blir teckenstorleken
för menyer och navigeringsfältet för stora i förhållande till artikeltexten. För att åtgärda detta, kommer vi att göra lite
mer anpassning, i nästa avsnitt.
Byte av artikelstilar
I föregående avsnitt såg vi att teckenstorleken efter artiklar från den tryckta versionen av BBC var för liten. I de flesta
webbplatser, ingår BBC, är detta textstorlek in med hjälp av CSS stilmallar. Vi kan inaktivera hämtning av sådana
mallar genom att lägga till raden:
no_stylesheets = True
Receptet ser nu ut:
Den nya versionen ser ganska bra ut. Om du är en perfektionist, vill du nog läsa nästa avsnitt, som handlar faktiskt om
att modifiera nedladdat material.
56 https://www.python.org
57 https://docs.python.org/2/tutorial/
124
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Skivning och tärning
calibre innehåller mycket kraftfulla och flexibla färdigheter när det gäller att manipulera nedladdat material. För att
visa upp ett par av dessa, låt oss titta på vår gamle vän för BBC (sida 124) receptet igen. Om man tittar på källkoden
(HTML) i ett par artiklar (utskriftsversion), ser vi att de har en sidfot som innehåller någon användbar information,
som finns i
<div class="footer">
...
</div>
Detta kan tas bort genom att lägga till:
remove_tags
= [dict(name='div', attrs={'class':'footer'})]
till receptet. Slutligen kan ersätta en del av CSS som vi tidigare inaktiverad, med vår egen :term:‘CSS‘om är lämplig
för omvandling till en e-bok:
extra_css
= '.headline {font-size: x-large;} \n .fact { padding-top: 10pt
}'
Med dessa tillägg har vårt recept blivit “produktionskvalitet”, ja det är mycket nära till den faktiska receptet används
av calibre för BBC, som visas nedan:
##
##
##
##
##
##
##
##
##
##
Title:
Contact:
BBC News, Sport, and Blog Calibre Recipe
mattst - jmstanfield@gmail.com
License:
Copyright:
GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html
mattst - jmstanfield@gmail.com
Written:
Last Edited:
November 2011
2011-11-19
__license__
__copyright__
= 'GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html'
= 'mattst - jmstanfield@gmail.com'
'''
BBC News, Sport, and Blog Calibre Recipe
'''
# Import the regular expressions module.
import re
# Import the BasicNewsRecipe class which this class extends.
from calibre.web.feeds.recipes import BasicNewsRecipe
class BBCNewsSportBlog(BasicNewsRecipe):
#
#
#
#
#
#
#
#
#
**** IMPORTANT USERS READ ME ****
First select the feeds you want then scroll down below the feeds list
and select the values you want for the other user preferences, like
oldest_article and such like.
Select the BBC rss feeds which you want in your ebook.
1.9. Handledning
125
calibre Användarhandbok, Utgåva 2.22.0
# Selected feed have NO '#' at their start, de-selected feeds begin with a '#'.
#
# Eg. ("News Home", "http://feeds.bbci.co.uk/... - include feed.
# Eg. #("News Home", "http://feeds.bbci.co.uk/... - do not include feed.
#
# There are 68 feeds below which constitute the bulk of the available rss
# feeds on the BBC web site. These include 5 blogs by editors and
# correspondants, 16 sports feeds, 15 'sub' regional feeds (Eg. North West
# Wales, Scotland Business), and 7 Welsh language feeds.
#
# Some of the feeds are low volume (Eg. blogs), or very low volume (Eg. Click)
# so if "oldest_article = 1.5" (only articles published in the last 36 hours)
# you may get some 'empty feeds' which will not then be included in the ebook.
#
# The 15 feeds currently selected below are simply my default ones.
#
# Note: With all 68 feeds selected, oldest_article set to 2,
# max_articles_per_feed set to 100, and simultaneous_downloads set to 10,
# the ebook creation took 29 minutes on my speedy 100 mbps net connection,
# fairly high-end desktop PC running Linux (Ubuntu Lucid-Lynx).
# More realistically with 15 feeds selected, oldest_article set to 1.5,
# max_articles_per_feed set to 100, and simultaneous_downloads set to 20,
# it took 6 minutes. If that's too slow increase 'simultaneous_downloads'.
#
# Select / de-select the feeds you want in your ebook.
#
feeds = [
("News Home", "http://feeds.bbci.co.uk/news/rss.xml"),
("UK", "http://feeds.bbci.co.uk/news/uk/rss.xml"),
("World", "http://feeds.bbci.co.uk/news/world/rss.xml"),
#("England", "http://feeds.bbci.co.uk/news/england/rss.xml"),
#("Scotland", "http://feeds.bbci.co.uk/news/scotland/rss.xml"),
#("Wales", "http://feeds.bbci.co.uk/news/wales/rss.xml"),
#("N. Ireland", "http://feeds.bbci.co.uk/news/northern_ireland/rss.xml"),
#("Africa", "http://feeds.bbci.co.uk/news/world/africa/rss.xml"),
#("Asia", "http://feeds.bbci.co.uk/news/world/asia/rss.xml"),
#("Europe", "http://feeds.bbci.co.uk/news/world/europe/rss.xml"),
#("Latin America", "http://feeds.bbci.co.uk/news/world/latin_america/rss.xml"),
#("Middle East", "http://feeds.bbci.co.uk/news/world/middle_east/rss.xml"),
("US & Canada", "http://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml"),
("Politics", "http://feeds.bbci.co.uk/news/politics/rss.xml"),
("Science/Environment", "http://feeds.bbci.co.uk/news/science_and_environment/rss.xml")
("Technology", "http://feeds.bbci.co.uk/news/technology/rss.xml"),
("Magazine", "http://feeds.bbci.co.uk/news/magazine/rss.xml"),
("Entertainment/Arts", "http://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml"),
#("Health", "http://feeds.bbci.co.uk/news/health/rss.xml"),
#("Education/Family", "http://feeds.bbci.co.uk/news/education/rss.xml"),
("Business", "http://feeds.bbci.co.uk/news/business/rss.xml"),
("Special Reports", "http://feeds.bbci.co.uk/news/special_reports/rss.xml"),
("Also in the News", "http://feeds.bbci.co.uk/news/also_in_the_news/rss.xml"),
#("Newsbeat", "http://www.bbc.co.uk/newsbeat/rss.xml"),
#("Click", "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/programmes/click_online/
("Blog: Nick Robinson (Political Editor)", "http://feeds.bbci.co.uk/news/correspondents
#("Blog: Mark D'Arcy (Parliamentary Correspondent)", "http://feeds.bbci.co.uk/news/corr
#("Blog: Robert Peston (Business Editor)", "http://feeds.bbci.co.uk/news/correspondents
#("Blog: Stephanie Flanders (Economics Editor)", "http://feeds.bbci.co.uk/news/correspo
("Blog: Rory Cellan-Jones (Technology correspondent)", "http://feeds.bbci.co.uk/news/co
("Sport Front Page", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/front_page/rs
126
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
#("Football", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/rss.xml"),
#("Cricket", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/cricket/rss.xml"),
#("Rugby Union", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_union/rss.x
#("Rugby League", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_league/rss
#("Tennis", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/tennis/rss.xml"),
#("Golf", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/golf/rss.xml"),
#("Motorsport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/motorsport/rss.xml
#("Boxing", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/boxing/rss.xml"),
#("Athletics", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/athletics/rss.xml")
#("Snooker", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/snooker/
#("Horse Racing", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/hor
#("Cycling", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/cycling/
#("Disability Sport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports
#("Other Sport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/rss.
#("Olympics 2012", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/ol
#("N. Ireland Politics", "http://feeds.bbci.co.uk/news/northern_ireland/northern_irelan
#("Scotland Politics", "http://feeds.bbci.co.uk/news/scotland/scotland_politics/rss.xml
#("Scotland Business", "http://feeds.bbci.co.uk/news/scotland/scotland_business/rss.xml
#("E. Scotland, Edinburgh & Fife", "http://feeds.bbci.co.uk/news/scotland/edinburgh_eas
#("W. Scotland & Glasgow", "http://feeds.bbci.co.uk/news/scotland/glasgow_and_west/rss.
#("Highlands & Islands", "http://feeds.bbci.co.uk/news/scotland/highlands_and_islands/r
#("NE. Scotland, Orkney & Shetland", "http://feeds.bbci.co.uk/news/scotland/north_east_
#("South Scotland", "http://feeds.bbci.co.uk/news/scotland/south_scotland/rss.xml"),
#("Central Scotland & Tayside", "http://feeds.bbci.co.uk/news/scotland/tayside_and_cent
#("Wales Politics", "http://feeds.bbci.co.uk/news/wales/wales_politics/rss.xml"),
#("NW. Wales", "http://feeds.bbci.co.uk/news/wales/north_west_wales/rss.xml"),
#("NE. Wales", "http://feeds.bbci.co.uk/news/wales/north_east_wales/rss.xml"),
#("Mid. Wales", "http://feeds.bbci.co.uk/news/wales/mid_wales/rss.xml"),
#("SW. Wales", "http://feeds.bbci.co.uk/news/wales/south_west_wales/rss.xml"),
#("SE. Wales", "http://feeds.bbci.co.uk/news/wales/south_east_wales/rss.xml"),
#("Newyddion - News in Welsh", "http://feeds.bbci.co.uk/newyddion/rss.xml"),
#("Gwleidyddiaeth", "http://feeds.bbci.co.uk/newyddion/gwleidyddiaeth/rss.xml"),
#("Gogledd-Ddwyrain", "http://feeds.bbci.co.uk/newyddion/gogledd-ddwyrain/rss.xml"),
#("Gogledd-Orllewin", "http://feeds.bbci.co.uk/newyddion/gogledd-orllewin/rss.xml"),
#("Canolbarth", "http://feeds.bbci.co.uk/newyddion/canolbarth/rss.xml"),
#("De-Ddwyrain", "http://feeds.bbci.co.uk/newyddion/de-ddwyrain/rss.xml"),
#("De-Orllewin", "http://feeds.bbci.co.uk/newyddion/de-orllewin/rss.xml"),
]
#
**** SELECT YOUR USER PREFERENCES ****
# Title to use for the ebook.
#
title = 'BBC News'
# A brief description for the ebook.
#
description = u'BBC web site ebook created using rss feeds.'
# The max number of articles which may be downloaded from each feed.
# I've never seen more than about 70 articles in a single feed in the
# BBC feeds.
#
max_articles_per_feed = 100
# The max age of articles which may be downloaded from each feed. This is
# specified in days - note fractions of days are allowed, Eg. 2.5 (2 and a
1.9. Handledning
127
calibre Användarhandbok, Utgåva 2.22.0
# half days). My default of 1.5 days is the last 36 hours, the point at
# which I've decided 'news' becomes 'old news', but be warned this is not
# so good for the blogs, technology, magazine, etc., and sports feeds.
# You may wish to extend this to 2-5 but watch out ebook creation time will
# increase as well. Setting this to 30 will get everything (AFAICT) as long
# as max_articles_per_feed remains set high (except for 'Click' which is
# v. low volume and its currently oldest article is 4th Feb 2011).
#
oldest_article = 1.5
# Number of simultaneous downloads. 20 is consistantly working fine on the
# BBC News feeds with no problems. Speeds things up from the defualt of 5.
# If you have a lot of feeds and/or have increased oldest_article above 2
# then you may wish to try increasing simultaneous_downloads to 25-30,
# Or, of course, if you are in a hurry. [I've not tried beyond 20.]
#
simultaneous_downloads = 20
# Timeout for fetching files from the server in seconds. The default of
# 120 seconds, seems somewhat excessive.
#
timeout = 30
# The format string for the date shown on the ebook's first page.
# List of all values: http://docs.python.org/library/time.html
# Default in news.py has a leading space so that's mirrored here.
# As with 'feeds' select/de-select by adding/removing the initial '#',
# only one timefmt should be selected, here's a few to choose from.
#
timefmt = ' [%a, %d %b %Y]'
# [Fri, 14 Nov 2011] (Calibre default)
#timefmt = ' [%a, %d %b %Y %H:%M]'
# [Fri, 14 Nov 2011 18:30]
#timefmt = ' [%a, %d %b %Y %I:%M %p]'
# [Fri, 14 Nov 2011 06:30 PM]
#timefmt = ' [%d %b %Y]'
# [14 Nov 2011]
#timefmt = ' [%d %b %Y %H:%M]'
# [14 Nov 2011 18.30]
#timefmt = ' [%Y-%m-%d]'
# [2011-11-14]
#timefmt = ' [%Y-%m-%d-%H-%M]'
# [2011-11-14-18-30]
#
#
#
#
#
#
#
#
#
#
#
**** IMPORTANT ****
DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING.
DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING.
I MEAN IT, YES I DO, ABSOLUTELY, AT YOU OWN RISK. :)
**** IMPORTANT ****
# Author of this recipe.
__author__ = 'mattst'
# Specify English as the language of the RSS feeds (ISO-639 code).
language = 'en_GB'
128
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# Set tags.
tags = 'news, sport, blog'
# Set publisher and publication type.
publisher = 'BBC'
publication_type = 'newspaper'
# Disable stylesheets from site.
no_stylesheets = True
# Specifies an override encoding for sites that have an incorrect charset
# specified. Default of 'None' says to auto-detect. Some other BBC recipes
# use 'utf8', which works fine (so use that if necessary) but auto-detecting
# with None is working fine, so stick with that for robustness.
encoding = None
# Sets whether a feed has full articles embedded in it. The BBC feeds do not.
use_embedded_content = False
# Removes empty feeds - why keep them!?
remove_empty_feeds = True
#
#
#
#
#
#
Create a custom title which fits nicely in the Kindle title list.
Requires "import time" above class declaration, and replacing
title with custom_title in conversion_options (right column only).
Example of string below: "BBC News - 14 Nov 2011"
custom_title = "BBC News - " + time.strftime('%d %b %Y')
'''
# Conversion options for advanced users, but don't forget to comment out the
# current conversion_options below. Avoid setting 'linearize_tables' as that
# plays havoc with the 'old style' table based pages.
#
conversion_options = { 'title'
: title,
'comments'
: description,
'tags'
: tags,
'language'
: language,
'publisher'
: publisher,
'authors'
: publisher,
'smarten_punctuation' : True
}
'''
conversion_options = { 'smarten_punctuation' : True }
# Specify extra CSS - overrides ALL other CSS (IE. Added last).
extra_css = 'body { font-family: verdana, helvetica, sans-serif; } \
.introduction, .first { font-weight: bold; } \
.cross-head { font-weight: bold; font-size: 125%; } \
.cap, .caption { display: block; font-size: 80%; font-style: italic; } \
.cap, .caption, .caption img, .caption span { display: block; text-align: center; ma
.byl, .byd, .byline img, .byline-name, .byline-title, .author-name, .author-position
.correspondent-portrait img, .byline-lead-in, .name, .bbc-role { display: block;
text-align: center; font-size: 80%; font-style: italic; margin: 1px auto; } \
.story-date, .published { font-size: 80%; } \
table { width: 100%; } \
td img { display: block; margin: 5px auto; } \
1.9. Handledning
129
calibre Användarhandbok, Utgåva 2.22.0
ul { padding-top: 10px; } \
ol { padding-top: 10px; } \
li { padding-top: 5px; padding-bottom: 5px; } \
h1 { text-align: center; font-size: 175%; font-weight: bold; }
h2 { text-align: center; font-size: 150%; font-weight: bold; }
h3 { text-align: center; font-size: 125%; font-weight: bold; }
h4, h5, h6 { text-align: center; font-size: 100%; font-weight:
\
\
\
bold; }'
# Remove various tag attributes to improve the look of the ebook pages.
remove_attributes = [ 'border', 'cellspacing', 'align', 'cellpadding', 'colspan',
'valign', 'vspace', 'hspace', 'alt', 'width', 'height' ]
# Remove the (admittedly rarely used) line breaks, "<br />", which sometimes
# cause a section of the ebook to start in an unsightly fashion or, more
# frequently, a "<br />" will muck up the formatting of a correspondant's byline.
# "<br />" and "<br clear/>" are far more frequently used on the table formatted
# style of pages, and really spoil the look of the ebook pages.
preprocess_regexps
= [(re.compile(r'<br[ ]*/>', re.IGNORECASE), lambda m: ''),
(re.compile(r'<br[ ]*clear.*/>', re.IGNORECASE), lambda m: '')]
#
#
#
#
Create regular expressions for tag keeping and removal to make the matches more
robust against minor changes and errors in the HTML, Eg. double spaces, leading
and trailing spaces, missing hyphens, and such like.
Python regular expression ('re' class) page: http://docs.python.org/library/re.html
# ***************************************
# Regular expressions for keep_only_tags:
# ***************************************
# The BBC News HTML pages use variants of 'storybody' to denote the section of a HTML
# page which contains the main text of the article. Match storybody variants: 'storybody',
# 'story-body', 'story body','storybody ', etc.
storybody_reg_exp = '^.*story[_ -]*body.*$'
# The BBC sport and 'newsbeat' (features) HTML pages use 'blq_content' to hold the title
# and published date. This is one level above the usual news pages which have the title
# and date within 'story-body'. This is annoying since 'blq_content' must also be kept,
# resulting in a lot of extra things to be removed by remove_tags.
blq_content_reg_exp = '^.*blq[_ -]*content.*$'
# The BBC has an alternative page design structure, which I suspect is an out-of-date
# design but which is still used in some articles, Eg. 'Click' (technology), 'FastTrack'
# (travel), and in some sport pages. These alternative pages are table based (which is
# why I think they are an out-of-date design) and account for -I'm guesstimaking- less
# than 1% of all articles. They use a table class 'storycontent' to hold the article
# and like blq_content (above) have required lots of extra removal by remove_tags.
story_content_reg_exp = '^.*story[_ -]*content.*$'
# Keep the sections of the HTML which match the list below. The HTML page created by
# Calibre will fill <body> with those sections which are matched. Note that the
# blq_content_reg_exp must be listed before storybody_reg_exp in keep_only_tags due to
# it being the parent of storybody_reg_exp, that is to say the div class/id 'story-body'
# will be inside div class/id 'blq_content' in the HTML (if 'blq_content' is there at
# all). If they are the other way around in keep_only_tags then blq_content_reg_exp
# will end up being discarded.
keep_only_tags = [ dict(name='table', attrs={'class':re.compile(story_content_reg_exp, re.IGNOREC
dict(name='div',
attrs={'class':re.compile(blq_content_reg_exp, re.IGNORECAS
130
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
dict(name='div',
dict(name='div',
dict(name='div',
attrs={'id':re.compile(blq_content_reg_exp, re.IGNORECASE)}
attrs={'class':re.compile(storybody_reg_exp, re.IGNORECASE)
attrs={'id':re.compile(storybody_reg_exp, re.IGNORECASE)})
# ************************************
# Regular expressions for remove_tags:
# ************************************
# Regular expression to remove share-help and variant tags. The share-help class
# is used by the site for a variety of 'sharing' type links, Eg. Facebook, delicious,
# twitter, email. Removed to avoid page clutter.
share_help_reg_exp = '^.*share[_ -]*help.*$'
# Regular expression to remove embedded-hyper and variant tags. This class is used to
# display links to other BBC News articles on the same/similar subject.
embedded_hyper_reg_exp = '^.*embed*ed[_ -]*hyper.*$'
# Regular expression to remove hypertabs and variant tags. This class is used to
# display a tab bar at the top of an article which allows the user to switch to
# an article (viewed on the same page) providing further info., 'in depth' analysis,
# an editorial, a correspondant's blog entry, and such like. The ability to handle
# a tab bar of this nature is currently beyond the scope of this recipe and
# possibly of Calibre itself (not sure about that - TO DO - check!).
hypertabs_reg_exp = '^.*hyper[_ -]*tabs.*$'
# Regular expression to remove story-feature and variant tags. Eg. 'story-feature',
# 'story-feature related narrow', 'story-feature wide', 'story-feature narrow'.
# This class is used to add additional info. boxes, or small lists, outside of
# the main story. TO DO: Work out a way to incorporate these neatly.
story_feature_reg_exp = '^.*story[_ -]*feature.*$'
# Regular expression to remove video and variant tags, Eg. 'videoInStoryB',
# 'videoInStoryC'. This class is used to embed video.
video_reg_exp = '^.*video.*$'
# Regular expression to remove audio and variant tags, Eg. 'audioInStoryD'.
# This class is used to embed audio.
audio_reg_exp = '^.*audio.*$'
# Regular expression to remove pictureGallery and variant tags, Eg. 'pictureGallery'.
# This class is used to embed a photo slideshow. See also 'slideshow' below.
picture_gallery_reg_exp = '^.*picture.*$'
# Regular expression to remove slideshow and variant tags, Eg. 'dslideshow-enclosure'.
# This class is used to embed a slideshow (not necessarily photo) but both
# 'slideshow' and 'pictureGallery' are used for slideshows.
slideshow_reg_exp = '^.*slide[_ -]*show.*$'
# Regular expression to remove social-links and variant tags. This class is used to
# display links to a BBC bloggers main page, used in various columnist's blogs
# (Eg. Nick Robinson, Robert Preston).
social_links_reg_exp = '^.*social[_ -]*links.*$'
#
#
#
#
#
Regular expression to remove quote and (multi) variant tags, Eg. 'quote',
'endquote', 'quote-credit', 'quote-credit-title', etc. These are usually
removed by 'story-feature' removal (as they are usually within them), but
not always. The quotation removed is always (AFAICT) in the article text
as well but a 2nd copy is placed in a quote tag to draw attention to it.
1.9. Handledning
131
calibre Användarhandbok, Utgåva 2.22.0
# The quote class tags may or may not appear in div's.
quote_reg_exp = '^.*quote.*$'
# Regular expression to remove hidden and variant tags, Eg. 'hidden'.
# The purpose of these is unclear, they seem to be an internal link to a
# section within the article, but the text of the link (Eg. 'Continue reading
# the main story') never seems to be displayed anyway. Removed to avoid clutter.
# The hidden class tags may or may not appear in div's.
hidden_reg_exp = '^.*hidden.*$'
# Regular expression to remove comment and variant tags, Eg. 'comment-introduction'.
# Used on the site to display text about registered users entering comments.
comment_reg_exp = '^.*comment.*$'
# Regular expression to remove form and variant tags, Eg. 'comment-form'.
# Used on the site to allow registered BBC users to fill in forms, typically
# for entering comments about an article.
form_reg_exp = '^.*form.*$'
# Extra things to remove due to the addition of 'blq_content' in keep_only_tags.
#<div class="story-actions"> Used on sports pages for 'email' and 'print'.
story_actions_reg_exp = '^.*story[_ -]*actions.*$'
#<div class="bookmark-list"> Used on sports pages instead of 'share-help' (for
# social networking links).
bookmark_list_reg_exp = '^.*bookmark[_ -]*list.*$'
#<div id="secondary-content" class="content-group">
# NOTE: Don't remove class="content-group" that is needed.
# Used on sports pages to link to 'similar stories'.
secondary_content_reg_exp = '^.*secondary[_ -]*content.*$'
#<div id="featured-content" class="content-group">
# NOTE: Don't remove class="content-group" that is needed.
# Used on sports pages to link to pages like 'tables', 'fixtures', etc.
featured_content_reg_exp = '^.*featured[_ -]*content.*$'
#<div id="navigation">
# Used on sports pages to link to pages like 'tables', 'fixtures', etc.
# Used sometimes instead of "featured-content" above.
navigation_reg_exp = '^.*navigation.*$'
#<a class="skip" href="#blq-container-inner">Skip to top</a>
# Used on sports pages to link to the top of the page.
skip_reg_exp = '^.*skip.*$'
# Extra things to remove due to the addition of 'storycontent' in keep_only_tags,
# which are the alterative table design based pages. The purpose of some of these
# is not entirely clear from the pages (which are a total mess!).
# Remove mapping based tags, Eg. <map id="world_map">
# The dynamic maps don't seem to work during ebook creation. TO DO: Investigate.
map_reg_exp = '^.*map.*$'
# Remove social bookmarking variation, called 'socialBookMarks'.
social_bookmarks_reg_exp = '^.*social[_ -]*bookmarks.*$'
132
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# Remove page navigation tools, like 'search', 'email', 'print', called 'blq-mast'.
blq_mast_reg_exp = '^.*blq[_ -]*mast.*$'
# Remove 'sharesb', I think this is a generic 'sharing' class. It seems to appear
# alongside 'socialBookMarks' whenever that appears. I am removing it as well
# under the assumption that it can appear alone as well.
sharesb_reg_exp = '^.*sharesb.*$'
# Remove class 'o'. The worst named user created css class of all time. The creator
# should immediately be fired. I've seen it used to hold nothing at all but with
# 20 or so empty lines in it. Also to hold a single link to another article.
# Whatever it was designed to do it is not wanted by this recipe. Exact match only.
o_reg_exp = '^o$'
# Remove 'promotopbg' and 'promobottombg', link lists. Have decided to
# use two reg expressions to make removing this (and variants) robust.
promo_top_reg_exp = '^.*promotopbg.*$'
promo_bottom_reg_exp = '^.*promobottombg.*$'
# Remove 'nlp', provides heading for link lists. Requires an exact match due to
# risk of matching those letters in something needed, unless I see a variation
# of 'nlp' used at a later date.
nlp_reg_exp = '^nlp$'
# Remove 'mva', provides embedded floating content of various types. Variant 'mvb'
# has also now been seen. Requires an exact match of 'mva' or 'mvb' due to risk of
# matching those letters in something needed.
mva_or_mvb_reg_exp = '^mv[ab]$'
# Remove 'mvtb', seems to be page navigation tools, like 'blq-mast'.
mvtb_reg_exp = '^mvtb$'
# Remove 'blq-toplink', class to provide a link to the top of the page.
blq_toplink_reg_exp = '^.*blq[_ -]*top[_ -]*link.*$'
# Remove 'products and services' links, Eg. desktop tools, alerts, and so on.
# Eg. Class="servicev4 ukfs_services" - what a mess of a name. Have decided to
# use two reg expressions to make removing this (and variants) robust.
prods_services_01_reg_exp = '^.*servicev4.*$'
prods_services_02_reg_exp = '^.*ukfs[_ -]*services.*$'
# Remove -what I think is- some kind of navigation tools helper class, though I am
# not sure, it's called: 'blq-rst blq-new-nav'. What I do know is it pops up
# frequently and it is not wanted. Have decided to use two reg expressions to make
# removing this (and variants) robust.
blq_misc_01_reg_exp = '^.*blq[_ -]*rst.*$'
blq_misc_02_reg_exp = '^.*blq[_ -]*new[_ -]*nav.*$'
# Remove 'puffbox' - this may only appear inside 'storyextra', so it may not
# need removing - I have no clue what it does other than it contains links.
# Whatever it is - it is not part of the article and is not wanted.
puffbox_reg_exp = '^.*puffbox.*$'
# Remove 'sibtbg' and 'sibtbgf' - some kind of table formatting classes.
sibtbg_reg_exp = '^.*sibtbg.*$'
# Remove 'storyextra' - links to relevant articles and external sites.
storyextra_reg_exp = '^.*story[_ -]*extra.*$'
1.9. Handledning
133
calibre Användarhandbok, Utgåva 2.22.0
remove_tags = [ dict(name='div', attrs={'class':re.compile(story_feature_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'class':re.compile(share_help_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(embedded_hyper_reg_exp, re.IGNORECASE
dict(name='div', attrs={'class':re.compile(hypertabs_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(video_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(audio_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(picture_gallery_reg_exp, re.IGNORECAS
dict(name='div', attrs={'class':re.compile(slideshow_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(quote_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(hidden_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(comment_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(story_actions_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'class':re.compile(bookmark_list_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'id':re.compile(secondary_content_reg_exp, re.IGNORECASE
dict(name='div', attrs={'id':re.compile(featured_content_reg_exp, re.IGNORECASE)
dict(name='div', attrs={'id':re.compile(navigation_reg_exp, re.IGNORECASE)}),
dict(name='form', attrs={'id':re.compile(form_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(quote_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(hidden_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(social_links_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(comment_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(skip_reg_exp, re.IGNORECASE)}),
dict(name='map', attrs={'id':re.compile(map_reg_exp, re.IGNORECASE)}),
dict(name='map', attrs={'name':re.compile(map_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'id':re.compile(social_bookmarks_reg_exp, re.IGNORECASE)}
dict(name='div', attrs={'id':re.compile(blq_mast_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(sharesb_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(o_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(promo_top_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(promo_bottom_reg_exp, re.IGNORECASE)}
dict(name='div', attrs={'class':re.compile(nlp_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(mva_or_mvb_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(mvtb_reg_exp, re.IGNORECASE)}),
dict(name='div', attrs={'class':re.compile(blq_toplink_reg_exp, re.IGNORECASE)})
dict(name='div', attrs={'class':re.compile(prods_services_01_reg_exp, re.IGNOREC
dict(name='div', attrs={'class':re.compile(prods_services_02_reg_exp, re.IGNOREC
dict(name='div', attrs={'class':re.compile(blq_misc_01_reg_exp, re.IGNORECASE)})
dict(name='div', attrs={'class':re.compile(blq_misc_02_reg_exp, re.IGNORECASE)})
dict(name='div', attrs={'class':re.compile(puffbox_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(sibtbg_reg_exp, re.IGNORECASE)}),
dict(attrs={'class':re.compile(storyextra_reg_exp, re.IGNORECASE)})
]
# Uses url to create and return the 'printer friendly' version of the url.
# In other words the 'print this page' address of the page.
#
# There are 3 types of urls used in the BBC site's rss feeds. There is just
# 1 type for the standard news while there are 2 used for sports feed urls.
# Note: Sports urls are linked from regular news feeds (Eg. 'News Home') when
# there is a major story of interest to 'everyone'. So even if no BBC sports
# feeds are added to 'feeds' the logic of this method is still needed to avoid
# blank / missing / empty articles which have an index title and then no body.
def print_version(self, url):
# Handle sports page urls type 01:
if (url.find("go/rss/-/sport1/") != -1):
temp_url = url.replace("go/rss/-/", "")
134
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# Handle sports page urls type 02:
elif (url.find("go/rss/int/news/-/sport1/") != -1):
temp_url = url.replace("go/rss/int/news/-/", "")
# Handle regular news page urls:
else:
temp_url = url.replace("go/rss/int/news/-/", "")
# Always add "?print=true" to the end of the url.
print_url = temp_url + "?print=true"
return print_url
# Remove articles in feeds based on a string in the article title or url.
#
# Code logic written by: Starson17 - posted in: "Recipes - Re-usable code"
# thread, in post with title: "Remove articles from feed", see url:
# http://www.mobileread.com/forums/showpost.php?p=1165462&postcount=6
# Many thanks and all credit to Starson17.
#
# Starson17's code has obviously been altered to suite my requirements.
def parse_feeds(self):
# Call parent's method.
feeds = BasicNewsRecipe.parse_feeds(self)
# Loop through all feeds.
for feed in feeds:
# Loop through all articles in feed.
for article in feed.articles[:]:
# Match key words and remove article if there's a match.
# Most BBC rss feed video only 'articles' use upper case 'VIDEO'
# as a title prefix. Just match upper case 'VIDEO', so that
# articles like 'Video game banned' won't be matched and removed.
if 'VIDEO' in article.title:
feed.articles.remove(article)
# Most BBC rss feed audio only 'articles' use upper case 'AUDIO'
# as a title prefix. Just match upper case 'AUDIO', so that
# articles like 'Hi-Def audio...' won't be matched and removed.
elif 'AUDIO' in article.title:
feed.articles.remove(article)
# Most BBC rss feed photo slideshow 'articles' use 'In Pictures',
# 'In pictures', and 'in pictures', somewhere in their title.
# Match any case of that phrase.
elif 'IN PICTURES' in article.title.upper():
feed.articles.remove(article)
# As above, but user contributed pictures. Match any case.
elif 'YOUR PICTURES' in article.title.upper():
feed.articles.remove(article)
# 'Sportsday Live' are articles which contain a constantly and
1.9. Handledning
135
calibre Användarhandbok, Utgåva 2.22.0
# dynamically updated 'running commentary' during a live sporting
# event. Match any case.
elif 'SPORTSDAY LIVE' in article.title.upper():
feed.articles.remove(article)
# Sometimes 'Sportsday Live' (above) becomes 'Live - Sport Name'.
# These are being matched below using 'Live - ' because removing all
# articles with 'live' in their titles would remove some articles
# that are in fact not live sports pages. Match any case.
elif 'LIVE - ' in article.title.upper():
feed.articles.remove(article)
# 'Quiz of the week' is a Flash player weekly news quiz. Match only
# the 'Quiz of the' part in anticipation of monthly and yearly
# variants. Match any case.
elif 'QUIZ OF THE' in article.title.upper():
feed.articles.remove(article)
# Remove articles with 'scorecards' in the url. These are BBC sports
# pages which just display a cricket scorecard. The pages have a mass
# of table and css entries to display the scorecards nicely. Probably
# could make them work with this recipe, but might take a whole day
# of work to sort out all the css - basically a formatting nightmare.
elif 'scorecards' in article.url:
feed.articles.remove(article)
return feeds
# End of class and file.
Detta recept utforskar bara toppen av isberget när det kommer till makten av calibre. För att utforska mer av förmågan
hos calibre så undersöker vi en mer komplex verkliga livet exempel i nästa avsnitt.
Exempel i verkligheten
Ett tämligen komplicerat exempel från verkligheten som exponerar mer av API för BasicNewsRecipe är recept
för New York Times
import string, re
from calibre import strftime
from calibre.web.feeds.recipes import BasicNewsRecipe
from calibre.ebooks.BeautifulSoup import BeautifulSoup
class NYTimes(BasicNewsRecipe):
title
= 'The New York Times'
__author__ = 'Kovid Goyal'
description = 'Daily news from the New York Times'
timefmt = ' [%a, %d %b, %Y]'
needs_subscription = True
remove_tags_before = dict(id='article')
remove_tags_after = dict(id='article')
remove_tags = [dict(attrs={'class':['articleTools', 'post-tools', 'side_tool', 'nextArticleLink c
dict(id=['footer', 'toolsRight', 'articleInline', 'navigation', 'archive', 'side_sear
dict(name=['script', 'noscript', 'style'])]
encoding = 'cp1252'
no_stylesheets = True
136
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
extra_css = 'h1 {font: sans-serif large;}\n.byline {font:monospace;}'
def get_browser(self):
br = BasicNewsRecipe.get_browser()
if self.username is not None and self.password is not None:
br.open('http://www.nytimes.com/auth/login')
br.select_form(name='login')
br['USERID']
= self.username
br['PASSWORD'] = self.password
br.submit()
return br
def parse_index(self):
soup = self.index_to_soup('http://www.nytimes.com/pages/todayspaper/index.html')
def feed_title(div):
return ''.join(div.findAll(text=True, recursive=False)).strip()
articles = {}
key = None
ans = []
for div in soup.findAll(True,
attrs={'class':['section-headline', 'story', 'story headline']}):
if div['class'] == 'section-headline':
key = string.capwords(feed_title(div))
articles[key] = []
ans.append(key)
elif div['class'] in ['story', 'story headline']:
a = div.find('a', href=True)
if not a:
continue
url = re.sub(r'\?.*', '', a['href'])
url += '?pagewanted=all'
title = self.tag_to_string(a, use_alt=True).strip()
description = ''
pubdate = strftime('%a, %d %b')
summary = div.find(True, attrs={'class':'summary'})
if summary:
description = self.tag_to_string(summary, use_alt=False)
feed = key if key is not None else 'Uncategorized'
if not articles.has_key(feed):
articles[feed] = []
if not 'podcasts' in url:
articles[feed].append(
dict(title=title, url=url, date=pubdate,
description=description,
content=''))
ans = self.sort_index_by(ans, {'The Front Page':-1, 'Dining In, Dining Out':1, 'Obituaries':2
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
return ans
def preprocess_html(self, soup):
refresh = soup.find('meta', {'http-equiv':'refresh'})
if refresh is None:
return soup
1.9. Handledning
137
calibre Användarhandbok, Utgåva 2.22.0
content = refresh.get('content').partition('=')[2]
raw = self.browser.open('http://www.nytimes.com'+content).read()
return BeautifulSoup(raw.decode('cp1252', 'replace'))
Vi ser flera nya funktioner i detta recept. recept. Först har vi:
timefmt = ' [%a, %d %b, %Y]'
Detta ställer den visade tiden på förstasidan av den skapade e-boken att vara i formatet, Dag, Dag_Nummer
Månad, År. Se timefmt (sida 311).
Sedan ser vi en grupp av direktiv till sanering den nedladdade HTML:
remove_tags_before = dict(name='h1')
remove_tags_after = dict(id='footer')
remove_tags = ...
Dessa tar bort allt innan den första <h1> etiketten och allt efter den första etiketten vars id är footer. Se
remove_tags (sida 310), remove_tags_before (sida 311), remove_tags_after (sida 311).
Nästa intressant funktion är:
needs_subscription = True
...
def get_browser(self):
...
needs_subscription = True berättar för calibre att detta recept behöver användarnamn och lösenord för att
kunna åt innehållet. Detta medför att, calibre frågar efter användarnamn och lösenord när du försöker använda det
här receptet. Koden i calibre.web.feeds.news.BasicNewsRecipe.get_browser() (sida 304) loggar
faktiskt in på NYT webbsida. När du loggat in, kommer calibre använda samma webbinstans för att hämta allt innehåll.
Se mechanize58 to understand the code in get_browser.
Nästa nyhet är calibre.web.feeds.news.BasicNewsRecipe.parse_index() (sida 305) metoden.
Dess uppgift är att gå till http://www.nytimes.com/pages/todayspaper/index.html och hämta listan över artiklar som
visas i dagens tidning. Medan mer komplex än att bara använda RSS, skapar receptet en e-bok som motsvarar mycket
nära dagens tidning. parse_index använder mycket BeautifulSoup59 för att tolka dagens tidningswebbsida. Du
kan också använda andra, mer moderna parsers om du ogillar BeatifulSoup. calibre comes with lxml60 och html5lib61 ,
vilka är de rekommenderade parsers. För att använda dem, byt ut anropet till index_to_soup() med följande:
raw = self.index_to_soup(url, raw=True)
# For html5lib
import html5lib
root = html5lib.parse(raw, namespaceHTMLElements=False, treebuilder='lxml')
# For the lxml html 4 parser
from lxml import html
root = html.fromstring(raw)
Den sista nyheten är calibre.web.feeds.news.BasicNewsRecipe.preprocess_html() (sida 306)
metoden. Den kan användas för att utföra godtyckliga transformationer på varje nedladdad HTML-sida. Här används
det för att kringgå de annonser som de NYTimes visar dig innan varje artikel.
58 http://wwwsearch.sourceforge.net/mechanize/
59 http://www.crummy.com/software/BeautifulSoup/documentation.html
60 http://lxml.de/
61 https://github.com/html5lib/html5lib-python
138
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Tips för att utveckla nya recept
Det bästa sättet att utveckla nya recept är att använda kommandoraden. Skapa receptet med din favorit python editor
och spara den till en fil låt säga myrecipe.recipe. Den .recipe -tillägget krävs. Du kan hämta innehåll med detta
recept med kommandot:
ebook-convert myrecipe.recipe .epub --test -vv --debug-pipeline debug
Kommandot ebook-convert kommer att ladda ner alla webbsidor och spara dem till EPUB-filen myrecipe.epub.
Alternativet -vv får ebook-convert mata ut en hel del information om vad den gör. Alternativet --test begränsar nerladdning till bara ett par artiklar från högst två flöden. Dessutom kommer ebook-convert placera HTML i
debug/input-katalogen, där debug är katalogen du angav i --debug-pipeline-alternativet.
När nedladdningen är klar kan du titta på den nedladdade HTML genom att öppna filen
debug/input/index.html i en webbläsare. När du är nöjd med nedladdningen och förbehandling sker
på rätt sätt, kan du skapa e-böcker i olika format enligt nedan:
ebook-convert myrecipe.recipe myrecipe.epub
ebook-convert myrecipe.recipe myrecipe.mobi
...
Om du är nöjd med ditt recept, och du känner att det finns tillräcklig efterfrågan för att motivera dess införande i
uppsättningen av inbyggda recept, lägg upp receptet på calibres receptforum62 för att dela den med andra calibreanvändare.
Observera:
På
OS
X,
kommandoradverktyget
är
inne
i
calibre
paketet,
till
exempel
om
du
installerar
Calibre
i
/Applications
är
kommandoradverktyget
i
/Applications/calibre.app/Contents/console.app/Contents/MacOS/.
Se även:
ebook-convert (sida 281) Kommandoradsgränssnittet för all e-bokkonvertering.
Ytterligare läsning
Om du vill veta mer om att skriva avancerade recept med några av faciliteterna som finns i BasicNewsRecipe bör
du konsultera följande källor:
API Dokumentation (sida 303) Dokumentation av BasicNewsRecipe-klassen och alla dess viktiga
metoder och fält.
BasicNewsRecipe63 Källkoden för BasicNewsRecipe
Inbyggda recept64 Källkoden för de inbyggda recept som kommer med calibre
Calibres recept forum65 Massor av kunniga calibre recept-författare håller till här.
API dokumentation
API dokumentation för recept
API för skriva recept är definierade av BasicNewsRecipe (sida 303)
class calibre.web.feeds.news.BasicNewsRecipe(options, log, progress_reporter)
Basklass som innehåller logik behövs i alla recept. Av överrida progressivt mer av funktionaliteten i denna
62 http://www.mobileread.com/forums/forumdisplay.php?f=228
1.9. Handledning
139
calibre Användarhandbok, Utgåva 2.22.0
klass, kan du göra allt mer kundanpassade / kraftfulla recept. En handledning introduktion till att skapa recept,
se Lägga till din favorit nyhetswebbplats (sida 121).
abort_recipe_processing(msg)
Orsakar att receptetnedladdningssystemet avbryter nedladdningen av detta recept, visar en enkel återkopplingsmeddelande till användaren.
add_toc_thumbnail(article, src)
Kalla detta från populate_article_metadata med attributet src för en <img> etiketten från artikeln som är
lämplig att använda som ikon representerar artikeln i innehållsförteckningen. Huruvida ikonen faktiskt
används är beroende av enhet (för närvarande endast används av Kindles). Observera att den refererade
bilden måste vara en som framgångsrikt hämtats, annars kommer det att ignoreras.
classmethod adeify_images(soup)
Om ditt recept vid konvertering till EPUB har problem med bilderna när de visas i Adobe Digital Editions,
kalla denna metod inifrån postprocess_html() (sida 306).
cleanup()
Anropas efter alla artiklar har laddats ner. Använd den för att göra godtycklig sanering som att logga ut
från prenumerationsplatser etc.
clone_browser(br)
Klona webbläsare br. Klonade webbläsare används för multi-trådade nedladdningar, eftersom mechanize
(mekanisera) inte är trådsäkert. Standardkloningsrutiner ska fånga de flesta webbläsaranpassningar, men
om du gör något exotiskt i ditt recept, ska du åsidosätta den här metoden i ditt recept och klona manuellt.
Klonade webbläsarinstanser använder samma, trådsäkra CookieJar som standard, såvida du inte har anpassat cookie-hantering.
default_cover(cover_file)
Skapa en generisk omslag för recept som inte har ett omslag
download()
Hämta och förbearbeta alla artiklar från flöde i detta recept. Denna metod bör kallas en gång för en viss
receptinstans. Kallas det mer än en gång kommer det att leda till odefinierade beteenden. :return: Path to
index.html
extract_readable_article(html, url)
Tar fram huvudartikelns innehåll från “html”, rensar upp och återvänder som en (article_html, extracted_title) tupel. Baserat på den ursprungliga läsbarhet algoritm genom Arc90.
get_article_url(article)
Överrid i en underklass för att anpassa utvinning av URL som pekar på innehållet för varje artikel. Returnera artikel-URLn. Den anropas med article, ett objekt som representerar en analyserad artikel från ett
flöde. Se ‘feedparser <https://pythonhosted.org/feedparser/>’ _. Normalt söker den efter den ursprungliga
länken (till flöde syndikerade via en tjänst som Feedburner eller pheedo) och om den hittas, returnerar detta
eller annars returneras article.link66 .
get_browser(*args, **kwargs)
Returnera en webbläsare instans som används för att hämta dokument från webben. Som standard den
returnerar en mechanize (mekanisera)67 browser instans som stöder cookies, ignorerar robots.txt, hanterar
fräschar och har ett Mozilla Firefox användaragent.
Om ditt recept kräver att du loggar in först, överrids denna metod i din underklass. Till exempel är följande
kod används i New York Times recept för att logga in för full tillgång:
def get_browser(self):
br = BasicNewsRecipe.get_browser(self)
66 https://pythonhosted.org/feedparser/reference-entry-link.html
67 http://wwwsearch.sourceforge.net/mechanize/
140
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
if self.username is not None and self.password is not None:
br.open('http://www.nytimes.com/auth/login')
br.select_form(name='login')
br['USERID']
= self.username
br['PASSWORD'] = self.password
br.submit()
return br
get_cover_url()
Returnera en URL till omslagsbild för den här utgåvan eller‘ None‘. Som standard returnerar värdet av
elementet self.cover_url som normalt är None. Om du vill att ditt recept för att hämta ett omslag för eboken överrids den här metoden i din underklass, eller ställa medlemsvariabeln self.cover_url innan denna
metod anropas.
get_feeds()
Returnera en lista med RSS flöde att hämta för den här profilen. Varje element i listan måste vara ett
2-elements tupel av formen (titel, url). Om titeln är None eller en tom sträng, används titeln från flödet.
Denna metod är användbar om du receptet behöver göra en del bearbetning för att räkna ut lista med inlägg
för att ladda ner. Om så är fallet, överrid i din underklass.
get_masthead_title()
Överrids i underklass för att använda något annat än receptets titel
get_masthead_url()
Returnera en URL till redaktionsloggo till denna utgåva eller‘ None‘. Som standard returnerar värdet av
elementet self.masthead_url som normalt är None. Om du vill att ditt recept ska hämta en redationsloggon
för e-boken överrrid den här metoden i din underklass, eller sätt medlemmen variabeln self.masthead_url
innan denna metod anropas. Redaktionsloggo används i Kindle MOBI-filer.
get_obfuscated_article(url)
Om du sätter articles_are_obfuscated anropas denna metod med varje artikel URL. Det ska returnera
sökvägen till en fil i filsystemet som innehåller artikeln HTML. Filen bearbetas av den rekursiva HTMLhämtmotor, så det kan innehålla länkar till sidor / bilder på webben.
Denna metod är oftast användbart för webbplatser som försöker göra det svårt att komma åt artikelns
innehåll automatiskt.
classmethod image_url_processor(baseurl, url)
Utför någon behandling på bildwebbadresser (kanske ta bort storleksbegränsningar för dynamiskt skapade
bilder, etc.) och returnera bearbetad URL.
index_to_soup(url_or_raw, raw=False, as_tree=False)
Bekväm metod som använder en webadress (URL) för indexera en sida och returnerar en BeautifulSoup68
av den.
url_or_raw: Antingen en webbadress eller den nedladdade indexsidan som en sträng
is_link_wanted(url, tag)
Returnerar Sann om länken ska följas eller Falsk annars. Som standard höjer NotImplementedError som
orsakar hämtningen att ignorera det.
Parametrar
• url – Webbadressen som skall följas
• tag – Ettiketen för vilken URL erhölls
javascript_login(browser, username, password)
Denna metod används för att logga in på en webbplats som använder javascript för sitt inloggningsformulär.
68 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
1.9. Handledning
141
calibre Användarhandbok, Utgåva 2.22.0
Efter inloggningen är klar, kopieras kakorna från webbplatsen kopieras till en normal (icke-javascript)
webbläsare och nedladdningen fortsätter som använder dessa kakor.
Ett exempel på implementering:
def javascript_login(self, browser, username, password):
browser.visit('http://some-page-that-has-a-login')
form = browser.select_form(nr=0) # Select the first form on the page
form['username'] = username
form['password'] = password
browser.submit(timeout=120) # Submit the form and wait at most two minutes for loading t
Observera att du också kan välja formulär med CSS2 väljare, så här:
browser.select_form('form#login_form')
browser.select_from('form[name="someform"]')
parse_feeds()
Skapa en lista över artiklar i listan över flöden som returneras av BasicNewsRecipe.get_feeds()
(sida 304). Returnerar en lista med Feed objekt.
parse_index()
Denna metod bör implementeras på recept för att tolka en webbplats istället för flöde för att skapa en
lista med artiklar. Typiska användningsområden är för nyhetskällor som har en “Print Edition” webbsida
som listar alla artiklar i den aktuella tryckupplagan. Om denna funktion implementeras kommer den att
användas i stället för BasicNewsRecipe.parse_feeds() (sida 305).
Det måste returnera en lista. Varje element i listan måste vara ett 2-inslag tupel av formen (fflödestitel", lista med artiklar).
Varje lista av artiklar måste innehålla ordlister på formen:
{
'title'
'url'
'date'
'description'
'content'
:
:
:
:
:
article title,
URL of print version,
The publication date of the article as a string,
A summary of the article
The full article (can be an empty string). Obsolete
do not use, instead save the content to a temporary
file and pass a file:///path/to/temp/file.html as
the URL.
}
Till exempel, se receptet för nedladdning The Atlantic. Dessutom kan du lägga till “författare” för författaren till artikeln.
Om du vill avbryta behandlingen av någon anledning och låta calibre visa användaren ett enkelt budskap i
stället för ett fel, anropa abort_recipe_processing() (sida 303).
populate_article_metadata(article, soup, first)
Anropas när varje HTML-sida som hör till artikeln hämtas. Avsedd att användas för att få artikelns metadata som författaren / sammandrag / etc. från analyserad HTML (soppa). :param artikel: Ett objekt av
klassen calibre.web.feeds.Article. Om du ändrar sammanfattningen, kom ihåg att också ändra text_summary :param soup: Tolkad HTML tillhör denna artikel :param first: Sann om och endast om
analyserad HTML är den första sidan av artikeln.
postprocess_book(oeb, opts, log)
Körs om någon efterbehandling behövs på analyserad nedladdade e-bok.
Parametrar
• oeb – Ett OEBBook-objekt
142
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• opts – Konverteringsalternativ
postprocess_html(soup, first_fetch)
Denna metod kallas med källan till varje nedladdad: term HTML fil, efter att den analyserats för länkar och
bilder. Den kan användas för att göra godtyckligt kraftfull efterbehandling på HTML. Det bör returnera
soup efter bearbetning det.
Parametrar
• soup – En BeautifulSoup69 instans innehållande nerladdad HTML.
• first_fetch – Sann om detta är första sidan av en artikel.
preprocess_html(soup)
Denna metod kallas med källan till varje nedladdad HTML fil, innan den analyseras för länkar och bilder.
Det kallas efter rensningen som specificerats remove_tags etc. Det kan användas för att göra godtyckliga
och starka förbearbetning på HTML. Det bör returnera soup efter bearbetning det.
soup: En BeautifulSoup70 instans innehållande nerladdad HTML.
preprocess_raw_html(raw_html, url)
Denna metod anropas med källa av varje nedladdad HTML fil, innan den tolkas i ett objektträd. raw_html
är en unicode sträng som representerar råa HTML nedladdningen från webben. url är URL från vilken
HTML var nedladdad.
Obserevera att denna metod agerar innan preprocess_regexps.
Denna metod måste returnera den bearbetade raw_html som ett unicode-objekt.
classmethod print_version(url)
Ta en url som pekar på en webbsida med artikelinnehåll och returnerar URL som pekar på en utskrivbar
version av artikeln. Som standard gör ingenting. TIll exempel:
def print_version(self, url):
return url + '?&pagewanted=print'
skip_ad_pages(soup)
Denna metod anropas med källan till varje nedladdad HTML fil, innan någon av rensningsattribut som
remove_tags, keep_only_tags tillämpas. Observera att preprocess_regexps kommer redan ha använts. Det
är tänkt att låta receptet att hoppa över annonssidor. Om soup är en annonssida, returnera HTML den
verkliga sidan. Annars returneras None.
soup: En BeautifulSoup71 instans innehållande nerladdad HTML.
sort_index_by(index, weights)
Bekväm metod för att sortera titlar i index enligt weights. index‘ sorteras på plats. Returnerar index.
index: En lista av titlar.
weights: En ordlista som översätter vikt mot titel., Om något titelindex inte har vikt. antas de ha vikten 0.
classmethod tag_to_string(tag, use_alt=True, normalize_whitespace=True)
Bekväm metod som använder en BeautifulSoup72 tag-etikett och extraherar text från den rekursivt, inkluderande godtycklig CDATA sektion och alt-attribut. Returnerar en möjlig tom unicode-sträng.
use_alt: Om True försök använd alt attribut för etiketter som inte har något textinnehåll
tag: BeautifulSoup73 Tag (Etikett)
69 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
70 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
71 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
72 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
73 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
1.9. Handledning
143
calibre Användarhandbok, Utgåva 2.22.0
articles_are_obfuscated = False
Sätt till Sann och implementerar get_obfuscated_article() (sida 305) för hantera webbsidor som
försöker göra det svårt att skrapa fram innehåll.
auto_cleanup = False
Automatiskt extrahera all text från nedladdade artikelsidor. Använder algoritmerna från läsbarhet projektet.
Sätt denna sann innebär att du inte behöver oroa dig för att städa upp den nedladdade HTML manuellt (även
om manuell rensning alltid kommer att vara bättre).
auto_cleanup_keep = None
Specify elements that the auto cleanup algorithm should never remove. The syntax is a XPath expression.
For example:
auto_cleanup_keep = '//div[@id="article-image"]' will keep all divs with
id="article-image"
auto_cleanup_keep = '//*[@class="important"]' will keep all elements
with class="important"
auto_cleanup_keep = '//div[@id="article-image"]|//span[@class="important"]'
will keep all divs with id="article-image" and spans
with class="important"
center_navbar = True
Om sann centreras navigationslisten annars är den vänsterjusterad
compress_news_images = False
Ställ in den till Falsk för att ignorera alla skalnings- och komprimeringsparametrar och passera bilder
igenom omodifierad. Om Sann och andra komprimeringsparametrar behåller sina standardvärden, kommer
jpeg-bilder skalas för att passa in skärmmått som fastställts av utskriftsprofil och komprimeras till storleken
på de flesta (b * h) / 16 där bxh är det skalade bildens dimensioner .
compress_news_images_auto_size = 16
Den faktor som används när automatisk komprimera jpeg-bilder. Om värdet är None, är komprimering automatisk inaktiverad. Annars kommer bilderna att minskas i storlek till (b * h) / compress_news_images_auto_size byte om möjligt genom att minska kvalitetsnivån, där bxh är bildens dimensioner i pixlar. Den minsta jpeg-kvalitet kommer att vara 5/100 så det är möjligt denna begränsning inte
kommer att uppfyllas. Denna parameter kan överridas av parametern compress_news_images_max_size
som ger en fast maximal storlek för bilder. Observera att om du aktiverar scale_news_images_to_device
kommer sedan bilden först skalas och sedan dess kvalitet sänkas tills dess storlek är mindre än (b*h)/faktor
där w och h är nu bildens skalade dimensioner. Med andra ord, denna kompression sker efter skalning.
compress_news_images_max_size = None
Sätt jpeg-kvalitet så att bilder inte överskrider angiven storlek (i kBytes). Om satt, överrider denna parameter automatisk komprimering via compress_news_images_auto_size. Minimum jpeg-kvalitet kommer
vara 5/100 so det är möjligt att denna restriktion inte möts.
conversion_options = {}
Receptspecifika alternativ för att styra konvertering av nedladdat innehåll in i en e-bok. Dessa kommer
överrida alla användare eller tilläggsspecifika värden, så använd bara om det är absolut nödvändigt. TIll
exempel:
conversion_options =
'base_font_size'
'tags'
'title'
'linearize_tables'
}
{
:
:
:
:
16,
'mytag1,mytag2',
'My Title',
True,
cover_margins = (0, 0, ‘#ffffff’)
Som standard returneras omslagsbild av get_cover_url () och kommer att användas som omslag för tid-
144
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
skriften. Överridning av detta i ditt recept instruerar calibre att anpassa det nedladdade omslaget i en ram
vars bredd och höjd uttrycks som en procentandel av den nedladdade omslaget. cover_margins = (10, 15,
“#ffffff”) fyller omslaget med en vit marginal 10px på vänster och höger, 15px på toppen och botten. Färgnamn som fastställts på http://www.imagemagick.org/script/color.php Notera att av någon anledning, vitt
fungerar inte alltid på fönster. Använd #ffffff istället
delay = 0
Fördröjning mellan konsekutiva nedladdningar i sekunder. Argumentet kan vara ett flyttal för att indikera
mer exakt tid.
description = u’‘
Ett par rader som beskriver innehållet detta recept laddar ner. Detta kommer främst att användas i ett
användargränssnitt som presenterar en lista med recept.
encoding = None
Ange en kodningsöverridning för webbplatser som har en felaktig charset-specifikation. Det vanligaste är
att ange latin1 och använda cp1252. Om None, försöka identifiera kodningen. Om det är en anropbar,
anropas den anropbara med två argument: Receptobjektet och den källa som skall avkodas. Det måste
returnera den avkodade källan.
extra_css = None
Ange någon extra CSS som bör läggas till ladda ned HTML-filer. Det kommer att införas i <style> etiketter,
precis före den avslutande </head> etikett därmed tvingande allt CSS utom det som deklareras med hjälp
av stilattribut på individuella HTML etiketter . Exempelvis:
extra_css = '.heading { font: serif x-large }'
feeds = None
Förteckning över flöde för att ladda ner. Kan vara antingen [url1, url2, ...] eller [(’title1’,
url1), (’title2’, url2),...]
filter_regexps = []
Lista över reguljära uttryck som avgör vilka länkar att ignorera. Om den är tom ignoreras det. Endast
användas om is_link_wanted inte implementeras. Exempelvis:
filter_regexps = [r'ads\.doubleclick\.net']
kommer ta bort alla URLer som har ads.doubleclick.net in sig.
Bara
en
av
BasicNewsRecipe.match_regexps
(sida
BasicNewsRecipe.filter_regexps (sida 309) skulle bara definierad.
309)
eller
ignore_duplicate_articles = None
Ignorera dubbletter av artiklar som finns i mer än ett avsnitt. En dubblettartikel är en artikel som har samma
titel och / eller webbadress. Att ignorera artiklar med samma titel, ställa detta till:
ignore_duplicate_articles = {'title'}
För att använda URL:er i stället, sätt den till:
ignore_duplicate_articles = {'url'}
För träff mot titel eller URL, sätt den till:
ignore_duplicate_articles = {'title', 'url'}
keep_only_tags = []
Håll endast specificerade etiketter och deras barn. För formatet för att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Om denna lista inte är tom, då blir <body> etikett
tom och återfylld med etiketter som passar poster i denna lista. Till exempel:
1.9. Handledning
145
calibre Användarhandbok, Utgåva 2.22.0
keep_only_tags = [dict(id=['content', 'heading'])]
kommer bara ha etiketter som har ett id attribut av “content” eller “heading”.
language = ‘und’
Språket som nyheterna är i. Måste vara en ISO-639-kod antingen två eller tre tecken långt
masthead_url = None
Som standard, kommer calibre att använda en redaktionslogga (endast Kindle). Åsido detta i ditt recept för
att ge en url för att användas som en redaktionslogga.
match_regexps = []
Lista över reguljära uttryck som avgör vilka länkar att följa. Om den är tom, ignoreras den. Endast användas
om is_link_wanted inte implementeras. Exempelvis:
match_regexps = [r'page=[0-9]+']
kommer passa mot alla URLer som har page=some number i sig.
Bara
en
av
BasicNewsRecipe.match_regexps
(sida
BasicNewsRecipe.filter_regexps (sida 309) skulle bara definierad.
309)
eller
max_articles_per_feed = 100
Maximalt antal artiklar att ladda ned från varje flöde. Den är primärt användbar för flöde som inte har
artikeldatum. För de flesta flödes, bör du använda BasicNewsRecipe.oldest_article (sida 310)
needs_subscription = False
Om Sann kommer gränssnittet att be användaren om ett användarnamn och lösenord för att använda vid
nedladdning. Om inställningen är “frivilligt” att använda ett användarnamn och lösenord blir tillval
no_stylesheets = False
Bekväm flagga för att inaktivera laddning av formatmallar för webbplatser som har alltför komplexa mallar
som är olämpliga för konvertering till e-böcker format. Om Sann hämtas inte mallar och bearbetas
oldest_article = 7.0
Äldsta artikel att ladda ner från denna nyhetskälla. I dagarna.
preprocess_regexps = []
Lista av regexp substitutionsregler att köras vid nedladdning HTML. Varje element i listan bör vara en
tupel. Första elementet av tupel bör vara ett kompilerat regujärt uttryck och andra en anropsbar som tar ett
passande objekt och returnerar en sträng för att ersätta träffen. Till exempel:
preprocess_regexps = [
(re.compile(r'<!--Article ends here-->.*</body>', re.DOTALL|re.IGNORECASE),
lambda match: '</body>'),
]
kommer ta bort allt från <!–Article ends here–> till </body>.
publication_type = ‘unknown’
Publikationstyp Inställd på tidning, tidskrift eller blogg. Om satt till None, kommer ingen publikationstypsmetadata skrivas till opf-filen.
recipe_disabled = None
Ställ in på en icke tom sträng för att inaktivera detta recept. Strängen kommer att användas som inaktiverade meddelande
recursions = 0
Antal nivåer av länkar att följa på en artikelwebbsida
remove_attributes = []
Lista över attribut för att ta bort från alla etiketter. Exempelvis:
146
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
remove_attributes = ['style', 'font']
remove_empty_feeds = False
Om Sann tas tomma flöden bort från utdata. Det här alternativet har ingen effekt om parse_index överrids i
underklassen. Den är avsedd endast för recept som returnerar en lista med flöden som använder feeds eller
get_feeds() (sida 304). Den används också om du använder alternativet ignore_duplicate_articles.
remove_javascript = True
Bekväm flagga att strippa alla javascript etiketter från den nedladdade HTMLn
remove_tags = []
Lista med etiketter som skall avlägsnas. Angivna etiketter tas bort från nedladdad HTML. En etiketter
anges som en ordlista på formen:
{
name
attrs
: 'tag name',
#e.g. 'div'
: a dictionary, #e.g. {class: 'advertisment'}
}
Alla tangenter är valbara. För full förklaring av sökningskriteria, se Beautiful Soup74 Ett vanligt exempel:
remove_tags = [dict(name='div', attrs={'class':'advert'})]
Detta tar bort alla <div class=”advert”> etiketter och deras barn från nerladdade HTML.
remove_tags_after = None
Ta bort alla etiketter som förekommer efter angiven etikett. För formatet att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Till exempel:
remove_tags_after = [dict(id='content')]
kommer ta bort alla etiketter efter första elementet med id=”content”.
remove_tags_before = None
Ta bort alla etiketter som förekommer före angiven etikett. För formatet att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Till exempel:
remove_tags_before = dict(id='content')
kommer ta bort alla etiketter före första elementet med id=”content”.
requires_version = (0, 6, 0)
Minimum version av calibre som behövs för detta recept
reverse_article_order = False
Omvänd ordning av artiklar i varje flöde
scale_news_images = None
Maximala dimensioner (w, h) att skala bilder till. Om scale_news_images_to_device är Sann så är detta
inställt på enhetens skärmmått för utskriftsprofil om det inte finns någon profil som, i vilket fall det är kvar
på oavsett värde den har tilldelats (standard None).
scale_news_images_to_device = True
Skala om bilder för att passa enhetens skärmmått satta av utdataprofilen. Ignoreras om ingen utdataprofil
är angiven.
simultaneous_downloads = 5
Antal samtidiga nedladdningar. Sätt till 1 om servern är petig. Automatisk reducerat till 1 om attr:BasicNewsRecipe.delay > 0
74 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#Searching%20the%20Parse%20Tree
1.9. Handledning
147
calibre Användarhandbok, Utgåva 2.22.0
summary_length = 500
Maximal antal tecken i den korta beskrivningen
template_css = u’\n .article_date {\n color: gray; font-family: monospace;\n }\n\n .article_description {\n text-indent: 0
CSS som används för att utforma mallar, dvs de navigeringsfält och innehållsförteckningar. I stället för att
överrida denna variabel bör du använda extra_css i receptet för att anpassa utseende och beteende.
timefmt = ‘ [%a, %d %b %Y]’
Formatsträng för datum att visa på första sidan. Som standard: Day_Name, Day_Number Month_Name
Year
timeout = 120.0
Tidsbegränsning för hämta filer från servern i sekunder
title = u’Ok\xe4nd nyhetsk\xe4lla’
Titel att använda för e-bok
use_embedded_content = None
Normalt försöker vi gissa om ett flöde har hela artiklar inbäddade i den baserat på längden av inbäddat innehåll. Om None, sedan standard används gissning. Om True då antar vi alltid flöden har inbäddat innehåll
och om‘ False‘ kan vi alltid utgå från flödet inte har inbäddat innehåll.
use_javascript_to_login = False
Om du sätter detta till Sann, så använder calibre javascript för att logga in på webbplatsen. Detta behövs
för vissa webbplatser som kräver användning av javascript för att logga in. Om du ställer in detta till
Sann måste du implementera javascript_login() (sida 305) metoden, för att göra den faktiska
inloggningen.
1.9.2 Hantera undergrupper av böcker, till exempel “genre”
Vissa människor vill organisera böcker i deras bibliotek i undergrupper, liknande undermappar. Den mest allmänt
givna anledningen är att skapa genrehierarkier, men det finns många andra. En användare begärde ett sätt att organisera läroböcker efter ämne och kursnummer. En annan ville hålla reda på gåvor efter ämne och mottagare. Denna
handledning kommer att använda genren exempel för resten av det här inlägget.
Innan vi går vidare, observera att vi inte talar om mappar på hårddisken. Undergrupper är inte mappar. Böcker kopieras inte någonstans. Calibres bibliotek filstruktur påverkas inte. Istället presenterar vi ett sätt att organisera och visa
undergrupper av böcker inom ett calibre bibliotek.
•
•
•
•
Ställ in (sida 150)
Sökning (sida 152)
Begränsningar (sida 152)
Användbara mallfunktioner (sida 153)
De gemensamt som krav för undergrupper såsom genrer är:
• En undergrupp (t.ex. en genre) ska innehålla (pekare till) böcker, inte kategorier av böcker. Detta är vad som
skiljer undergrupper från calibre användarkategorier.
• En bok kan vara i flera undergrupper (genrer). Detta skiljer grupper från fysiska mappar.
• Undergrupper (genrer) måste bilda en hierarki; undergrupper kan innehålla undergrupper.
Etiketter ger dig de två första. Om du etiketterar en bok med genren kan du använda etikettläsaren (eller sök) för att
hitta de böcker med den genren, vilket ger dig den första. Många böcker kan ha samma etikett(er), vilket ger dig den
andra. Problemet är att etiketter inte uppfyller det tredje kravet. De ger inte en hierarki.
148
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Calibres hierarki funktion ger dig den tredje, förmågan
att se de genrer i ett “träd” och möjligheten att enkelt söka efter böcker i genre eller undergenre. Antag till exempel att
din genrestruktur är ungefär så här:
Genre
. History
.. Japanese
.. Military
.. Roman
. Mysteries
.. English
.. Vampire
. Science Fiction
.. Alternate History
.. Military
.. Space Opera
. Thrillers
.. Crime
.. Horror
etc.
Genom att använda hierarkifunktionen kan du se dessa genrer i etikettläsaren i trädform , som visas på skärmbilden. I detta exempel den yttersta nivån (Genre) är en anpassad kolumn som innehåller genrer. Genrer som innehåller
undergenrer visas med en liten triangel bredvid dem. Genom att klicka på den triangel ska öppna objektet och visa
undergenrer, som ni kan se med Historia och Science Fiction.
Genom att klicka på en genre kan sökning ske efter alla böcker med denna genre eller barn i samma genre. Till
exempel kan klicka på science fiction ge alla tre av de underordnade genrer, alternativ historia, militär och rymdopera.
Genom att klicka på alternativ historia kommer att ge böcker i denna genre, och ignorera de i militär and rymdopera.
Naturligtvis kan en bok ha flera genres. Om en bok har både rymdopera -och militärgenrer, så kommer du se att boken
om du klickar på någon av genrerna. Sökning diskuteras mer i detalj nedan.
En annan sak du kan se från bilden är att genren militä visas två gånger, en gång i historia och en gång i science fiction.
Eftersom genrer är i en hierarki, är dessa två skilda genrer. En bok kan vara i den ena, i den andra, eller (tveksamt
i det här fallet) båda. Till exempel kan böckerna i Winston Churchills “Andra världskriget” vara i “historia.militär”.
1.9. Handledning
149
calibre Användarhandbok, Utgåva 2.22.0
David Webers Honor Harrington böckerna kan vara i “science fiction.militär”, och för den delen även i “science
fiction.rymdopera.”
När en genre finns, det är att genren har minst en bok, kan du enkelt använda den på andra böcker genom att dra böcker
från biblioteket vyn till genren som du vill att böckerna ska ha. Du kan också använda genrer i metadata redaktörer;
mer om detta nedan.
Ställ in
Nu kan din fråga vara " Hur var allt detta upp&quot?; Det finns tre steg: 1) skapa den anpassade kolumnen, 2)
berättar calibre att den nya kolumnen ska behandlas som en hierarki, och 3) lägga till genrer.
Du skapar den anpassade kolumnen på vanligt sätt, med hjälp av Inställningar->Lägg till dina egna kolumner. Det här
exemplet använder “#genre” som uppslagsnamn och “Genre” som kolumnrubriken. Kolumntypen är “kommaseparerad
text, liksom etiketter, som visas i etikett webbläsaren.”
Sedan efter omstart av calibre måste du tala om för calibre att kolumnen ska behandlas som en hierarki. Gå till
Inställningar->Utseende och känsla->Etikettläsare och anger uppslagsnamn “#genre ” i “Kategorier med hierarkiska
objekt” rutan. Tryck på Verkställ och du är klar med att ställa in.
150
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Vid den punkt det inte finns genres i kolumnen. Vi är kvar med det sista steget: hur man tillämpar en genre till en bok.
En genre finns inte i calibre tills det visas på minst en bok. För att lära sig att tillämpa en genre för första gången,
måste vi gå in i detalj om vad en genre ser ut i metadata för en bok.
En hierarki av “saker” är byggd genom att skapa ett objekt som består av fraser åtskilda av punkter. Fortsätt genren exempel dessa poster skulle “historia.militär”, “mysterier. vampyr”, “science fiction.rymdopera”, etc. Alltså för att skapa
en ny genre, väljer du en bok som borde ha den genren, redigera dess metadata och ange den nya genren i kolumnen du
skapat. Fortsätter vårt exempel, om du vill tilldela en ny genre “Comics” med en sub-genre “superhjältar” till en bok,
skulle du “redigera metadata” för det (komiker) bok väljer fliken Anpassad metadata och ange “Comics.superhjältar
“som visas i det följande (ignorera andra anpassade kolumner):
Efter att ha gjort ovanstående, ser du i etikettlläsaren:
1.9. Handledning
151
calibre Användarhandbok, Utgåva 2.22.0
Från och med nu, tillämpa denna nya genre till en bok (en serietidning, förmodligen), kan du antingen dra boken på
genre eller lägga till det i boken med hjälp av redigera metadata på exakt samma sätt som görs ovan.
Sökning
Det enklaste sättet att söka efter genrer använder etikettläsare, klicka på den genre du vill se. Genom att klicka på en
genre med barn kommer att visa dig böcker med denna genre och alla underordnade genrer. Detta kan dock ta upp
en fråga. Bara för att en genre har barn betyder inte att det inte är en genre i sig. Till exempel kan en bok ha genren
“historia”, men inte “historia.militär”. Hur du söka efter böcker med endast “historia”
Etikettläsarens sökmekanism vet om ett objekt har barn. Om den gör det, klicka på posten utförs 5 sökningar i stället
för som normalt tre. Den första är den normala gröna plus, vilket visar böcker med denna genre bara (t.ex. historia).
Den andra är en fördubblad plus (visas ovan), vilket visar böcker med denna genre och alla undergenrer (t.ex. Historia
och historia.militär). Den tredje är den normala röd minus, vilket visar böcker utan att exakt genre. Den fjärde är en
fördubblad minus, vilket visar böcker utan att genre eller undergenrer. Den femte är tillbaka till början, inget märke,
vilket innebär ingen sökning.
Begränsningar
Om du söker efter en genre och sedan skapar en sparad sökning för det, kan du använda “Begränsa till” rutan för
att skapa ett virtuellt bibliotek med böcker med genren. Detta är användbart om du vill göra andra sökningar inom
genren eller hantera / uppdatera metadata för böcker i genren. Fortsätter vårt exempel kan du skapa en sparad sökning
som heter “historia.japansk” genom att först klicka på genre japanska i etikettläsare för att få en sökning i sökrutan,
152
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
in historia.japansk i den sparade sökrutan trycka på “spara sökning “knappen (den gröna rutan med den vita plus, på
höger sida).
När du har skapat den sparade sökning kan du använda den som en begränsning.
Användbara mallfunktioner
Du kanske vill använda genreinformation i en mall, till exempel med spara till disk eller skicka till
enhet. Frågan kan då vara " Hur får jag den yttersta genrenamn eller namn &quot?; En calibremallfunktion, underavdelningar, är nödvändig för att göra detta lättare.
Antag till exempel att du vill lägga till det yttersta genrenivån till spara-till-disk mall för att göra genre
mappar, som i “Historia / The Gathering Storm - Churchill, Winston”. För att göra detta måste du extrahera
den första nivån i hierarkin och lägga till den i fronten tillsammans med ett snedstreck för att ange att den
ska göra en mapp. Mallen nedan åstadkommer detta:
{#genre:subitems(0,1)||/}{title} - {authors}
Se Mallspråket (sida 155) för mer information om mallar och subitems() funktioner.
1.9.3 XPath Handledning
I den här handledning kommer du att få en mjuk introduktion till XPath75 , ett frågespråk som kan användas för att välja
godtyckliga delar av HTML76 dokument i calibre. XPath är en allmänt använd standard, och googling det kommer att
ge en ton av information. Denna handledning, däremot fokuserar på att använda XPath för ebokrelaterade uppgifter
som att hitta kapitelrubriker i ett ostrukturerad HTML-dokument.
75 http://en.wikipedia.org/wiki/XPath
76 http://en.wikipedia.org/wiki/HTML
1.9. Handledning
153
calibre Användarhandbok, Utgåva 2.22.0
Innehåll
•
•
•
•
•
Val baserat på etikettnamn (sida 154)
Väljer baserat på attribut (sida 154)
Väljer baserat på etikettinnehåll (sida 155)
e-boksprov (sida 155)
Inbyggda XPath-funktioner (sida 155)
Val baserat på etikettnamn
Den enklaste formen av val är att välja etikett efter namnet. Anta till exempel att du vill markera alla ‘‘ <h2> ‘‘ etiketter
i ett dokument. XPath-fråga till detta är helt enkelt:
//h:h2
(Selects all <h2> tags)
Prefixet // betyder söka på alla nivåer i dokumentet. Anta nu att du vill söka efter <span> etiketter som är inne <a>
etiketter. Detta kan uppnås med:
//h:a/h:span
(Selects <span> tags inside <a> tags)
Om du vill söka efter etiketter på en viss nivå i dokumentet, ändrar prefixet:
/h:body/h:div/h:p (Selects <p> tags that are children of <div> tags that are
children of the <body> tag)
Detta kommer bara passa <p>En mycket kort e-bok för att demonstrera användningen av
XPath.</p> i e-boksprov (sida 155) men inte någon annan av de andra <p> etiketterna. h: prefix i ovan exempel behövs för att passa XHTML etiketter. Detta för att internt, calibre representerar allt innehåll som XHTML. I
XHTML etiketter finns en namnrymd, och h: är namnrymdsprefix för HTML etiketter.
Anta nu att du vill välja både <h1> och <h2> etiketter. För att göra det behöver vi en XPath konstruktion som kallas
predikat. En : dfn: ‘predikat’ är helt enkelt ett test som används för att välja etiketter. Tester kan vara godtyckligt
kraftfullt och som denna handledning fortskrider, kommer du att se mer kraftfulla exempel. Ett predikat skapas genom
att innesluta test uttryck inom hakparenteser:
//*[name()='h1' or name()='h2']
Det finns flera nya funktioner i detta XPath-uttryck. Den första är användningen av tecknet *. Det betyder passar alla
etiketter. Titta nu på prov uttrycket namn()="h1"eller namn()= ’h2’. : term: namn() är ett exempel på en
inbyggd funktion. Den utvärderar endast namnet på etiketten. Så genom att använda det, kan vi välja etiketter vars
namn är antingen h1 eller h2. Notera att: termen: ‘name()’-funktionen ignoreras namnrymden, så att det inte finns
något behov av att h prefix. XPath har flera användbara inbyggda funktioner. Några fler kommer att införas i den här
guiden.
Väljer baserat på attribut
För att välja etiketter baserat på deras attribut, användning av predikat krävs:
//*[@style]
(Select all tags that have a style attribute)
//*[@class="chapter"]
(Select all tags that have class="chapter")
//h:h1[@class="bookTitle"] (Select all h1 tags that have class="bookTitle")
Här hänvisar @ operatören attributen för etiketten. Du kan använda en del av de XPath inbyggda funktioner _ att utföra
mer avancerad ihoppassningar på attributvärden.
154
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Väljer baserat på etikettinnehåll
Med hjälp av XPath kan du även välja etiketter som baseras på text de innehåller. Det bästa sättet att göra detta är att
använda kraften i reguljära uttryck via den inbyggda funktionen: term:re: test():
//h:h2[re:test(., 'chapter|section', 'i')] (Selects <h2> tags that contain the words chapter or
section)
Här hänvisar . operatör till innehållet i etiketten, precis som @ operatör avser dess attribut.
e-boksprov
<html>
<head>
<title>A very short ebook</title>
<meta name="charset" value="utf-8" />
</head>
<body>
<h1 class="bookTitle">A very short ebook</h1>
<p style="text-align:right">Written by Kovid Goyal</p>
<div class="introduction">
<p>A very short ebook to demonstrate the use of XPath.</p>
</div>
<h2 class="chapter">Chapter One</h2>
<p>This is a truly fascinating chapter.</p>
<h2 class="chapter">Chapter Two</h2>
<p>A worthy continuation of a fine tradition.</p>
</body>
</html>
Inbyggda XPath-funktioner
name() Namnet av nuvarande etikett.
contains() contains(s1, s2) returnerar sann om s1 innehåller s2.
re:test() re:test(src, pattern, flags) returnerar sant om strängen src passar med det reguljära ut- trycket mönster. En särskilt användbar flaggan är i, det gör ihoppassningen teckenokänslig. En bra grund på syntaxen
för reguljära uttryck finns på regexp syntax77
1.9.4 calibre språkmall
calibres mallspråket används på olika ställen. Den används för att styra mappstruktur och filnamn när du sparar filer från calibre-biblioteket till disk eller e-bokläsare. Det används också för att definiera “virtuella” kolumner som
innehåller data från andra kolumner och så vidare.
Den grundläggande mallspråket är mycket enkelt, men har mycket kraftfulla avancerade funktioner. Grundtanken är
att en mall består av text och namnen i klammer som sedan ersätts av motsvarande metadata från boken som bearbetas.
Så, till exempel, är standardmallen som används för att spara böcker till enheten i calibre:
{author_sort}/{title}/{title} - {authors}
77 https://docs.python.org/2.7/library/re.html
1.9. Handledning
155
calibre Användarhandbok, Utgåva 2.22.0
För boken “The Foundation” av “Isaac Asimov” kommer det bli:
Asimov, Isaac/The Foundation/The Foundation - Isaac Asimov
Snedstrecken är texter, vilka sätts in i mallen var de dyker upp. Till exempel, om den mall är:
{author_sort} Some Important Text {title}/{title} - {authors}
För boken “The Foundation” av “Isaac Asimov” kommer det bli:
Asimov, Isaac Some Important Text The Foundation/The Foundation - Isaac Asimov
Du kan använda alla de olika metadatafält som finns i calibre i en mall, inklusive eventuella anpassade kolumner du har
skapat själv. För att ta reda på mallnamnet för en kolumn håll bara musen över kolumnrubriken. Namn för anpassade
fält (kolumner du har skapat själv) har alltid en # som första tecken. För egna fält av serietyp , det finns alltid ett extra
fält som heter #seriesname_index som blir serieindex för den serien. Så om du har ett eget seriefält som heter
#myseries, kommer det också att finnas ett fält som heter #myseries_index.
Förutom de kolumnbaserade fälten, kan du också använda:
{formats} - A list of formats available in the calibre library for a book
{identifiers:select(isbn)} - The ISBN number of the book
Om en viss bok inte har en särskild bit av metadata, är det område som automatiskt avlägsnas i mallen för att boken.
Tänk till exempel:
{author_sort}/{series}/{title} {series_index}
Om en bok har en serie, kommer mallen att producera:
Asimov, Isaac/Foundation/Second Foundation 3
och om en bok inte har en serie:
Asimov, Isaac/Second Foundation
(calibre tar automatiskt flera snedstreck och inledande eller avslutande blanksteg).
Advancerad formatering
Du kan göra mer än bara enkel substitution med mallarna. Du kan också villkora inkludera text och styra hur den
substituerade data formateras.
Först, villkorad inkluderad text. Det finns fall där du kanske vill ha text som visas i utdata endast om ett fältet inte är
tomt. Ett vanligt fall är series och series_index, var du vill antingen ingenting eller de två värdena med ett
bindestreck mellan dem. Calibre hanterar det här fallet med hjälp av en specialfältsyntax.
Anta till exempel att du vill använda mallen:
{series} - {series_index} - {title}
Om boken inte har någon serie, kommer svaret att vara - - title. Många människor skulle hellre vilja att resultatet blir helt enkelt title, utan bindestreck. För att göra detta, använd den utökade syntaxen
‘{field:|prefix_text|suffix_text}. När du använder den här syntaxen, om fältet har värdet SERIES
kommer resultatet då att bli prefix_textSERIESsuffix_text. Om fältet inte har något värde, då kommer
resultatet att vara den tomma strängen (ingenting); prefixet och suffixet ignoreras. Prefixet och suffixet kan innehålla
blanksteg. Använd inte subtemplates(‘{...}‘) eller funktioner (se nedan) som prefix eller suffix.
Med hjälp av denna syntax, kan vi lösa ovanstående serien problem med mallen:
156
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
{series}{series_index:| - | - }{title}
De bindestreck inkluderas endast om boken har ett serieindex, vilket den kommer att få endast om den har en serie.
Observera: Du måste inkludera: tecken om du vill använda ett prefix eller ett suffix. Du måste antingen använda några
| tecken eller båda; med hjälp av någon, som i {field:| -}, är inte tillåtet. Det är OK att inte ge någon text för den
ena eller den andra, såsom i {serien:|| -}. Använda {title: ||} är detsamma som att använda {title}.
Andra: formatering. Anta att du vill se till att series_index alltid är formaterad som tre siffror med inledande nollor.
Detta bör göra susen:
{series_index:0>3s} - Three digits with leading zeros
Om istället för inledande noll vill ha inledande mellanslag, använd:
{series_index:>3s} - Three digits with leading spaces
För efterföljande nollor, använd:
{series_index:0<3s} - Three digits with trailing zeros
Om du använder indexserien med undervärden (t.ex. 1.1), kanske du vill se till att decimaler kommer i följd. Till
exempel kanske du vill att index 1 och 2,5 framstå som 01.00 och 02.50, så att de kommer att sorteras rätt. För att göra
detta använd:
{series_index:0>5.2f} - Five characters, consisting of two digits with leading zeros, a decimal point
Om du vill bara ha de två första bokstäverna i uppgifterna, använd:
{author_sort:.2} - Only the first two letter of the author sort name
calibres mallspråk kommer från python och för mer information om syntaxen för dessa avancerade formaterings operationer, titta på Python dokumentation78 .
Avancerade funktioner
Använd mallar i anpassade kolumner
Ibland finns det fall där man vill visa metadata som calibre normalt inte visar, eller för att visa data på ett sätt som
skiljer sig från hur calibre gör normalt. Till exempel kanske du vill visa ISBN, ett fält som calibre inte visar. Du kan
använda anpassade kolumner för detta genom att skapa en kolumn med typen “Kolumn byggs från andra kolumner”
(nedan kallade sammansatta kolumner), och går in i en mall. Resultat: calibre kommer att visa en kolumn som visar
resultatet av utvärderingen av den mallen. För att visa ISBN skapa kolumnen och skriv ‘‘ {identifierare: välj (isbn)}
‘‘ in i mallrutan. För att visa en kolumn som innehåller värdena för två serier anpassade kolumner separerade med ett
kommatecken, använd {#series1:||,}{#series2}.
Sammansatta kolumner kan använda godtyckligt mallalternativ, även formatering.
Du kan inte ändra uppgifterna i en sammansatt kolumn. Om du redigerar en sammansatt kolumn genom att dubbelklicka på ett objekt, kommer du öppna mallen för redigering, inte de underliggande data. Redigera mallen på gränssnittet
är ett snabbt sätt att testa och ändra sammansatta kolumner.
Använda funktioner i mallar - enkelfunktionsläge
Anta att du vill visa värdet på ett fält i versaler, då detta område är normalt i rubrikformat. Du kan göra detta (och
många fler saker) med hjälp av de funktioner som finns för mallar. Till exempel, för att visa titeln med versaler, använd
78 https://docs.python.org/2/library/string.html#format-string-syntax
1.9. Handledning
157
calibre Användarhandbok, Utgåva 2.22.0
{title:uppercase()}. För att via det i rubrikformat använd {title:titlecase()}.
Funktionsreferenser återfinns i den del format, som går efter : och för första | eller avslutande }. Om du har både
ett format och en funktionsreferens, kommer funktionen efter den andra :. Funktioner måste alltid avslutas med ().
Några funktioner använder extra värden (argument) och dessa ska finnas i ().
Funktioner alltid tillämpas innan formatspecifikationer. Se längre ner för ett exempel på att använda både ett format
och en funktion, där denna ordning demonstreras.
Syntax
för
att
använda
funktioner
är
{field:function(arguments)},
eller
{field:function(arguments)|prefix|suffix}. Arguments are separated by commas. Commas
inside arguments must be preceeded by a backslash ( ‘\’ ). The last (or only) argument cannot contain a closing
parenthesis ( ‘)’ ). Functions return the value of the field used in the template, suitably modified.
Important: If you have programming experience, please note that the syntax in this mode (single function) is not
what you might expect. Strings are not quoted. Spaces are significant. All arguments must be constants; there is no
sub-evaluation. Do not use subtemplates (‘{ ... }‘) as function arguments. Instead, use template program mode
(sida 160) and general program mode (sida 181).
Många funktioner använder reguljära uttryck. I samtliga fall är passning med reguljära uttryck skiftlägeskänsliga.
De funktioner som finns är listade nedan. Observera att den slutgiltiga dokumentationen för funktioner finns i avsnitt
Funktionsklassificering (sida 166):
• lowercase() – returnerar värde av fältet som gemener.
• uppercase() – returnerar värde av fältet som versaler.
• titlecase() – returnerar värde av fältet som rubrikformat.
• capitalize() – returnerar värde av fältet med första bokstav versal och övriga gemener.
• contains(pattern, text if match, text if not match) – kollar om fältet innehåller träffar
för det reguljära uttrycket pattern. Returnerar text vid träff om träff hittas annars returneras‘ text om ingen träff‘.
• count(separator) – tolkar värde som en lista med objekt åtskilda med separator, returnerar antalet objekt i
listan. De flesta listor använder kommatecken som skiljetecken, men författarna använder ett et-tecken. Exempel:
{tags:count(,)}, {authors:count(&)}
• format_number(template) – tolkar värdet som ett tal och formatera det numret med hjälp av en python
formateringsmall som “{0:5.2f}” eller “{0:,d}” eller “${0:5,.2f}”. FIELD_NAME del av mallen måste vara en 0
(noll) (den “{0:” i ovanstående exempel). Se mallspråk och python-dokumentation för fler exempel. Returnerar
tom sträng om formatering misslyckas.
• human_readable() – förväntar sig att värdet är ett nummer och returnerar en sträng som representerar det
numret i kB, MB, GB, etc.
• ifempty(text) – Om fältet inte är tomt, returnera värdet av fältet. annars returnera text.
• in_list(separator, pattern, found_val, not_found_val) – tolkar fältet som en lista med
objekt åtskilda med separator, jämför pattern mot varje värde i listan. Om mönstret passar ett värde, returneras
found_val, annars returneras‘ not_found_val‘.
• ‘‘language_codes (lang_strings) ‘‘ - returnera språkkoder för strängar passerade i lang_strings. Strängarna ska
vara på samma språk som den aktuella platsen. Lang_strings är en kommaseparerad lista.
• ‘‘language_strings (lang_codes, lokalisera) ‘‘ - returnerar strängarna för de koder språk passerade i lang_codes.
Om localize är noll, returnerar strängarna på engelska. Om lokalisera inte är noll, returnerar strängarna på språket
på den aktuella platsen. Lang_codes är en kommaseparerad lista.
• list_item(index, separator) – tolkar fältet som en lista med objekt åtskilda med separator, returnerar‘ index‘ objektet. Den första elementet är siffran noll. Den sista punkten kan returneras med list_item (-1,
158
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
separator). Om elementet inte finns i listan, då returneras det tomma värdet. Separatorn har samma betydelse
som i count funktionen.
• lookup(pattern, field, pattern, field, ..., else_field) – som switch-funktionen,
förutom att argumenten är fältet (metadata) namn, inte text. Värdet på lämpligt fält att hämtas och används.
Observera att eftersom sammansatta kolumnerna är fält, kan du använda den här funktionen i en sammansatt fält
för att använda värdet av något annat sammansatt fält. Detta är mycket användbart när man konstruerar variabel
spara sökvägar (mer senare).
• re(pattern, replacement) – returnerar fältet efter applicering av reguljära uttryck. Alla förekomster
av pattern ersätts med replacement. Som i alla calibre, är dessa python-kompatibla reguljära uttryck.
• select(key) – tolkar fält som en kommaseparerad lista med objekten är av formen “id:värde”. Hitta det
par med id lika med nyckel, och returnera motsvarande värde. Den här funktionen är särskilt användbar för att
extrahera ett värde såsom ett isbn från uppsättningen av identifierare för en bok.
• shorten(left chars, middle text, right chars) – Returnerar en förkortad version av fältet,
som består av vänster chars tecken från början av fältet, följt av mellan text, följt av höger chars tecken från
slutet av strängen. Vänster chars och höger chars måste vara heltal. Antag till exempel titeln på boken är Ancient
English Lagar i Times of Ivanhoe, och du vill att den ska passa in i ett utrymme av högst 15 tecken. Om
du använder {title:shorten(9, -, 5)}, kommer resultatet att bli Ancient E-nhoe. Om fältets längd
är mindre än vänster chars + höger chars + längden på mellan text, då området kommer att
användas intakt. Till exempel, den i rubriken ‘Domen‘ skulle inte ändras..
• str_in_list(val, separator, string, found_val, not_found_val) – behandla val som
en lista med objekt åtskilda av separator, jämför strängen mot varje värde i listan. Om strängen passar ett värde,
returneras found_val, annars returneras not_found_val. Om strängen innehåller separatorer, då behandlas det
också som en lista och varje värde kontrolleras.
• subitems(val, start_index, end_index) – Denna funktion används för att bryta isär listor över
etikettlika hierarkiska poster såsom genrer. Det tolkar värde som en kommaseparerad lista med etikettliknande
objekt, där varje objekt är en period separerad lista. Ger en ny lista görs genom att först hitta alla period separerad
etikett liknande föremål, därefter för varje sådan post extrahera komponenterna från start_index till‘ end_index‘,
sedan kombinera resultaten tillbaka tillsammans. Den första komponenten i en period separerad lista har ett
index på noll. Om ett index är negativ, så det räknas från slutet av listan. Som ett specialfall är en END_INDEX
av noll antas vara längden av listan. Exempel:
Assuming a #genre column containing "A.B.C":
{#genre:subitems(0,1)} returns "A"
{#genre:subitems(0,2)} returns "A.B"
{#genre:subitems(1,0)} returns "B.C"
Assuming a #genre column containing "A.B.C, D.E":
{#genre:subitems(0,1)} returns "A, D"
{#genre:subitems(0,2)} returns "A.B, D.E"
• sublist(val, start_index, end_index, separator) – tolkar värde som en lista med objekt
åtskilda med separator, återvänder en ny lista gjord av objekten från start_index‘till ‘end_index. Den första
punkten är siffran noll. Om ett index är negativ, så det räknas från slutet av listan. Som ett specialfall är en
END_INDEX av noll antas vara längden av listan. Exempel om man antar att etikettkolumnen (som är kommaseparerade) innehåller “A, B ,C”:
{tags:sublist(0,1,\,)} returns "A"
{tags:sublist(-1,0,\,)} returns "C"
{tags:sublist(0,-1,\,)} returns "A, B"
• swap_around_comma(val) ‘‘ -- ges ett värde av formen ‘‘B, A, returneras AB. Detta
är mest användbart för att konvertera namnen i LN, FN-format till FN LN. Om det inte finns någon kommatecken
returneras funktionen val oförändrad.
1.9. Handledning
159
calibre Användarhandbok, Utgåva 2.22.0
• switch(pattern, value, pattern, value, ..., else_value) – för varje pattern,
value par, kontrollerar om fältet passar det reguljära uttrycket pattern och i så fall returnerar att value.
Om inget pattern passar, då returneras else_value. Du kan ha så många pattern, value par som du
vill.
• test(text if not empty, text if empty) – returnerar text om inte empty om fältet inte är tomt,
annars returneras text om empty.
• transliterate() – Returnerar en sträng i ett latinskt alfabet som bildas genom en tillnärmning av ljudet av
orden i källfältet. Till exempel, om källområdet är‘Фёдор Михaйлович Достоевский‘‘ returnerar funktionen
Fiodor Mikhailovich Dostoievskii.’
Nu, hur är det med funktioner och formatering inom samma område. Anta att du har en heltalsanpassad kolumn kallad
#myint som du vill se med ledande nollor, som i 003. För att göra detta, skulle du använda ett format på 0>3s.
Men som standard, om ett nummer (heltal eller flyttal) är lika med noll då producerar fältet tomt värde, så nollvärden
kommer att producera någonting, inte 000. Om du verkligen vill se 000 värden, då använder du både formatsträngen
och ifempty funktionen för att ändra det tomma värdet till noll. Fältreferens vore:
{#myint:0>3s:ifempty(0)}
bservera att du kan använda prefix och suffix också. Om du vill att numret ska visas som [003] eller [000], använd
då fältet:
{#myint:0>3s:ifempty(0)|[|]}
Använda funktioner i mallar - mallprogramläge
Mallens språk för programläge skiljer sig från enkelfunktionsläge genom att den tillåter dig att skriva malluttryck som
refererar till andra metadatafält, ändra värden och utföra aritmetik. Det är en ganska komplett programmeringsspråk.
Du kan använda de funktioner som dokumenterats ovan i mallprogramsläge. Se nedan för mer information.
Från och med ett exempel, anta att du vill att din mall visar serien för en bok om den har en, annars visar värdet av
ett anpassat fält #genre. Du kan inte göra det i den grundläggande språket eftersom du inte kan hänvisa till en annan
metadatafält i ett malluttryck. I programläget kan du. Följande uttryck fungerar:
{#series:'ifempty($, field('#genre'))'}
Exemplet visar flera saker:
• programläge används om uttrycket börjar med :’ och slutar med ’. Något annat antas vara enkelfunktion.
• variabeln $ står för fältet uttrycket fungerar på, #series i detta fall.
• funktioner måste få alla deras argument. Det finns inget standardvärde. Till exempel måste de inbyggda standard funktioner ges en extra initial parameter som indikerar källområdet, vilket är en avsevärd skillnad från
enkelfunktionsläge.
• blanktecken ignoreras och kan användas var som helst i uttrycket.
• konstanta strängar är inneslutna i passande citat, antingen ’ eller ‘‘“‘ ‘.
Språket liknar funktionella språk genom att det är byggt nästan helt från funktioner. En förklaring är en funktion.
Ett uttryck är en funktion. Konstanter och kännetecken kan ses som funktioner som returnerar värdet indikeras av
konstanten eller lagrad i identifieraren.
Syntaxen för språket visas med följande grammatik:
constant
::= " string " | ' string ' | number
identifier ::= sequence of letters or ``_`` characters
function
::= identifier ( statement [ , statement ]* )
160
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
expression
assignment
statement
program
::=
::=
::=
::=
identifier | constant | function | assignment
identifier '=' expression
expression [ ; expression ]*
statement
Kommentarer är rader med ett “#” tecknet i början av raden.
Ett uttryck har alltid ett värde, antingen värdet på konstanten, det värde som finns i identifierare, eller det värde
som returneras av en funktion. Värdet av ett ‘’påstående‘‘ är värdet av det sista uttrycket i sekvensen av påståendet.
Som sådan, värdet av programmet (påstående):
1; 2; 'foobar'; 3
är 3.
Ett annat exempel på ett komplext men ganska dumt program kan bidra till att göra saker och ting tydligare:
{series_index:'
substr(
strcat($, '->',
cmp(divide($, 2), 1,
assign(c, 1); substr('lt123', c, 0),
'eq', 'gt')),
0, 6)
'| prefix | suffix}
Detta program gör följande:
• ange att det område som betraktas på är series_index. Detta ställer in värdet på variabeln ‘‘$ ‘‘.
• anrop av substr funktionen, som tar 3 parametrar (str, start, slut) ‘‘. Den returnerar
en sträng som bildas genom att extrahera start genom sluttecken från
strängen, nollbaserad (det första tecknet är tecknet noll). I detta fall
strängen kommer att beräknas av ‘‘strcat funktionen, är början 0, och slutet är 6. I detta fall
den ger de 6 första tecknen i strängen som returneras av strcat, vilket måste utvärderas innan substr kan
återvända.
• anropar strcat (strängsammanfogning) funktionen. Strcat accepterar 1 eller flera argument, och returnerar en
sträng som bildas genom att sammanfoga alla värden. I detta fall finns det tre argument. Den första parametern
är värdet i $, vilket här är värdet på series_index. Den andra parametern är en konstantsträng ‘‘ ‘->’
. Den tredje parametern är värdet som returneras av ‘‘cmp funktionen, som ska vara
fullt utvärderad innan strcat kan returnera.
• ‘ cmp‘‘ funktionen tar 5 argument (x, y, lt, eq, gt). Den jämför x och y och returnerar det tredje
argumentet lt om x<y, den fjärde argumentet eq om x == y, och den femte argumentet gt om x>y. Som
med alla funktioner kan alla parametrar vara påstående. I detta fall är den första parametern (värdet för x) är
resultatet av att dividera series_index med 2. Den andra parametern y är konstant ‘‘ 1‘‘. Den tredje parametern
lt är ett påstående (mer senare). Den fjärde parametern eq är konstantsträngen ’eq’.. Den femte parametern
är konstant sträng ’gt’.
• Den tredje parametern (en för lt) är ett påstående, eller en sekvens av uttryck. Tänk på att ett påstående (en
sekvens av semikolonseparerade uttryck) är också ett uttryck, returnerar värdet för det sista uttrycket i listan.
I detta fall tilldelar programmet först värdet 1 till en lokal variabel c returnerar sedan en delsträng genom att
extrahera c’th karaktär till slutet. Sedan c innehåller alltid konstant 1, delsträngen kommer den andra returnera
genom end’th tecknet, eller ’t123’.
• När påståendet som ger värdet till den tredje parametern utförs, cmp kan ett värde returneras. Vid den tidpunkten,
kan strcat‘ returnera ett värde, då ‘‘substr kan returnera ett värde. Programmet avslutas
därefter.
1.9. Handledning
161
calibre Användarhandbok, Utgåva 2.22.0
Vid olika värden för series_index returnerar programmet:
• series_index == odefinerad, result = prefix ->t123 suffix
• series_index == 0.5, result = prefix 0.50-> suffix
• series_index == 1, result = prefix 1->t12 suffix
• series_index == 2, result = prefix 2->eq suffix
• series_index == 3, result = prefix 3->gt suffix
Alla funktioner som listas under enkelfunktionsläge kan användas i programläge. För att göra det måste du ange
det värde som funktionen ska verka på som första parameter, utöver de parametrar som dokumenterats ovan. Till exempel i programläge är parametrarna i test funktionen test(x, text_if_not_empty, text_if_empty).
x parametern, vilket är det värde som ska testas, kommer nästan alltid att vara en variabel eller ett funktionsanrop, ofta
field().
Följande funktioner finns tillgängliga utöver de som beskrivs i enkelfunktionsläge. Minns från exemplet ovan att
enkelfunktionsläges funktionerna kräver att ytterligare första parameter anges för vilket område som ska användas.
Med undantag för id parametertilldelning, kan alla parametrar vara satser (sekvenser av uttryck). Observera att den
slutgiltiga dokumentationen för funktioner finns i avsnittet Funktionsklassificering (sida 166):
• and(value, value, ...) – returnerar strängen “1” om alla värdena är inte tomma, annars
returneras en tom sträng. Den här funktionen fungerar bra med testet eller first_non_empty. Du kan
ha så många värden som du önskar.
• add(x, y) – returnerar x + y. Ger ett undantag om någon av x eller y inte är tal.
• assign(id, val) – tilldelar val till id, returnerar sedan val. id måste vara en identifierare, inte
ett uttryck
• approximate_formats() – returnerar en kommaseparerad lista med format som vid ett tillfälle var förknippade
– author_links(val_separator, pair_separator)
–
returnerar
en
sträng som innehåller en lista över författare och att författarens länkvärden i form
author1 val_separator author1link pair_separator author2
val_separator author2link etc. En författare är separerad från dess länk värde
av val_separator sträng utan tillsatta mellanslag. author:linkvalue paren skiljs
åt av pair_separator strängargument utan tillsatta platser. Det är upp till dig att välja
skiljesträngar som inte förekommer i författarnamn eller länkar. En författare ingår, även
om författaren länken är tom.
– author_sorts(val_separator) – returnerar en sträng med en lista över författarens sorteringsvärden för författarna till boken. Sorteringen är författarens metadata (som
skiljer sig från den author_sort i böcker). Den returnerade listan har formen författaren sortera 1 val_separator författare sort 2 etc. Författaren sortera värdena i denna lista är i samma ordning som författarna till boken. Om du vill ha mellanslag runt
val_separator så inkludera dem i separatorsträngen
• booksize() – returnerar värdet för den calibres ‘storleks’ fält. Returnerar ‘’ om det inte finns
några format.
• cmp(x, y, lt, eq, gt) – jämför x och y efter konvertering både siffror. Returnerar lt om
x < y. Returnerar eq om x == y. Annars returnerar gt.
• current_library_name() -- ‘‘ returnerar efternamnet på sökvägen
till den nuvarande calibre-biblioteket. Denna funktion kan anropas
i mallprogramläge med mallen ‘‘{:’current_library_name()’}.
162
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• current_library_path() -- ‘‘ returnerar sökvägen till den aktuella
calibre-biblioteket. Denna funktion kan anropas i mallprogramläge
med mallen ‘‘{:’current_library_path()’}..
• days_between(date1, date2) – returnera antalet dagar mellan date1 och date2. Numret
är positivt om date1 är större än date2, annars negativt. Om någon date1 eller date2 inte
datum, returnerar funktionen en tom sträng.
• divide(x, y) – returnerar x / y. Ger ett undantag om någon x eller y inte är tal.
• eval(string) – utvärderar strängen som ett program, som skickar de lokala variabler (de
assign ade till). Detta gör det möjligt att använda mallprocessorn för att konstruera komplexa
resultat från lokala variabler. Eftersom { och } tecken är speciella, måste du använda [[ för { tecken och ]] ‘för’} ‘tecken; de omvandlas automatiskt. Observera också att prefix och suffix (det så
kallade | prefixet | suffix syntax) inte kan användas i argumentet till funktionen när du använder
mallprogramläge.
• field(name) – returnerar metatdatafältet med namn name.
• first_matching_cmp(val, cmp1, result1, cmp2, r2, ..., else_result)
– jämför “val < cmpN” i sekvens, returnerar resultN för första jämförelsen som lyckas. Returnerar
else_result om ingen jämförelse lyckas. Till exempel:
``first_matching_cmp(10,5,"small",10,"middle",15,"large","giant")``
returns “large”. Samma exempel med ett första värde på 16 returer av “giant”. *
first_non_empty(value, value, ...) – returnerar det första värdet som inte är tom.
Om alla värden är tomma, då den tomma värdet returneras. Du kan ha så många värden som du önskar.
* format_date(x, date_format) – format_date(val, format_string) – formaterar värdet, som
måste vara ett datumfält, med hjälp av format_string, returnera en sträng. Formateringskoderna är:
d
dd
ddd
dddd
M
MM
MMM
MMMM
yy
yyyy
h
hh
m
mm
s
ss
ap
AP
iso
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
the
the
the
the
the
the
the
the
the
the
the
the
the
the
the
the
use
use
the
day as number without a leading zero (1 to 31)
day as number with a leading zero (01 to 31)
abbreviated localized day name (e.g. "Mon" to "Sun").
long localized day name (e.g. "Monday" to "Sunday").
month as number without a leading zero (1 to 12).
month as number with a leading zero (01 to 12)
abbreviated localized month name (e.g. "Jan" to "Dec").
long localized month name (e.g. "January" to "December").
year as two digit number (00 to 99).
year as four digit number.
hours without a leading 0 (0 to 11 or 0 to 23, depending on am/pm)
hours with a leading 0 (00 to 11 or 00 to 23, depending on am/pm)
minutes without a leading 0 (0 to 59)
minutes with a leading 0 (00 to 59)
seconds without a leading 0 (0 to 59)
seconds with a leading 0 (00 to 59)
a 12-hour clock instead of a 24-hour clock, with 'ap' replaced by the localized strin
a 12-hour clock instead of a 24-hour clock, with 'AP' replaced by the localized strin
date with time and timezone. Must be the only format present.
Du kan få oväntade resultat om det datum du formaterar innehåller lokaliserade månadsnamn, vilket kan
hända om du ändrade formatjusteringar att innehålla MMMM. I detta fall, istället för att använda något i
stil med ‘‘ {pubDate: format_date (åååå)} ‘‘, skriv mallen med mallprogramläge som i ‘‘ {: “format_date
(raw_field (” pubDate ”),” yyyy ”)” } ‘‘.
• finish_formatting(val, fmt, prefix, suffix) – tillämpa format, prefix och suffix till ett värde på samma
sätt som görs i en mall som {series_index:05.2f| - |- }. Denna funktion finns för att
underlätta omvandlingen av komplexa enkelfunktions- eller mallprogrammods mallar till allmänna
1.9. Handledning
163
calibre Användarhandbok, Utgåva 2.22.0
programläge (sida 181) (se nedan) för att dra nytta av GPM-mallskompilering. Till exempel ger
följande program på samma utdata som ovanstående mall:
program: finish_formatting(field("series_index"), "05.2f", " - ", " - ")
Ytterligare exempel: för mallen {series:re(([^\s])[^\s]+(\s|$),\1)}{series_index:0>2s|
- | - }{title} använd:
program:
strcat(
re(field('series'), '([^\s])[^\s]+(\s|$)', '\1'),
finish_formatting(field('series_index'), '0>2s', ' - ', ' - '),
field('title')
)
• formats_modtimes(date_format) – returnerar en kommaseparerad lista med colon_separated objekt som representerar modifieringstider för formaten i en bok. Den date_format
parametern anger hur datumet ska formateras. Se date_format funktionen för detaljer. Du kan använda funktionen för val för att få modifieringstider för ett visst format. Observera att formatnamn
är alltid versaler, som i EPUB.
• formats_paths() – returnerar en kommaseparerad lista med colon_separated objekt som representerar fullständig sökväg till format i en bok. Du kan använda select-funktionen för att få sökvägen
för ett visst format. Observera att formatnamn är alltid versaler, som i EPUB.
• formats_sizes() – returnerar en kommaseparerad lista med colon_separated poster som representerar storlekar i oktetter av formaten i en bok. Du kan använda select-funktionen för att få
storleken för ett visst format. Observera att formatnamn är alltid versaler, som i EPUB.
• has_cover() – returnerar Yes om boken har ett omslag annars returneras tomma strängen
• not(value) – returnerar strängen “1” om value är tom, annars returneras tomma strängen. Denna
funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du önskar.
• list_difference(list1, list2, separator) – returnerar en lista gjord genom att ta
bort från list1 alla poster som finns i list2, med hjälp av en skiftlägeskänslig jämförelse. Posterna i
list1 och list2 separeras av separator, som är posterna i den returnerade listan.
• list_equals(list1, sep1, list2, sep2, yes_val, no_val) – returnerar
yes_val om list1 och list2 innehåller samma poster, annars returneras no_val. Posterna bestäms
genom att dela upp varje lista med hjälp av lämplig avgränsningstecken (sep1 eller sep2). Ordningen
på posterna i listorna är inte relevant. Jämförelsen är skiftlägesomkänslig.
• list_intersection(list1, list2, separator) – returnerar en lista gjord genom att
ta bort från list1 någon post som inte finns i list2, med hjälp av en skiftlägeskänsliga jämförelse.
Posterna i list1 och list2 separeras av separator, som är poster i den returnerade listan.
• list_re(src_list, separator, include_re, opt_replace) – Konstruera en lista genom att först separera src_list in poster med separator tecken. För varje post i listan, kolla om
det passar include_re. Om den gör det, så lägga till den i listan som ska returneras. Om opt_replace
inte är den tomma strängen, så tillämpa bytet innan du lägger till posten till den returnerade listan.
• list_re_group(src_list, separator, include_re, search_re,
template_for_group_1, for_group_2, ...) – Liksom list_re utom ersättare inte är valbar. Den använder re_group (item, search_re, mall ...) när man gör ersättning.
• list_sort(list, direction, separator) – returerar lista sorterad med hjälp av en
skiftlägeskänslig sortering. Om direction är noll, är listan sorteras stigande, annars fallande. Listposter är separerade med separator, likasom de poster i den returnerade listan.
164
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• list_union(list1, list2, separator) – returnerar en lista gjord genom att slå samman poster i lista1 och lista2, ta bort dubbletter med hjälp av en skiftlägesokänslig jämförelse. Om
poster skiljer sig i skiftläge, är det i lista1 används. Posterna i lista1 och lista2 separeras av separator,
likasom de poster i den returnerade listan.
• multiply(x, y) – returnerar x * y. Ger ett undantag om någon x eller y inte är tal.
• ondevice() – returnerar strängen “Yes” om ondevice ställs in, annars returneras den tomma
strängen
• or(value, value, ...) – returnerar strängen “1”, om något värde inte är tomt, annars returneras den tomma strängen. Den här funktionen fungerar bra med test eller first_non_empty. Du kan
ha så många värden som du önskar.
• print(a, b, ...) – skriver ut argument till standard ut. Såvida du börjar calibre från kommandoraden (‘‘ calibre-debug -g‘‘), kommer utdata att gå till ett svart hål.
• raw_field(name) – returnerar metadatafält med namnet med ‘name’ utan att tillämpa någon formatering.
– raw_list(name, separator) – returnerar listan metadata med namnet name utan
att tillämpa någon formatering eller sortering och med poster åtskilda av separator.
• re_group(val, pattern, template_for_group_1, for_group_2, ...) – returnerar en sträng med användande av reqular uttrycksmönstret för val och ersätter varje passande
instans med strängen beräknad genom att ersätta varje passande grupp med värdet som returneras
av motsvarande mall. Det ursprungliga passande värdet för gruppen finns som $. I mallprogramläge, som till mallen och de eval funktioner använder du [[för {och]] för}. Följande exempel på
mallprogramläge letar efter serie med mer än ett ord och sätter det första ordet till versaler:
{series:'re_group($, "(\S* )(.*)", "[[$:uppercase()]]", "[[$]]")'}
• series_sort() – returnerar seriens sorterade värden.
• strcat(a, b, ...) – kan ta valfritt antal argument. Returnerar en sträng som bildas genom
att sammanfoga alla argumenten.
• strcat_max(max, string1, prefix2, string2, ...) – Returnerar en sträng som
bildas genom att sammanlänka argumenten. Det returnerade värdet initieras till string1. Prefix, string
par som läggs till i slutet av värde så länge den resulterande strängens längd är mindre än max.
String1 returneras även om string1 är längre än max. Du kan skicka så många prefix, string par som
du vill.
• strcmp(x, y, lt, eq, gt) – gör en skiftlägesokänslig jämförelse x och y som strängar.
Returnerar lt om x <y. Retur eq om x == y. Annars returnerar ‘’gt‘‘.
• strlen(a) – Returnerar längden på strängen som skickas som argument.
• substr(str, start, end) – returnerar start genom end tecknen i str. Det första tecknet i str är nolltecken. Om slutet är negativt, då det tyder på att många tecken räknat från höger.
Om slutet är noll, då det tyder på det sista tecknet. Till exempel, substr("12345", 1, 0) ‘‘
returnerar ‘‘’2345’ och substr("12345", 1, -1) returnerar "234’ .
• subtract(x, y) – returnerar x - y. Ger ett undantag om någon x eller y inte är tal.
• today() – returnerar en datumsträng för idag. Detta värde är konstruerad för användning i format_date eller days_between, men kan manipuleras precis som alla andra strängar. Datumet är i
ISO-format.
• template(x) – utvärderar x som mall. Bedömningen görs i en egen kontext, vilket innebär att
variabler inte delas mellan den som anropar och utvärderingsmallen. Eftersom { och } tecken är
speciella, måste du använda [[ för { tecken och ]] ‘för’} ‘tecken; de omvandlas automatiskt. Till
1.9. Handledning
165
calibre Användarhandbok, Utgåva 2.22.0
exempel, ‘‘mall(“[[title_sort]] ‘) kommer att utvärdera mallen ‘‘{title_sort}‘‘och returnera dess
värde. Observera också att prefix och suffix (det så kallade ‘|prefix|suffix syntax) inte kan användas
i argumentet till funktionen när du använder mallprogramläge.
Funktionsklassificering
Reference for all built-in template language functions
Here, we document all the built-in functions available in the calibre template language. Every function is implemented
as a class in python and you can click the source links to see the source code, in case the documentation is insufficient.
The functions are arranged in logical groups by type.
166
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• Arithmetic (sida 186)
– add(x, y) (sida 186)
– divide(x, y) (sida 186)
– multiply(x, y) (sida 186)
– subtract(x, y) (sida 186)
• Boolean (sida 186)
– not (värde) (sida 186)
– och (värde, värde, ...) (sida 186)
– or (värde, värde, ...) (sida 186)
• Date functions (sida 186)
– days_between (datum1, datum2) (sida 186)
– today() (sida 186)
• Formatting values (sida 187)
– finish_formatting(val, fmt, prefix, suffix) (sida 187)
– format_date (val, format_string) (sida 187)
– format_number(v, template) (sida 187)
– human_readable (v) (sida 187)
• Get values from metadata (sida 187)
– approximate_formats() (sida 187)
– author_links(val_separator, pair_separator) (sida 187)
– author_sorts(val_separator) (sida 188)
– booksize() (sida 188)
– current_library_name() (sida 188)
– current_library_path () (sida 188)
– field(namn) (sida 188)
– formats_modtimes(date_format) (sida 188)
– formats_paths () (sida 188)
– formats_sizes() (sida 189)
– has_cover () (sida 189)
– language_codes(lang_strings) (sida 189)
– language_strings(lang_codes, localize) (sida 189)
– ondevice() (sida 189)
– raw_field (namn) (sida 189)
– raw_list(name, separator) (sida 189)
– series_sort() (sida 189)
– user_categories() (sida 189)
– virtual_libraries() (sida 190)
• If-then-else (sida 190)
– contains(val, mönster, text om träff, text om inte träff) (sida 190)
– ifempty(val, text om den är tom) (sida 190)
– test(val, text om inte tom, text om den är tom) (sida 190)
• Iterating over values (sida 190)
– first_non_empty (värde, värde, ...) (sida 190)
– lookup(val, mönster, fält, mönster, fält, ..., else_field) (sida 190)
– switch(val, mönster, värde, mönster, värde, ..., else_value) (sida 190)
• List lookup (sida 190)
– identifier_in_list(val, id, found_val, not_found_val) (sida 191)
– in_list (Val, separator, mönster, found_val, not_found_val) (sida 191)
– list_item(val, index, separator) (sida 191)
– select(val, key) (sida 191)
– str_in_list (Val, separator, sträng, found_val, not_found_val) (sida 191)
• List manipulation (sida 191)
– count(val, separator) (sida 191)
– list_difference (List1, List2, sorterare) (sida 191)
– list_equals(list1, sep1, list2, sep2, yes_val, no_val) (sida 192)
– list_intersection (List1, List2, sorterare) (sida 192)
1.9. Handledning
– list_re(src_list, separator, include_re, opt_replace) (sida 192)
– list_re_group(src_list, separator, include_re, search_re, group_1_template, ...) (sida 192)
– list_sort (lista, riktning, sorterare) (sida 192)
– list_union (List1, List2, sorterare) (sida 192)
167
calibre Användarhandbok, Utgåva 2.22.0
Arithmetic
add(x, y)
class calibre.utils.formatter_functions.BuiltinAdd
add(x, y) - returnerar x + y. Ger ett undantag om antingen x eller y är inte siffror.
divide(x, y)
class calibre.utils.formatter_functions.BuiltinDivide
divide(x, y) - returnerar x / y. Ger ett undantag om antingen x eller y är inte siffror.
multiply(x, y)
class calibre.utils.formatter_functions.BuiltinMultiply
multiply(x, y) - returnerar x * y. Ger ett undantag om antingen x eller y är inte siffror.
subtract(x, y)
class calibre.utils.formatter_functions.BuiltinSubtract
subtract(x, y) - returnerar x - y. Ger ett undantag om antingen x eller y är inte siffror.
Boolean
not (värde)
class calibre.utils.formatter_functions.BuiltinNot
not (värde) - returnerar strängen “1” om värdet är tom, annars returneras en tom sträng. Denna funktion fungerar
bra med test eller first_non_empty. Du kan ha så många värden som du vill.
och (värde, värde, ...)
class calibre.utils.formatter_functions.BuiltinAnd
och (värde, värde, ...) - returnerar strängen “1” om alla värden är inte tom, annars returneras en tom sträng.
Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du vill.
or (värde, värde, ...)
class calibre.utils.formatter_functions.BuiltinOr
or (värde, värde, ...) - returnerar strängen “1” om något värde inte är tomt, annars returneras en tom sträng.
Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du vill.
Date functions
days_between (datum1, datum2)
class calibre.utils.formatter_functions.BuiltinDaysBetween
days_between (datum1, datum2) - returnerar antalet dagar mellan datum1 och datum2. Numret är positivt om
date1 är större än date2, annars negativ. Om någon datum1 eller datum2 inte datum, returnerar funktionen en
tom sträng.
today()
class calibre.utils.formatter_functions.BuiltinToday
today() - returnera en datumsträng för idag. Detta värde är avsedd för användning i format_date eller
days_between, men kan manipuleras som alla andra strängen. Datumet är i ISO-format.
168
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Formatting values
finish_formatting(val, fmt, prefix, suffix)
class calibre.utils.formatter_functions.BuiltinFinishFormatting
finish_formatting(val, fmt, prefix, suffix) – tillämpa formatet, prefix och suffix till ett värde på samma sätt
som görs i en mall som {series_index: 05.2f | - | -}. Till exempel ger följande program samma resultat som
ovanstående mall: program:finish_formatting(field(“series_index”), “05.2f”, ” - ”, ” - ”)
format_date (val, format_string)
class calibre.utils.formatter_functions.BuiltinFormatDate
format_date (val, format_string) - formaterar värdet, vilket måste vara ett datum, genom att använda format_string, returneras en sträng. De formateringskoder är: d: den dag som tal utan inledande nolla (1 till 31)
dd: dagen som tal med inledande nolla (01 till 31) MMM: den förkortade lokaliserade dag namn (t.ex. “Mon”
till “Sun ”). dddd: den långa lokaliserade dag namn (t.ex. “måndag” till “sönday”). M: månaden som tal utan
inledande nolla (1 till 12). MM: månad som tal med inledande nolla (01 till 12) MMM: den förkortade lokaliserade månaden namn (t.ex. “Jan” till “Dec”). MMMM: den långa lokaliserade månaden namn (t.ex. “Januari”
till “December”). yy: året som två siffror (00 till 99). dd: året som fyra siffror. h: timmar utan inledande 0 (0 till
11 eller 0 till 23, beroende på am / pm) hh: de timmar med en inledande 0 (00 till 11 eller 00 till 23, beroende på
am / pm) m: protokollet utan inledande 0 (0 till 59) mm: protokollet med en inledande 0 (00 till 59) s: de sekund
utan inledande 0 (0 till 59) ss: sekunderna med en inledande 0 (00 till 59) AP: använd en 12-timmars klocka
istället för en 24-timmars klocka, med “ap” ersättas med lokaliserad strängen för am eller pm AP: använd en
12-timmars klocka istället för en 24-timmars klocka, med “AP” ersättas med lokaliserad sträng för AM eller PM
iso: datum med tid och tidszon. Måste vara det enda närvarande formatet
format_number(v, template)
class calibre.utils.formatter_functions.BuiltinFormatNumber
format_number(v, template) – format numret v med hjälp av ett python formatering mall som “{0:5.2f}” eller
“{0:,d}” eller “${0:5,.2f}”. field_name del av mallen ska vara en 0 (noll) ( “{0:” i exemplen ovan). Se språkmallen och python-dokumentationen för fler exempel. Returnerar tom sträng om formatering misslyckas.
human_readable (v)
class calibre.utils.formatter_functions.BuiltinHumanReadable
human_readable (v) - returnerar en sträng som representerar antalet v i KB, MB, GB, etc.
Get values from metadata
approximate_formats()
class calibre.utils.formatter_functions.BuiltinApproximateFormats
approximate_formats() – returnerar en kommaseparerad lista med format som vid ett tillfälle var i samband med
boken. Det finns ingen garanti för att denna lista är korrekt, även om den antagligen är det. Denna funktion kan
anropas i mallprogramläge med mallen “{: ‘approximate_formats ()’}”. Observera att formatnamnen alltid är
versaler, som i EPUB. Den här funktionen fungerar bara i grafiska gränssnittet. Om du vill använda dessa värden
på spara-till-disk eller skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från andra kolumner”,
använder du funktionen i kolumnmallen och använda den kolumnens värde i din spar/skicka mallar
author_links(val_separator, pair_separator)
class calibre.utils.formatter_functions.BuiltinAuthorLinks
author_links(val_separator, pair_separator) – returnerar en sträng som innehåller en lista av författare och denna författares länkvärde i formen author1 val_separator author1link pair_separator author2 val_separator author2link etc. En författare är separerad från dess länkvärde med val_separator sträng utan tillagda mellanrum.
1.9. Handledning
169
calibre Användarhandbok, Utgåva 2.22.0
author:linkvalue par är separerade med pair_separator strängargument utan tillagda mellanrum. Det är upp till
dig att välja separatorsträngar som inte uppträder i författarnamn eller länkar. En författare är inkluderad även
om författarlänken är tom.
author_sorts(val_separator)
class calibre.utils.formatter_functions.BuiltinAuthorSorts
author_sorts(val_separator) – returnerar en sträng med en lista över författarens sorteringsvärden för författarna
till boken. Sorteringen är ett i författarens metadata (som skiljer sig från den author_sort i böcker). Den returnerade listan har formen författaren sorterings 1 val_separator författare sort 2 etc. Författaren sortera värdena
i denna lista är i samma ordning som författarna till boken. Om du vill ha utrymmen runt val_separator sedan
inkludera dem i separatorn strängen
booksize()
class calibre.utils.formatter_functions.BuiltinBooksize
booksize() – returnera värdet av storleken fältet. Den här funktionen fungerar bara i grafiska gränssnittet. Om du
vill använda detta värde i Save-to-disk eller skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från
andra kolumner”, använder du funktionen i kolumnmallen och använda den kolumnens värde i din spara/skicka
mallar
current_library_name()
class calibre.utils.formatter_functions.BuiltinCurrentLibraryName
current_library_name() – returnera efternamnet på sökvägen till den nuvarande calibre-biblioteket. Denna funktion kan anropas i mallprogrammeringsläget genom att använda mallen “{: ‘current_library_name ()’}”.
current_library_path ()
class calibre.utils.formatter_functions.BuiltinCurrentLibraryPath
current_library_path () - returnera sökvägen till den aktuella calibre-biblioteket. Denna funktion kan anropas i
mallens programmeringsläget genom att använda mallen “{: ‘current_library_path ()’}”.
field(namn)
class calibre.utils.formatter_functions.BuiltinField
field(namn) - returnerar metadatafält med namnet efter namn
formats_modtimes(date_format)
class calibre.utils.formatter_functions.BuiltinFormatsModtimes
formats_modtimes(date_format) – returnen kommaseparerad lista med kolon_separateradeobjekt som representerar förändrings tider för formaten i en bok. . date_format parametern anger hur datum ska formateras. Se
date_format funktionen för mer information. Du kan använda val funktionen för att få ändringstiden för ett visst
format. Observera att formatnamn alltid är versaler, som i EPUB.
formats_paths ()
class calibre.utils.formatter_functions.BuiltinFormatsPaths
formats_paths () - returnera en kommaseparerad lista över colon_separated objekt som representerar fullständig
sökväg till format i en bok. Du kan använda Select-funktionen för att få söktvägen i ett visst format. Observera
att formatet namn alltid är versaler, som i EPUB.
170
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
formats_sizes()
class calibre.utils.formatter_functions.BuiltinFormatsSizes
formats_sizes() – returnera en kommaseparerad lista med kolon_separaterade objekt som representerar storleken
i byte av format i en bok. Du kan använda välja funktionen för att få storleken för ett visst format. Observera att
formatnamn alltid är versaler, som i EPUB.
has_cover ()
class calibre.utils.formatter_functions.BuiltinHasCover
has_cover () - returnera Ja om boken har ett omslag, annars tillbaka den tomma strängen
language_codes(lang_strings)
class calibre.utils.formatter_functions.BuiltinLanguageCodes
language_codes(lang_strings) – returnera språkkoderna för strängarna som finns i lang_strings. Strängarna ska
vara på samma språk som den aktuella platsen. Lang_strings är en kommaseparerad lista.
language_strings(lang_codes, localize)
class calibre.utils.formatter_functions.BuiltinLanguageStrings
language_strings(lang_codes, localize) – returnera strängarna för språkkoder som finns i lang_codes. Om lokalisera är noll, returneras strängarna på engelska. Om lokalisera inte är noll, returneras strängarna tillbaka på
språket på den aktuella platsen. Lang_codes är en kommaseparerad lista.
ondevice()
class calibre.utils.formatter_functions.BuiltinOndevice
ondevice() – returnerar tillbaka Ja om ondevice är satt, annars returneras den tomma strängen. Den här funktionen fungerar bara i grafiska gränssnittet. Om du vill använda detta värde i Save-to-disk eller skicka-till-enhetmallar måste du göra en egen “kolumn byggd från andra kolumner”, använder du funktionen i kolumnmallen
och använder den kolumnen värde i din spara/skicka mallar
raw_field (namn)
class calibre.utils.formatter_functions.BuiltinRawField
raw_field (namn) - returnerar metadata fält med namnet på namn utan att tillämpa någon formatering.
raw_list(name, separator)
class calibre.utils.formatter_functions.BuiltinRawList
raw_list(name, separator) – returnerar metadatalistan namngiven av namn utan att använda någon formatering
eller sortering och med poster separerade med separator.
series_sort()
class calibre.utils.formatter_functions.BuiltinSeriesSort
series_sort() – returnerar seriesorteringsvärde
user_categories()
class calibre.utils.formatter_functions.BuiltinUserCategories
user_categories() – returnerar en kommaseparerad lista med de användarkategorier som den här boken innehåller. Denna funktion fungerar endast i grafiska gränssnittet. Om du vill använda dessa värden i Save-to-disk eller
skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från andra kolumner”, använd funktionen i den
kolumnen mall, och använda kolumnens värden i din spara / skicka mallar
1.9. Handledning
171
calibre Användarhandbok, Utgåva 2.22.0
virtual_libraries()
class calibre.utils.formatter_functions.BuiltinVirtualLibraries
virtual_libraries() – returnera en kommaseparerad lista med virtuella bibliotek som innehåller den här boken.
Den här funktionen fungerar bara i grafiska gränssnitt. Om du vill använda dessa värden på spara-till-disk eller
skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från andra kolumner”, använder du funktionen i
kolumnmallen och använd den kolumnens värde i din spar/skicka mallar
If-then-else
contains(val, mönster, text om träff, text om inte träff)
class calibre.utils.formatter_functions.BuiltinContains
contains(val, mönster, text om träff, text om inte träff) - kontrollerar om fältet innehåller träffar för det reguljära
uttrycket “mönster”. Returnerar “text om träff” om träffar hittas annars returnerar “text om ingen träff”
ifempty(val, text om den är tom)
class calibre.utils.formatter_functions.BuiltinIfempty
ifempty(val, text om den är tom) - Returnerar val om val inte är tom, annars returneras “texten om den är tom”
test(val, text om inte tom, text om den är tom)
class calibre.utils.formatter_functions.BuiltinTest
test(val, text om inte tom, text om den är tom) - returvärde “text om inte tom” Om fältet inte är tomt, annars
returnera “texten om den är tom”
Iterating over values
first_non_empty (värde, värde, ...)
class calibre.utils.formatter_functions.BuiltinFirstNonEmpty
first_non_empty (värde, värde, ...) - returnerar det första värdet som inte är tomt. Om alla värden är tomma, då
returneras det tomma värdet. Du kan ha så många värden som du vill.
lookup(val, mönster, fält, mönster, fält, ..., else_field)
class calibre.utils.formatter_functions.BuiltinLookup
lookup(val, mönster, fält, mönster, fält, ..., else_field) - som switch, förutom argumenten fält (metadata) namn,
inte text. Värdet på lämpligt fält kommer att hämtas och användas. Observera att eftersom sammansatta kolumn
är fält, kan du använda denna funktion i ett sammansatt fält och använda värdet av vissa andra sammansatta
området. Detta är mycket användbart vid konstruerandet av variabla sparvägar
switch(val, mönster, värde, mönster, värde, ..., else_value)
class calibre.utils.formatter_functions.BuiltinSwitch
switch(val, mönster, värde, mönster, värde, ..., else_value) - för varje “mönster, värde” par, kontrollerar om fältet
överensstämmer med det reguljära uttrycket “mönster” och i så fall avkastning som “värde”. Om inget mönster
passar, då returneras else_value . Du kan ha så många “mönster, värdes” par som du vill
List lookup
172
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
identifier_in_list(val, id, found_val, not_found_val)
class calibre.utils.formatter_functions.BuiltinIdentifierInList
identifier_in_list(val, id, found_val, not_found_val) – behandla val som en lista med identifierare separerade
med kommatecken och jämför strängen mot varje värde i listan. En identifierare har formatet “ID: värde”. IDparametern ska vara antingen “id” eller “id: RegExp”. Det första fallet ger träff om det finns någon identifierare
med detta ID. Det andra fallet ger träff om regexp passar identifierare värde. Om det är en träff, returneras
found_val, annars returneras not_found_val.
in_list (Val, separator, mönster, found_val, not_found_val)
class calibre.utils.formatter_functions.BuiltinInList
in_list (Val, separator, mönster, found_val, not_found_val) - behandla val som en lista med poster avdelade med
separator, att jämföra mönstret mot varje värde i listan. Om mönstret passar ett värde, avkastning found_val,
annars återvänder not_found_val.
list_item(val, index, separator)
class calibre.utils.formatter_functions.BuiltinListitem
list_item(val, index, separator) - tolka värdet som en lista av element åtskilda av “separator”, returnerar “indexet”:e objekt. Den första punkten är siffran noll. Den sista komponenten kan återsändas med hjälp av ‘list_item
(-1, separator).” Om objektet inte finns i listan, kommer det tomma värdet returneras. Avskiljaren har samma
betydelse som i funktionen ANTAL.
select(val, key)
class calibre.utils.formatter_functions.BuiltinSelect
select(val, key) – tolka värdet som en kommaseparerad lista, med den post som “id: värde”. Hitta paret med ID
lika med nyckel, och returnera motsvarande värde.
str_in_list (Val, separator, sträng, found_val, not_found_val)
class calibre.utils.formatter_functions.BuiltinStrInList
str_in_list (Val, separator, sträng, found_val, not_found_val) - behandla val som en lista med poster avdelade
med separator, att jämföra strängen mot varje värde i listan. Om strängen passar ett värde, avkastning found_val,
annars återvänder not_found_val. Om strängen innehåller separatorer, då är det också behandlas som en lista
och varje värde är markerat.
List manipulation
count(val, separator)
class calibre.utils.formatter_functions.BuiltinCount
count(val, separator) - tolkar värdet som en lista av element åtskilda av “separator”, returnerar antalet objekt i
listan. De flesta listor använder kommatecken som avgränsare, men författarna använder ett et-tecken. Exempel:
{Tags: (,)}, räkna {författare: räknare (&)}
list_difference (List1, List2, sorterare)
class calibre.utils.formatter_functions.BuiltinListDifference
list_difference (List1, List2, sorterare) - returnera en lista genom att ta bort List1 alla objekt som finns i List2
med en skiftlägesokänslig jämförelse. Objekten i List1 och List2 skiljs åt av separator, liksom de artiklar i den
returnerade listan.
1.9. Handledning
173
calibre Användarhandbok, Utgåva 2.22.0
list_equals(list1, sep1, list2, sep2, yes_val, no_val)
class calibre.utils.formatter_functions.BuiltinListEquals
list_equals(list1, sep1, list2, sep2, yes_val, no_val) – returnerar yes_val om list1 och list2 innehåller samma
poster, annars returneras no_val. Föremålen bestäms genom att dela upp varje lista med lämpliga avgränsare
(sep1 eller sep2). Ordningen på objekten i listorna inte är relevant. Jämförelsen är inte skiftlägeskänslig.
list_intersection (List1, List2, sorterare)
class calibre.utils.formatter_functions.BuiltinListIntersection
list_intersection (List1, List2, sorterare) - returnera en lista görs genom att ta bort List1 varje punkt som inte
finns i List2 med en skiftlägesokänslig jämföra. Objekten i List1 och List2 skiljs åt av separator, liksom de
artiklar i den returnerade listan.
list_re(src_list, separator, include_re, opt_replace)
class calibre.utils.formatter_functions.BuiltinListRe
list_re(src_list, separator, include_re, opt_replace) – Konstruera en lista genom att först separera src_list till
poster med hjälp av avgränsningstecken. För varje post i listan, kontrollera om det passar include_re. Om den
gör det, sedan lägga till den i listan som ska returneras. Om opt_replace inte är den tomma strängen, tillämpa
sedan bytet innan du lägger till objekt åter till listan.
list_re_group(src_list, separator, include_re, search_re, group_1_template, ...)
class calibre.utils.formatter_functions.BuiltinListReGroup
list_re_group(src_list, separator, include_re, search_re, group_1_template, ...) – Som list_re utom ersättare är
inte valfritt. Den använder re_group(list_item, search_re, group_1_template, ...) när du gör ersättare på den
resulterande listan.
list_sort (lista, riktning, sorterare)
class calibre.utils.formatter_functions.BuiltinListSort
list_sort (lista, riktning, sorterare) - Returnera lista sorterad med en skiftlägesokänslig sortering. Om riktningen
är noll, listan är sorterad stigande, annars fallande. Listan objekt skiljs åt av separator, liksom de artiklar i den
returnerade listan.
list_union (List1, List2, sorterare)
class calibre.utils.formatter_functions.BuiltinListUnion
list_union (List1, List2, sorterare) - returnera en lista som görs av en sammanslagning av poster i List1 och List2,
ta bort dubbletter med en skiftlägesokänslig jämförelse. Om objekt skiljer sig i fallet är den i List1 används.
Objekten i List1 och List2 skiljs åt av separator, liksom de artiklar i den returnerade listan.
subitems(val, start_index, end_index)
class calibre.utils.formatter_functions.BuiltinSubitems
subitems(val, start_index, end_index) – Denna funktion används för att bryta isär listor över objekt som genrer. Det tolkar värdet som en kommaseparerad lista, där varje objekt är en period-separerad lista. Returnerar
en ny lista genom att först hitta alla period-separerade objekt, då för varje sådan post utvinna start_index till
‘end_index‘komponenter, och sedan kombinera resultaten tillbaka tillsammans. Den första komponenten i en
periodseparerad lista har ett index på noll. Om ett index är negativ, så det räknas från slutet av listan. Som ett
specialfall, är en end_index på noll antas vara längden på listan. Exempel med grundlägande mallläge och antar
ett #genre värde av “A.B.C”: {#genre:subitems(0,1)} returnerar “A”. {#genre:subitems(0,2)} returnerar “A.B”.
{#genre:subitems(1,0)} returnerar “B.C”. Förutsatt ett #genre värde av “A.B.C, D.E.F”, {#genre:subitems(0,1)}
returnerar “A, D”. {#genre:subitems(0,2)} returnerar “A.B, D.E”
174
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
sublist(val, start_index, end_index, separator)
class calibre.utils.formatter_functions.BuiltinSublist
sublist(val, start_index, end_index, separator) – tolka värdet som en lista med objekt separerade av separator
‘, returnerar en ny lista görs från start_index till end_index ‘objekt. Den första punkten är nummer noll. Om
ett index är negativt, då det räknas från slutet av listan. Som ett specialfall, är, om end_index är noll antas vara
längden på listan. Exempel med grundmall läge och förutsatt att taggarna kolumnen (som är kommaseparerad)
innehåller “A, B, C”: {tags:sublist(0,1„)} returnerar “A”. {tags:sublist(-1,0„)} returnerar “C”. {tags:sublist(0,1„)} returnerar “A, B”.
Other
assign(id, Val)
class calibre.utils.formatter_functions.BuiltinAssign
assign(id, Val) - tilldelar val till id, sedan återgår val. id måste vara en identifierare, inte ett uttryck
print(a, b, ...)
class calibre.utils.formatter_functions.BuiltinPrint
print(a, b, ...) - skriver ut argument till standard ut. Såvida du startar calibre från kommandoraden (calibredebug-g), kommer utdata att gå till ett svart hål.
Recursion
eval (mall)
class calibre.utils.formatter_functions.BuiltinEval
eval (mall) - utvärderar mallen, sänder de lokala variablerna (de “assign’ed till) i stället för bokens metadata.
Detta möjliggör användning av mallenprocessorn för att konstruera komplexa resultat från lokala variabler. Eftersom {and} tecken är speciella, måste du använda [[ for the { character and ]] for the } karaktär; de konverteras
automatiskt. Notera också att prefix och suffix (i | prefix | suffix syntax) inte kan användas i argumentet för denna
funktion när du använder mallprogramläget.
template(x)
class calibre.utils.formatter_functions.BuiltinTemplate
template(x) - utvärderar x som en mall. Utvärderingen görs i sitt eget sammanhang, vilket innebär att variabler inte delas mellan den som anropande och mallutvärderingen. Eftersom {and} tecken är speciella, måste du
använda [[ for the { character and ]] for the } tecken, och de konverteras automatiskt. Till exempel, template(‘[[title_sort]]’) kommer att utvärdera mallen {title_sort} och returnera dess värde. Notera också att prefix och
suffix (i | prefix | suffix syntax) inte kan användas i argumentet för denna funktion när du använder mallprogramläget .
Relational
CMP (x, y, LT, eq, GT)
class calibre.utils.formatter_functions.BuiltinCmp
CMP (x, y, LT, eq, GT) - jämför x-och y efter konvertering till både siffror. Returnerar LT om x <y. Returnerar
eq om x == y. Annars returneras gt.
1.9. Handledning
175
calibre Användarhandbok, Utgåva 2.22.0
first_matching_cmp(val, cmp1, result1, cmp2, r2, ..., else_result)
class calibre.utils.formatter_functions.BuiltinFirstMatchingCmp
first_matching_cmp(val, cmp1, result1, cmp2, r2, ..., else_result) - jämför “val <cmpN” i följd, returnerar resultN för den första jämförelsen som lyckas. Returnerar else_result om ingen jämförelse lyckas. Exempel:
first_matching_cmp (10,5, “liten”, 10, “mitten”, 15, “stor”, “jätte”) returnerar “large”. Samma exempel med
ett första värde på 16 returnerar “jätte”.
strcmp (x, y, LT, eq, GT)
class calibre.utils.formatter_functions.BuiltinStrcmp
strcmp (x, y, LT, eq, GT) - gör en skiftlägesokänslig jämförelse mellan X och Y som strängar. Returnerar LT om
x <y. Returnerar eq om x == y. Annars returneras gt.
String case changes
capitalize(Val)
class calibre.utils.formatter_functions.BuiltinCapitalize
capitalize(Val) - Returnerar värdet av fältet med versaler
lowercase(val)
class calibre.utils.formatter_functions.BuiltinLowercase
lowercase(val) - Returnerar värdet i fältet med gemener
titlecase(val)
class calibre.utils.formatter_functions.BuiltinTitlecase
titlecase(val) - returvärde på fältet i titelformat
uppercase(val)
class calibre.utils.formatter_functions.BuiltinUppercase
uppercase(val) - Returnerar värdet i fältet med versaler
String manipulation
re(val, mönster, ersättning)
class calibre.utils.formatter_functions.BuiltinRe
re(val, mönster, ersättning) - Returvärdet på området efter applicering av reguljära uttryck. Alla förekomster av
“mönster” ersättas med “ersättning”. Som allid i calibre, dessa är python-kompatibla reguljära uttryck
re_group(värde, mönster, mall_för_grupp_1, för_grupp_2, ...)
class calibre.utils.formatter_functions.BuiltinReGroup
re_group(värde, mönster, mall_för_grupp_1, för_grupp_2, ...) - returnerar en sträng med användande av reguljära uttrycksmönstret för värdet och ersätter varje passande instans med strängen beräknas genom att ersätta
varje passande grupp med det värde som returneras av motsvarande mall. Det ursprungliga passande värdet
för gruppen finns som $. I mallprogramläge, som till mallen och de eval funktioner använder du [[för {och]]
för}. Följande exempel på mall programläget ser ut för serier med flera ord och versaler det första ordet: {series:’re_group($, “(S* )(.*)”, “[[$:uppercase()]]”, “[[$]]”)’}
176
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
shorten(val, vänster tecken, mitten text, rätt tecken)
class calibre.utils.formatter_functions.BuiltinShorten
shorten(val, vänster tecken, mitten text, rätt tecken) - Returnerar en förkortad version av området, som består
av “vänster tecken‘ ”, tecken från början av fältet, följt av” mitten text följt av “rätt tecken” tecken från slutet
av strängen. “Vänster tecken” och “rätt” tecken måste vara heltal. Antag exempelvis titeln på boken är “Ancient
engelska lag i Times of Ivanhoe”, och du vill att den ska passa i ett utrymme på högst 15 tecken. Om du använder
{titel: förkorta (9, -, 5)}, kommer resultatet att bli “Ancient E-nhoe”. Om fältets längd är mindre än vänster chars
+ höger chars + längden på “mitt text”, då området kommer att användas intakt. Till exempel titeln “The Dome”
inte skulle ändras.
strcat (a, b, ...)
class calibre.utils.formatter_functions.BuiltinStrcat
strcat (a, b, ...) - kan ta valfritt antal argument. Returnerar en sträng som bildas av sammanfogning med alla
argument
strcat_max(max, string1, prefix2, string2, ...)
class calibre.utils.formatter_functions.BuiltinStrcatMax
strcat_max(max, string1, prefix2, string2, ...) – Returnerar en sträng som bildas genom att sammanfoga argumenten. Det returnerade värdet initieras till sträng1. Prefix, är sträng par till i slutet av värde så länge den
resulterande strängens längd är mindre än max. Sträng1 returneras även om sträng1 är längre än max. Du kan
skicka så många ‘prefix, sträng ‘par som du vill.
strlen(a)
class calibre.utils.formatter_functions.BuiltinStrlen
strlen(a) - Returnerar längden av den sträng som skickas som argument
substr(str, start, slut)
class calibre.utils.formatter_functions.BuiltinSubstr
substr(str, start, slut) - returnerar starttecknet till och med sluttecknet i str. Det första tecknet i STR är nollkaraktär. Om slutet är negativt, då det tyder på att för många tecken räknat från höger. Om slutet är noll, indikerar det
sista tecknet. Till exempel substr (‘12345 ‘, 1, 0) returnerar ‘2345’, och substr (‘12345 ‘, 1, -1) returnerar ‘234’.
swap_around_comma (Val)
class calibre.utils.formatter_functions.BuiltinSwapAroundComma
swap_around_comma (Val) - ges ett värde av blanketten “B, A”, retur “AB”. Detta är mest användbar för att
konvertera namn i LN, FN-format till FN LN. Om det inte finns komma, returnerar funktionen Val oförändrad
transliterate(a)
class calibre.utils.formatter_functions.BuiltinTransliterate
transliterate(a) – Returnerar en sträng i ett latinskt alfabet som bildas genom en tillnärmning av ljudet av orden i
källsträngen. Till exempel, om källan är “Фёдор Михaйлович Достоевский” returnerar funktionen “Fiodor
Mikhailovich Dostoievskii”
API of the Metadata objects The python implementation of the template functions is passed in a Metadata object.
Knowing it’s API is useful if you want to define your own template functions.
class calibre.ebooks.metadata.book.base.Metadata(title, authors=(u’Okxe4nd’, ), other=None,
template_cache=None,
formatter=None)
A class representing all the metadata for a book. The various standard metadata fields are available as attributes
1.9. Handledning
177
calibre Användarhandbok, Utgåva 2.22.0
of this object. You can also stick arbitrary attributes onto this object.
Metadata from custom columns should be accessed via the get() method, passing in the lookup name for the
column, for example: “#mytags”.
Use the is_null() (sida 196) method to test if a field is null.
This object also has functions to format fields into strings.
The list of standard metadata fields grows with time is in STANDARD_METADATA_FIELDS (sida 197).
Please keep the method based API of this class to a minimum. Every method becomes a reserved field name.
is_null(field)
Return True if the value of field is null in this object. ‘null’ means it is unknown or evaluates to False. So
a title of _(‘Unknown’) is null or a language of ‘und’ is null.
Be careful with numeric fields since this will return True for zero as well as None.
Also returns True if the field does not exist.
deepcopy(class_generator=<function <lambda> at 0x7f6fe8be5b90>)
Do not use this method unless you know what you are doing, if you want to create a simple clone of
this object, use deepcopy_metadata() instead. Class_generator must be a function that returns an
instance of Metadata or a subclass of it.
get_identifiers()
Return a copy of the identifiers dictionary. The dict is small, and the penalty for using a reference where a
copy is needed is large. Also, we don’t want any manipulations of the returned dict to show up in the book.
set_identifiers(identifiers)
Set all identifiers. Note that if you previously set ISBN, calling this method will delete it.
set_identifier(typ, val)
If val is empty, deletes identifier of type typ
standard_field_keys()
return a list of all possible keys, even if this book doesn’t have them
custom_field_keys()
return a list of the custom fields in this book
all_field_keys()
All field keys known by this instance, even if their value is None
metadata_for_field(key)
return metadata describing a standard or custom field.
all_non_none_fields()
Return a dictionary containing all non-None metadata fields, including the custom ones.
get_standard_metadata(field, make_copy)
return field metadata from the field if it is there. Otherwise return None. field is the key name, not the label.
Return a copy if requested, just in case the user wants to change values in the dict.
get_all_standard_metadata(make_copy)
return a dict containing all the standard field metadata associated with the book.
get_all_user_metadata(make_copy)
return a dict containing all the custom field metadata associated with the book.
get_user_metadata(field, make_copy)
return field metadata from the object if it is there. Otherwise return None. field is the key name, not the
label. Return a copy if requested, just in case the user wants to change values in the dict.
178
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
set_all_user_metadata(metadata)
store custom field metadata into the object. Field is the key name not the label
set_user_metadata(field, metadata)
store custom field metadata for one column into the object. Field is the key name not the label
template_to_attribute(other, ops)
Takes a list [(src,dest), (src,dest)], evaluates the template in the context of other, then copies the result to
self[dest]. This is on a best-efforts basis. Some assignments can make no sense.
smart_update(other, replace_metadata=False)
Merge the information in other into self. In case of conflicts, the information in other takes precedence,
unless the information in other is NULL.
format_field(key, series_with_index=True)
Returns the tuple (display_name, formatted_value)
to_html()
A HTML representation of this object.
calibre.ebooks.metadata.book.base.STANDARD_METADATA_FIELDS
The set of standard metadata fields.
'''
All fields must have a NULL value represented as None for simple types,
an empty list/dictionary for complex types and (None, None) for cover_data
'''
SOCIAL_METADATA_FIELDS = frozenset([
'tags',
# Ordered list
'rating',
# A floating point number between 0 and 10
'comments',
# A simple HTML enabled string
'series',
# A simple string
'series_index',
# A floating point number
# Of the form { scheme1:value1, scheme2:value2}
# For example: {'isbn':'123456789', 'doi':'xxxx', ... }
'identifiers',
])
'''
The list of names that convert to identifiers when in get and set.
'''
TOP_LEVEL_IDENTIFIERS = frozenset([
'isbn',
])
PUBLICATION_METADATA_FIELDS = frozenset([
'title',
# title must never be None. Should be _('Unknown')
# Pseudo field that can be set, but if not set is auto generated
# from title and languages
'title_sort',
'authors',
# Ordered list. Must never be None, can be [_('Unknown')]
'author_sort_map', # Map of sort strings for each author
# Pseudo field that can be set, but if not set is auto generated
# from authors and languages
'author_sort',
'book_producer',
'timestamp',
# Dates and times must be timezone aware
'pubdate',
1.9. Handledning
179
calibre Användarhandbok, Utgåva 2.22.0
'last_modified',
'rights',
# So far only known publication type is periodical:calibre
# If None, means book
'publication_type',
'uuid',
# A UUID usually of type 4
'languages',
# ordered list of languages in this publication
'publisher',
# Simple string, no special semantics
# Absolute path to image file encoded in filesystem_encoding
'cover',
# Of the form (format, data) where format is, for e.g. 'jpeg', 'png', 'gif'...
'cover_data',
# Either thumbnail data, or an object with the attribute
# image_path which is the path to an image file, encoded
# in filesystem_encoding
'thumbnail',
])
BOOK_STRUCTURE_FIELDS = frozenset([
# These are used by code, Null values are None.
'toc', 'spine', 'guide', 'manifest',
])
USER_METADATA_FIELDS = frozenset([
# A dict of dicts similar to field_metadata. Each field description dict
# also contains a value field with the key #value#.
'user_metadata',
])
DEVICE_METADATA_FIELDS = frozenset([
'device_collections',
# Ordered list of strings
'lpath',
# Unicode, / separated
'size',
# In bytes
'mime',
# Mimetype of the book file being represented
])
CALIBRE_METADATA_FIELDS = frozenset([
'application_id',
# An application id, currently set to the db_id.
'db_id',
# the calibre primary key of the item.
'formats',
# list of formats (extensions) for this book
# a dict of user category names, where the value is a list of item names
# from the book that are in that category
'user_categories',
# a dict of author to an associated hyperlink
'author_link_map',
]
)
ALL_METADATA_FIELDS =
SOCIAL_METADATA_FIELDS.union(
PUBLICATION_METADATA_FIELDS).union(
BOOK_STRUCTURE_FIELDS).union(
USER_METADATA_FIELDS).union(
DEVICE_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS)
# All fields except custom fields
180
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
STANDARD_METADATA_FIELDS = SOCIAL_METADATA_FIELDS.union(
PUBLICATION_METADATA_FIELDS).union(
BOOK_STRUCTURE_FIELDS).union(
DEVICE_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS)
# Metadata fields that smart update must do special processing to copy.
SC_FIELDS_NOT_COPIED =
frozenset(['title', 'title_sort', 'authors',
'author_sort', 'author_sort_map',
'cover_data', 'tags', 'languages',
'identifiers'])
# Metadata fields that smart update should copy only if the source is not None
SC_FIELDS_COPY_NOT_NULL = frozenset(['lpath', 'size', 'comments', 'thumbnail'])
# Metadata fields that smart update should copy without special handling
SC_COPYABLE_FIELDS =
SOCIAL_METADATA_FIELDS.union(
PUBLICATION_METADATA_FIELDS).union(
BOOK_STRUCTURE_FIELDS).union(
DEVICE_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS) - \
SC_FIELDS_NOT_COPIED.union(
SC_FIELDS_COPY_NOT_NULL)
SERIALIZABLE_FIELDS =
SOCIAL_METADATA_FIELDS.union(
USER_METADATA_FIELDS).union(
PUBLICATION_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS).union(
DEVICE_METADATA_FIELDS) - \
frozenset(['device_collections', 'formats',
'cover_data'])
# these are rebuilt when needed
Använder allmän programmod
För mer komplicerade mallprogram, är det ibland lättare att undvika mallsyntax (alla { och } tecken), istället skriva i
ett mer klassisk programutseende. Du kan göra detta i calibre genom att börja mallen med program:. I detta fall sker
ingen mall behandling. Den speciella variabeln $ är inte satt. Det är upp till ditt program för att producera rätt resultat.
En fördel med program: läget är att hakparanteser inte längre speciella. Till exempel är det inte nödvändigt att använda
[[ och ]] ‘när du använder ‘template()-funktionen. En annan fördel är att programläges mallar sammanställs till
Python och kan köras mycket snabbare än mallar i de andra två lägena. Hastighetsförbättring beror på komplexiteten
i de mallar; ju mer komplicerad mall desto förbättringen. Kompileringen är avstängd eller om du använder justering
compile_gpm_templates (Compile General Programläges mallar till Python). Det främsta skälet för att stänga
av kompilering är om en sammanställd mall inte fungerar, i sådant fall skicka in en felrapport.
Följande exempel är ett ‘program:‘ läge implementerande av ett recept på MobileRead forumet:”. Placera serier i
titeln, antingen med initialer eller en förkortad form Strip ledande artiklar från serienamnet (någon). “Till exempel, för
boken The Two Towers in the Lord of the Rings-serien, ger receptet LotR [02] The Two Towers. Genom att använda
standardmallar, receptet kräver tre anpassade kolumner och en kontrollpanel, såsom förklaras i följande:
Lösningen kräver att skapa tre sammansatta kolumner. Den första kolumnen används för att avlägsna de ledande
artiklarna. Det andra används för att beräkna den “korta” formen. Den tredje är för att beräkna ‘initials’ formen.
När du har dessa kolumner, väljer kontrollpanel mellan dem. Du kan dölja någon eller alla av de tre kolumnerna på
biblioteksvyn.
Första kolumn: Namn: #stripped_series. Mall: {series:re(^(A|The|An)s+,)||}
1.9. Handledning
181
calibre Användarhandbok, Utgåva 2.22.0
Andra kolumn (förkortad form): Namn: #shortened. Mall: {#stripped_series:shorten(4,-,4)}
Tredje kolumn (förkortad form): Namn: #initials. Mall: {#stripped_series:re(([^s])[^s]+(s|$),1)}
Kontrollpaneluttryck: Mall:{#stripped_series:lookup(.s,#initials,.,#shortened,series)}{series_index:0>2.0f|
[|] }{title} Destinationsfält: title
Denna uppsättning av fält och kontrollpanel producerar: Serie: The Lord of the Rings Serien index: 2
Titel: The Two Towers Utdata: LotR [02] The Two Towers
Serier: Dahak Serieindex: 1 Titel: Mutineers Moon Utdata: Dahak [01] Mutineers Moon
Serier: Berserkers Serieindex: 4 Titel: Berserker Throne Utdata: Bers-kers [04] Berserker Throne
Serier: Meg Langslow Mysteries Serieindex: 3 Titel: Revenge of the Wrought-Iron Flamingos Utdata:
MLM [03] Revenge of the Wrought-Iron Flamingos
Följande program ger samma resultat som det ursprungliga receptet, med endast en anpassad kolumn för att hålla
resultatet av ett program som beräknar den speciella titelvärdet:
Custom column:
Name: #special_title
Template: (the following with all leading spaces removed)
program:
#
compute the equivalent of the composite fields and store them in local variables
stripped = re(field('series'), '^(A|The|An)\s+', '');
shortened = shorten(stripped, 4, '-' ,4);
initials = re(stripped, '[^\w]*(\w?)[^\s]+(\s|$)', '\1');
#
#
#
#
#
#
#
#
#
#
#
Format the series index. Ends up as empty if there is no series index.
Note that leading and trailing spaces will be removed by the formatter,
so we cannot add them here. We will do that in the strcat below.
Also note that because we are in 'program' mode, we can freely use
curly brackets in strings, something we cannot do in template mode.
s_index = template('{series_index:0>2.0f}');
print(stripped, shortened, initials, s_index);
Now concatenate all the bits together. The switch picks between
initials and shortened, depending on whether there is a space
in stripped. We then add the brackets around s_index if it is
not empty. Finally, add the title. As this is the last function in
the program, its value will be returned.
strcat(
switch( stripped,
'.\s', initials,
'.', shortened,
field('series')),
test(s_index, strcat(' [', s_index, '] '), ''),
field('title'));
Plugboard expression:
Template:{#special_title}
Destination field: title
Det skulle vara möjligt att göra ovanstående utan extra kolumner genom att sätta programmet i mallen av kontrollpanel.
Men för att göra det, måste alla kommentarer tas bort på grund av att kontrlpanelens textrutan inte stöder redigering
över flera rader. Det kan diskuteras om vinsten av att inte ha den anpassade kolumnen är värd den stora ökningen i
svårigheter på grund av det program som en gigantisk rad.
182
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Användardefinierade mallfunktioner
Du kan lägga till egna funktioner till mallprocessorn. Sådana funktioner är skrivna i Python, och kan användas i någon
av de tre mallprogrammeringslägena. Funktionerna läggs genom att gå till Inställningar->Avancerat->Mallfunktioner.
Instruktioner visas i denna dialog.
Särskilda anvisningar för att spara/skicka mallar
Särskilda bearbetning appliceras när en mall används i en ‘spara på disk‘ eller skicka till enhet produkt mall. Värdena på
fälten städas, ersätter tecken som är speciella till filsystem med streck, inklusive snedstreck. Detta innebär att textfältet
inte kan användas för att skapa mappar. Men snedstreck inte förändrats prefix eller suffix strängar, så snedstreck i dessa
strängar kommer att orsaka mappar skapas. På grund av detta kan du skapa mappstruktur variabelt djup.
Antag till exempel att vi vill ha mappstrukturen series/series_index - title, med förbehållet att om serien inte existerar,
så bör titeln vara i topp-mappen. Mallen för att göra detta är:
{series:||/}{series_index:|| - }{title}
Det snedstreck och bindestreck visas bara om serien inte är tom.
Uppslagsfunktionen låter oss göra ännu snyggare bearbetning. Antag till exempel att om en bok har en serie, så
vi vill att mappstrukturen series/series index - title.fmt. Om boken inte har en serie, så vi vill att mappstrukturen
genre/author_sort/title.fmt. Om boken inte har någon genre, vill vi använda “Unknown”(Okänd). Vi vill två helt olika
vägar, beroende på värdet av serien.
För att åstadkomma detta, vi:
1. Skapa en sammansatt fält (kalla det AA) som innehåller {series}/{series_index} {title’}. Om serien inte är tom, så kommer den här mallen att producera series/series_index - title.
2. Skapa en sammansatt fält (kalla det BB) som innehåller‘‘{#genre:ifempty(Unknown)}/{author_sort}/{title}‘‘.
Denna mall ger genre/author_sort/title, där en tom genre ersätts med Unknown (okänd).
3. Ställ spara mallen till {series:lookup(.,AA,BB)}. Denna mall väljer sammansatta fält AA om
serien inte är tom, och sammansatta fält BB om serien är tom. Vi har alltså två helt olika sparvägar,
beroende på om eller inte series är tom.
Mallar och kontrollpaneler
Kontrollpanel används för att ändra metadata som skrivs in böcker under “skicka till enhet” och “spara till disk” operationer. En kontrollpanel tillåter dig att ange en mall för att tillhandahålla de uppgifter att skriva in bokens metadata. Du
kan använda kontrollpaneler att ändra följande fält: författare, author_sort, språk, förläggare, etiketter, titel, title_sort.
Denna funktion hjälper människor som vill använda olika metadata i böcker på enheter för att lösa sortering- eller
visningsproblem.
När du skapar en kontrollpanel anger du format och enheten för vilken kontrollpanelen ska användas. En speciell anordning tillhandahålls, save_to_disk, som används när du sparar format (i motsats till att skicka dem till en enhet). När
du har valt formatet och enheten, väljer du de metadatafälten att ändra, ger mallar för att leverera de nya värdena. Dessa mallar är anslutna till sina destinationsfält, därav namnet kontrollpanel. Du kan naturligtvis använda sammansatta
kolumner i dessa mallar.
När en kontrollpanel kan gälla (innehållsserver, spara till disk, eller skicka till enhet), söker calibre de definierade
kontrollpaneler att välja den rätta för givet format och enhet. Till exempel, för att hitta rätt kontrollpanel för en EPUBbok som skickas till en Android-enhet, söker calibre dessa kontrollpaneler enligt följande sökordning:
• en kontrollpanel med en exakt passning på format och enhet, till exempel, EPUB och ANDROID
1.9. Handledning
183
calibre Användarhandbok, Utgåva 2.22.0
• en kontrollpanel med en exakt passning på format och den speciella any device val, till exempel, ‘‘ EPUB‘‘
och any device
• en kontrollpanel med en exakt passning på format och den speciella any device val, och ANDROID
• en kontrollpanel med något format och någon enhet
Etiketterna och författare fält har särskild behandling, eftersom båda dessa områden kan ha mer än en post. En bok
kan ha många etiketter och många författare. När du anger att ett av dessa två områden ska ändras, är mallens resultat
som undersöks för att se om mer än en post finns. För etiketter, skärs resultatet bort varhelst calibre finner ett kommatecken. Till exempel, om mallen producerar värdet ‘’Thriller, Horror‘‘, då blir resultatet två etiketter, Thriller och
‘’Horror‘‘. Det finns inget sätt att sätta ett kommatecken i mitten av en etikett.
Samma sak händer för författare, men med en annan karaktär för snittet, en & (et-tecken) i stället för ett kommatecken.
Till exempel, om mallen producerar värdet Blogs, Joe&Posts, Susan, då kommer boken att sluta med två
författare, Blogs, Joe och Posts, Susan. Om mallen producerar värdet Blogs, Joe;Posts, Susan, då
kommer boken att ha en författare med ett ganska konstigt namn.
Kontrollpaneler påverkar metadata som skrivs in i boken när den sparas till disk eller skrivs till enheten. Kontrollpaneler påverkar inte metadata som används av spara till disk och skicka till enhet för att skapa
filnamnen. Istället konstrueras filnamn med hjälp av mallar som anges i lämpliga inställningsfönster.
Användbara tips
Du kan hitta följande tips användbart.
• Skapa en anpassad sammansatt kolumn för att testa mallar. När du har kolumnen, kan du ändra dess mall genom
att dubbelklicka på kolumnen. Dölj kolumnen när du inte testar.
• Mallar kan använda andra mallar genom att referera en sammansatt anpassad kolumn.
• I en kontrolpanel, kan du ställa in ett fält för att vara tomt (eller vad som motsvarar tom) med hjälp av särskild
mall {}. Denna mall kommer alltid utvärderas till en tom sträng.
• Den teknik som beskrivs ovan för att visa siffror även om de har ett nollvärde fungerar med standardfält series_index.
Reference for all built-in template language functions
Here, we document all the built-in functions available in the calibre template language. Every function is implemented
as a class in python and you can click the source links to see the source code, in case the documentation is insufficient.
The functions are arranged in logical groups by type.
184
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• Arithmetic (sida 186)
– add(x, y) (sida 186)
– divide(x, y) (sida 186)
– multiply(x, y) (sida 186)
– subtract(x, y) (sida 186)
• Boolean (sida 186)
– not (värde) (sida 186)
– och (värde, värde, ...) (sida 186)
– or (värde, värde, ...) (sida 186)
• Date functions (sida 186)
– days_between (datum1, datum2) (sida 186)
– today() (sida 186)
• Formatting values (sida 187)
– finish_formatting(val, fmt, prefix, suffix) (sida 187)
– format_date (val, format_string) (sida 187)
– format_number(v, template) (sida 187)
– human_readable (v) (sida 187)
• Get values from metadata (sida 187)
– approximate_formats() (sida 187)
– author_links(val_separator, pair_separator) (sida 187)
– author_sorts(val_separator) (sida 188)
– booksize() (sida 188)
– current_library_name() (sida 188)
– current_library_path () (sida 188)
– field(namn) (sida 188)
– formats_modtimes(date_format) (sida 188)
– formats_paths () (sida 188)
– formats_sizes() (sida 189)
– has_cover () (sida 189)
– language_codes(lang_strings) (sida 189)
– language_strings(lang_codes, localize) (sida 189)
– ondevice() (sida 189)
– raw_field (namn) (sida 189)
– raw_list(name, separator) (sida 189)
– series_sort() (sida 189)
– user_categories() (sida 189)
– virtual_libraries() (sida 190)
• If-then-else (sida 190)
– contains(val, mönster, text om träff, text om inte träff) (sida 190)
– ifempty(val, text om den är tom) (sida 190)
– test(val, text om inte tom, text om den är tom) (sida 190)
• Iterating over values (sida 190)
– first_non_empty (värde, värde, ...) (sida 190)
– lookup(val, mönster, fält, mönster, fält, ..., else_field) (sida 190)
– switch(val, mönster, värde, mönster, värde, ..., else_value) (sida 190)
• List lookup (sida 190)
– identifier_in_list(val, id, found_val, not_found_val) (sida 191)
– in_list (Val, separator, mönster, found_val, not_found_val) (sida 191)
– list_item(val, index, separator) (sida 191)
– select(val, key) (sida 191)
– str_in_list (Val, separator, sträng, found_val, not_found_val) (sida 191)
• List manipulation (sida 191)
– count(val, separator) (sida 191)
– list_difference (List1, List2, sorterare) (sida 191)
– list_equals(list1, sep1, list2, sep2, yes_val, no_val) (sida 192)
– list_intersection (List1, List2, sorterare) (sida 192)
1.9. Handledning
– list_re(src_list, separator, include_re, opt_replace) (sida 192)
– list_re_group(src_list, separator, include_re, search_re, group_1_template, ...) (sida 192)
– list_sort (lista, riktning, sorterare) (sida 192)
– list_union (List1, List2, sorterare) (sida 192)
185
calibre Användarhandbok, Utgåva 2.22.0
Arithmetic
add(x, y)
class calibre.utils.formatter_functions.BuiltinAdd
add(x, y) - returnerar x + y. Ger ett undantag om antingen x eller y är inte siffror.
divide(x, y)
class calibre.utils.formatter_functions.BuiltinDivide
divide(x, y) - returnerar x / y. Ger ett undantag om antingen x eller y är inte siffror.
multiply(x, y)
class calibre.utils.formatter_functions.BuiltinMultiply
multiply(x, y) - returnerar x * y. Ger ett undantag om antingen x eller y är inte siffror.
subtract(x, y)
class calibre.utils.formatter_functions.BuiltinSubtract
subtract(x, y) - returnerar x - y. Ger ett undantag om antingen x eller y är inte siffror.
Boolean
not (värde)
class calibre.utils.formatter_functions.BuiltinNot
not (värde) - returnerar strängen “1” om värdet är tom, annars returneras en tom sträng. Denna funktion fungerar
bra med test eller first_non_empty. Du kan ha så många värden som du vill.
och (värde, värde, ...)
class calibre.utils.formatter_functions.BuiltinAnd
och (värde, värde, ...) - returnerar strängen “1” om alla värden är inte tom, annars returneras en tom sträng.
Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du vill.
or (värde, värde, ...)
class calibre.utils.formatter_functions.BuiltinOr
or (värde, värde, ...) - returnerar strängen “1” om något värde inte är tomt, annars returneras en tom sträng.
Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du vill.
Date functions
days_between (datum1, datum2)
class calibre.utils.formatter_functions.BuiltinDaysBetween
days_between (datum1, datum2) - returnerar antalet dagar mellan datum1 och datum2. Numret är positivt om
date1 är större än date2, annars negativ. Om någon datum1 eller datum2 inte datum, returnerar funktionen en
tom sträng.
today()
class calibre.utils.formatter_functions.BuiltinToday
today() - returnera en datumsträng för idag. Detta värde är avsedd för användning i format_date eller
days_between, men kan manipuleras som alla andra strängen. Datumet är i ISO-format.
186
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Formatting values
finish_formatting(val, fmt, prefix, suffix)
class calibre.utils.formatter_functions.BuiltinFinishFormatting
finish_formatting(val, fmt, prefix, suffix) – tillämpa formatet, prefix och suffix till ett värde på samma sätt
som görs i en mall som {series_index: 05.2f | - | -}. Till exempel ger följande program samma resultat som
ovanstående mall: program:finish_formatting(field(“series_index”), “05.2f”, ” - ”, ” - ”)
format_date (val, format_string)
class calibre.utils.formatter_functions.BuiltinFormatDate
format_date (val, format_string) - formaterar värdet, vilket måste vara ett datum, genom att använda format_string, returneras en sträng. De formateringskoder är: d: den dag som tal utan inledande nolla (1 till 31)
dd: dagen som tal med inledande nolla (01 till 31) MMM: den förkortade lokaliserade dag namn (t.ex. “Mon”
till “Sun ”). dddd: den långa lokaliserade dag namn (t.ex. “måndag” till “sönday”). M: månaden som tal utan
inledande nolla (1 till 12). MM: månad som tal med inledande nolla (01 till 12) MMM: den förkortade lokaliserade månaden namn (t.ex. “Jan” till “Dec”). MMMM: den långa lokaliserade månaden namn (t.ex. “Januari”
till “December”). yy: året som två siffror (00 till 99). dd: året som fyra siffror. h: timmar utan inledande 0 (0 till
11 eller 0 till 23, beroende på am / pm) hh: de timmar med en inledande 0 (00 till 11 eller 00 till 23, beroende på
am / pm) m: protokollet utan inledande 0 (0 till 59) mm: protokollet med en inledande 0 (00 till 59) s: de sekund
utan inledande 0 (0 till 59) ss: sekunderna med en inledande 0 (00 till 59) AP: använd en 12-timmars klocka
istället för en 24-timmars klocka, med “ap” ersättas med lokaliserad strängen för am eller pm AP: använd en
12-timmars klocka istället för en 24-timmars klocka, med “AP” ersättas med lokaliserad sträng för AM eller PM
iso: datum med tid och tidszon. Måste vara det enda närvarande formatet
format_number(v, template)
class calibre.utils.formatter_functions.BuiltinFormatNumber
format_number(v, template) – format numret v med hjälp av ett python formatering mall som “{0:5.2f}” eller
“{0:,d}” eller “${0:5,.2f}”. field_name del av mallen ska vara en 0 (noll) ( “{0:” i exemplen ovan). Se språkmallen och python-dokumentationen för fler exempel. Returnerar tom sträng om formatering misslyckas.
human_readable (v)
class calibre.utils.formatter_functions.BuiltinHumanReadable
human_readable (v) - returnerar en sträng som representerar antalet v i KB, MB, GB, etc.
Get values from metadata
approximate_formats()
class calibre.utils.formatter_functions.BuiltinApproximateFormats
approximate_formats() – returnerar en kommaseparerad lista med format som vid ett tillfälle var i samband med
boken. Det finns ingen garanti för att denna lista är korrekt, även om den antagligen är det. Denna funktion kan
anropas i mallprogramläge med mallen “{: ‘approximate_formats ()’}”. Observera att formatnamnen alltid är
versaler, som i EPUB. Den här funktionen fungerar bara i grafiska gränssnittet. Om du vill använda dessa värden
på spara-till-disk eller skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från andra kolumner”,
använder du funktionen i kolumnmallen och använda den kolumnens värde i din spar/skicka mallar
author_links(val_separator, pair_separator)
class calibre.utils.formatter_functions.BuiltinAuthorLinks
author_links(val_separator, pair_separator) – returnerar en sträng som innehåller en lista av författare och denna författares länkvärde i formen author1 val_separator author1link pair_separator author2 val_separator author2link etc. En författare är separerad från dess länkvärde med val_separator sträng utan tillagda mellanrum.
1.9. Handledning
187
calibre Användarhandbok, Utgåva 2.22.0
author:linkvalue par är separerade med pair_separator strängargument utan tillagda mellanrum. Det är upp till
dig att välja separatorsträngar som inte uppträder i författarnamn eller länkar. En författare är inkluderad även
om författarlänken är tom.
author_sorts(val_separator)
class calibre.utils.formatter_functions.BuiltinAuthorSorts
author_sorts(val_separator) – returnerar en sträng med en lista över författarens sorteringsvärden för författarna
till boken. Sorteringen är ett i författarens metadata (som skiljer sig från den author_sort i böcker). Den returnerade listan har formen författaren sorterings 1 val_separator författare sort 2 etc. Författaren sortera värdena
i denna lista är i samma ordning som författarna till boken. Om du vill ha utrymmen runt val_separator sedan
inkludera dem i separatorn strängen
booksize()
class calibre.utils.formatter_functions.BuiltinBooksize
booksize() – returnera värdet av storleken fältet. Den här funktionen fungerar bara i grafiska gränssnittet. Om du
vill använda detta värde i Save-to-disk eller skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från
andra kolumner”, använder du funktionen i kolumnmallen och använda den kolumnens värde i din spara/skicka
mallar
current_library_name()
class calibre.utils.formatter_functions.BuiltinCurrentLibraryName
current_library_name() – returnera efternamnet på sökvägen till den nuvarande calibre-biblioteket. Denna funktion kan anropas i mallprogrammeringsläget genom att använda mallen “{: ‘current_library_name ()’}”.
current_library_path ()
class calibre.utils.formatter_functions.BuiltinCurrentLibraryPath
current_library_path () - returnera sökvägen till den aktuella calibre-biblioteket. Denna funktion kan anropas i
mallens programmeringsläget genom att använda mallen “{: ‘current_library_path ()’}”.
field(namn)
class calibre.utils.formatter_functions.BuiltinField
field(namn) - returnerar metadatafält med namnet efter namn
formats_modtimes(date_format)
class calibre.utils.formatter_functions.BuiltinFormatsModtimes
formats_modtimes(date_format) – returnen kommaseparerad lista med kolon_separateradeobjekt som representerar förändrings tider för formaten i en bok. . date_format parametern anger hur datum ska formateras. Se
date_format funktionen för mer information. Du kan använda val funktionen för att få ändringstiden för ett visst
format. Observera att formatnamn alltid är versaler, som i EPUB.
formats_paths ()
class calibre.utils.formatter_functions.BuiltinFormatsPaths
formats_paths () - returnera en kommaseparerad lista över colon_separated objekt som representerar fullständig
sökväg till format i en bok. Du kan använda Select-funktionen för att få söktvägen i ett visst format. Observera
att formatet namn alltid är versaler, som i EPUB.
188
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
formats_sizes()
class calibre.utils.formatter_functions.BuiltinFormatsSizes
formats_sizes() – returnera en kommaseparerad lista med kolon_separaterade objekt som representerar storleken
i byte av format i en bok. Du kan använda välja funktionen för att få storleken för ett visst format. Observera att
formatnamn alltid är versaler, som i EPUB.
has_cover ()
class calibre.utils.formatter_functions.BuiltinHasCover
has_cover () - returnera Ja om boken har ett omslag, annars tillbaka den tomma strängen
language_codes(lang_strings)
class calibre.utils.formatter_functions.BuiltinLanguageCodes
language_codes(lang_strings) – returnera språkkoderna för strängarna som finns i lang_strings. Strängarna ska
vara på samma språk som den aktuella platsen. Lang_strings är en kommaseparerad lista.
language_strings(lang_codes, localize)
class calibre.utils.formatter_functions.BuiltinLanguageStrings
language_strings(lang_codes, localize) – returnera strängarna för språkkoder som finns i lang_codes. Om lokalisera är noll, returneras strängarna på engelska. Om lokalisera inte är noll, returneras strängarna tillbaka på
språket på den aktuella platsen. Lang_codes är en kommaseparerad lista.
ondevice()
class calibre.utils.formatter_functions.BuiltinOndevice
ondevice() – returnerar tillbaka Ja om ondevice är satt, annars returneras den tomma strängen. Den här funktionen fungerar bara i grafiska gränssnittet. Om du vill använda detta värde i Save-to-disk eller skicka-till-enhetmallar måste du göra en egen “kolumn byggd från andra kolumner”, använder du funktionen i kolumnmallen
och använder den kolumnen värde i din spara/skicka mallar
raw_field (namn)
class calibre.utils.formatter_functions.BuiltinRawField
raw_field (namn) - returnerar metadata fält med namnet på namn utan att tillämpa någon formatering.
raw_list(name, separator)
class calibre.utils.formatter_functions.BuiltinRawList
raw_list(name, separator) – returnerar metadatalistan namngiven av namn utan att använda någon formatering
eller sortering och med poster separerade med separator.
series_sort()
class calibre.utils.formatter_functions.BuiltinSeriesSort
series_sort() – returnerar seriesorteringsvärde
user_categories()
class calibre.utils.formatter_functions.BuiltinUserCategories
user_categories() – returnerar en kommaseparerad lista med de användarkategorier som den här boken innehåller. Denna funktion fungerar endast i grafiska gränssnittet. Om du vill använda dessa värden i Save-to-disk eller
skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från andra kolumner”, använd funktionen i den
kolumnen mall, och använda kolumnens värden i din spara / skicka mallar
1.9. Handledning
189
calibre Användarhandbok, Utgåva 2.22.0
virtual_libraries()
class calibre.utils.formatter_functions.BuiltinVirtualLibraries
virtual_libraries() – returnera en kommaseparerad lista med virtuella bibliotek som innehåller den här boken.
Den här funktionen fungerar bara i grafiska gränssnitt. Om du vill använda dessa värden på spara-till-disk eller
skicka-till-enhet-mallar måste du göra en egen “kolumn byggd från andra kolumner”, använder du funktionen i
kolumnmallen och använd den kolumnens värde i din spar/skicka mallar
If-then-else
contains(val, mönster, text om träff, text om inte träff)
class calibre.utils.formatter_functions.BuiltinContains
contains(val, mönster, text om träff, text om inte träff) - kontrollerar om fältet innehåller träffar för det reguljära
uttrycket “mönster”. Returnerar “text om träff” om träffar hittas annars returnerar “text om ingen träff”
ifempty(val, text om den är tom)
class calibre.utils.formatter_functions.BuiltinIfempty
ifempty(val, text om den är tom) - Returnerar val om val inte är tom, annars returneras “texten om den är tom”
test(val, text om inte tom, text om den är tom)
class calibre.utils.formatter_functions.BuiltinTest
test(val, text om inte tom, text om den är tom) - returvärde “text om inte tom” Om fältet inte är tomt, annars
returnera “texten om den är tom”
Iterating over values
first_non_empty (värde, värde, ...)
class calibre.utils.formatter_functions.BuiltinFirstNonEmpty
first_non_empty (värde, värde, ...) - returnerar det första värdet som inte är tomt. Om alla värden är tomma, då
returneras det tomma värdet. Du kan ha så många värden som du vill.
lookup(val, mönster, fält, mönster, fält, ..., else_field)
class calibre.utils.formatter_functions.BuiltinLookup
lookup(val, mönster, fält, mönster, fält, ..., else_field) - som switch, förutom argumenten fält (metadata) namn,
inte text. Värdet på lämpligt fält kommer att hämtas och användas. Observera att eftersom sammansatta kolumn
är fält, kan du använda denna funktion i ett sammansatt fält och använda värdet av vissa andra sammansatta
området. Detta är mycket användbart vid konstruerandet av variabla sparvägar
switch(val, mönster, värde, mönster, värde, ..., else_value)
class calibre.utils.formatter_functions.BuiltinSwitch
switch(val, mönster, värde, mönster, värde, ..., else_value) - för varje “mönster, värde” par, kontrollerar om fältet
överensstämmer med det reguljära uttrycket “mönster” och i så fall avkastning som “värde”. Om inget mönster
passar, då returneras else_value . Du kan ha så många “mönster, värdes” par som du vill
List lookup
190
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
identifier_in_list(val, id, found_val, not_found_val)
class calibre.utils.formatter_functions.BuiltinIdentifierInList
identifier_in_list(val, id, found_val, not_found_val) – behandla val som en lista med identifierare separerade
med kommatecken och jämför strängen mot varje värde i listan. En identifierare har formatet “ID: värde”. IDparametern ska vara antingen “id” eller “id: RegExp”. Det första fallet ger träff om det finns någon identifierare
med detta ID. Det andra fallet ger träff om regexp passar identifierare värde. Om det är en träff, returneras
found_val, annars returneras not_found_val.
in_list (Val, separator, mönster, found_val, not_found_val)
class calibre.utils.formatter_functions.BuiltinInList
in_list (Val, separator, mönster, found_val, not_found_val) - behandla val som en lista med poster avdelade med
separator, att jämföra mönstret mot varje värde i listan. Om mönstret passar ett värde, avkastning found_val,
annars återvänder not_found_val.
list_item(val, index, separator)
class calibre.utils.formatter_functions.BuiltinListitem
list_item(val, index, separator) - tolka värdet som en lista av element åtskilda av “separator”, returnerar “indexet”:e objekt. Den första punkten är siffran noll. Den sista komponenten kan återsändas med hjälp av ‘list_item
(-1, separator).” Om objektet inte finns i listan, kommer det tomma värdet returneras. Avskiljaren har samma
betydelse som i funktionen ANTAL.
select(val, key)
class calibre.utils.formatter_functions.BuiltinSelect
select(val, key) – tolka värdet som en kommaseparerad lista, med den post som “id: värde”. Hitta paret med ID
lika med nyckel, och returnera motsvarande värde.
str_in_list (Val, separator, sträng, found_val, not_found_val)
class calibre.utils.formatter_functions.BuiltinStrInList
str_in_list (Val, separator, sträng, found_val, not_found_val) - behandla val som en lista med poster avdelade
med separator, att jämföra strängen mot varje värde i listan. Om strängen passar ett värde, avkastning found_val,
annars återvänder not_found_val. Om strängen innehåller separatorer, då är det också behandlas som en lista
och varje värde är markerat.
List manipulation
count(val, separator)
class calibre.utils.formatter_functions.BuiltinCount
count(val, separator) - tolkar värdet som en lista av element åtskilda av “separator”, returnerar antalet objekt i
listan. De flesta listor använder kommatecken som avgränsare, men författarna använder ett et-tecken. Exempel:
{Tags: (,)}, räkna {författare: räknare (&)}
list_difference (List1, List2, sorterare)
class calibre.utils.formatter_functions.BuiltinListDifference
list_difference (List1, List2, sorterare) - returnera en lista genom att ta bort List1 alla objekt som finns i List2
med en skiftlägesokänslig jämförelse. Objekten i List1 och List2 skiljs åt av separator, liksom de artiklar i den
returnerade listan.
1.9. Handledning
191
calibre Användarhandbok, Utgåva 2.22.0
list_equals(list1, sep1, list2, sep2, yes_val, no_val)
class calibre.utils.formatter_functions.BuiltinListEquals
list_equals(list1, sep1, list2, sep2, yes_val, no_val) – returnerar yes_val om list1 och list2 innehåller samma
poster, annars returneras no_val. Föremålen bestäms genom att dela upp varje lista med lämpliga avgränsare
(sep1 eller sep2). Ordningen på objekten i listorna inte är relevant. Jämförelsen är inte skiftlägeskänslig.
list_intersection (List1, List2, sorterare)
class calibre.utils.formatter_functions.BuiltinListIntersection
list_intersection (List1, List2, sorterare) - returnera en lista görs genom att ta bort List1 varje punkt som inte
finns i List2 med en skiftlägesokänslig jämföra. Objekten i List1 och List2 skiljs åt av separator, liksom de
artiklar i den returnerade listan.
list_re(src_list, separator, include_re, opt_replace)
class calibre.utils.formatter_functions.BuiltinListRe
list_re(src_list, separator, include_re, opt_replace) – Konstruera en lista genom att först separera src_list till
poster med hjälp av avgränsningstecken. För varje post i listan, kontrollera om det passar include_re. Om den
gör det, sedan lägga till den i listan som ska returneras. Om opt_replace inte är den tomma strängen, tillämpa
sedan bytet innan du lägger till objekt åter till listan.
list_re_group(src_list, separator, include_re, search_re, group_1_template, ...)
class calibre.utils.formatter_functions.BuiltinListReGroup
list_re_group(src_list, separator, include_re, search_re, group_1_template, ...) – Som list_re utom ersättare är
inte valfritt. Den använder re_group(list_item, search_re, group_1_template, ...) när du gör ersättare på den
resulterande listan.
list_sort (lista, riktning, sorterare)
class calibre.utils.formatter_functions.BuiltinListSort
list_sort (lista, riktning, sorterare) - Returnera lista sorterad med en skiftlägesokänslig sortering. Om riktningen
är noll, listan är sorterad stigande, annars fallande. Listan objekt skiljs åt av separator, liksom de artiklar i den
returnerade listan.
list_union (List1, List2, sorterare)
class calibre.utils.formatter_functions.BuiltinListUnion
list_union (List1, List2, sorterare) - returnera en lista som görs av en sammanslagning av poster i List1 och List2,
ta bort dubbletter med en skiftlägesokänslig jämförelse. Om objekt skiljer sig i fallet är den i List1 används.
Objekten i List1 och List2 skiljs åt av separator, liksom de artiklar i den returnerade listan.
subitems(val, start_index, end_index)
class calibre.utils.formatter_functions.BuiltinSubitems
subitems(val, start_index, end_index) – Denna funktion används för att bryta isär listor över objekt som genrer. Det tolkar värdet som en kommaseparerad lista, där varje objekt är en period-separerad lista. Returnerar
en ny lista genom att först hitta alla period-separerade objekt, då för varje sådan post utvinna start_index till
‘end_index‘komponenter, och sedan kombinera resultaten tillbaka tillsammans. Den första komponenten i en
periodseparerad lista har ett index på noll. Om ett index är negativ, så det räknas från slutet av listan. Som ett
specialfall, är en end_index på noll antas vara längden på listan. Exempel med grundlägande mallläge och antar
ett #genre värde av “A.B.C”: {#genre:subitems(0,1)} returnerar “A”. {#genre:subitems(0,2)} returnerar “A.B”.
{#genre:subitems(1,0)} returnerar “B.C”. Förutsatt ett #genre värde av “A.B.C, D.E.F”, {#genre:subitems(0,1)}
returnerar “A, D”. {#genre:subitems(0,2)} returnerar “A.B, D.E”
192
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
sublist(val, start_index, end_index, separator)
class calibre.utils.formatter_functions.BuiltinSublist
sublist(val, start_index, end_index, separator) – tolka värdet som en lista med objekt separerade av separator
‘, returnerar en ny lista görs från start_index till end_index ‘objekt. Den första punkten är nummer noll. Om
ett index är negativt, då det räknas från slutet av listan. Som ett specialfall, är, om end_index är noll antas vara
längden på listan. Exempel med grundmall läge och förutsatt att taggarna kolumnen (som är kommaseparerad)
innehåller “A, B, C”: {tags:sublist(0,1„)} returnerar “A”. {tags:sublist(-1,0„)} returnerar “C”. {tags:sublist(0,1„)} returnerar “A, B”.
Other
assign(id, Val)
class calibre.utils.formatter_functions.BuiltinAssign
assign(id, Val) - tilldelar val till id, sedan återgår val. id måste vara en identifierare, inte ett uttryck
print(a, b, ...)
class calibre.utils.formatter_functions.BuiltinPrint
print(a, b, ...) - skriver ut argument till standard ut. Såvida du startar calibre från kommandoraden (calibredebug-g), kommer utdata att gå till ett svart hål.
Recursion
eval (mall)
class calibre.utils.formatter_functions.BuiltinEval
eval (mall) - utvärderar mallen, sänder de lokala variablerna (de “assign’ed till) i stället för bokens metadata.
Detta möjliggör användning av mallenprocessorn för att konstruera komplexa resultat från lokala variabler. Eftersom {and} tecken är speciella, måste du använda [[ for the { character and ]] for the } karaktär; de konverteras
automatiskt. Notera också att prefix och suffix (i | prefix | suffix syntax) inte kan användas i argumentet för denna
funktion när du använder mallprogramläget.
template(x)
class calibre.utils.formatter_functions.BuiltinTemplate
template(x) - utvärderar x som en mall. Utvärderingen görs i sitt eget sammanhang, vilket innebär att variabler inte delas mellan den som anropande och mallutvärderingen. Eftersom {and} tecken är speciella, måste du
använda [[ for the { character and ]] for the } tecken, och de konverteras automatiskt. Till exempel, template(‘[[title_sort]]’) kommer att utvärdera mallen {title_sort} och returnera dess värde. Notera också att prefix och
suffix (i | prefix | suffix syntax) inte kan användas i argumentet för denna funktion när du använder mallprogramläget .
Relational
CMP (x, y, LT, eq, GT)
class calibre.utils.formatter_functions.BuiltinCmp
CMP (x, y, LT, eq, GT) - jämför x-och y efter konvertering till både siffror. Returnerar LT om x <y. Returnerar
eq om x == y. Annars returneras gt.
1.9. Handledning
193
calibre Användarhandbok, Utgåva 2.22.0
first_matching_cmp(val, cmp1, result1, cmp2, r2, ..., else_result)
class calibre.utils.formatter_functions.BuiltinFirstMatchingCmp
first_matching_cmp(val, cmp1, result1, cmp2, r2, ..., else_result) - jämför “val <cmpN” i följd, returnerar resultN för den första jämförelsen som lyckas. Returnerar else_result om ingen jämförelse lyckas. Exempel:
first_matching_cmp (10,5, “liten”, 10, “mitten”, 15, “stor”, “jätte”) returnerar “large”. Samma exempel med
ett första värde på 16 returnerar “jätte”.
strcmp (x, y, LT, eq, GT)
class calibre.utils.formatter_functions.BuiltinStrcmp
strcmp (x, y, LT, eq, GT) - gör en skiftlägesokänslig jämförelse mellan X och Y som strängar. Returnerar LT om
x <y. Returnerar eq om x == y. Annars returneras gt.
String case changes
capitalize(Val)
class calibre.utils.formatter_functions.BuiltinCapitalize
capitalize(Val) - Returnerar värdet av fältet med versaler
lowercase(val)
class calibre.utils.formatter_functions.BuiltinLowercase
lowercase(val) - Returnerar värdet i fältet med gemener
titlecase(val)
class calibre.utils.formatter_functions.BuiltinTitlecase
titlecase(val) - returvärde på fältet i titelformat
uppercase(val)
class calibre.utils.formatter_functions.BuiltinUppercase
uppercase(val) - Returnerar värdet i fältet med versaler
String manipulation
re(val, mönster, ersättning)
class calibre.utils.formatter_functions.BuiltinRe
re(val, mönster, ersättning) - Returvärdet på området efter applicering av reguljära uttryck. Alla förekomster av
“mönster” ersättas med “ersättning”. Som allid i calibre, dessa är python-kompatibla reguljära uttryck
re_group(värde, mönster, mall_för_grupp_1, för_grupp_2, ...)
class calibre.utils.formatter_functions.BuiltinReGroup
re_group(värde, mönster, mall_för_grupp_1, för_grupp_2, ...) - returnerar en sträng med användande av reguljära uttrycksmönstret för värdet och ersätter varje passande instans med strängen beräknas genom att ersätta
varje passande grupp med det värde som returneras av motsvarande mall. Det ursprungliga passande värdet
för gruppen finns som $. I mallprogramläge, som till mallen och de eval funktioner använder du [[för {och]]
för}. Följande exempel på mall programläget ser ut för serier med flera ord och versaler det första ordet: {series:’re_group($, “(S* )(.*)”, “[[$:uppercase()]]”, “[[$]]”)’}
194
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
shorten(val, vänster tecken, mitten text, rätt tecken)
class calibre.utils.formatter_functions.BuiltinShorten
shorten(val, vänster tecken, mitten text, rätt tecken) - Returnerar en förkortad version av området, som består
av “vänster tecken‘ ”, tecken från början av fältet, följt av” mitten text följt av “rätt tecken” tecken från slutet
av strängen. “Vänster tecken” och “rätt” tecken måste vara heltal. Antag exempelvis titeln på boken är “Ancient
engelska lag i Times of Ivanhoe”, och du vill att den ska passa i ett utrymme på högst 15 tecken. Om du använder
{titel: förkorta (9, -, 5)}, kommer resultatet att bli “Ancient E-nhoe”. Om fältets längd är mindre än vänster chars
+ höger chars + längden på “mitt text”, då området kommer att användas intakt. Till exempel titeln “The Dome”
inte skulle ändras.
strcat (a, b, ...)
class calibre.utils.formatter_functions.BuiltinStrcat
strcat (a, b, ...) - kan ta valfritt antal argument. Returnerar en sträng som bildas av sammanfogning med alla
argument
strcat_max(max, string1, prefix2, string2, ...)
class calibre.utils.formatter_functions.BuiltinStrcatMax
strcat_max(max, string1, prefix2, string2, ...) – Returnerar en sträng som bildas genom att sammanfoga argumenten. Det returnerade värdet initieras till sträng1. Prefix, är sträng par till i slutet av värde så länge den
resulterande strängens längd är mindre än max. Sträng1 returneras även om sträng1 är längre än max. Du kan
skicka så många ‘prefix, sträng ‘par som du vill.
strlen(a)
class calibre.utils.formatter_functions.BuiltinStrlen
strlen(a) - Returnerar längden av den sträng som skickas som argument
substr(str, start, slut)
class calibre.utils.formatter_functions.BuiltinSubstr
substr(str, start, slut) - returnerar starttecknet till och med sluttecknet i str. Det första tecknet i STR är nollkaraktär. Om slutet är negativt, då det tyder på att för många tecken räknat från höger. Om slutet är noll, indikerar det
sista tecknet. Till exempel substr (‘12345 ‘, 1, 0) returnerar ‘2345’, och substr (‘12345 ‘, 1, -1) returnerar ‘234’.
swap_around_comma (Val)
class calibre.utils.formatter_functions.BuiltinSwapAroundComma
swap_around_comma (Val) - ges ett värde av blanketten “B, A”, retur “AB”. Detta är mest användbar för att
konvertera namn i LN, FN-format till FN LN. Om det inte finns komma, returnerar funktionen Val oförändrad
transliterate(a)
class calibre.utils.formatter_functions.BuiltinTransliterate
transliterate(a) – Returnerar en sträng i ett latinskt alfabet som bildas genom en tillnärmning av ljudet av orden i
källsträngen. Till exempel, om källan är “Фёдор Михaйлович Достоевский” returnerar funktionen “Fiodor
Mikhailovich Dostoievskii”
API of the Metadata objects The python implementation of the template functions is passed in a Metadata object.
Knowing it’s API is useful if you want to define your own template functions.
class calibre.ebooks.metadata.book.base.Metadata(title, authors=(u’Okxe4nd’, ), other=None,
template_cache=None,
formatter=None)
A class representing all the metadata for a book. The various standard metadata fields are available as attributes
1.9. Handledning
195
calibre Användarhandbok, Utgåva 2.22.0
of this object. You can also stick arbitrary attributes onto this object.
Metadata from custom columns should be accessed via the get() method, passing in the lookup name for the
column, for example: “#mytags”.
Use the is_null() (sida 196) method to test if a field is null.
This object also has functions to format fields into strings.
The list of standard metadata fields grows with time is in STANDARD_METADATA_FIELDS (sida 197).
Please keep the method based API of this class to a minimum. Every method becomes a reserved field name.
is_null(field)
Return True if the value of field is null in this object. ‘null’ means it is unknown or evaluates to False. So
a title of _(‘Unknown’) is null or a language of ‘und’ is null.
Be careful with numeric fields since this will return True for zero as well as None.
Also returns True if the field does not exist.
deepcopy(class_generator=<function <lambda> at 0x7f6fe8be5b90>)
Do not use this method unless you know what you are doing, if you want to create a simple clone of
this object, use deepcopy_metadata() instead. Class_generator must be a function that returns an
instance of Metadata or a subclass of it.
get_identifiers()
Return a copy of the identifiers dictionary. The dict is small, and the penalty for using a reference where a
copy is needed is large. Also, we don’t want any manipulations of the returned dict to show up in the book.
set_identifiers(identifiers)
Set all identifiers. Note that if you previously set ISBN, calling this method will delete it.
set_identifier(typ, val)
If val is empty, deletes identifier of type typ
standard_field_keys()
return a list of all possible keys, even if this book doesn’t have them
custom_field_keys()
return a list of the custom fields in this book
all_field_keys()
All field keys known by this instance, even if their value is None
metadata_for_field(key)
return metadata describing a standard or custom field.
all_non_none_fields()
Return a dictionary containing all non-None metadata fields, including the custom ones.
get_standard_metadata(field, make_copy)
return field metadata from the field if it is there. Otherwise return None. field is the key name, not the label.
Return a copy if requested, just in case the user wants to change values in the dict.
get_all_standard_metadata(make_copy)
return a dict containing all the standard field metadata associated with the book.
get_all_user_metadata(make_copy)
return a dict containing all the custom field metadata associated with the book.
get_user_metadata(field, make_copy)
return field metadata from the object if it is there. Otherwise return None. field is the key name, not the
label. Return a copy if requested, just in case the user wants to change values in the dict.
196
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
set_all_user_metadata(metadata)
store custom field metadata into the object. Field is the key name not the label
set_user_metadata(field, metadata)
store custom field metadata for one column into the object. Field is the key name not the label
template_to_attribute(other, ops)
Takes a list [(src,dest), (src,dest)], evaluates the template in the context of other, then copies the result to
self[dest]. This is on a best-efforts basis. Some assignments can make no sense.
smart_update(other, replace_metadata=False)
Merge the information in other into self. In case of conflicts, the information in other takes precedence,
unless the information in other is NULL.
format_field(key, series_with_index=True)
Returns the tuple (display_name, formatted_value)
to_html()
A HTML representation of this object.
calibre.ebooks.metadata.book.base.STANDARD_METADATA_FIELDS
The set of standard metadata fields.
'''
All fields must have a NULL value represented as None for simple types,
an empty list/dictionary for complex types and (None, None) for cover_data
'''
SOCIAL_METADATA_FIELDS = frozenset([
'tags',
# Ordered list
'rating',
# A floating point number between 0 and 10
'comments',
# A simple HTML enabled string
'series',
# A simple string
'series_index',
# A floating point number
# Of the form { scheme1:value1, scheme2:value2}
# For example: {'isbn':'123456789', 'doi':'xxxx', ... }
'identifiers',
])
'''
The list of names that convert to identifiers when in get and set.
'''
TOP_LEVEL_IDENTIFIERS = frozenset([
'isbn',
])
PUBLICATION_METADATA_FIELDS = frozenset([
'title',
# title must never be None. Should be _('Unknown')
# Pseudo field that can be set, but if not set is auto generated
# from title and languages
'title_sort',
'authors',
# Ordered list. Must never be None, can be [_('Unknown')]
'author_sort_map', # Map of sort strings for each author
# Pseudo field that can be set, but if not set is auto generated
# from authors and languages
'author_sort',
'book_producer',
'timestamp',
# Dates and times must be timezone aware
'pubdate',
1.9. Handledning
197
calibre Användarhandbok, Utgåva 2.22.0
'last_modified',
'rights',
# So far only known publication type is periodical:calibre
# If None, means book
'publication_type',
'uuid',
# A UUID usually of type 4
'languages',
# ordered list of languages in this publication
'publisher',
# Simple string, no special semantics
# Absolute path to image file encoded in filesystem_encoding
'cover',
# Of the form (format, data) where format is, for e.g. 'jpeg', 'png', 'gif'...
'cover_data',
# Either thumbnail data, or an object with the attribute
# image_path which is the path to an image file, encoded
# in filesystem_encoding
'thumbnail',
])
BOOK_STRUCTURE_FIELDS = frozenset([
# These are used by code, Null values are None.
'toc', 'spine', 'guide', 'manifest',
])
USER_METADATA_FIELDS = frozenset([
# A dict of dicts similar to field_metadata. Each field description dict
# also contains a value field with the key #value#.
'user_metadata',
])
DEVICE_METADATA_FIELDS = frozenset([
'device_collections',
# Ordered list of strings
'lpath',
# Unicode, / separated
'size',
# In bytes
'mime',
# Mimetype of the book file being represented
])
CALIBRE_METADATA_FIELDS = frozenset([
'application_id',
# An application id, currently set to the db_id.
'db_id',
# the calibre primary key of the item.
'formats',
# list of formats (extensions) for this book
# a dict of user category names, where the value is a list of item names
# from the book that are in that category
'user_categories',
# a dict of author to an associated hyperlink
'author_link_map',
]
)
ALL_METADATA_FIELDS =
SOCIAL_METADATA_FIELDS.union(
PUBLICATION_METADATA_FIELDS).union(
BOOK_STRUCTURE_FIELDS).union(
USER_METADATA_FIELDS).union(
DEVICE_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS)
# All fields except custom fields
198
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
STANDARD_METADATA_FIELDS = SOCIAL_METADATA_FIELDS.union(
PUBLICATION_METADATA_FIELDS).union(
BOOK_STRUCTURE_FIELDS).union(
DEVICE_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS)
# Metadata fields that smart update must do special processing to copy.
SC_FIELDS_NOT_COPIED =
frozenset(['title', 'title_sort', 'authors',
'author_sort', 'author_sort_map',
'cover_data', 'tags', 'languages',
'identifiers'])
# Metadata fields that smart update should copy only if the source is not None
SC_FIELDS_COPY_NOT_NULL = frozenset(['lpath', 'size', 'comments', 'thumbnail'])
# Metadata fields that smart update should copy without special handling
SC_COPYABLE_FIELDS =
SOCIAL_METADATA_FIELDS.union(
PUBLICATION_METADATA_FIELDS).union(
BOOK_STRUCTURE_FIELDS).union(
DEVICE_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS) - \
SC_FIELDS_NOT_COPIED.union(
SC_FIELDS_COPY_NOT_NULL)
SERIALIZABLE_FIELDS =
SOCIAL_METADATA_FIELDS.union(
USER_METADATA_FIELDS).union(
PUBLICATION_METADATA_FIELDS).union(
CALIBRE_METADATA_FIELDS).union(
DEVICE_METADATA_FIELDS) - \
frozenset(['device_collections', 'formats',
'cover_data'])
# these are rebuilt when needed
1.9.5 Allt om att använda reguljära uttryck i calibre
Reguljära uttryck är funktioner som används på många ställen i calibre för att utföra avancerad manipulation av ebokens innehåll och metadata. Denna handledning är en mild introduktion till att få dig igång med att använda vanliga
uttryck i calibre.
1.9. Handledning
199
calibre Användarhandbok, Utgåva 2.22.0
Innehåll
•
•
•
•
•
•
•
•
•
•
•
•
•
Först ett varningens ord och ett ord av mod (sida 200)
Var i calibre kan du använda reguljära uttryck? (sida 200)
Vad i hela världen är ett reguljärt uttryck? (sida 200)
Vill du förklara? (sida 201)
Det låter inte så illa. Vad händer nu? (sida 201)
Hej, snyggt! Detta börjar låta vettigt! (sida 201)
Tja, är dessa specialtecken är mycket snygga och allt, men vad händer om jag ville passa mot en punkt
eller ett frågetecken? (sida 202)
Så, vilka är de mest användbara uppsättningarna? (sida 202)
Men om jag hade några olika strängar jag ville passa mot, blir inte saker komplicerade? (sida 202)
Du missade... (sida 203)
I början sa du att det var ett sätt att göra ett reguljärt uttryck teckenskiftsokänsligt? (sida 203)
Jag tror jag börjar förstå dessa reguljära uttryck nu ... hur använder jag dem i calibre? (sida 203)
– Omvandlingar (sida 203)
– Lägga till böcker (sida 204)
– Massredigera metadata (sida 204)
Erkännande (sida 204)
Först ett varningens ord och ett ord av mod
Detta kommer, oundvikligen, att vara något teknisk- trots allt, reguljära uttryck är ett tekniskt verktyg för att göra
tekniska saker. Jag kommer att behöva använda en del jargong och begrepp som kan verka komplicerat och invecklat.
Jag ska försöka förklara dessa begrepp så tydligt som jag kan, men egentligen kan jag inte göra det utan att använda
dem alla. Med detta sagt, förkasta inte detta på grund av all jargong, jag har försökt att förklara allt nytt. Och medan
reguljära uttryck själva kan verka som en svårbegripliga, svart magi (eller för att vara mer prosaisk, en slumpmässig
sträng av rappakalja bokstäver och tecken), jag lovar att det är inte så komplicerat. Även de som förstår vanliga uttryck
riktigt bra kan ha problem med att läsa de mer komplexa, men att skriva dem är inte så svårt - du konstruerar uttrycket
steg för steg. Så, ta ett steg och följa mig in i kaninhålet.
Var i calibre kan du använda reguljära uttryck?
Det finns ett fåtal platser calibre använder reguljära uttryck. Det finns Sök & Ersätt i konverteringsalternativ, metadatadetektering från filnamn i importinställningar och Sök och ersätt när du redigerar metadata för böcker i grupp. Calibre
editorn kan även använda reguljära uttryck i sin “sök och ersätt”-funktion.
Vad i hela världen är ett reguljärt uttryck?
Ett reguljärt uttryck är ett sätt att beskriva en uppsättningar strängar. En enda reguljära uttryck kan passa flera olika
strängar. Det är det som gör reguljära uttryck så kraftfulla - de är ett kortfattad sätt att beskriva ett potentiellt stort antal
varianter.
Observera: Jag använder sträng här i den mening den används i programspråk: en sträng av ett eller flera tecken,
tecken inklusive faktiska tecken, siffror, skiljetecken och sk blanktecken (radbrytningar, tabulatorer etc.). Observera
att i allmänhet anses inte stora och små bokstäver vara samma, alltså “a” som en annan karaktär från “A” och så
vidare. I calibre, är reguljära uttryck skiftlägesokänslig i sökfältet, men inte i konverteringsalternativet. Det finns ett
sätt att göra alla reguljära uttryck fall okänsligt, men vi kommer att diskutera det senare. Det blir komplicerat eftersom
reguljära uttryck tillåter variationer i stråk det passar, så ett uttryck kan passa flera strängar, vilket är varför folk bryr
sig att använda dem. Mer om det om ett tag.
200
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Vill du förklara?
Tja, det är därför vi är här. För det första är detta det viktigaste konceptet i reguljära uttryck: En sträng i sig är ett
reguljärt uttryck som passar mot sig själv. Det vill säga, om jag ville passa mot strängen ‘‘ “Hej, värld!” ‘‘ genom
att använda ett reguljärt uttryck, skulle det reguljära uttrycket för att använda vara Hej, värld!. Och ja, det är
verkligen så enkelt. Du kommer att märka dock att detta bara passar den exakta strängen ‘‘ “Hej, värld!” ‘‘, Inte t.ex.
‘‘ “Hej världen!” ‘‘ Eller ‘‘ “Hej, vÄrlden!” ‘‘ Eller någon annan sådan variation.
Det låter inte så illa. Vad händer nu?
Nästa är början på riktigt bra grejer. Kom ihåg var jag sa att reguljära uttryck kan passa mot flera strängar? Det är här
det blir lite mer komplicerat. Säg, som en något mer praktisk övning, e-boken du ville konvertera hade en otäck sidfot
som räknar sidor, “Sida 5 av 423”. Uppenbarligen skulle sidnumret stiga 1-423, så du skulle behöva passa mot 423
olika strängar, eller hur? Fel, faktiskt: reguljära uttryck kan du definiera uppsättningar av tecken som passande: För
att definiera en uppsättning, du lägger alla de tecken du vill vara i uppsättningen inom hakparenteser. Så, till exempel,
uppsättningen ‘‘ [abc] ‘‘ skulle passa antingen tecknet “a”, “b” eller “c”. uppsättningarna kommer alltid bara passa
en av karaktärerna i uppsättningen. De “förstår” teckenformattering, det vill säga om du ville passa mot alla små
bokstäver, skulle du använda den inställda ‘‘ [az] ‘‘ för gemener och versaler som du skulle använda ‘‘ [a-zA Z] ‘‘
osv. förstår du principen? Så, självklart, med hjälp av uttrycket ‘‘ Sida [0-9] i 423‘‘ du skulle kunna passa de första
nio sidorna, vilket minskar uttrycken behövs för tre: Det andra uttrycket ‘‘ Sida [0-9] [0-9] av 423‘‘ skulle passa alla
tvåsiffriga sidnummer, och jag är säker på att du kan gissa vad den tredje uttryck skulle se ut. Ja, gå vidare. Skriv ner
det.
Hej, snyggt! Detta börjar låta vettigt!
Jag hoppades att du skulle säga det. Men förvänta dig själv, nu blir det ännu bättre! Vi såg precis att du använder
apparater, kunde vi passa ett av flera tecken på en gång. Men du kan även upprepa ett tecken eller uppsättning, för
att minska antalet uttryck som behövs för att hantera det ovan sidnummerexemplet till ett. Ja, ETT! Upphetsad? Du
bör vara det! Det fungerar så här: En del så kallade specialtecken “+”, ”?” och “*”, * upprepa enda element som
föregår dem*. (Element antingen ett enda tecken, en teckenuppsättning, en escape-sekvens eller en grupp (vi ska lära
oss om de två sista senare) -. Kort sagt, en enda enhet i ett reguljärt uttryck) är Dessa tecken kallas jokertecken eller
kvantifikatorer. För att vara mer exakt, ”?” passar 0 eller 1 förekomster av det föregående elementet, “*” passar 0 eller
flera för det föregående elementet och “+” passar 1 eller flera av det föregående elementet. Några exempel:? Uttrycket
‘‘ a ‘‘ skulle passa antingen “” (som är den tomma strängen, inte strikt användbar i detta fall) eller “a”, uttrycket a*
skulle passa mot “”, “a”,”aa” eller valfritt antal a: n i rad, och slutligen uttrycket‘ a+ skulle passa “a”,”aa” eller valfritt
antal a: n i rad (Obs: det skulle inte passa mot den tomma strängen!). Samma gäller för uppsättningar: Uttrycket ‘
[0-9]+ ‘‘ skulle passa varje heltal finns det! Jag vet vad du tänker, och du har rätt: Om du använder det i ovanstående
fall passa mot sidnummer, skulle inte det vara det enda uttryck som passar alla sidnummer? Ja, uttrycket ‘‘ Page [0-9]+
av 423‘‘ skulle passa mot varje sidnummer i boken!
Observera: En kommentar om dessa kvantifikatorer: De försöker i allmänhet att passa mot så mycket text som möjligt, så var försiktig när du använder dem. Detta kallas “girigt beteende” - Jag är säker på att du förstår varför. Det blir
problematiskt när man, säg, försöker passa mot en etikett. Tänk till exempel, strängen "<p class ="calibre2">
Titel här </p>" och låt oss säga att du skulle vilja passa startmarkeringne (delen mellan det första paret vinkelfästen, lite mer om etiketter senare). Man skulle kunna tro att uttrycket ‘‘ <p.*> ‘‘ Skulle passa mot den markeringen,
men faktiskt, passar det hela strängen! (Tecknet ”.” Är ett annat specialtecken. Den passar något utom radbrytningar, så
i grund och botten, uttrycket .* Skulle passa vilken rad du än kan tänka dig.) Försök istället att använda <p.*?> som
gör kvantifierare ‘‘ “*” ‘‘ icke-giriga. Detta uttryck skulle bara passa den första öppningsmarkeringen, som avsett. Det
finns faktiskt ett annat sätt att åstadkomma detta: Uttrycket <p[^>]*> passar denna öppningsmarkering- du kommer
se varför efter nästa avsnitt. Bara konstatera att det ganska ofta finns mer än ett sätt att skriva ett reguljärt uttryck.
1.9. Handledning
201
calibre Användarhandbok, Utgåva 2.22.0
Tja, är dessa specialtecken är mycket snygga och allt, men vad händer om jag ville passa mot en
punkt eller ett frågetecken?
Du kan givetvis göra det: Bara sätt ett omvänt snedstreck (bakåtsnedstreck) framför någon speciell karaktär och det
tolkas som bokstavskaraktär, utan någon speciell betydelse. Detta par av ett omvänt snedstreck följt av ett enda tecken
kallas en escape-sekvens (flyktsekvensen), och handlingen att sätta ett omvänt snedstreck framför ett specialtecken kallas escape-tecknet (flykttecken). En flyktsekvensen tolkas som ett enda element. Det finns naturligtvis flyktsekvensener
som gör mer än att bara flyr specialtecken, till exempel ‘‘“t” ‘‘: en tabulator. Vi kommer till en del av de kontrollsekvenser senare. Åh, och förresten, om dessa specialtecken: Tänk alla tecken som vi diskuterar i denna introduktion
som har någon funktion att vara speciell och därför kan behöva flyktmarkeras om du vill ha bokstavskaraktären.
Så, vilka är de mest användbara uppsättningarna?
Visste att du skulle fråga. Några användbara uppsättningar är [0-9] passar ett enda nummer, [az] passar en enda
liten bokstav, [AZ] passar en enda versal [a-zA Z] passar en enda bokstav och [a-zA-Z0-9] passar en enda
bokstav eller siffra. Du kan också använda en flyktsekvens (escape-sekvens) som stenografer:
\d is equivalent to [0-9]
\w is equivalent to [a-zA-Z0-9_]
\s is equivalent to any whitespace
Observera: “Blanktecken” är en term för något som inte kommer att skrivas ut. Dessa tecken inkluderar utrymme,
tabulator, radmatning, sidmatning och vagnretur.
Som en sista anmärkning om grupper, du kan också definiera en uppsättning som alla tecken men de i uppsättningen.
Du gör det genom att inkludera tecknet "^" som det första tecknet i uppsättningen. Således ‘‘ [^ a] ‘‘ skulle passa
alla tecken utom “a”. Det kallas att komplettera uppsättningen. Dessa flyktsekvens stenografier vi såg tidigare kan
också kompletteras: "\D": vilket betyder någon ickenummer-karaktär, vilket är ekvivalent med [^0-9]. De andra
stenografier kan kompletteras med, du gissade rätt, med hjälp av respektive versal i stället för det gemena tecknet. Så,
går tillbaka till exemplet ‘‘<p[^>]*‘>‘ från föregående avsnitt, nu kan du se till att teckenuppsättning det använder
försöker passa alla tecken med undantag för ett avslutande vinkelparentes.
Men om jag hade några olika strängar jag ville passa mot, blir inte saker komplicerade?
Frukta inte, ändå är livet bra och lätt. Tänk på detta exempel: Boken du konverterar har “Titel” skrivet på varje udda
sida och “författare” skrivet på varje jämn sida. Ser bra i tryck, eller hur? Men i e-böcker, är det irriterande. Du kan
gruppen hela uttryck i normala parenteser och tecknet "|" låter dig passa antingen uttrycket till höger eller det till
vänster. Kombinera dessa och du är klar. För fort för dig? Okej, först ut, vi grupperar uttrycken för udda och jämna
sidor och på så sätt få (titel) (författare) som våra två nödvändiga uttryck. Nu gör vi det enklare genom att
använda det lodräta strecket ("|" kallas lodrätt strecktecken): Om du använder uttrycket ‘ (Titel|Författare)‘‘ kommer
du antingen få en passning för “Titel”(på udda sidor) eller du skulle passa mot “författare” (på jämna sidor). Tja, var
inte så lätt?
Du kan naturligtvis använda det lodräta strecket utan att använda grupperingsparenteser, lika så. Kommer du ihåg
när jag sa att kvantifierare upprepar elementet som föregår dem? Tja, det vertikala strecket fungerar lite annorlunda:
Uttrycket “Titel|Författare” kommer också att passa antingen strängen “Titel” eller strängen “Författare”, precis som
ovanstående exempel med hjälp av gruppering. Det vertikala strecket väljer mellan hela uttrycket före och efter den.
Så, om du ville matcha strängarna “Calibre” och “calibre” och ville bara välja mellan det övre och små bokstäver “c”,
skulle du behöva använda uttrycket (c|C)alibre, där grupperingen säkerställer att endast “c” kommer att väljas.
Om du skulle använda c|Calibre, du skulle få en match på strängen “c” eller på strängen “Calibre”, vilket inte är
vad vi ville ha. Kort sagt: Om du är osäker, använd gruppering tillsammans med det vertikala strecket.
202
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Du missade...
... Vänta lite, det finns en sista, riktigt snygg sak du kan göra med uppsättningar. Om du har en uppsättning som du
tidigare passade mot kan du använda referenser till uppsättningen senare i uttrycket: Uppsättningar är numrerade med
början 1, och du refererar till dem genom att flyktnumret på den uppsättning som du vill referera till, alltså den femte
gruppen skulle kallad \5. Så, om du sökte ([^]+)\1 i strängen “Test Test”, skulle du passa mot hela strängen!
I början sa du att det var ett sätt att göra ett reguljärt uttryck teckenskiftsokänsligt?
Ja, det gjorde jag, tack för att uppmärksammade och påminde mig. Du kan berätta för calibre hur du vill vissa saker
hanteras med hjälp av något som kallas flaggor. Du inkluderar flaggor i ditt uttryck med hjälp av speciella konstruktionen (? Flaggor finns här) där, naturligtvis, skulle du byta ut “flaggor finns här” med de specifika flaggor du
vill ha. För att ignorera teckenskiftsläge finns flaggan i därmed inkluderar du (?i) i ditt uttryck. Således test(?i)
skulle passa mot “Test”, “tEst”, “TEst”, och varje fall variation du kan tänka dig.
En annan användbar flagga tillåter att pricka in alla tecken, inklusive på ny rad, flaggan s. Om du vill använda flera
flaggor i ett uttryck, bara sätta dem i samma gruppering: (?is) skulle ignorera teckenskiftsläge och göra passa alla.
Det spelar ingen roll vilken flagga som du anger först, (?si) skulle motsvara den ovan. Förresten, skulle bra ställen
för att sätta flaggor i ditt uttryck är antingen i början eller slutet. Då behöver de inte blandas ihop med något annat.
Jag tror jag börjar förstå dessa reguljära uttryck nu ... hur använder jag dem i calibre?
Omvandlingar
Låt oss börja med konverteringsinställningarna, vilket är riktigt snyggt. I Sök- och ersättsdel, kan mata in en regexp
(kort för reguljära uttryck) som beskriver den sträng som kommer att bytas ut under omvandlingen. Den nätta delen
är guiden. Klicka på guiden och du får en förhandsvisning av vad calibre “ser” under konverteringen. Bläddra ner till
den sträng som du vill ta bort, markera och kopiera den, klistra in den i regexp fältet högst upp i fönstret. Om det
finns variabla delar, t.ex. sidnummer eller så använder uppsättningar och kvantifierare för att täcka dem, och medan du
ändå håller på, kom ihåg att undkomma specialtecken, om det finns några. Klicka på knappen Test och calibre belyser
delarna som skulle ersättas om du använder regexp. När du är nöjd, klicka på OK och konvertera. Var försiktig om din
konverteringskällan har etiketter som detta exempel
Maybe, but the cops feel like you do, Anita. What's one more dead vampire?
New laws don't change that. </p>
<p class="calibre4"> <b class="calibre2">Generated by ABC Amber LIT Conv
<a href="http://www.processtext.com/abclit.html" class="calibre3">erter,
http://www.processtext.com/abclit.html</a></b></p>
<p class="calibre4"> It had only been two years since Addison v. Clark.
The court case gave us a revised version of what life was
(skamlöst utsliten denna tråd <http://www.mobileread.com/forums/showthread.php?t=75594”> ‘_). Du skulle behöva
ta bort en del av de etiketter också. I det här exemplet jag skulle rekommendera börjar med etiketten ‘ <b class = “calibre2”> , nu måste du sluta med motsvarande avslutande etikett (öppnande etikett
är ‘‘ <tag> ‘‘, avslutande etikett är ‘‘ </tag> ‘‘), som helt enkelt är nästa
‘‘ </b> ‘‘ i detta fall. (Se en bra HTML-handboken eller fråga i forumet om du
är osäker på denna punkt.) Öppnande etiketter kan vara beskrivna med ‘‘<b.*?>
‘‘, den avslutande etiketter med hjälp av ‘‘ </b> ‘‘, vilket vi kunde ta bort
allt mellan dessa etiketter med hjälp av ‘‘<b.*?>.*?</b>. Men att använda detta uttryck
skulle vara en dålig idé, eftersom det tar bort allt som omges av <b> - etiketter (som förresten, gör den medföljande
text i fetstil), och det är en rimlig satsning som vi kommer att ta bort delar av boken på det här sättet. Istället, omfattar
början av den medföljande strängen också, vilket gör det reguljära uttrycket <b.*?>\s * Skapad \ s + med
\ s + ABC \ s + Amber \ s + LIT. *?</b> det \s med kvantifierare ingår här i stället för explicit
använder utrymmena som sett i strängen för att fånga några varianter av den sträng som kan uppstå. Kom ihåg att
1.9. Handledning
203
calibre Användarhandbok, Utgåva 2.22.0
kontrollera vad calibre kommer att ta bort för att se till att du inte bort några delar som du vill behålla, om du testar ett
nytt uttryck. Om du bara kolla en förekomst, kanske du missar en obalans någon annanstans i texten. Observera också
att om du av misstag tar bort fler eller färre etiketter än du faktiskt ville, calibre försöker reparera den skadade koden
efter avlägsnandet gjorts.
Lägga till böcker
En annan sak du kan använda reguljära uttryck för är att utvinna metadata från filnamn. Du hittar den här funktionen
“Lägga till böcker” i en del av inställningarna. Det finns en speciell funktion här: Du kan använda fältnamn för metadatafält, till exempel (?P<titel>)‘ tyder på att Calibre använder denna del av strängen som boktiteln. De tillåtna fält
namn upptas i fönstren, tillsammans med en annan trevlig testfält. Ett exempel: Säg att du vill importera en hel massa
filer namnges som ‘‘ Klassiska texter: Den gudomliga komedin av Dante Alighieri.mobi‘‘. (Uppenbarligen är detta
redan i ditt bibliotek, eftersom vi alla älskar klassisk italiensk poesi) eller ‘‘ science epos: Stiftelsen Trilogy av Isaac
Asimov.epub‘‘. Detta är naturligtvis ett namngivningssystem som calibre inte kommer att packa några meningsfulla
uppgifter ur sitt standarduttryck för att extrahera metadata är (?P<title>.+) - (?P<author>[^_]+). Ett
reguljärt uttryck som fungerar här skulle vara ‘[a-zA-Z]+: (?P<title>.+) by (?P<author>.+). Observera att inom gruppen för metadatafält, måste du använda uttryck för att beskriva vad fältet verkligen ska passa.
Och också notera att, vid användning av testfältet calibre ger, måste du lägga till filändelsen till testning filnamn, annars
kommer du inte få några passningar alls, trots användningen av ett fungerande uttryck.
Massredigera metadata
Den sista delen är reguljära uttryck sök och ersätt i metadatafält. Du kan komma åt detta genom att markera flera
böcker i biblioteket och genom massmetadataredigering. Var mycket försiktig när du använder denna sista funktion,
eftersom det kan göra Mycket dåliga saker till ditt bibliotek! Dubbelkolla att dina uttryck verkligen gör vad du vill att
de ska med hjälp av testfält, och bara markera de böcker du verkligen vill förändra! I det reguljära uttrycket sökläget
kan du söka i ett fält, byta ut texten med något och till och med skriva in resultatet i ett annat fält. Ett praktiskt exempel:
Anta ditt bibliotek innehöll böcker av Frank Herberts Dune-serien, uppkallad efter stilen ‘‘ Dune 1 - Dune‘‘, ‘‘ Dune 2
- Dune Messiah‘‘ osv. Nu vill du få ‘‘ Dune‘‘ in i serien fältet. Du kan göra det genom att söka efter \d+(*.?) -.*
I titelfältet och ersätta den med \1 i serien fältet. Se vad jag gjorde där? Det är en referens till den första gruppen som
du byter ut seriefält med. Nu när du har serien allt klart, bara måste du göra en ny sökning efter .*? - I titelfältet
och ersätta den med (en tom sträng), en gång i titelfältet, och ditt metadata är allt snyggt och prydligt. Är inte det
bra? Förresten, i stället för att byta ut hela fältet, kan du också bifoga eller lägga till fältet, så, om du ville att bokens
titel ska infogas med serier info, kan du göra det också. Som ni nu har utan tvivel märkt, det finns en kryssruta märkt
Skiftlägeskänslig, så att du inte behöver använda flaggor för att välja beteende här.
Tja, det nästan avslutar en mycket kort introduktion till reguljära uttryck. Förhoppningsvis kommer jag ha visat dig
tillräckligt för att åtminstone komma igång och så att du kan fortsätta lära dig själv - en bra utgångspunkt skulle vara
Python dokumentationen för reguljära uttryck79 .
Ett sista ord av varning, emellertid: Regexps är kraftfulla, men också riktigt lätt att göra fel. calibre ger riktigt bra
testmöjligheter för att se om dina uttryck beter sig som du förväntar dig. Använd dem. Försök att inte skjuta dig själv
i foten. (Gud, jag älskar det uttrycket ...) Men om du trots varningen, skada foten (eller andra kroppsdelar), försök att
lära av det.
Erkännande
Tack för hjälp med tips, rättningar och liknande:
• ldolse
• kovidgoyal
79 https://docs.python.org/2/library/re.html
204
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• chaley
• dwanthny
• kacir
• Starson17
För mer om reguljära uttryck se ‘The Python User Manual https://docs.python.org/2/library/re.html>‘_.
1.9.6 Integrera calibre innehållsserver till andra servrar
Här, vi kommer visa hur du integrerar calibre-innehållsserver till en annan server. Den vanligaste orsaken till detta
är att använda sig av SSL eller mer sofistikerad autentisering. Det finns två huvudsakliga metoder: Köra calibreinnehållsserver som en fristående process och med hjälp av en omvänd proxy för att ansluta den med din huvudsakliga
server eller kör innehållsservern i processen i huvudservern med WSGI. Exemplen nedan är alla för Apache 2.x på
Linux, men bör vara lätt att anpassa till andra plattformar.
Innehåll
• Använder en omvänd proxy (sida 205)
• Under bearbetning (sida 206)
Observera: Detta gäller bara Calibre-versioner >= 0.7.25
Använder en omvänd proxy
En omvänd proxy är när din normala servern accepterar inkommande förfrågningar och skickar dem på calibre servern. Det läser sedan svaret från calibre-servern och vidarebefordrar det till klienten. Detta innebär att du helt
enkelt kan köra calibre-servern som vanligt utan att försöka integrera den nära med din huvudsakliga-server, och du
kan dra nytta av oavsett autentiseringssystem din huvudservern har på plats. Detta är det enklaste tillvägagångssättet
eftersom det tillåter dig att använda den binära calibre som installerats utan yttre beroenden / krav systemintegration.
Nedan är ett exempel på hur detta kan uppnås med Apache som huvudserver, men det kommer att fungera med alla
servrar som stöder Reverse Proxy.
Först starta calibre-innehållsserver som visas nedan:
calibre-server --url-prefix /calibre --port 8080
Nyckelparametern här är --url-prefix /calibre. Den får innehållsservern att serva alla URL:er som prefixas
av Calibre. För att se detta i handling, besök http://localhost:8080/calibre i din webläsare. Du bör se
den normala innehållsserverns hemsida, men nu kör den under /calibre.
Nu antag att du använder Apache som huvudserver. Först tillåt proxy-moduler i apache genom att lägga till följande
httpd.conf:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Den exakta tekniken för att möjliggöra proxymoduler varierar beroende på din Apache-installation. När du aktiverar
proxy-modulerna, lägg till följande regler till httpd.conf (eller om du använder virtuella värdar till conf-filen för den
virtuella värden i fråga):
1.9. Handledning
205
calibre Användarhandbok, Utgåva 2.22.0
RewriteEngine on
RewriteRule ^/calibre/(.*) http://localhost:8080/calibre/$1 [proxy]
RewriteRule ^/calibre http://localhost:8080 [proxy]
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
Det är allt, du kommer nu kunna accessa calibre-innehållsservern under /calibre URL i din apache-server. Ovan regler
vidarbefodrar alla begäran under /calibre till Calibre-server som kör på port 8080 och tack vare -url-prefixet valet ovan,
kommer Calibre-server hantera dem transparent.
Observera: Om du är villig att ägna en hel virtuellvärd till innehållsserver så kommer du inte behöva använda –urlprefixet och skriva om regler utan bara använda ProxyPass direktivet.
Observera: Servermotorn Calibre använder, CherryPy, kan ha problem med proxy och “KeepAlive”-begäran, så stäng
av dem i Apache, med SetEnv direktivet som visas ovan.
Under bearbetning
Calibres innehållsserver kan köra direkt, i processen, i en värdserver som Apache genom att använda WSGI-ramverk.
Observera: För att detta ska fungera, måste alla beroenden som behövs av Calibre vara installerade på ditt system.
Att göra detta är en högst icke-trivialt och du uppmanas att inte använda i processervrar. Du kommer inte få någon
hjälp med felsökning för serverprocessproblem.
Först, måste vi skapa en WSGI anpassning för Calibres-innehållsserver. Här är en mall som du kan använda för detta
syfte. Ersätt sökvägar som anvisas i kommentarerna
# WSGI script file to run calibre content server as a WSGI app
import sys, os
# You can get the paths referenced here by running
# calibre-debug --paths
# on your server
# The first entry from CALIBRE_PYTHON_PATH
sys.path.insert(0, '/home/kovid/work/calibre/src')
# CALIBRE_RESOURCES_PATH
sys.resources_location = '/home/kovid/work/calibre/resources'
# CALIBRE_EXTENSIONS_PATH
sys.extensions_location = '/home/kovid/work/calibre/src/calibre/plugins'
# Path to directory containing calibre executables
sys.executables_location = '/usr/bin'
# Path to a directory for which the server has read/write permissions
# calibre config will be stored here
os.environ['CALIBRE_CONFIG_DIRECTORY'] = '/var/www/localhost/calibre-config'
del sys
del os
206
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
from calibre.library.server.main import create_wsgi_app
application = create_wsgi_app(
# The mount point of this WSGI application (i.e. the first argument to
# the WSGIScriptAlias directive). Set to empty string is mounted at /
prefix='/calibre',
# Path to the calibre library to be served
# The server process must have write permission for all files/dirs
# in this directory or BAD things will happen
path_to_library='/home/kovid/documents/demo library',
# The virtual library (restriction) to be used when serving this
# library.
virtual_library=None
)
del create_wsgi_app
Spara denna anpassning som calibre-wsgi-adpater.py någonstans som din server har access till.
Låt oss anta att vi vill använda WSGI i Apache. Först tillåt WSGI i Apache genom att lägga till följande httpd.conf:
LoadModule wsgi_module modules/mod_wsgi.so
Den exakta tekniken för att tillåta wsgi-modulen kommer variera beroende på din Apache-installation. När du har
tillåtit proxy-moduler, lägg till följande regler till httpd.conf (eller om du använder virtuella värdar till conf-filen för
den virtuella värden i fråga:
WSGIScriptAlias /calibre /var/www/localhost/cgi-bin/calibre-wsgi-adapter.py
Ändra sökväg till calibre-wsgi-adapter.py till vad oavset tdu sparade den tidigare (se bara till att Apache
har access till den).
Det är allt, du kommer nu kunna nå calibre-innehållsservern under /calibre-URL i din apache-server.
Observera: För mer hjälp med att använda mod_wsgi i Apache, se mod_wsgi80 .
1.9.7 Skriva dina egna tillägg för att utöka calibres funktionalitet
calibre är en väldigt modulär konstruktion. Nästan alla funktioner i calibre kommer i form av tilläggsprogram. Tilläggsprogram används för omvandling, för nedladdning av nyheter (även om dessa kallas för recept), för diverse komponenter av användargränssnitt, för anslutning av olika enheter, för bearbetning av filer när de läggs till calibre och så
vidare. Du kan få en komplett lista av alla inbyggda tilläggsprogram i calibre genom att gå till Inställningar->Tillägg.
Här kommer vi att lära dig att skapa dina egna tillägg för att lägga till nya funktioner för att calibre.
80 http://code.google.com/p/modwsgi/wiki/WhereToGetHelp
1.9. Handledning
207
calibre Användarhandbok, Utgåva 2.22.0
Innehåll
• Anatomi av ett calibre-tillägg (sida 208)
• Ett gränssnittstillägg (sida 209)
– __init__.py (sida 210)
– ui.py (sida 211)
– main.py (sida 212)
– Att få resurser från tilläggs zip-filen (sida 215)
– Aktivera konfiguration användare av ditt tillägg (sida 215)
• Redigera boktillägg (sida 217)
– main.py (sida 217)
• Lägger till översättningar till ditt tillägg (sida 220)
• Tilläggs-API (sida 220)
• Felsök tilläggen (sida 221)
• Fler tilläggsexempel (sida 221)
• Dela dina tillägg med andra (sida 221)
Observera: Detta gäller bara calibreversioner >= 0.8.60
Anatomi av ett calibre-tillägg
Ett calibre-tillägg är mycket enkel, det är bara en zip-fil som innehåller en del python-kod och alla andra resurser som
bildfiler som behövs av tillägget. Utan vidare väsem, låt oss se ett grundläggande exempel.
Anta att du har en installation av calibre som du använder för att själv publicera olika e-dokument i EPUB- och MOBIformat. Du vill att alla filer som genereras av calibre att få sin förläggare in som “Hej världen”, här är hur man gör det.
Skapa en fil med namnet: file: __init __ py (detta är ett särskilt namn och ska alltid användas för huvudfilen för ditt
tillägg) och skriv in följande Python-kod i den.:
import os
from calibre.customize import FileTypePlugin
class HelloWorld(FileTypePlugin):
name
= 'Hello World Plugin' # Name of the plugin
description
= 'Set the publisher to Hello World for all new conversions'
supported_platforms = ['windows', 'osx', 'linux'] # Platforms this plugin will run on
author
= 'Acme Inc.' # The author of this plugin
version
= (1, 0, 0)
# The version number of this plugin
file_types
= set(['epub', 'mobi']) # The file types that this plugin will be applied to
on_postprocess
= True # Run this plugin after conversion is complete
minimum_calibre_version = (0, 7, 53)
def run(self, path_to_ebook):
from calibre.ebooks.metadata.meta import get_metadata, set_metadata
file = open(path_to_ebook, 'r+b')
ext = os.path.splitext(path_to_ebook)[-1][1:].lower()
mi = get_metadata(file, ext)
mi.publisher = 'Hello World'
set_metadata(file, mi, ext)
return path_to_ebook
Det är allt. För att lägga till denna kod till calibre som ett tillägg, bara kör följande i katalogen där du skapade: file:
__init __ py ::.
208
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
calibre-customize -b .
Observera:
På
OS
X,
kommandoradverktyget
är
inne
i
calibre
paketet,
till
exempel
om
du
installerar
Calibre
i
/Applications
är
kommandoradverktyget
i
/Applications/calibre.app/Contents/console.app/Contents/MacOS/.
Du kan ladda ner Hello World plugin från helloworld_plugin.zip81 .
Varje gång du använder calibre att konvertera en bok, kommer tillägget: meth: run metod att anropas och den konverterade boken kommer att ha sin förläggare satt till” Hello World ”. Detta är ett trivialt tillägg, låt oss gå vidare till ett
mer komplext exempel som faktiskt lägger till en komponent till användargränssnittet.
Ett gränssnittstillägg
Detta tillägg kommer att spridas över några filer (för att hålla koden ren). Det kommer att visa dig hur du får resurser
(bilder eller datafiler) från tilläggs zip-filen, tillåta användare att konfigurera tillägg, hur man skapar element i calibres
användargränssnittet och hur man kommer åt och söka i böcker databasen i calibre.
Du kan ladda ner tillägg från interface_demo_plugin.zip82 Det första att notera är att denna zip-filen har mycket fler
filer i sig, som förklaras nedan, ta särskild hänsyn till plugin-import-name-interface_demo.txt.
plugin-import-name-interface_demo.txt En tom textfil som används för att göra det möjligt för multifils tilläggsmagi. Filen måste finnas i alla tillägg som använder mer än en .py fil. Den ska vara tom
och filnamnet måste vara på formen: plugin-import-namn - some_name txt Förekomsten av denna
fil tillåter dig att importera koden från .py filerna som finns inne i zip-filen, med hjälp av ett uttalande.
liknande:
from calibre_plugins.some_name.some_module import some_object
Prefixet calibre_plugins måste alltid vara närvarande. some_name kommer från filnamnet
på den tomma textfilen. some_module avser: file: some_module.py fil inne i zip-filen. Observera
att denna import är lika kraftfull som valig python-importering. Du kan skapa paket och underpaket
för .py moduler inuti zip-filen, precis som du normalt skulle (genom att definiera __init__.py i varje
underkatalog), och allt ska bara fungera.
Namnet du använda för some_name går in i en globala namnrymden delas av alla plugins, så gör
det så unikt som möjligt. Men kom ihåg att det måste vara en giltigt python-identifierare (endast
alfabet, siffror och understreck).
__init__.py Liksom tidigare filen som definierar tilläggsklassen
main.py Den här filen innehåller den faktiska koden som gör något nyttigt
ui.py Denna fil definierar gränssnittsdelen av tillägget
images/icon.png Ikonen för detta tillägg
about.txt En textfil med information om tillägget
translationer En mapp innehåller .mo filer med översättningar av användargränssnittet i ditt tillägg till
olika språk. Se nedan för detaljer.
Låt oss nu titta på koden.
81 http://calibre-ebook.com/downloads/helloworld_plugin.zip
82 http://calibre-ebook.com/downloads/interface_demo_plugin.zip
1.9. Handledning
209
calibre Användarhandbok, Utgåva 2.22.0
__init__.py
örst den obligatoriska ‘‘ __init __ py‘‘ för att definiera tilläggsmetadata.:
# The class that all Interface Action plugin wrappers must inherit from
from calibre.customize import InterfaceActionBase
class InterfacePluginDemo(InterfaceActionBase):
'''
This class is a simple wrapper that provides information about the actual
plugin class. The actual interface plugin class is called InterfacePlugin
and is defined in the ui.py file, as specified in the actual_plugin field
below.
The reason for having two classes is that it allows the command line
calibre utilities to run without needing to load the GUI libraries.
'''
name
= 'Interface Plugin Demo'
description
= 'An advanced plugin demo'
supported_platforms = ['windows', 'osx', 'linux']
author
= 'Kovid Goyal'
version
= (1, 0, 0)
minimum_calibre_version = (0, 7, 53)
#: This field defines the GUI plugin class that contains all the code
#: that actually does something. Its format is module_path:class_name
#: The specified class must be defined in the specified module.
actual_plugin
= 'calibre_plugins.interface_demo.ui:InterfacePlugin'
def is_customizable(self):
'''
This method must return True to enable customization via
Preferences->Plugins
'''
return True
def config_widget(self):
'''
Implement this method and :meth:`save_settings` in your plugin to
use a custom configuration dialog.
This method, if implemented, must return a QWidget. The widget can have
an optional method validate() that takes no arguments and is called
immediately after the user clicks OK. Changes are applied if and only
if the method returns True.
If for some reason you cannot perform the configuration at this time,
return a tuple of two strings (message, details), these will be
displayed as a warning dialog to the user and the process will be
aborted.
The base class implementation of this method raises NotImplementedError
so by default no user configuration is possible.
'''
# It is important to put this import statement here rather than at the
# top of the module as importing the config class will also cause the
# GUI libraries to be loaded, which we do not want when using calibre
# from the command line
210
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
from calibre_plugins.interface_demo.config import ConfigWidget
return ConfigWidget()
def save_settings(self, config_widget):
'''
Save the settings specified by the user with config_widget.
:param config_widget: The widget returned by :meth:`config_widget`.
'''
config_widget.save_settings()
# Apply the changes
ac = self.actual_plugin_
if ac is not None:
ac.apply_settings()
Det enda anmärkningsvärda funktionen är planen actual_plugin. Eftersom calibre har både kommandoraden
och användargränssnitt bör tilläggets användargränssnitt som denna inte läser in bibliotekets användargränssnitt i
__init__.py. Den actual_plugin fältet gör detta åt dig, genom att berätta för calibre att det faktiska tillägget är att
finna i en annan fil i ditt zip-arkiv, som endast kommer att laddas i ett användargränssnittssammanhang.
Kom ihåg att för att detta ska fungera måste du ha ett plugin-import-name-some_name.txt filen i din tilläggs zip-fil,
som diskuterats ovan.
Också finns det ett par olika metoder för att möjliggöra konfiguration användare av tillägg. Dessa diskuteras nedan.
ui.py
Låt oss nu titta på ui.py som definierar själva användargränssnittstillägget. Källkoden är kraftigt kommenterade och
bör vara självförklarande:
# The class that all interface action plugins must inherit from
from calibre.gui2.actions import InterfaceAction
from calibre_plugins.interface_demo.main import DemoDialog
class InterfacePlugin(InterfaceAction):
name = 'Interface Plugin Demo'
# Declare the main action associated with this plugin
# The keyboard shortcut can be None if you dont want to use a keyboard
# shortcut. Remember that currently calibre has no central management for
# keyboard shortcuts, so try to use an unusual/unused shortcut.
action_spec = ('Interface Plugin Demo', None,
'Run the Interface Plugin Demo', 'Ctrl+Shift+F1')
def genesis(self):
# This method is called once per plugin, do initial setup here
#
#
#
#
#
#
#
#
Set the icon for this interface action
The get_icons function is a builtin function defined for all your
plugin code. It loads icons from the plugin zip file. It returns
QIcon objects, if you want the actual data, use the analogous
get_resources builtin function.
Note that if you are loading more than one icon, for performance, you
should pass a list of names to get_icons. In this case, get_icons
1.9. Handledning
211
calibre Användarhandbok, Utgåva 2.22.0
# will return a dictionary mapping names to QIcons. Names that
# are not found in the zip file will result in null QIcons.
icon = get_icons('images/icon.png')
# The qaction is automatically created from the action_spec defined
# above
self.qaction.setIcon(icon)
self.qaction.triggered.connect(self.show_dialog)
def show_dialog(self):
# The base plugin object defined in __init__.py
base_plugin_object = self.interface_action_base_plugin
# Show the config dialog
# The config dialog can also be shown from within
# Preferences->Plugins, which is why the do_user_config
# method is defined on the base plugin class
do_user_config = base_plugin_object.do_user_config
# self.gui is the main calibre GUI. It acts as the gateway to access
# all the elements of the calibre user interface, it should also be the
# parent of the dialog
d = DemoDialog(self.gui, self.qaction.icon(), do_user_config)
d.show()
def apply_settings(self):
from calibre_plugins.interface_demo.config import prefs
# In an actual non trivial plugin, you would probably need to
# do something based on the settings in prefs
prefs
main.py
Själva logiken för att implementera gränssnittsdialogen för tilläggsdemon.
from PyQt5.Qt import QDialog, QVBoxLayout, QPushButton, QMessageBox, QLabel
from calibre_plugins.interface_demo.config import prefs
class DemoDialog(QDialog):
def __init__(self, gui, icon, do_user_config):
QDialog.__init__(self, gui)
self.gui = gui
self.do_user_config = do_user_config
# The current database shown in the GUI
# db is an instance of the class LibraryDatabase2 from database.py
# This class has many, many methods that allow you to do a lot of
# things.
self.db = gui.current_db
self.l = QVBoxLayout()
self.setLayout(self.l)
self.label = QLabel(prefs['hello_world_msg'])
self.l.addWidget(self.label)
212
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
self.setWindowTitle('Interface Plugin Demo')
self.setWindowIcon(icon)
self.about_button = QPushButton('About', self)
self.about_button.clicked.connect(self.about)
self.l.addWidget(self.about_button)
self.marked_button = QPushButton(
'Show books with only one format in the calibre GUI', self)
self.marked_button.clicked.connect(self.marked)
self.l.addWidget(self.marked_button)
self.view_button = QPushButton(
'View the most recently added book', self)
self.view_button.clicked.connect(self.view)
self.l.addWidget(self.view_button)
self.update_metadata_button = QPushButton(
'Update metadata in a book\'s files', self)
self.update_metadata_button.clicked.connect(self.update_metadata)
self.l.addWidget(self.update_metadata_button)
self.conf_button = QPushButton(
'Configure this plugin', self)
self.conf_button.clicked.connect(self.config)
self.l.addWidget(self.conf_button)
self.resize(self.sizeHint())
def about(self):
# Get the about text from a file inside the plugin zip file
# The get_resources function is a builtin function defined for all your
# plugin code. It loads files from the plugin zip file. It returns
# the bytes from the specified file.
#
# Note that if you are loading more than one file, for performance, you
# should pass a list of names to get_resources. In this case,
# get_resources will return a dictionary mapping names to bytes. Names that
# are not found in the zip file will not be in the returned dictionary.
text = get_resources('about.txt')
QMessageBox.about(self, 'About the Interface Plugin Demo',
text.decode('utf-8'))
def marked(self):
''' Show books with only one format '''
fmt_idx = self.db.FIELD_MAP['formats']
matched_ids = set()
for record in self.db.data.iterall():
# Iterate over all records
fmts = record[fmt_idx]
# fmts is either None or a comma separated list of formats
if fmts and ',' not in fmts:
matched_ids.add(record[0])
# Mark the records with the matching ids
self.db.set_marked_ids(matched_ids)
# Tell the GUI to search for all marked records
self.gui.search.setEditText('marked:true')
1.9. Handledning
213
calibre Användarhandbok, Utgåva 2.22.0
self.gui.search.do_search()
def view(self):
''' View the most recently added book '''
most_recent = most_recent_id = None
timestamp_idx = self.db.FIELD_MAP['timestamp']
for record in self.db.data:
# Iterate over all currently showing records
timestamp = record[timestamp_idx]
if most_recent is None or timestamp > most_recent:
most_recent = timestamp
most_recent_id = record[0]
if most_recent_id is not None:
# Get the row number of the id as shown in the GUI
row_number = self.db.row(most_recent_id)
# Get a reference to the View plugin
view_plugin = self.gui.iactions['View']
# Ask the view plugin to launch the viewer for row_number
view_plugin._view_books([row_number])
def update_metadata(self):
'''
Set the metadata in the files in the selected book's record to
match the current metadata in the database.
'''
from calibre.ebooks.metadata.meta import set_metadata
from calibre.gui2 import error_dialog, info_dialog
# Get currently selected books
rows = self.gui.library_view.selectionModel().selectedRows()
if not rows or len(rows) == 0:
return error_dialog(self.gui, 'Cannot update metadata',
'No books selected', show=True)
# Map the rows to book ids
ids = list(map(self.gui.library_view.model().id, rows))
for book_id in ids:
# Get the current metadata for this book from the db
mi = self.db.get_metadata(book_id, index_is_id=True,
get_cover=True, cover_as_data=True)
fmts = self.db.formats(book_id, index_is_id=True)
if not fmts:
continue
for fmt in fmts.split(','):
fmt = fmt.lower()
# Get a python file object for the format. This will be either
# an in memory file or a temporary on disk file
ffile = self.db.format(book_id, fmt, index_is_id=True,
as_file=True)
# Set metadata in the format
set_metadata(ffile, mi, fmt)
ffile.seek(0)
# Now replace the file in the calibre library with the updated
# file. We dont use add_format_with_hooks as the hooks were
# already run when the file was first added to calibre.
ffile.name = 'xxx' # add_format() will not work if the file
# path of the file being added is the same
214
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# as the path of the file being replaced
self.db.add_format(book_id, fmt, ffile, index_is_id=True)
info_dialog(self, 'Updated files',
'Updated the metadata in the files of %d book(s)'%len(ids),
show=True)
def config(self):
self.do_user_config(parent=self)
# Apply the changes
self.label.setText(prefs['hello_world_msg'])
Att få resurser från tilläggs zip-filen
calibres tilläggsladdningsssystem definierar ett par inbyggda funktioner som gör att du bekvämt hämta filer från tilläggets zip-fil.
get_resources(name_or_list_of_names) Denna funktion bör anropas med en lista av sökvägar till filer i zip-filen. Till exempel för att komma åt filen icon.png i katalogen bilder i zip-filen, skulle du
använda: images / icon.png. Använd alltid ett snedstreck som sökvägsavgränsare, även på
fönstren. När du skickar vidare ett enda namn, kommer funktionen returnera råa oktettfilen eller
Ingen om namnet inte hittades i zip-filen. Om du skickar mer än ett namn så är det returneras en ordlista passande namn till oktett. Om ett namn inte hittas, kommer det inte att finnas i den returnerade
listan.
get_icons(name_or_list_of_names) Ett bekvämligt omslag för get_resources() som skapar QIcon objekt
från rådata returneras av get_resources. Om ett namn inte finns i zip-filen blir motsvarande QIcon
null.
Aktivera konfiguration användare av ditt tillägg
För att tillåta användare att konfigurera tillägg måste du definiera tre metoder i din bastilläggsklass, ‘is_customizable,
config_widget och save_settings enligt nedan:
def is_customizable(self):
'''
This method must return True to enable customization via
Preferences->Plugins
'''
return True
def config_widget(self):
'''
Implement this method and :meth:`save_settings` in your plugin to
use a custom configuration dialog.
This method, if implemented, must return a QWidget. The widget can have
an optional method validate() that takes no arguments and is called
immediately after the user clicks OK. Changes are applied if and only
if the method returns True.
If for some reason you cannot perform the configuration at this time,
return a tuple of two strings (message, details), these will be
displayed as a warning dialog to the user and the process will be
aborted.
1.9. Handledning
215
calibre Användarhandbok, Utgåva 2.22.0
The base class implementation of this method raises NotImplementedError
so by default no user configuration is possible.
'''
# It is important to put this import statement here rather than at the
# top of the module as importing the config class will also cause the
# GUI libraries to be loaded, which we do not want when using calibre
# from the command line
from calibre_plugins.interface_demo.config import ConfigWidget
return ConfigWidget()
def save_settings(self, config_widget):
'''
Save the settings specified by the user with config_widget.
:param config_widget: The widget returned by :meth:`config_widget`.
'''
config_widget.save_settings()
# Apply the changes
ac = self.actual_plugin_
if ac is not None:
ac.apply_settings()
calibre har många olika sätt att lagra konfigurationsdata (ett arv av sin långa historia). Det rekommenderade sättet är
att använda JSONConfig klass, som lagrar konfigurationsinformationen i en .json-fil.
Koden för att hantera konfigurationsdata i demotillägget är i config.py:
from PyQt5.Qt import QWidget, QHBoxLayout, QLabel, QLineEdit
from calibre.utils.config import JSONConfig
# This is where all preferences for this plugin will be stored
# Remember that this name (i.e. plugins/interface_demo) is also
# in a global namespace, so make it as unique as possible.
# You should always prefix your config file name with plugins/,
# so as to ensure you dont accidentally clobber a calibre config file
prefs = JSONConfig('plugins/interface_demo')
# Set defaults
prefs.defaults['hello_world_msg'] = 'Hello, World!'
class ConfigWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
self.l = QHBoxLayout()
self.setLayout(self.l)
self.label = QLabel('Hello world &message:')
self.l.addWidget(self.label)
self.msg = QLineEdit(self)
self.msg.setText(prefs['hello_world_msg'])
self.l.addWidget(self.msg)
self.label.setBuddy(self.msg)
def save_settings(self):
216
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
prefs['hello_world_msg'] = unicode(self.msg.text())
Den prefs-objekt är nu tillgängligt i hela tilläggskoden med en enkel:
from calibre_plugins.interface_demo.config import prefs
Du kan se prefs-objekt användas i main.py:
def config(self):
self.do_user_config(parent=self)
# Apply the changes
self.label.setText(prefs['hello_world_msg'])
Redigera boktillägg
Nu ska växla för lite och ser till att skapa ett tillägg för att lägga verktyg till för calibre-bokeditorn. Tillägget finns här:
editor_demo_plugin.zip83 .
Det första steget, som för alla tillägg är att skapa importnamnet tom txt-fil, som beskrivs ovan (sida 209). Vi ska
namnge filen plugin-import-name-editor_plugin_demo.txt.
Nu skapar vi den obligatoriska __init __ py-filen som innehåller metadata om tillägget -. Sitt namn, författare,
version, etc.
from calibre.customize import EditBookToolPlugin
class DemoPlugin(EditBookToolPlugin):
name = 'Edit Book plugin demo'
version = (1, 0, 0)
author = 'Kovid Goyal'
supported_platforms = ['windows', 'osx', 'linux']
description = 'A demonstration of the plugin interface for the ebook editor'
minimum_calibre_version = (1, 46, 0)
En enda tilläggseditor kan ge flera verktyg varje verktyg motsvarar en knapp i verktygsfältet och posten i Tilläggsmenyn i editorn. Dessa kan ha undermenyer om verktyget har flera relaterade åtgärder.
Verktygen bör definieras i filen main.py i ditt tillägg. Varje verktyg är en klass som ärver från
calibre.gui2.tweak_book.plugin.Tool (sida 348) klass. Låt oss titta på main.py från demotillägget, källkoden är tungt kommenterade och bör vara självförklarande. Läs API handlingar: class: calibre.gui2.tweak_book.plugin.Tool klass för mer information.
main.py
Här kommer vi att se definitionen av ett enda verktyg som kommer att multiplicera alla teckenstorlekar i boken av
ett nummer som användaren ger. Detta verktyg visar olika viktiga begrepp som du behöver för att utveckla dina egna
tillägg, så du bör läsa (tungt kommenterade) källkoden noggrant.
import re
from PyQt5.Qt import QAction, QInputDialog
from cssutils.css import CSSRule
# The base class that all tools must inherit from
83 http://calibre-ebook.com/downloads/editor_demo_plugin.zip
1.9. Handledning
217
calibre Användarhandbok, Utgåva 2.22.0
from calibre.gui2.tweak_book.plugin import Tool
from calibre import force_unicode
from calibre.gui2 import error_dialog
from calibre.ebooks.oeb.polish.container import OEB_DOCS, OEB_STYLES, serialize
class DemoTool(Tool):
#: Set this to a unique name it will be used as a key
name = 'demo-tool'
#: If True the user can choose to place this tool in the plugins toolbar
allowed_in_toolbar = True
#: If True the user can choose to place this tool in the plugins menu
allowed_in_menu = True
def create_action(self, for_toolbar=True):
# Create an action, this will be added to the plugins toolbar and
# the plugins menu
ac = QAction(get_icons('images/icon.png'), 'Magnify fonts', self.gui) # noqa
if not for_toolbar:
# Register a keyboard shortcut for this toolbar action. We only
# register it for the action created for the menu, not the toolbar,
# to avoid a double trigger
self.register_shortcut(ac, 'magnify-fonts-tool', default_keys=('Ctrl+Shift+Alt+D',))
ac.triggered.connect(self.ask_user)
return ac
def ask_user(self):
# Ask the user for a factor by which to multiply all font sizes
factor, ok = QInputDialog.getDouble(
self.gui, 'Enter a magnification factor', 'Allow font sizes in the book will be multiplie
value=2, min=0.1, max=4
)
if ok:
# Ensure any in progress editing the user is doing is present in the container
self.boss.commit_all_editors_to_container()
try:
self.magnify_fonts(factor)
except Exception:
# Something bad happened report the error to the user
import traceback
error_dialog(self.gui, _('Failed to magnify fonts'), _(
'Failed to magnify fonts, click "Show details" for more info'),
det_msg=traceback.format_exc(), show=True)
# Revert to the saved restore point
self.boss.revert_requested(self.boss.global_undo.previous_container)
else:
# Show the user what changes we have made, allowing her to
# revert them if necessary
self.boss.show_current_diff()
# Update the editor UI to take into account all the changes we
# have made
self.boss.apply_container_update_to_gui()
def magnify_fonts(self, factor):
# Magnify all font sizes defined in the book by the specified factor
218
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# First we create a restore point so that the user can undo all changes
# we make.
self.boss.add_savepoint('Before: Magnify fonts')
container = self.current_container
# The book being edited as a container object
# Iterate over all style declarations in the book, this means css
# stylesheets, <style> tags and style="" attributes
for name, media_type in container.mime_map.iteritems():
if media_type in OEB_STYLES:
# A stylesheet. Parsed stylesheets are cssutils CSSStylesheet
# objects.
self.magnify_stylesheet(container.parsed(name), factor)
container.dirty(name) # Tell the container that we have changed the stylesheet
elif media_type in OEB_DOCS:
# A HTML file. Parsed HTML files are lxml elements
for style_tag in container.parsed(name).xpath('//*[local-name="style"]'):
if style_tag.text and style_tag.get('type', None) in {None, 'text/css'}:
# We have an inline CSS <style> tag, parse it into a
# stylesheet object
sheet = container.parse_css(style_tag.text)
self.magnify_stylesheet(sheet, factor)
style_tag.text = serialize(sheet, 'text/css', pretty_print=True)
container.dirty(name) # Tell the container that we have changed the styleshe
for elem in container.parsed(name).xpath('//*[@style]'):
# Process inline style attributes
block = container.parse_css(elem.get('style'), is_declaration=True)
self.magnify_declaration(block, factor)
elem.set('style', force_unicode(block.getCssText(separator=' '), 'utf-8'))
def magnify_stylesheet(self, sheet, factor):
# Magnify all fonts in the specified stylesheet by the specified
# factor.
for rule in sheet.cssRules.rulesOfType(CSSRule.STYLE_RULE):
self.magnify_declaration(rule.style, factor)
def magnify_declaration(self, style, factor):
# Magnify all fonts in the specified style declaration by the specified
# factor
val = style.getPropertyValue('font-size')
if not val:
return
# see if the font-size contains a number
num = re.search(r'[0-9.]+', val)
if num is not None:
num = num.group()
val = val.replace(num, '%f' % (float(num) * factor))
style.setProperty('font-size', val)
# We should also be dealing with the font shorthand property and
# font sizes specified as non numbers, but those are left as exercises
# for the reader
Låt oss bryta ner main.py. Vi ser att den definierar ett enda verktyg, som heter *Förstora teckensnitt *. Detta verktyg
kommer att be användaren om ett nummer och multiplicera alla teckenstorlekar i boken med det numret.
Det första viktiga är verktygsnamnet som du måste ställa in till någon relativt unik sträng som den kommer att användas
som nyckel för detta verktyg.
1.9. Handledning
219
calibre Användarhandbok, Utgåva 2.22.0
Nästa viktiga inkörsport är calibre.gui2.tweak_book.plugin.Tool.create_action() (sida 349).
Denna metod skapar QAction objekt som visas i tilläggsverktygsfältet och tilläggsmenyn. Det också eventuellt tilldelar ett kortkommando som användaren kan skräddarsy. Den utlösta signalen från QAction är ansluten till ask_user()
metoden som frågar användaren om teckenstorlekensmultiplikator och sedan kör förstoringskoden
Förstoringskoden är väl kommenterad och ganska enkel. De viktigaste saker att notera är att du får en referens till redigeringsfönstret som self.gui och editorn Boss som ‘ self.boss‘‘. Boss är objektet som styr redigerarens användargränssnitt. Den har många användbara metoder, som dokumenteras i calibre.gui2.tweak_book.boss.Boss
(sida 350) klass.
Slutligen finns det self.current_container som är en referens till boken som redigeras som
calibre.ebooks.oeb.polish.container.Container (sida 342) objekt. Detta representerar boken som
en samling av sina konstituerande HTML / CSS / bildfiler och har bekvämliga metoder för att göra många användbara
saker. Objektbehållaren och olika användbara nyttofunktioner som kan återanvändas i din tilläggskod är dokumenterade i API-dokumentation för e-bok redigeringsverktyg (sida 342).
Lägger till översättningar till ditt tillägg
Du kan ha alla användargränssnitts strängar i ditt tillägg översatta och visas i vilket språk som är satt för huvudanvändargränssnitt i calibre.
Det första steget är att gå igenom din tilläggskällkod och markera alla användarsynliga strängar som översättningsbara,
genom att omge dem _(). Till exempel:
action_spec = (_('My plugin'), None, _('My plugin is cool'), None)
Använd sedan något program för att generera .po-filer från din tilläggskällkod. Det bör finnas en .po fil för varje
språk du vill översätta till. Till exempel: de.po för tyska, fr.po för franska och så vidare. Du kan använda poedit
<http://poedit.net/> _ programmet för detta.
Skicka dessa .po-filer till översättarna. När du får tillbaka dem, sammanställ dem i .mo-filer. Du kan återigen använda
poedit för det, eller bara göra:
calibre-debug -c "from calibre.translations.msgfmt import main; main()" filename.po
Placera .mo filer i translations mapp i ditt tillägg.
Det sista steget är att helt enkelt kalla funktionen load_translations() högst upp av dina tilläggs .py-filer. Av prestandaskäl bör du bara kalla denna funktion i de .py-filer som faktiskt har översättbara strängar. Så i ett typiskt användargränssnittstillägg som du skulle kalla det högst upp i ui.py men inte ‘‘ __init __. py‘‘.
Du kan testa översättningarna av dina tillägg genom att ändra språk i användargränssnittet i calibre i Inställningar>Utseende eller genom att köra calibre så här:
CALIBRE_OVERRIDE_LANG=de calibre
Ersätt sv med språkkoden för det språk som du vill testa.
Tilläggs-API
Som ni kanske har märkt ovan, är ett tillägg i calibre en klass. Det finns olika klasser för de olika typer av tillägg i
calibre. Detaljer om varje klass, inklusive basklassen för alla tillägg finns i API dokumentation för tilläggsprogram
(sida 312).
Ditt tillägg kommer nästan säkert att använda kod från calibre. Om du vill veta hur man hittar olika bitar av funktionalitet i calibres kodbas, läs avsnittet om calibre Kodutformning (sida 297).
220
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Felsök tilläggen
Den första och viktigaste steget är att köra calibre i felsökningsläge. Du kan göra det från kommandoraden med:
calibre-debug -g
Eller inifrån calibre med kortkommandot att högerklicka på knappen inställningar eller genom att använda Ctrl + Skift
+ R.
När du kör från kommandoraden, kommer felsäkningsutskrifter skrivas ut till konsolen, när man kör inifrån calibre
kommer de att gå till en txt-fil.
Du kan sätta in utskriftssatser var som helst i din tilläggskod, de kommer att vara utdata i felsökningsläge. Kom ihåg
att det här är python, du borde verkligen inte behöver något mer än utskriftsatser för felsöka;) jag har utvecklat hela
calibre med att använda just denna felsökningsteknik.
Du kan snabbt testa ändringar i tillägget med hjälp av följande kommandorad:
calibre-debug -s; calibre-customize -b /path/to/your/plugin/directory; calibre
Detta kommer att stänga en köande calibre, vänta på avstängning för att slutföra och sedan uppdatera tillägg i calibre
och starta om calibre.
Fler tilläggsexempel
Du kan finna en lista av många sofistikerade calibre tillägg här84 .
Dela dina tillägg med andra
Om du vill dela med dig dina tlllägg du skapat till andra, posta dem i en ny tråd i calibre plugins forum85 .
1.9.8 Typsättning Math i e-böcker
calibre e-bokbläddraren har möjlighet att visa matte inbäddad i e-böcker (ePub-och HTML-filer). Du kan typsätta
matten direkt med TeX eller MathML eller AsciiMath. calibre visaren använder utmärkta MathJax86 bibliotek för att
göra detta. Detta är en kort genomgång på att skapa e-böcker med matematik och få dem att fungerar bra med den
calibre visaren.
En enkel HTML-fil med matematik
Du kan skriva matematik infogat i en enkel HTML-fil och calibre visaren kommer att göra det i rätt typsätt matematik. I exemplet nedan använder vi TeX notation för matematik. Du kommer att se att du kan använda vanliga
TeX-kommandon, med det lilla förbehållet att et-tecken och mindre än och större än tecken måste skrivas som &
&lt och &gt.
Det första steget är att berätta för calibre att detta kommer innehålla matematik. Det gör du genom att lägga till följande
kodsträng till <head> delen av HTML-filen:
<script type="text/x-mathjax-config"></script>
Det var det, nu kan du skriva matematik på samma sätt som i en .tex fil. Till exempel, här är Lorentz ekvationer:
84 http://www.mobileread.com/forums/showthread.php?t=118764
85 http://www.mobileread.com/forums/forumdisplay.php?f=237
86 http://www.mathjax.org
1.9. Handledning
221
calibre Användarhandbok, Utgåva 2.22.0
<h2>The Lorenz Equations</h2>
<p>
\begin{align}
\dot{x} & = \sigma(y-x) \\
\dot{y} & = \rho x - y - xz \\
\dot{z} & = -\beta z + xy
\end{align}
</p>
Detta klipp liknar som följande skärmbild i calibre visaren.
Figur 1.2: Lorenz ekvationer
Den kompletta HTML-fil med flera ekvationer och infogad matematik återges nedan. Du kan konvertera den här
HTML-filen till EPUB in calibre för att hamna en e-bok som du kan dela ut lätt till andra människor.
<!DOCTYPE html>
<html>
<!-- Copyright (c) 2012 Design Science, Inc. -->
<head>
<title>Math Test Page</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<!-- This script tag is needed to make calibre's ebook-viewer recpgnize that this file needs math typ
<script type="text/x-mathjax-config">
// This line adds numbers to all equations automatically, unless explicitly suppressed.
MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "all"} } });
</script>
<style>
h1 {text-align:center}
h2 {
font-weight: bold;
background-color: #DDDDDD;
padding: .2em .5em;
margin-top: 1.5em;
border-top: 3px solid #666666;
border-bottom: 2px solid #999999;
}
</style>
</head>
<body>
<h1>Sample Equations</h1>
<h2>The Lorenz Equations</h2>
<p>
222
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
\begin{align}
\dot{x} & = \sigma(y-x) \label{lorenz}\\
\dot{y} & = \rho x - y - xz \\
\dot{z} & = -\beta z + xy
\end{align}
</p>
<h2>The Cauchy-Schwarz Inequality</h2>
<p>\[
\left( \sum_{k=1}^n a_k b_k \right)^{\!\!2} \leq
\left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)
\]</p>
<h2>A Cross Product Formula</h2>
<p>\[
\mathbf{V}_1 \times \mathbf{V}_2 =
\begin{vmatrix}
\mathbf{i} & \mathbf{j} & \mathbf{k} \\
\frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\
\frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0 \\
\end{vmatrix}
\]</p>
<h2>The probability of getting \(k\) heads when flipping \(n\) coins is:</h2>
<p>\[P(E) = {n \choose k} p^k (1-p)^{ n-k} \]</p>
<h2>An Identity of Ramanujan</h2>
<p>\[
\frac{1}{(\sqrt{\phi \sqrt{5}}-\phi) e^{\frac25 \pi}} =
1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
{1+\frac{e^{-8\pi}} {1+\ldots} } } }
\]</p>
<h2>A Rogers-Ramanujan Identity</h2>
<p>\[
1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots =
\prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})},
\quad\quad \text{for $|q|<1$}.
\]</p>
<h2>Maxwell's Equations</h2>
<p>
\begin{align}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \f
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & =
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}
</p>
<h2>In-line Mathematics</h2>
1.9. Handledning
223
calibre Användarhandbok, Utgåva 2.22.0
<p>While display equations look good for a page of samples, the
ability to mix math and text in a paragraph is also important. This
expression \(\sqrt{3x-1}+(1+x)^2\) is an example of an inline equation.
you see, equations can be used this way as well, without unduly
disturbing the spacing between lines.</p>
As
<h2>References to equations</h2>
<p>Here is a reference to the Lorenz Equations (\ref{lorenz}). Clicking on the equation number will t
</body>
</html>
Mer information
Eftersom calibre visaren använder MathJax-biblioteket för att göra matematik, är det bästa stället att ta reda på mer
om matematik i e-böcker och få hjälp MathJax website87 .
1.9.9 Skapa AZW3 • EPUB • MOBI kataloger
calibres Skapa katalogfunktioner kan du skapa en katalog över biblioteket i en mängd olika format. Denna hjälpfil
beskriver katalogiseringsalternativ när katalog skapas i AZW3, EPUB och MOBI format.
•
•
•
•
•
•
•
•
Välja böcker att katalogisera (sida 224)
Inkluderade sektioner (sida 225)
Prefix (sida 226)
Uteslutna böcker (sida 226)
Uteslutna genrer (sida 227)
Andra alternativ (sida 227)
Utforma katalogomslag (sida 228)
Ytterligare hjälpresurser (sida 228)
Välja böcker att katalogisera
Om du vill att alla dina bibliotek katalogiseras, ta bort valfri sökning eller filtrera villkor i huvudfönstret. Med en enkelt
val bok, kommer alla böcker i ditt bibliotek bli kandidater för inkludering i den skapade katalogen. Individuella böcker
kan kommas att exkluderas av diverse orsaker; se Uteslutna genrer (sida 227) sektionen nedan för mer information.
Om du vill bara att några av dina bibliotek katalogiserade, har du två alternativ:
• Skapa ett flerval av böckerna du vill katalogisera. Med mer än en bok vald i calibres huvudfönster, kommer bara
de valda böckerna katalogiseras.
• Använd sökfält eller etikettbläddraren för filtrera de visade böckerna. Bara de visade böckerna kommer katalogiseras.
För att påbörja kataloggenerering, välj menyval Konvertera böcker > Skapa en katalog med böckerna i ditt calibrebibliotek. Du kan också lägga till en Skapa katalog-knapp i verktygsraden i Inställningar > Gränssnitt > Verktygsrad
för att enklare nå dialogen för skapa kataloger.
87 http://www.mathjax.org
224
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
I Katalogalternativ, välj AZW3, EPUB eller MOBI som katalogformat. I Katalogtitel fältet, ge ett namn för att
användas för den skapade katalogen. Om katalogen har samma namn och format som en existerande, kommer den
ersättas med den nyligen skapade katalogen.
Aktivering Skicka katalogen till enheten automatiskt kommer ladda ner skapad katalog till en ansluten enhet efter
slutförandet.
Inkluderade sektioner
Sektionen aktiverade med bock kommer att inkluderas i den skapade katalogen:
• Författare - alla böcker, sorterade på författare, tillgängliga i ett listformat. Icke-serieböcker listas för serieböcker.
• Titlar - alla böcker, sorterade på titel, tillgänglig i ett listformat.
• Serier - alla böcker som är del av serien, sorterade på serier, tillgängliga i ett listformat.
• Genrer - individuella genrer, tillgängliga i en lista, sorterade på författare och serie.
• Nyligen tillagd - alla böcker, sorterade i omvänd kronologisk ordning. Listan inkluderar böcker tillagda de
senaste 30 dagarna, sedan en månatlig listning av tillagda böcker.
• Beskrivningar - detaljerad beskrivningssida för varje bok, inkluderar omslagsikon och kommentarer. Sorterade
per författare, med icke-serieböcker listade före serieböcker.
1.9. Handledning
225
calibre Användarhandbok, Utgåva 2.22.0
Prefix
Prefixregler tillåter dig att lägga till ett prefix till boklistan när vissa villkor är uppfyllda. Till exempel, du kanske vill
markera böcker du har läst med en bock, eller böcker på din önskelista med ett X.
Kryssrutan i den första kolumnen aktiverar regeln. Namn är ett regelnamn som du lämnar. Fält är antingen Etikett eller
en egen kolumn från biblioteket. Värde är innehållet i Fält för att passa mot. När en prefixregel är uppfylld, kommer
boken vara märkt med den valda Prefix.
Tre prefixregler har angivits i exemplet ovan:
1. Läs bok anger att en bok med godtyckligt datum i en anpassad kolumn namngiven Senast läst kommer att
prefixas med en bocksymbol.
2. Önskelistprodukt objekt anger att godtycklig bok med en Önskelistprodukt etikett kommer att prefixas men en
X-symbol.
3. Bibliotek böcker anger att godtycklig bok med ett sant(ja)-värde i en anpassad kolumn Available in Library
kommer att prefixas med en dubbelpilsymbol.
Den första passande regeln tillhandahåller prefixet. Inaktiverad eller ofullständig regel ignoreras.
Uteslutna böcker
Uteslutningsregler tillåter dig specificera böcker som inte ska katalogiseras.
En kryssruta i första kolumnen aktiverar regeln. Namn är ett regelnamn du anger. Fält är antingen Etikett eller en
anpassad kolumn i ditt bibliotek. Värde är innehållet av Fält att passa mot. När en uteslutningsregel är uppfylld,
kommer boken uteslutas från genererad katalog.
Två uteslutningsregler har specificerats i exemplet ovan:
1. Kataloger regeln anger att godtycklig bok med en Katalog etikett kommer att uteslutas från genererad katalog.
226
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
2. Archived bokregel anger att godtycklig bok med ett värde av Archived i en anpassad kolumn Status kommer att
exkluderas från genererad katalog.
Alla regel utvärderas för varje bok. Inaktiverad eller inkomplett regel ignoreras.
Uteslutna genrer
När katalogen genereras, är det etiketter i databasen som används som genrer. Till exempel kan du använda etiketter
Skönlitteratur och Facklitteratur. Dessa etiketter blir genrer i den genererade katalogen med böcker som
anges under respektive genrelistor baserade på sina tilldelade etiketter. En bok kommer att listas i varje genreavsnitt
som den har en motsvarande etikett.
Du kan använda vissa etiketter för andra syften, kanske ett + för att indikera att en bok lästs, eller en hakparates som
[Amazon Freebie] för att indikera en boks källa. Uteslutna genrer regex tillåter dig att ange etiketter som du
inte vill använda som genre i den genererade katalogen. Grundinställning för uteslutnings regex-mönster \[.+\]\+
utesluter alla etiketter med formen [etikett], samt utesluta
Du kan också använda ett exakt namn i regex-uttryck. Till exempel, [Amazon Freebie] eller [Project
Gutenberg]. Om du vill lista flera exakta etiketter för uteslutning, använd en pip-tecken (vertikalt sträck |) mellan dem: [Amazon Freebie]|[Project Gutenberg].
Resultat av regex visar dig vilka etiketter som kommer att uteslutas när katalog byggs, baserat på etiketter i din databas
och regex-mönster som anges. Resultat är uppdateras allt medan du ändrar regex-mönstret.
Andra alternativ
Katalogomslag anger om ett nytt omslag ska skapas eller använda ett befintligt omslag. Det är möjligt att skapa en
anpassat omslag för dina kataloger - se Utforma katalogomslag (sida 228) för mer information. Om du har skapat en
anpassad omslag som du vill återanvända, väljer du Använd befintligt omslag. Annars, välj Skapa nytt omslag.
Extra beskrivningsnot anger att anpassat kolumninnehåll ska infogas till beskrivningssidan, bredvid omslagsikonen.
Till exempel, om du kanske vill visa datum när du senast läst en bok använd Senaste lästa kolumnanpassning. För
avancerad användning av notbeskrivningsfunktioner, se this post in the calibre forum88 .
Ikonbildsbredd anger bredpreferens för omslagsikoner som inkluderas på beskrivningssidor. Ikoner är buffrade för att
förbättra prestanda. För att experimentera med olika bredder, försök generera en katalog med bara några få böcker tills
du har utrönt vilken som är föredragen bredd, sedan skapa din fullständiga katalog. Första gången en katalog skapas
88 http://www.mobileread.com/forums/showpost.php?p=1335767&postcount=395
1.9. Handledning
227
calibre Användarhandbok, Utgåva 2.22.0
med en ny ikonbredd kommer prestanda vara lägre, men efterföljande bygge av katalog kommer utnyttja bufferten för
ikoner.
Slå samman med Kommentarer anger en anpassad kolumn vars innehåll kommer ovillkorligen slås samman med
metadatakommentarer under kataloggenereringen. Till exempel, har du kanske en anpassad kolumn Författare biografi
som du vill lägga till slutet av metadatakommentarer. Du kan välja att infoga de anpassade kolumninnehållet före eller
efter kommentarssektionen och alternative separat lägga till innehåll med en horisontal regelseparator. Godtagbara
anpassade kolumntyper inkluderar ‘‘ text, kommentarer och blandningen‘‘.
Utforma katalogomslag
Med Generate Cover plugin89 installerad kan du skapa egna omslag för din katalog. För att installera tillägg, gå till Inställningar > Avancerat > Tillägg > Hämta nya tillägg.
Ytterligare hjälpresurser
För mer information om calibres katalogfunktioner, se MobileRead forum Creating Catalogs - Start here90 , var du kan
hitta information om hur du kan anpassa katalogmallar och hur du kan skicka en felrapport.
För att ställa frågor eller diskutera calibre-katalogfunktionen med andra användare, besök MobileRead forumet Calibre
Catalogs91 .
1.9.10 Virtuella bibliotek
I calibre, är ett virtuellt bibliotek ett sätt att tala om för calibre att öppna en delmängd av det normala biblioteket.
Till exempel, du vill bara arbeta med böcker av en viss författare, eller böcker som har en viss etikett. Användning
av virtuella bibliotek är en föredraget sätt att dela upp en stor boksamling i mindre delsamlingar. Det är överlägset att
dela upp ditt bibliotek i flera mindre bibliotek som, när du vill söka igenom hela samlingen, du kan enkelt återvända
till det fulla biblioteket. Det finns inget sätt att söka igenom flera separata bibliotek samtidigt i calibre.
89 http://www.mobileread.com/forums/showthread.php?t=124219
90 http://www.mobileread.com/forums/showthread.php?t=118556
91 http://www.mobileread.com/forums/forumdisplay.php?f=236
228
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Ett virtuellt bibliotek skiljer sig från en enkel sökning. En sökning kommer bara begränsa listan av visade böcker i
boklistan. Ett virtuellt bibliotek kommer göra detta och i tillägg också begränsa antalet element som visas i Etikettbläddrare till vänster. Etikettbläddraren kommer bara visa etiketter, författare, serier, utgivare, etc. som kommer från
böcker i virtuella biblioteket. Ett virtuellt bibliotek beter sig sålunda som ett faktiskt bibliotek som bara innehåller den
begränsade uppsättningen böcker.
Skapar virtuella bibliotek
För att använda ett virtuellt bibliotek klicka på Virtuellt bibliotek-knappen som finns till vänster om sökverktygslisten och välj Skapa virtuellt bibliotek-alternativet. Som ett första exempel, låt oss skapa ett virtuellt
bibliotek som visar oss bara böcker av en viss författare. Klicka på Authors länken som visas i bilden nedan och välj
författare som du vill använda och klicka OK.
Skapa virtuellt bibliotek-dialogen har fyllts i av dig. Klicka OK och du kommer se att ett nytt virtuellt bibliotek har
skapats och automatiskt växlats över och visar bara böcker av den valda författaren. Så långt som det rör calibre, är
det som om ditt bibliotek bara innehåller böcker av vald författare.
Du kan växla tillbaka till fullt bibliotek när som helt genom att än en gång klicka Virtuellt bibliotek och välja valet
namngivet <Ingen>.
Virtuella bibliotek baseras på sökningar. Du kan använda godtycklig sökning som grund av ett virtuellt bibliotek. Det
virtuella biblioteket kommer att innehålla bara böcker som passar mot denna sökning. Först, skriv sökningen som du
vill använda i sökraden eller bygg en sökning genom att använda Etikettbläddare. När du är nöjd med resultatet, klicka
på virtuellt biblioteks-knappen, välj skapa bibliotek och mata in namn på det nya virtuella biblioteket. Det virtuella
biblioteket kommer då skapas baserat på sökbegreppet du just matat in. Sökningen är mycket kraftfull, till exempel
några saker du kan göra med dem se, Sökgränssnittet (sida 11).
Exempel på användbara virtuella bibliotek
• Böcker tillagda till calibre senaste dagen: date:>1daysago
• Böcker tillagda till calibre den senaste månaden: date:>30daysago
• Böcker med betyget 5 stjärnor: rating:5
• Böcker med betyget minst 4 stjärnor: rating:>=4
1.9. Handledning
229
calibre Användarhandbok, Utgåva 2.22.0
• Böcker utan betyg: rating:false
• Nyhetstidningar nerladdade med hämta nyhets funktionen i calibre: tags:=News and author:=calibre
• Böcker utan etiketter: tags:false
• Böcker utan omslag: cover:false
Arbetar med virtuella bibliotek
Du kan redigera tidigare skapade virtuella bibliotek eller ta bort det, genom att klicka Virtuellt bibliotek och välja
lämplig åtgärd.
Du kan tala om för calibre att du alltid vill tillämpa ett visst virtuellt bibliotek när aktuellt bibliotek är öppet, genom
att gå till Inställningar->Beteende.
Om du använder calibre-innehållsserver kan du få det att dela ett virtuellt bibliotek i stället för det fulla biblioteket
genom gå till Inställningar->Dela->Dela på nät.
Du kan snabbt använda nuvarande sökning som temporärt virtuellt bibliotek genom att klicka Virtuellt bibliotekknappen och välja *aktuell sökning-valet.
Du kan visa alla tillgängliga virtuella bibliotek som flikar ovanför boklistan. Det är speciellt användbart om du vill
växla mellan virtuella bibliotek ofta. Klicka på Virtuellt bibliotek-knappen och välj Visa virtuella bibliotek som flikar.
Du kan ordna om flikarna genom dra-och-släpp och stänga dem du inte vill se. Stängda flikar kan återställas genom
högerklicka på flikraden.
Använder ytterligare begränsningar
Vidare kan du begränsa böcker som visas i ett virtuellt bibliotek genom att använda Ytterligare begränsningar. En
ytterligare begränsning är sparad sökning du tidigare skapade som kan tillämpas till aktuellt virtuellt bibliotek för att
vidare begränsa böcker som visas i ett virtuellt bibliotek. Till exempel, låt oss säga att du har ett virtuellt bibliotek som
visar dina olästa böcker, du kan klicka på Virtuellt bibliotek-knappen och visa Ytterligare begränsningar-alternativet
för att bara visa olästa historiska bokberätterlse. För att lära sig om sparade sökningar, se Sparade sökningar (sida 13).
1.10 Anpassa calibre
calibre är en mycket modulär konstruktion. Diverse delar av den kan anpassas. Du kan lära dig skapa recpt som läggs
till källan av tillängliga innehållet av calibre i sektionen Lägga till din favorit nyhetswebbplats (sida 121). Här kommer
du för lära dig använda miljövarabler och justera för att anpassa calibreers beteende, och sedan hur du specifierar
dina statiska resurser som ikoneroch mallar för att överrida grundinställningar och slutligen hur tilläggsprogram kan
användas för att lägga till funktionalitet till calibre.
•
•
•
•
Miljövariabler (sida 254)
Justeringar (sida 255)
Överrider ikoner, mallar, etc (sida 265)
Anpassa calibre med tilläggsprogram (sida 265)
1.10.1 API dokumentation för tilläggsprogram
Definiera diverse abstrakta klasser som kan vara underklasser för att skapa kraftfulla tilläggsprogram. Dessa användbara klasser är:
230
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
•
•
•
•
•
•
•
•
•
•
Tilläggsprogram (sida 312)
FileTypePlugin (sida 314)
Metadatatillägg (sida 315)
Katalogtillägg (sida 315)
Metadata-nedladdningstillägg (sida 316)
Konverteringstillägg (sida 319)
Enhetsdrivrutiner (sida 321)
Användargränssnittsåtgärder (sida 331)
Inställningar Tillägg (sida 333)
Visningstillägg (sida 335)
Tilläggsprogram
class calibre.customize.Plugin(plugin_path)
Ett Calibre-tilläggsprogram. Användbara medlemmar inkluderar:
•self.plugin_path: Lagrar sökvägen till zip-filen som innehåller detta tillägg eller None om det
är ett inbyggt tillägg
•self.site_customization: Lagrar en anpassad inmatad sträng av användaren.
Metoder som ska överridas i underklasser
•initialize() (sida 313)
•customization_help() (sida 314)
Användbara metoder:
•temporary_file() (sida 314)
•__enter__()
•load_resources() (sida 313)
supported_platforms = []
Lista av platformar som detta tillägg fungerar på. Till exempel: [’windows’, ’osx’, ’linux’]
name = ‘Trivial Plugin’
Namnet på detta tillägg. Du måste ange något annan än Trivial Plugin för att den ska fungera.
version = (1, 0, 0)
Versionen på detta tillägg är n 3-tupel (major, minor, revision)
description = u’G\xf6r absolut ingenting’
En kort sträng som beskriver vad detta tillägg gör
author = u’Ok\xe4nd’
Författare av tillägget
priority = 1
När mer än ett tillägg finns för en filtyp, kommer tilläggen att köras i fallande prioritet dvs tillägg med
högre prioritet kommer köras först. Det högsta möjliga prioritet är sys.maxint. Grundinställning på
prioritet är 1.
minimum_calibre_version = (0, 4, 118)
Den tidigaste versionen av calibre som detta tillägg kräver
can_be_disabled = True
Om Falsk, kommer inte användaren kunna deaktivera detta tillägg. Använd med försiktighet.
1.10. Anpassa calibre
231
calibre Användarhandbok, Utgåva 2.22.0
type = u’Bas’
Typen av detta tillägg. Används för kategorisera tillägg i användargränsnittet
initialize()
Anropas en gång när calibre-tillägg initieras. Tillägg åter initieras varje gång ett nytt tillägg läggs till.
Observera också att om tillägg körs i en arbetsprocess, såsom att lägga till böcker, då kommer tillägg att
initieras för varje ny arbetsprocess.
Utför godtyckligt tilläggsinitialisering här, såsom att utvinna resurser från tilläggets zip-fil. Sökvägen till
zip-filen är tillgänglig som self.plugin_path.
Notera att self.site_customization är inte tillgänglig vid detta tillfälle.
config_widget()
Implementera denna metod och save_settings() (sida 313) i ditt tillägg för att anpassa en konfigurationsdialog, snarare än att förlita sig på en enkel strängbaserad standard anpassning.
Denna metod, om implementerad, måste returnera en QWidget. Denna grej kan ha en alternativ metod
validate() som inte tar några argument och anropas omedelbart efter användaren klickat OK. Förändringar
tillämpas om och bara om metoden returnerar Sann.
Om du av någon anledning inte kan utföra konfigurationen vid denna tid, returnera en tupel av två strängar
(meddelande, detaljer), kommer dessa att visas som en varningsdialogruta för användaren och processen
avbryts.
save_settings(config_widget)
Spara inställningarna som anges av användaren med config_widget.
Parametrar config_widget
–
Gränssnittskomponenten
config_widget() (sida 313).
som
returneras
av
do_user_config(parent=None)
Denna metod visar en inställningsdialogruta för detta tillägg. Den returnerar Sann om användaren klickar
på OK, annars Falsk. Ändringarna tillämpas automatiskt.
load_resources(names)
Om detta tillägg kommer i en ZIP-fil (användartillagt tillägg), kommer denna metod tillåta dig läsa in
resurser från ZIP-fil.
Till exempel att läsa in en bild:
pixmap = QPixmap()
pixmap.loadFromData(self.load_resources(['images/icon.png']).itervalues().next())
icon = QIcon(pixmap)
Parametrar names – Förteckning över sökvägar till resurser i zip-filen som använder / som
avskiljare
Returnerar En ordlista av formen {namn:file_contents}. Några namn som inte finns i
zip-filen kommer inte att vara närvarande i ordlistan.
customization_help(gui=False)
Returnera en sträng som ger hjälp om hur du anpassar detta tillägg. Som standard upp en
NotImplementedError, vilket tyder på att tillägget inte kräver anpassning.
Om du åter-implementera den här metoden i din underklass, kommer användaren att bli ombedd att skriva
in en sträng som anpassning för detta tillägg. Den anpassning strängen kommer att finnas tillgänglig som
self.site_customization.
Platsanpassning skulle kunna vara vad som helst, till exempel vägen till en välbehövlig binär på användarens dator.
232
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Parametrar gui – Om Sann returneras HTML-hjälp, annars returneras vanlig hjälptext.
temporary_file(suffix)
Returnera en fil-liknande objekt som är en temporär fil i filsystemet. Denna fil kommer att vara tillgänglig
även efter nedstängning och kommer endast att tas bort på vid avstängning. Använd name medlem av den
returnerade objektet för att komma åt den fullständiga sökvägen till den skapade temporärfilen.
Parametrar suffix – Suffixet att den temporära filen kommer att ha.
cli_main(args)
Denna metod är den viktigaste inkörsporten för tilläggskommandoradsgränssnitt. Det kallas när användaren utför calibre-debug -r “Tilläggsnamn”. Alla argument som skickas finns i variabeln args.
FileTypePlugin
class calibre.customize.FileTypePlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som är associerad med en viss uppsättning filtyper.
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra. Till exempel: {’lit’, ’mobi’, ’prc’}
on_import = False
Om Sann, körs detta tillägg när böcker läggs till i databasen
on_postimport = False
Om Sann, körs detta tillägg efter böcker läggs till i databasen
on_preprocess = False
Om Sann, körs detta tillägg alldeles innan konvertering
on_postprocess = False
Om Sann, körs detta tillägg efter konvertering på den sista filen som produceras av konvertering utdatatillägget.
run(path_to_ebook)
Kör tillägg. Måste genomföras i underklasser. Det bör utföra vad som behöver modifieras på e-boken och
returnera den absoluta sökvägen till den modifierade e-boken. Om inga ändringar behövs, bör den returnera sökvägen till den ursprungliga e-boken. Om ett fel inträffar bör det ge ett undantag. Genomförandet
returnerar som standard sökvägen till den ursprungliga e-boken.
Den modifierade e-bokfilen ska skapas med temporary_file() metod.
Parametrar path_to_ebook – Absolut sökväg till e-boken.
Returnerar Absolut sökväg till den modifierade e-boken.
postimport(book_id, book_format, db)
Anropas efter import, dvs efter att bokfilen har lagts till i databasen.
Parametrar
• book_id – Databas id för tillagda boken.
• book_format – Den filtyp av boken som lades till.
• db – Biblioteksdatabas.
1.10. Anpassa calibre
233
calibre Användarhandbok, Utgåva 2.22.0
Metadatatillägg
class calibre.customize.MetadataReaderPlugin(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som implementerar läsning av metadata från en uppsättning filtyper.
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra Till exempel: set([’lit’, ’mobi’, ’prc’])
get_metadata(stream, type)
Returnerar metadata för filen som representeras av ström (en fil som objekt som stöder behandlingen). Signalera ett undantag när det finns ett fel med indata. :param type: Typen av fil. Garanterat för att vara en av de
uppgifter i file_types (sida 315). :return: A calibre.ebooks.metadata.book.Metadata
objekt
class calibre.customize.MetadataWriterPlugin(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som implementerar läsning av metadata från en uppsättning filtyper.
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra Till exempel: set([’lit’, ’mobi’, ’prc’])
set_metadata(stream, mi, type)
Ange metadata för filen som representeras av ström (en fil som objekt som stöder behandlingen). Signalera
ett undantag när det finns ett fel med indata. :param type: Typen av fil. Garanterat för att vara en av de uppgifter i file_types (sida 315). :param mi: A calibre.ebooks.metadata.book.Metadata
objekt
Katalogtillägg
class calibre.customize.CatalogPlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som implementerar en kataloggenerator.
file_types = set([])
Utdatafiltyp som detta tillägg ska köra Till exempel: “epub” eller “xml”
cli_options = []
CLI tolkningsalternativ som är specifika för detta tillägg, deklareras som namngiven tupel Alternativ:
from collections import namedtuple
Option = namedtuple('Option', 'option, default, dest, help')
cli_options = [Option('--catalog-title',
default = 'My Catalog',
dest = 'catalog_title',
help = (_('Title of generated catalog. \nDefault:') + " '" +
'%default' + "'"))]
cli_options parsed in library.cli:catalog_option_parser()
initialize()
Om tillägget inte är ett inbyggt, kopiera tillägget .ui och .py filer från zip-filen till $TMPDIR. Tab kommer att genereras dynamiskt och läggas till dialogrutan Katalogalternativ i calibre.gui2.dialogs.catalog.py:Catalog
run(path_to_output, opts, db, ids, notification=None)
Kör tillägget. Måste implementeras i underklasser. Det ska generera katalogen i det format som anges i
234
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
file_types, återvänder den absoluta sökvägen till den genererade katalogfilen. Om ett fel inträffar bör det
signalera ett undantag.
Den genererade katalogfilen ska skapas med temporary_file() metod.
Parametrar
• path_to_output – Absoluta sökvägen till den genererade katalogfilen.
• opts – En ordlista av nyckelordsargument
• db – Ett LibraryDatabase2 objekt
Metadata-nedladdningstillägg
class calibre.ebooks.metadata.sources.base.Source(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
capabilities = frozenset([])
Uppsättning funktioner som stöds av detta tillägg. Användbara funktioner är: “identify”, “cover”
touched_fields = frozenset([])
Lista över metadatafält som potentiellt kan laddas ner från detta tillägg under identifieringsfasen
has_html_comments = False
Sätt detta till Sann om ditt tillägg returnerar HTML-formaterade kommentarer
supports_gzip_transfer_encoding = False
Sätta den här Sann innebär att webbläsaren objektet kommer att lägga Accept-Encoding: gzip på
alla förfrågningar. Detta kan snabba upp nedladdningar men se till att källan faktiskt stöder gzipöverföringskodning korrekt först
cached_cover_url_is_reliable = True
Buffrade omslags-URL:er kan ibland vara otillförlitliga (dvs nedladdningen kan misslyckas eller returnerad binär kan vara falsk. Om så är ofta fallet med denna källa sätt till Falsk
options = ()
En lista av Option objects. De kommer användas för automatiskt skapa konfigurationsgränssnittskomponenten för detta tillägg
config_help_message = None
En sträng som visas högst upp på gränssnittskomponenten för detta tillägg
can_get_multiple_covers = False
Om Sann kan denna källa returnera flera omslag för en viss fråga
auto_trim_covers = False
Om satt till Sann nedladdade omslag trimmas automatiskt av detta tillägg.
prefer_results_with_isbn = True
Om värdet är Sann, och denna källa returnerar flera resultat för en fråga, av vilka några har ISBN och av
vilka en del inte, så ignoreras resultaten utan ISBN
is_configured()
Returnerar Falsk om ditt tillägg måste konfigureras innan det kan användas. Till exempel kan det behöva
ett användarnamn/lösenord/API-nyckel.
get_author_tokens(authors, only_first_author=True)
Ta en lista över författare och returnera en lista med symboler som är användbara för en OCH sökfrågan.
Denna funktion försöker returnera stafettpinnar i ordningen mellannamn förnamn efternamn, genom att
anta att om ett komma är i författarens namn, är namnet i efternamn, andra namn bildningar.
1.10. Anpassa calibre
235
calibre Användarhandbok, Utgåva 2.22.0
get_title_tokens(title, strip_joiners=True, strip_subtitle=False)
Ta en titel och returnera en lista med symboler som är användbara för en OCH sökfrågan. Utesluter konnektiva (valfritt) och skiljetecken.
split_jobs(jobs, num)
Dela upp en lista med jobb i högst num grupper, så jämnt som möjligt
test_fields(mi)
Återgå till det första fältet från self.touched_fields som är null på mi objektet
clean_downloaded_metadata(mi)
Anropa den här metoden i ditt tillägg för att identifiera metod att normalisera metadata innan metadataobjektet läggs i result_queue. Du kan naturligtvis använda en anpassad algoritm som passar din metadatakälla.
get_book_url(identifiers)
Returnerar en 3-tupel eller None. 3-tupeln har formen: (identifier_type, identifier_value, URL). URLn är
webbadressen till boken som identifieras av identifierare vid denna källa. identifier_type, identifier_value
anger identifierare som motsvarar URL. Den här URLn måste vara bläddringsbar av en människa med en
webbläsare. Det är tänkt att ge en klickbar länk för användaren att enkelt besöka sidan böcker vid denna
källa. Om ingen URL hittas returneras None. Denna metod måste vara snabb, och konsekvent, så att bara
genomföra det om det är möjligt att konstruera URLn från ett känt schema av givna identifierare.
get_book_url_name(idtype, idval, url)
Returnerar ett läsbart namn från returvärdet för get_book_url().
get_book_urls(identifiers)
Åsidosätta denna metod om du vill återvända flera webbadresser för den här boken. Returnera en lista med
3-tupler. Som standard kallar metoden helt enkelt get_book_url() (sida 317).
get_cached_cover_url(identifiers)
Returnera buffrad omslags-URL för boken som identifieras av identifierare dict eller None om ingen sådan
URL finns.
Observera att den här metoden bara måste återvända validerade URL:er, dvs inte webbadresser som kan
resultera i en generisk omslagsbild eller inte hittat felet.
identify_results_keygen(title=None, authors=None, identifiers={})
Returnerar en funktion som används för att generera en nyckel som kan sortera metadataobjekt genom
deras relevans givet en sökfråga (titel, författare, kännetecken).
Dessa nycklar används för att sortera resultatet av ett anrop till identify() (sida 318).
Mer information om standardalgoritmen, se: klass InternalMetadataCompareKeyGen (sida 318).
Åter implementera denna funktion i ditt tillägg om standardalgoritmen inte är lämplig.
identify(log, result_queue, abort, title=None, authors=None, identifiers={}, timeout=30)
Identifiera en bok med dess titel/författare/isbn/etc.
Om identifierare anges och ingen passning hittas och detta metadatakälla inte lagrar alla relaterade identifierare (till exempel alla ISBN i en bok), bör denna metod försöka igen med bara titel och författare
(förutsatt att de specificerades).
Om denna metadatakälla också ger omslag, ska den webbadress till omslaget buffras så att ett efterföljande
anrop till get omslags-API med samma ISBN/special identifierare inte behöver få omslags-URL igen.
Använd buffrings-API för detta.
Varje metadataobjekt infört i result_queue med denna metod måste ha en source_relevance attribut som är
ett heltal som anger i vilken ordning resultaten returnerades av metadatakällan för den här frågan. Detta
heltal kommer att användas av compare_identify_results(). Om ordningen är oviktigt, sätt den
till noll för varje resultat.
236
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Se till att alla omslag/isbn korsreferensinformation mellanlagras innan Metadataobjektet läggs i result_queue.
Parametrar
• log – Ett logg-objekt, använd det för att överföra felsökningsinformation/fel
• result_queue – Ett resultat Kö, resultaten läggas in i den. Varje resultat är ett metadataobjekt
• abort – Om abort.is_set() returnerar Sann, avbryt vidare bearbetning och återvända så
snart som möjligt
• title – Titel av boken, kan vara None
• authors – En lista av författare av en bok, kan vara None
• identifiers – En ordlista av andra identifieringsuppgifter oftast {‘isbn’:‘1234...’}
• timeout – Tidsbegränsning i sekunder bör ingen nätverksbegäran dröja längre än timeout
Returnerar None om inga fel har inträffat, annars en Unicode-representation av felet som är
lämplig för att visa för användaren
download_cover(log, result_queue, abort, title=None, authors=None, identifiers={}, timeout=30,
get_best_cover=False)
Ladda ner ett omslag och sätta det i result_queue. Parametrarna alla har samma betydelse som för
identify() (sida 318). Put (jaget, cover_data) i result_queue.
Denna metod bör använda buffrade omslags-URLer för effektivitet när det är möjligt. När buffrat data inte
är närvarande, de flesta tillägg anropar helt enkelt identifiera och använder dess resultat.
Om parametern get_best_cover är Sann, och kan detta tillägg få flera omslag, det bör bara få det “bästa”.
class calibre.ebooks.metadata.sources.base.InternalMetadataCompareKeyGen(mi,
source_plugin,
title,
authors,
identifiers)
Generera en slags nyckel för jämförelse av relevansen av metadataobjekt, ges en sökfråga. Detta används endast
för att jämföra resultat från samma metadatakälla, inte mellan olika informationskällor.
Sorteringsnyckeln säkerställer att en stigande ordning sortera är en sortera fallande relevans.
Algoritmen är:
•Föredrar resultat som har åtminstone en identifierare samma som för frågan
•Föredrar resultat med en buffrad omslags-URL
•Föredrar resultat med alla tillgängliga fält ifyllda
•Föredrar resultat med samma språk som aktuella användarens gränssnittsspråk
•Föredrar resultat som är en exakt titelpassning på frågan
•Föredrar resultat med längre kommentarer (mer än 10% längre)
•Använd relevansen av resultatet som rapporterats av metadatakällans sökning engine
1.10. Anpassa calibre
237
calibre Användarhandbok, Utgåva 2.22.0
Konverteringstillägg
class calibre.customize.conversion.InputFormatPlugin(*args)
Baserad: calibre.customize.Plugin (sida 312)
InputFormatPlugins ansvarar för att omvandla ett dokument till HTML+OPF+CSS+ osv. Resultatet av konverteringen måste kodas i UTF-8. Den viktigaste åtgärden händer i convert() (sida 319).
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra Till exempel: set([’azw’, ’mobi’, ’prc’])
is_image_collection = False
Om Sann, genererar detta indatatillägg en samling bilder, en per HTML-fil. Detta kan ställas in dynamiskt, i
konverteringsmetoden om indatafilerna kan vara både bildsamlingar och icke-bildsamlingar. Om du ställer
in detta till Sann måste du implementera get_images () som returnerar en lista med bilder.
core_usage = 1
Antal CPU-kärnor används av detta tillägg Ett värde av -1 betyder att den använder alla tillgängliga kärnor
for_viewer = False
Om värdet är Sann, kommer indatatillägget specialbearbeta att göra sitt utdata lämpligt för visning
output_encoding = ‘utf-8’
Kodningen som detta indatatillägg skapar filer i. Ett värde på None betyder att kodningen är odefinierad
och måste upptäckas var för sig
common_options = set([<calibre.customize.conversion.OptionRecommendation object at 0x7f6febde9650>])
Alternativ som delas av alla indatatillägg. Överrids inte i underklasser. Användning options (sida 319)
istället. Varje alternativ skall vara en instans av OptionRecommendation.
options = set([])
Alternativ för att anpassa beteendet hos detta tillägg. Varje alternativ skall vara en instans av
OptionRecommendation.
recommendations = set([])
En uppsättning av 3-tupler av formen (option_name, recommended_value, recommendation_level)
get_images()
Returnerar en lista med absoluta sökvägar till bilderna, om detta indatatillägg representerar en bildsamling.
Listan med bilder är i samma ordning som bokryggen och innehållsförteckningen.
convert(stream, options, file_ext, log, accelerators)
Denna metod måste implementeras i underklasser. Den måste returnera sökvägen till den skapade OPFfilen eller en OEBBook instans. All utdata skall ingå i den aktuella katalogen. Om detta tilläggskapar
filer utanför den aktuella katalogen som de måste raderas / markeras för borttagning innan denna metod
avslutas.
Parametrar
• stream – En fil som objekt som innehåller indatafilen.
• options – Alternativ för att anpassa konverteringen. Garanterat att ha attribut som motsvarar alla de alternativ som deklarerats av detta tillägg. Dessutom kommer det att ha en
utförlig attribut som tar intergralvärden från noll och uppåt. Högre siffror innebär att vara mer utförlig. En annan användbar egenskap är input_profile det är en instans av
calibre.customize.profiles.InputProfile.
• file_ext – Filtyp (utan . ) i indatafilen. Det är garanterat att vara en av de file_types stöds
av detta tillägg.
• log – Ett calibre.utils.logging.Log objekt. All utdata bör använda detta objekt.
238
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• accelarators – En ordlista för olika uppgifter indatatillägg kan få lätt som skulle kunna
påskynda de efterföljande stegen i omvandlingen.
postprocess_book(oeb, opts, log)
Anropas för att tillåta indatatillägg för att utföra efterbehandling efter att boken har tolkats.
specialize(oeb, opts, log, output_fmt)
Anropas för att tillåta indatatillägg att specialisera den analyserade boken för en viss utdataformat. Anropas
efter postprocess_book och innan några transformer utförs på den analyserade boken.
gui_configuration_widget(parent, get_option_by_name, get_option_help, db, book_id=None)
Anroas för att skapa gränssnittskomponenten som används för att konfigurera detta tillägg i calibres GUI.
Gränssnittskomponenten måste vara en instans av PluginWidget klass. Se bygga indatatillägg för exempel.
class calibre.customize.conversion.OutputFormatPlugin(*args)
Baserad: calibre.customize.Plugin (sida 312)
UtdataFormatTillägg är ansvariga för att omvandla ett OEB-dokument (OPF + HTML) till e-bokutdata.
OEB-dokumentet kan antas vara kodade i UTF-8. Den viktigaste åtgärden händer i convert() (sida 320).
file_type = None
Filtypen (typ utan ledande punkt) att detta tillägg matar ut
common_options = set([<calibre.customize.conversion.OptionRecommendation object at 0x7f6febde97d0>])
Alternativ som delas av alla indatatillägg. Överrids inte i underklasser. Användning options (sida 320)
istället. Varje alternativ skall vara en instans av OptionRecommendation.
options = set([])
Alternativ för att anpassa beteendet hos detta tillägg. Varje alternativ skall vara en instans av
OptionRecommendation.
recommendations = set([])
En uppsättning av 3-tupler av formen (option_name, recommended_value, recommendation_level)
convert(oeb_book, output, input_plugin, opts, log)
Återge innehållet i oeb_book (som är en instans av calibre.ebooks.oeb.OEBBook ) till filen som
anges av utdata.
Parametrar
• output – Antingen en fil som ett objekt eller en sträng. Om det är en sträng är sökvägen
till en katalog som kan eller inte kan existera. Utdatatillägget ska skriva utdata till den
katalogen. Om det är en fil som objekt, bör utdatatillägget skriva utdata i filen.
• input_plugin – Indatatillägget som användes i början av omvandlingsrörledningen.
• opts – Konverteringsalternativ. Garanterat att ha attribut som motsvarar OptionRecommendations av detta tillägg.
• log – Loggern. Skriv ut felsöknings/infomeddelanden etc. med hjälp av denna.
specialize_css_for_output(log, opts, item, stylizer)
Kan användas för att göra ändringar i css under CSS tillplattningsprocessen.
Parametrar
• item – Elementet (HTML-fil) som bearbetas
• stylizer – Ett stiliseringsobjekt som innehåller de tillplattade stilarna för objektet. Du kan
få stilen för alla element av stylizer.style(element).
gui_configuration_widget(parent, get_option_by_name, get_option_help, db, book_id=None)
Anropas för att skapa gränssnittskomponent som används för att konfigurera detta tillägg i calibres GUI.
1.10. Anpassa calibre
239
calibre Användarhandbok, Utgåva 2.22.0
Gränssnittskomponenten måste vara en instans av PluginWidget klass. Se inbyggda utdatatillägg för exempel.
Enhetsdrivrutiner
Basklass för alla drivrutiner är DevicePlugin (sida 321). Men om din enhet exponerar sig som en USBMS-enhet
till operativsystemet, bör du använda USBMS-klassen i stället eftersom den genomför all logik som behövs för att
stödja dessa typer av enheter.
class calibre.devices.interface.DevicePlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Definierar gränssnitt som ska implementeras av bakomliggande system som kommunicerar med en e-bokläsare.
FORMATS = [’lrf’, ‘rtf’, ‘pdf’, ‘txt’]
Ordnad lista över format som stöds
VENDOR_ID = 0
VENDOR_ID kan vara antingen ett heltal, en lista av heltal eller ett ordlista om det är ett ordlista, måste
det vara en ordlista av ordlistor, på formen:
{
integer_vendor_id : { product_id : [list of BCDs], ... },
...
}
PRODUCT_ID = 0
Ett heltal eller en lista med heltal
BCD = None
BCD kan vara antingen None att inte skilja mellan enheter baserade på BCD, eller det kan vara en lista
över BCD-numren för alla enheter som stöds av denna drivrutin.
THUMBNAIL_HEIGHT = 68
Höjd för omslagsikoner på enheten
THUMBNAIL_COMPRESSION_QUALITY = 75
Bredd för omslagsikoner på enheten. Ställa detta kommer att tvinga bilderna till denna storlek, inte med
bibehållet bildförhållande. Om den inte är inställd, då kommer bildförhållandet att bevaras och omslagsikoner inte skall vara högre än THUMBNAIL_HEIGHT kompressionskvalitet för omslagsikoner. Ställ in
denna närmare 100 för att få bättre kvalitet och omslagsikoner med färre komprimeringsartefakter. Naturligtvis blir omslagsikoner större också.
WANTS_UPDATED_THUMBNAILS = False
Ställ in den här till Sann om enheten stödjer uppdatering av omslagsikoner under sync_booklists. Ställ in
den till Sann kommer att be device.py att uppdatera omslagsikoner under bokpassning
CAN_SET_METADATA = [’title’, ‘authors’, ‘collections’]
Huruvida metadata om böckerna kan ställas in via GUI.
CAN_DO_DEVICE_DB_PLUGBOARD = False
Hurvida enheten kan hantera device_db metadatakontrollpaneler
path_sep = ‘/’
Sökvägsseparator för sökvägar till böcker på enheten
icon = ‘/home/kovid/work/calibre/resources/images/reader.png’
Ikon för denna enhet
240
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
UserAnnotation
alias för Annotation
OPEN_FEEDBACK_MESSAGE = None
Gränssnittet visar detta som ett meddelande om inte None. Användbart om öppning kan ta lång tid
VIRTUAL_BOOK_EXTENSIONS = frozenset([])
Uppsättning av typer som är “virtuella böcker” på enheten och därför kan inte visas/sparas/läggas till
biblioteket Till exempel: frozenset([’kobo’])
NUKE_COMMENTS = None
I fall det ska förstöra kommentarer i kopian av boken som skickas till enheten. Om inte None bör detta
vara kort sträng som kommentarerna kommer att ersättas av.
MANAGES_DEVICE_PRESENCE = False
Om Sann indikerar att denna drivrutin helt hanterar enhetsupptäckt, utmatning och så vidare. Om du ställer
in detta till Sann, måste du implmentera detect_managed_devices och debug_managed_device_detection
metoder. En drivrutin med denna uppsättning till Sann är ansvarig för upptäckt av enheter, hantering av en
svartlista över enheter, en förteckning över de utmatade enheter och så vidare. calibre kommer regelbundet kalla detect_managed_devices() metoden och om det returnerar en detekterad enhet, kommer calibre
anropa open(). open() kommer att anropas varje gång en enhet returneras även om tidigare anrop för att
open() misslyckades, därför måste drivrutin bibehålla sin egen svartlista över misslyckade enheter. Likaså
vid utmatning, kommer calibre anropa eject() och sedan antar nästa anrop till detect_managed_devices()
returnerar None, kommer det att anropa post_yank_cleanup().
SLOW_DRIVEINFO = False
Om satt Sannt, kommer calibre anropa get_driveinfo() (sida 324) metoden efter boklistor har lästs
för att få “driveinfo”.
ASK_TO_ALLOW_CONNECT = False
Om värdet är Sann, kommer calibre fråga användaren om de vill hantera enheten med calibre, första gången
den upptäcktes. Om du ställer in detta till Sann måste du implementera get_device_uid() (sida 327)
och ignore_connected_device() (sida 327) och get_user_blacklisted_devices() (sida 327) och set_user_blacklisted_devices() (sida 327)
user_feedback_after_callback = None
Ställ in den till en ordlista av formen {‘title’:title, ‘msg’:msg, ‘det_msg’:detailed_msg} låta calibre ta fram
ett meddelande till användaren efter några återanrop körs (för närvarande endast upload_books). Var noga
med att inte spamma användaren med för många meddelanden. Denna variabel kontrolleras efter varje
anrop, så att bara den sätts när du verkligen behöver.
is_usb_connected(devices_on_system, debug=False, only_presence=False)
Returnera Sann, device_info om en enhet som hanteras av detta tillägg är ansluten.
Parametrar devices_on_system – Förteckning över anslutna enheter
detect_managed_devices(devices_on_system, force_refresh=False)
Anropas bara om MANAGES_DEVICE_PRESENCE är Sann.
Sök efter enheter som denna drivrutin kan hantera. Ska returnera en enhetsobjekt om en enhet hittas.
Detta syfte kommer att vidarebefordras till open() metoden som connected_device. Om ingen enhet hittas,
retruneras None. Den returnerade objektet kan vara vad som helst, calibre använder inte den, det skickas
bara till open().
Denna metod kallas periodiskt av användargränssnittet, så se till att den inte är för resurskrävande. Använd
en buffert för att inte behöva skanna systemet.
Parametrar
• devices_on_system – Sätts om USB-enhet hittas i systemet
1.10. Anpassa calibre
241
calibre Användarhandbok, Utgåva 2.22.0
• force_refresh – Om Sann och drivrutinen använder en buffert för att förhindra upprepad
skanning måste bufferten vara tömd.
debug_managed_device_detection(devices_on_system, output)
Anropas bara om MANAGES_DEVICE_PRESENCE är Sann.
Bör skriva information om enheterna som upptäckts på systemet till utdata, vilket är en fil som objekt.
Ska returnera Sann om en enhet upptäcktes och öppnades, annars Falsk.
reset(key=’-1’, log_packets=False, report_progress=None, detected_device=None)
Parametrar
• key – Nyckel för att låsa upp enhet
• log_packets – Om Sann loggas paketströmmen till/från enheten
• report_progress – Funktion som anropas med en procent (%) progress (tal mellan 0 och
100) för olika uppgifter om det kallas med -1 som innebär att uppgiften inte har några
progressinformation
• detected_device – Enhetsinformation från enhetens skanner
can_handle_windows(device_id, debug=False)
Valfri metod för att utföra ytterligare kontroller på en enhet för att se om den här drivrutinen kan hantera
det. Om det inte är det ska returnera Falsk. Denna metod anropas endast efter leverantör, produkt-ID och
bcd har passats, så det kan göra några relativt tidskrävande kontroller. Genomförandet standard returnerar
Sann. Denna metod kallas bara i Windows. Se även can_handle() (sida 323).
Parametrar device_info – På windows en enhets ID-sträng. På Unix en tupel av
(vendor_id, product_id, bcd).
can_handle(device_info, debug=False)
Unix-version av can_handle_windows() (sida 323)
Parametrar device_info – Är en tupel av (VID, pid, BCD, tillverkare, produkt, serienummer)
open(connected_device, library_uuid)
Utför specifik initiering på alla enheter. Anropas efter att enheten identifieras men innan några andra funktioner kommunicerar med enheten. Till exempel: För enheter som presenterar sig
som USB-masslagringsenheter, skulle denna metod vara ansvarig för montering av enheten eller om enheten har en automatisk montering, för att ta reda på var det har monterats. Metoden
calibre.devices.usbms.device.Device.open() har en implementering av denna funktion
som bör tjäna som ett gott exempel för USB-masslagringsenheter.
Denna metod kan indikera ett OpenFeedback-undantag för att visa ett meddelande till användaren.
Parametrar
• connected_device – Den enhet som vi försöker öppna. Det är en tupel av (leverantörs id,
produkt-id, BCD, tillverkarens namn, produktnamn, enhetens serienummer). Vissa enheter
har inget serienummer och i Windows är endast de tre första fälten närvarande, resten är
None.
• library_uuid – UUID för det aktuella calibre-biblioteket. Kan vara None om det inte finns
något bibliotek (till exempel när det används från kommandoraden).
eject()
Avmontera/mata ut enheten från OS. Detta innebär inte kontroll om det finns väntande jobb som behöver
kommuniceras med enheten.
OBS: Att denna metod kan inte kallas på samma tråd som resten av enhetsmetoderna.
242
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
post_yank_cleanup()
Anropas om användaren rycker enheten utan att mata ut det först.
set_progress_reporter(report_progress)
Sätter en funktion för att rapportera progressinformationen.
Parametrar report_progress – Funktion som anropas med en procent (%) progress (tal mellan
0 och 100) för olika uppgifter om det kallas med -1 som innebär att uppgiften inte har några
progressinformation
get_device_information(end_session=True)
Fråga enheten efter enhetsinformation . Se L{DeviceInfoQuery}.
Returnerar (enhetsnamn, enhetsversion, programvaruversion på enheten, MIME-typ) Tupeln
kan eventuellt ha ett femte element, som är en enhetsinformationsordlista. Se usbms.driver
för ett exempel.
get_driveinfo()
Returnera driveinfo-ordlistan. Vanligtvis anropas från get_device_information(), men om laddning av driveinfo är långsam för denna drivrutin, så borde den sätta SLOW_DRIVEINFO. I detta fall kommer den
här metoden anropas av calibre efter bokenlistor har laddats. Observera att den inte anropas på enhetens
processtråd, så att drivrutinen ska buffra driveinfo i books() och funktionen ska returnera det buffrade datat.
card_prefix(end_session=True)
Returnera en 2-elementlista med prefixet till sökvägar på korten. Om inget kort finns sätts Noneför kortets
prefix. Till exempel (‘/place’, ‘/place2’) (None, ‘place2’) (‘place’, None) (None, None)
total_space(end_session=True)
Få total utrymme på monteringspunkter:
1. Inbyggt minne
2. Minneskort A
3. Minneskort B
Returnerar En 3-elementlista med totalt utrymme i oktetter av (1, 2, 3). Om en viss enhet inte
har någon av dessa platser den ska visa 0.
free_space(end_session=True)
Få ledigt utrymme på monteringspunkter:
1. Inbyggt minne
2. Kort A
3. Kort B
Returnerar En 3-elementlista med fritt utrymme i oktetter av (1, 2, 3). Om en viss enhet inte
har någon av dessa platser den ska returnera -1.
books(oncard=None, end_session=True)
Returnera en lista av e-böcker på enheten.
Parametrar oncard – Om “carda” eller “cardb” returnera en lista med e-böcker på den specifika
minneskortet, annars returnera lista med e-böcker i huvudminnet av enhet. Om ett kort är
specificerad och inga böcker finns på kortet returnera den tomma listan.
Returnerar En BookList.
1.10. Anpassa calibre
243
calibre Användarhandbok, Utgåva 2.22.0
upload_books(files, names, on_card=None, end_session=True, metadata=None)
Ladda upp en lista med böcker till enheten. Om en fil redan finns på enheten, ska den bytas ut. Denna
metod bör signalera ett FreeSpaceError om det inte finns tillräckligt med ledigt utrymme på enheten.
Texten till FreeSpaceError måste innehålla ordet “kort” om on_card inte None annars måste innehålla
ordet “minne”.
Parametrar
• files – En lista av sökvägar
• names – En lista med filnamn som böckerna skulle ha när väl uppladdade till enheten.
len(names) == len(files)
• metadata – Om inte None, det är en lista av Metadata objekt. Tanken är att använda metadata för att avgöra var på enheten att lägga boken. len(metadata) == len(files).
Bortsett från det vanliga omslaget (sökväg för omslaget), kan det också finnas ett omslagsikonattribut, som ska användas i stället. Omslagsikonattributet är på formen (bredd, höjd,
cover_data som jpeg).
Returnerar En lista med 3-elements tupler.
add_books_to_metadata() (sida 325).
Listan
är
tänkt
att
skickas
till
classmethod add_books_to_metadata(locations, metadata, booklists)
Lägg till platser till boklistor. Denna funktion får inte kommunicera med enheten.
Parametrar
• locations – Resultat av ett anrop till L{upload_books}
• metadata – Lista av Metadata objects, samma som för upload_books() (sida 325).
• booklists – En tupel innehåller resultatet av anrop till (books(oncard=None)(),
books(oncard=’carda’)(), :meth‘books(oncard=’cardb’)‘).
delete_books(paths, end_session=True)
Ta bort böcker i sökvägar på enhet.
classmethod remove_books_from_metadata(paths, booklists)
Ta böcker från metadatalistan. Denna funktion får inte kommunicera med enheten.
Parametrar
• paths – sökvägar till böcker på enheten.
• booklists – En tupel innehåller resultatet av anrop till (books(oncard=None)(),
books(oncard=’carda’)(), :meth‘books(oncard=’cardb’)‘).
sync_booklists(booklists, end_session=True)
Uppdatera metadata på enhet.
Parametrar booklists
–
En
tupel
till
(books(oncard=None)(),
:meth‘books(oncard=’cardb’)‘).
innehåller
resultatet
av
anrop
books(oncard=’carda’)(),
get_file(path, outfile, end_session=True)
Läs filen på sökväg på enheten och skriva den till utfil.
Parametrar outfile – filobjekt som sys.stdout eller resultatet av ett open() (sida 323)
anrop.
classmethod config_widget()
Bör returnera en QWidget-gränssnittskomponent. QWidget-gränssnittskomponent innehåller inställningarna för enhetens gränssnitt
244
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
classmethod save_settings(settings_widget)
Ska spara inställningar till disk. Tar gränssnittskomponenten som skapas i config_widget() (sida 326) och sparar alla inställningar till disk.
classmethod settings()
Ska returnera ett opts-objekt. Den opts-objektet bör ha minst ett attribut format_map vilket är en ordnad
lista av format för enheten.
set_plugboards(plugboards, pb_func)
ge drivrutin den aktuella uppsättningen kontrollpaneler och en funktion för att välja kontrollpanel. Denna
metod kallas omedelbart före add_books och sync_booklists.
pb_func är anropbar med följande signatur: def pb_func(device_name, format, plugboards)
Du ger den nuvarande enheten namn (antingen klassnamnet eller DEVICE_PLUGBOARD_NAME), det
format du är intresserad av (en “riktig” format eller “device_db”), och de kontrollpaneler (du fick dem från
set_plugboards, på samma ställe som du fick denna metod).
Returnerar Ingen eller en kontrollpanelinstans.
set_driveinfo_name(location_code, name)
Ange enhetens namn i driveinfo-filen till “namn”. Inställningen kvarstår tills filen återskapas eller namnet
ändras igen.
Icke-diskenheter bör genomföra
get_device_information() metoden.
denna
metod
baserad
på
platskoder
som
returneras
av
prepare_addable_books(paths)
Givet en lista över sökvägar, returnerar en annan lista med sökvägar. Dessa sökvägar pekar på adderbara
versioner av böckerna.
Om det finns ett fel vid förberedning av en bok, så i stället för en sökväg, den position i den returnerade
listan för att boken ska vara en tre tupel: (original_path, undantaget instans, återsöknings)
startup()
Anropas när calibre starar enheten. Gör godtycklig initiering som krävs. Notera att flera instanser av klassen kan instansieras, och sålunda __init__ kan anropas flera gånger, men bara en instans kommer att ha
den här metoden anropad. Denna metod kallas på enhetens processtråd, inte GUI-tråden.
shutdown()
Anropas när calibre stängs, antingen för gott eller är under förberedelser för att starta om. Gör den sanering
som krävs. Denna metod kallas på enhetens processtråd, inte GUI-tråden.
get_device_uid()
Måste returnera ett unikt ID för ansluten enhet (detta kallas direkt efter ett lyckat anrop till open()). Du
måste implementera den här metoden om du sätter ASK_TO_ALLOW_CONNECT = Sann
ignore_connected_device(uid)
Borde ignorera enheten som identifieras av uid (resultatet av ett anrop till get_device_uid()) i framtiden.
Du måste implementera den här metoden om du sätter ASK_TO_ALLOW_CONNECT = Sann. Observera
att denna funktion kallas direkt efter open(), så om open() buffrar vissa tillstånd, bör drivrutinen återställa
det tillståndet.
get_user_blacklisted_devices()
Returnera lista över enheten uid till eget namn på alla enheter som användaren begärt att ignorera.
set_user_blacklisted_devices(devices)
Ställ en lista över enhets uid:er som ska ignoreras av denna drivrutin.
specialize_global_preferences(device_prefs)
Implementera denna metod om din enhet vill överrida en viss preferens. Du måste se till att alla anrops platser som vill ha en inställning som kan överridas använder device_prefs [’något’] istället för prefs[’något’].
1.10. Anpassa calibre
245
calibre Användarhandbok, Utgåva 2.22.0
Din metod ska anropa device_prefs.set_overrides(pref = val, pref = val, ...). För närvarande används för:
metadata management (prefs[’manage_device_metadata’])
set_library_info(library_name, library_uuid, field_metadata)
Implementera den här metoden om du vill ha information om den aktuella calibre-biblioteket. Denna metod
kallas vid uppstart och när calibres biblioteket ändras när den är ansluten.
is_dynamically_controllable()
Anropas av enhetshanteraren vid start av tillägg. Om den här metoden returnerar en sträng, då a) den
stödjer enhetshanteraren dynamiska kontroll gränssnitt, och b) det namnet ska användas när man talar med
tillägget.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
start_plugin()
Denna metod anropas för att starta tillägget. Tillägget ska börja acceptera enhetsanslutningar men det gör
det. Om tillägget redan acceptera anslutningar, så gör ingenting.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
stop_plugin()
Denna metod kallas för att stoppa tillägget. Tillägget bör inte längre acceptera anslutningar, och bör städa upp efter sig. Det är troligt att denna metod ska anropa avstängning. Om tillägget redan slutat emot
anslutningar, så gör ingenting.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
get_option(opt_string, default=None)
Returnera värdet av optionen indikerad av opt_string. Den här metoden kan anropas när tillägget inte
startats. Returnera None om alternativet inte finns.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
set_option(opt_string, opt_value)
Ange värdet av alternativ som indikeras av opt_string. Den här metoden kan anropas när tillägget inte
startats.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
is_running()
Returnera Sann om tillägg startas, annars falsk
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
synchronize_with_db(db, book_id, book_metadata, first_call)
Anropas under bokenpassning när en bok på enheten jämförs med en bok i calibres db. Metoden är ansvarig
för synkronisering av data från enheten till calibres db (om det behövs).
Metoden ska returnera en två-värd tupel. Det första värdet är en uppsättning av calbres bok-ids som ändras
om calbres databas ändrades eller None om databasen inte ändrades. Om det första värdet är en tom mängd
så uppdateras metadata för boken på med calbres metadata och ges tillbaka till enheten, men ingen GUIuppdatering av den boken sker. Detta är användbart när calbres data är korrekt, men måste skickas till
enheten.
Det andra värdet är i sig en 2-värdes tupel. Det första värdet i tupeln anger om ett bokformat ska skickas
till enheten. Avsikten är att möjliggöra kontroll av att boken på enheten är densamma som boken i calibre.
246
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Värdet måste vara None om ingen bok ska skickas, annars returnera basfilnamnet på enheten (en sträng
som foobar.epub). Var noga med att inkludera en förlängning i namnet. Enhets delsystem kommer att
bygga ett send_books jobb för alla böcker med inte- None returnerade värden. Obs: annat än att senare
hämta filtyp, är namnet ignoreras i de fall där enheten använder en mall för att skapa filnamnet, vilket de
flesta gör. Det andra värdet i den returnerade tupeln anges om formatet är framtidsdaterad. Returnera Sann
om det är, annars returnera Falsk. Calibre visar en dialogruta där användaren listar alla framtida daterade
böcker.
Extremt viktigt: den här metoden anropas på GUI-processtråden. Den måste vara trådsäker i förhållande
till enhetens huvudtråd.
book_id: calibres id för boken i databasen. book_metadata: Metadataobjektet för boken som kommer från
enheten. first_call: Sann om det är första anropet under en synkronisering, Falsk annars
class calibre.devices.interface.BookList(oncard, prefix, settings)
Baserad: list
En lista med böcker. Varje bokobjektet måste ha fälten
1.titel
2.författare
3.storlek (filstorlek av boken)
4.datumtid (en UTC-tids tupel)
5.sökväg (sökväg på enheten till boken)
6.omslagsikon (kan vara None) omslagsikon är antingen ett str/bytes-objekt med bilddata eller det borde ha
ett attribut image_path som lagrar en absolut (plattformsberoende) sökvägen till bilden
7.etiketter (en lista med strängar, kan vara tom).
supports_collections()
Returnera Sann om enheten stöder kollektioner för denna boklista.
add_book(book, replace_metadata)
Lägg boken till boklista. Avsikten är att behålla alla enheters interna metadata. Returnerar Sann om boklistor måste synkroniseras
remove_book(book)
Ta bort en bok från boklista. Rätta en enhets metadata samtidigt
get_collections(collection_attributes)
Returnera en ordlista av samlingar som skapats från collection_attributes. Varje post i ordlistan är på formen kollektionsnamn:[lista med böcker]
Listan över böcker sorterad efter boktitel, förutom samlingar som skapats från serien, i vilket fall series_index används.
Parametrar collection_attributes – En lista med attribut av bokobjektet
USB-masslagringsbaserade enheter
Basklass för sådan enhet är calibre.devices.usbms.driver.USBMS (sida 330). Denna klass ärver i sin tur
en del av dess funktioner från sina baser, dokumenterad nedan. En typisk grund USBMS baserad drivrutin ser ut så
här:
from calibre.devices.usbms.driver import USBMS
class PDNOVEL(USBMS):
1.10. Anpassa calibre
247
calibre Användarhandbok, Utgåva 2.22.0
name = 'Pandigital Novel device interface'
gui_name = 'PD Novel'
description = _('Communicate with the Pandigital Novel')
author = 'Kovid Goyal'
supported_platforms = ['windows', 'linux', 'osx']
FORMATS = ['epub', 'pdf']
VENDOR_ID
PRODUCT_ID
BCD
= [0x18d1]
= [0xb004]
= [0x224]
VENDOR_NAME = 'ANDROID'
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = '__UMS_COMPOSITE'
THUMBNAIL_HEIGHT = 144
EBOOK_DIR_MAIN = 'eBooks'
SUPPORTS_SUB_DIRS = False
def upload_cover(self, path, filename, metadata):
coverdata = getattr(metadata, 'thumbnail', None)
if coverdata and coverdata[2]:
with open('%s.jpg' % os.path.join(path, filename), 'wb') as coverfile:
coverfile.write(coverdata[2])
class calibre.devices.usbms.device.Device(plugin_path)
Baserad:
calibre.devices.usbms.deviceconfig.DeviceConfig,
calibre.devices.interface.DevicePlugin (sida 321)
Denna klass ger logik som är gemensam för alla drivrutiner för enheter som exporterar själva som USBmasslagringsenheter. Ger implementationer för montering/utmatning av USBMS-enheter på alla plattformar.
WINDOWS_MAIN_MEM = None
Sträng identifierar huvudminne på enheten i Windows PnP id strängar Detta kan vara None, string, lista
med string eller sammanställad regex
WINDOWS_CARD_A_MEM = None
Sträng som identifierar det första kortet av anordningen i Windows PnP id strängar Detta kan vara None,
string, lista med string eller sammanställad regex
WINDOWS_CARD_B_MEM = None
Sträng som identifierar det andra kortet av anordningen i Windows PnP id strängar Detta kan vara None,
string, lista med string eller sammanställad regex
OSX_MAIN_MEM_VOL_PAT = None
Används av den nya drivrutinens upptäckt att klargöra huvudminnet från minneskort. Bör vara ett reguljärt
uttryck som passar huvudminnets monteringspunkt tilldelad av OS X
MAX_PATH_LEN = 250
Den maximala längden av sökvägar som skapats på enheten
NEWS_IN_FOLDER = True
Lägg nyheter i en egen mapp
windows_sort_drives(drives)
Anriopas för att klargöra huvudminnet och minneskortet för enheter som inte skiljer mellan dem på grundval av WINDOWS_CARD_NAME. För t.ex .: The EB600
sanitize_callback(path)
Tillbakaanrop för att låta enskilda drivrutiner överrida sökvägens sanering som används av
248
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
create_upload_path().
filename_callback(default, mi)
Tillbakaanrop för att låta enskilda
create_upload_path().
drivrutiner
ändra
standard
filnamnet
fastställt
av
sanitize_path_components(components)
Utför någon enhetsspecifik sanering på sökvägskomponenter för filer som laddas upp till enheten
get_annotations(path_map)
Lösa upp path_map till annotation_map filer som finns på enheten
add_annotation_to_library(db, db_id, annotation)
Lägg en anteckning till calibres biblioteket
class calibre.devices.usbms.cli.CLI
class calibre.devices.usbms.driver.USBMS(plugin_path)
Baserad: calibre.devices.usbms.cli.CLI (sida 330), calibre.devices.usbms.device.Device
(sida 329)
Basklass för alla USBMS-enheter. Implementerar logiken för att skicka/få/uppdatera metadata/buffra metadata
/ etc.
upload_cover(path, filename, metadata, filepath)
Ladda upp bokomslag till enheten. Grundinställning gör implementationen ingenting.
Parametrar
• path – Den fullständiga sökvägen till katalogen där den tillhörande boken är placerad.
• filename – Namnet på bokfilen utan filtyp.
• metadata – metadata som hör till boken. Använd metadata.thumbnail för omslag
• filepath – Fullständig sökväg till e-bokfilen
classmethod normalize_path(path)
Returnera sökväg med plattformsursprungliga sökvägsseparatorer
Användargränssnittsåtgärder
Om du lägger till ditt eget tillägg i en zip-fil, ska du skapa underklass både till InterfaceActionBase och InterfaceAction. Den load_actual_plugin() metod för din InterfaceActionBase underklass måste returnera ett instansierat
objekt för din InterfaceBase underklass.
class calibre.gui2.actions.InterfaceAction(parent, site_customization)
Baserad: PyQt5.QtCore.QObject
Ett tillägg som representerar en “åtgärd” som kan tas i det grafiska användargränssnittet. Alla objekt i verktygsfältet och snabbmenyer implementerar av dessa tillägg.
Observera att den här klassen är basklassen för dessa tillägg, dock att integrera tillägg med calibre tilläggssystem,
måste du göra en omslagsklass som refererar till det faktiska tillägget. Se calibre.customize.builtins
modul för exempel.
Om två InterfaceAction objekt har samma namn, tar den med högre prioritet företräde.
Underklasser bör implementera genesis(), library_changed(), location_selected()
shutting_down() och initialization_complete() metoder.
När initierats, har detta tillägg tillgång till de calibres huvud-GUI via gui medlem. Du kan komma åt andra
tillägg med namn, till exempel:
1.10. Anpassa calibre
249
calibre Användarhandbok, Utgåva 2.22.0
self.gui.iactions['Save To Disk']
För att komma åt själva tillägget, använd interface_action_base_plugin attribut, detta attribut blir
först tillgänglig efter det tillägget har initierats. Användbart om du vill använda metoder från tilläggklassen som
do_user_config().
QAction anges av action_spec skapas automatiskt och blir tillgänglig via self.qaction.
name = ‘Implement me’
Tilläggnamnet. Om två tillägg med samma namn är närvarande, tar en med högre prioritet företräde.
priority = 1
TIlläggets prioritet. Om två tillägg med samma namn är närvarande, tar en med högre prioritet företräde.
popup_type = 1
Extrafönstermenytypen när detta tillägg läggs till ett verktygsfält
auto_repeat = False
Huruvida denna åtgärd bör automatiskt upprepas när dess kortkommando hålls nere.
action_spec = (‘text’, ‘icon’, None, None)
Av formen: (text, icon_path, verktygstips, kortkommando) ikonen, verktygstips och kortkommandot kan
vara None genväg måste vara en sträng, None eller tupel av genvägar. Om None är ett kortkommando
som motsvarar åtgärden inte är registrerad. Om du skickar en tom tabellrad, då registreras genvägen utan
bindande standardnyckel.
action_add_menu = False
Om Sann, skapas en meny automatiskt och läggs till self.qaction
action_menu_clone_qaction = False
Om Sann, läggs en klon av self.qaction till menyn för self.qaction Om du vill att texten i denna åtgärd att
vara annorlunda än self.qaction, ställa in den här variabeln till den nya texten
dont_add_to = frozenset([])
Uppsättning av platser som denna åtgärd får inte tilläggas. Se all_locations för en lista över möjliga
platser
dont_remove_from = frozenset([])
Uppsättning av platser som denna åtgärd inte får ta bort. Se all_locations för en lista över möjliga
platser
action_type = ‘global’
Typ av åtgärd “nuvarande” innebär, agerar på den aktuella vyn “global”: en åtgärd som inte verkar på den
aktuella vyn, utan snarare på calibre som helhet
accepts_drops = False
Om Sann, kommer detta InterfaceAction att ha möjlighet att interagera med dra och släpp händelser. Se
de metoder, accept_enter_event(), :meth‘:accept_drag_move_event‘, drop_event() för mer
information.
accept_enter_event(event, mime_data)
Metoden ska returnera sant om och endast detta gränssnitt åtgärd kan hantera dra händelsen. Anropa inte
acceptera/ignorera vid händelsen, som kommer att tas om hand av den calibres UI
accept_drag_move_event(event, mime_data)
Metoden ska returnera sant om och endast detta gränssnitt åtgärd kan hantera dra händelsen. Anropa inte
acceptera/ignorera vid händelsen, som kommer att tas om hand av den calibres UI
drop_event(event, mime_data)
Denna metod bör utföra några användbara åtgärder och returnera Sann om endast om detta gränssnittsåtgärd kan hantera händelsen “drop”. Anropa inte acceptera/ignorera vid händelsen, som kommer att tas om
250
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
hand av den calibres UI. Du ska inte utföra blockering/långa operationer i denna funktion. Istället avger en
signal eller använd QTimer.singleShot och returnera snabbt tillbaka. Se de inbyggda åtgärder för exempel.
create_menu_action(menu, unique_name, text, icon=None, shortcut=None, description=None,
triggered=None, shortcut_name=None)
Bekväm metod för att enkelt lägga handlingar till en QMenu. Returnerar den skapade QAction, denna
åtgärd har ett extra attribut calibre_shortcut_unique_name som om den inte None avser det unika namn
under vilket denna åtgärd är registrerad med tangentbordsansvarig.
Parametrar
• menu – QMenu:s nyskapade åtgärder kommer att läggas till
• unique_name – Ett unikt namn för denna åtgärd, detta måste vara globalunikt, så gör det
så beskrivande som möjligt. Om du är osäker lägg till ett uuid till den.
• text – Texten för denna åtgärd.
• icon – Antingen en QIcon eller ett filnamn. Filnamnet skickas till inbyggda I(), så du
behöver inte ange den fullständiga sökvägen till bildkatalogen.
• shortcut – En sträng, en lista med strängar, None eller Falsk. Om Falsk har inget kortkommando registrerats för denna åtgärd. Om None har ett kortkommando med ingen standardtangentbindning registrerats. Sträng och lista med strängar registrerar en genväg med
standardtangentbindning som anges.
• description – En beskrivning för denna åtgärd. Används för att ställa in verktygsråd.
• triggered – En anropbar som är ansluten till den utlösta signalen i den skapade åtgärden.
• shortcut_name – Testet visas för användaren när du anpassar kortkommandon för denna
åtgärd. Som standard är satt till värdet på text.
load_resources(names)
Om detta tillägg kommer i en ZIP-fil (användartillagt tillägg), kommer denna metod tillåta dig läsa in
resurser från ZIP-fil.
Till exempel att läsa in en bild:
pixmap = QPixmap()
pixmap.loadFromData(self.load_resources(['images/icon.png']).itervalues().next())
icon = QIcon(pixmap)
Parametrar names – Förteckning över sökvägar till resurser i zip-filen som använder / som
avskiljare
Returnerar En ordlista på formen {name : file_contents}. Namn som inte finns i zipfilen kommer inte att vara närvarande i ordlistan.
genesis()
Ställ in detta tillägg. Endast anropas en gång under initieringen. self.gui är tillgänglig. Den funktion som
specificerats action_spec finns som self.qaction.
location_selected(loc)
Anropas när boken listan som visas i calibre förändringas. För närvarande är värden för loc: bibliotek,
huvud, kort och cardb.
Denna metod bör aktivera/inaktivera denna åtgärd och dess underåtgärder som är lämpliga för platsen.
library_changed(db)
Anropas var gång det aktuella biblioteket är ändrat.
Parametrar db – LibraryDatabase motsvarar det aktuella biblioteket.
1.10. Anpassa calibre
251
calibre Användarhandbok, Utgåva 2.22.0
gui_layout_complete()
Anropas en gång per åtgärd när formgivningen hos huvud-GUI är avslutad. Om åtgärder måste göra ändringar i formgivningen, bör de göras här, snarare än i initialization_complete().
initialization_complete()
Anropas en gång per åtgärd när installationen av huvud-GUI är färdigt.
shutting_down()
Anropas en gång per tillägg när huvud-GUI är i färd med att stängas av. Släpp alla använda resurser, men
försök att inte blockera avstängning under långa tidsperioder.
Returnerar Falsk för att stoppa avstängningen. Du är ansvarig för att tala om för användaren
varför avstängningen stoppades.
class calibre.customize.InterfaceActionBase(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
load_actual_plugin(gui)
Denna metod måste returnera själva gränssnittsåtgärden av tilläggsobjektet.
Inställningar Tillägg
class calibre.customize.PreferencesPlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som representerar en gränssnittskomponenten visas i inställningsdialogen.
Detta tillägg har bara en viktig metod create_widget(). De olika fälten i tillägget styr hur den kategoriseras
i användargränssnittet.
config_widget = None
Importera sökväg till modul som innehåller en klass namngiven ConfigWidget vilken implementerar ConfigWidgetInterface. Används av create_widget().
category_order = 100
Var i listan av kategorier category av detta tillägg bör vara.
name_order = 100
Var i listan av namn i en kategori gui_name detta tillägg bör vara
category = None
Kategorin detta tillägg bör vara i
gui_category = None
Kategorinamnet som visas till användaren för detta tillägg
gui_name = None
Namnet som visar till användaren för detta tillägg
icon = None
Ikonen för detta tillägg, bör vara en absolut sökväg
description = None
Beskrivning som används för verktygsråd och liknande
create_widget(parent=None)
Skapa
och
returnerar
den
faktiska
Qt-gränssnittskomponenten
som
ställa
in
denna
grupps
inställningar.
Gränssnittskomponenten
måste
calibre.gui2.preferences.ConfigWidgetInterface (sida 334).
används
för
implementera
Standard implementationen använder config_widget för att instansiera gränssnittskomponenten.
252
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
class calibre.gui2.preferences.ConfigWidgetInterface
Denna klass definierar gränssnittet som alla gränssnittskomponenter visar i Inställningsdialogen som måste implementeras. Se ConfigWidgetBase för en basklass som implementerar detta gränssnitt och också definierar
olika bekväma metoder.
changed_signal = None
Denna signal ska avges när användaren ändrar ett värde i den här gränssnittskomponenten
supports_restoring_to_defaults = True
Sätt till Sann om och bara om restore_to_defaults() metoden är implementerad.
restore_defaults_desc = u’\xc5terst\xe4ll till standardv\xe4rden. Du m\xe5ste klicka p\xe5 Verkst\xe4ll f\xf6r att fa
Verktygsrådet för Återställning till grundinställningsknappen
restart_critical = False
Om Sann tillåter inte Inställningsdialogrutan inte användaren att ställa in några fler inställningar. Endast
har verkan om commit() returnerar Sann.
genesis(gui)
Anropas en gång innan gränssnittskomponent visas, borde utföra alla nödvändig inställningar.
Parametrar gui – calibres huvudanvändargränssnitt
initialize()
Bör sätta alla konfigureringsvärden till deras initiala värden (värdena lagras i konfigurationsfiler).
restore_defaults()
Bör sätta alla konfigureringsvärden till deras grundinställningar.
commit()
Spara alla ändrade inställningar. Returnerar Sann om förändringarna kräver en omstart, annars Falsk. Signalera ett AbortCommit undantag för att indikera att ett fel har inträffat. Du är ansvarig för att ge användaren återkoppling på vad felet är och hur man rättar till det.
refresh_gui(gui)
Anropas en gång efter denna gränssnittskomponent läggs in. Ansvarig för att orsakat gui att läsa om ändrade inställningar. Observera att som standard åter initierar grafiska gränssnittet olika element i alla fall, så
de flesta gränssnittskomponenter inte behöver använda den här metoden.
class calibre.gui2.preferences.ConfigWidgetBase(parent=None)
Basklass som innehåller kod för att enkelt lägga till standard konfigureringsgränssnittskomponenter som
kryssrutor, kombinationsrutor, textfält och så vidare. se register() method.
Denna klass hanterar automatiskt förändringsnoteringar, återställning till standard, översättning mellan guiobjekt och konfigurationsobjekt etc. för registrerade inställningar.
Om din konfigureringsgränssnittskomponent ärver från denna klass men inkluderar inställning som inte är registrerade, bör du överrida ConfigWidgetInterface metoder och kallar basklassmetoder inuti överridningarna.
register(name, config_obj, gui_name=None, choices=None, restart_required=False,
ty_string_is_None=True, setting=<class ‘calibre.gui2.preferences.Setting’>)
Registrera en inställning.
emp-
Parametrar
• name – Satta namnet
• config – Konfigureringsobjektet som läser/skriver instälningen
• gui_name – Namnet på det grafiska objekt som presenterar ett gränssnitt för att ändra
inställningen. Som standard antas vara ’opt_’ + name.
1.10. Anpassa calibre
253
calibre Användarhandbok, Utgåva 2.22.0
• choices – Om inställningen är en flervals (ComboBox) baserad inställning, listan över
alternativ. Listan är en lista på två-elements tupler av formen: [(gui name, value),
...]
• setting – Klassen ansvarar för att hantera den här inställningen. Standard klassen hanterar
nästan alla fall, så den här param används sällan.
Visningstillägg
class calibre.customize.ViewerPlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
type = u’Bl\xe4ddare’
Dessa tillägg används för att lägga till funktionalitet till calibres granskare.
load_fonts()
Denna metod anropas en gång vid start av granskare. Det borde ladda godtyckligt typsnitt som det vill göra
tillgängligt. Till exempel:
def load_fonts():
from PyQt5.Qt import QFontDatabase
font_data = get_resources(['myfont1.ttf', 'myfont2.ttf'])
for raw in font_data.itervalues():
QFontDatabase.addApplicationFontFromData(raw)
load_javascript(evaljs)
Denna metod anropas varje gång ett nytt HTML-dokument laddas i granskaren. Använd det för att ladda
javaskriptsbibliotek in i granskaren. Till exempel:
def load_javascript(self, evaljs):
js = get_resources('myjavascript.js')
evaljs(js)
run_javascript(evaljs)
Denna metod anropas varje gång ett dokument laddats klart. Använd det på samma sätt som load_javascript().
customize_ui(ui)
Denna metod anropas en gång när betraktaren skapas. Använd den för att göra några anpassningar som du
vill till tittarens användargränssnitt. Till exempel kan du ändra verktygsfält via ui.tool_bar och ui.tool_bar2.
customize_context_menu(menu, event, hit_test_result)
Denna metod anropas varje gång menyn i sammanhanget (högerklicka) visas. Du kan använda den för
att anpassa snabbmenyn. event är snabbmenyn händelsen och hit_test_result är QWebHitTestResult för
denna händelse i det inlästa dokumentet.
1.10.2 Miljövariabler
• CALIBRE_CONFIG_DIRECTORY - anger katalog var konfigurationsfiler lagras och läses.
• CALIBRE_TEMP_DIR - anger temporärkatalog som används av Calibre
• CALIBRE_OVERRIDE_DATABASE_PATH - tillåter dig att ange fulla sökvägen till metadata.db. Genom att
använda denna variabel kan du ha metadata.db i en annan plats än bibliotekskatalogen. Användbart om din
bibliotekskatalog är på ett nätverk som inte stöder låsning av filer.
• CALIBRE_DEVELOP_FROM - Används för att köra från en Calibre-utvecklingsmijö. Se Konfigurera calibre
utvecklingsmiljö (sida 296).
254
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• CALIBRE_OVERRIDE_LANG - Används för att styra språket som används av gränssnittet (ISO 639 language
code)
• CALIBRE_NO_NATIVE_FILEDIALOGS - Får Calibre att inte använda ursprungliga fildialoger för att välja
filer/kataloger. Sätt den till 1 för att använda.
• CALIBRE_NO_NATIVE_MENUBAR - Orsakar att calibre inte skapar en grund- (global) menyn på Ubuntu
Unity och liknande linux skrivbordsmiljöer. Menyn är istället placerad inuti fönstret, som vanligt.
• CALIBRE_IGNORE_SYSTEM_THEME - Causes calibre to ignore any system Qt style plugins and use its builtin
style plugin instead. Useful to workaround crashes caused by the system Qt plugin being incompatible with the
version of Qt shipped with calibre.
• SYSFS_PATH - Använd om sysfs är monterad någon annanstans än /sys
• http_proxy - Används på linux för att ange en specifik HTTP proxy
Se Hur du ställer in miljövariabler i Windows92 eller Hur du ställer in miljövariabler i OS X93 .
1.10.3 Justeringar
Justeringar är små förändringar som du kan ange för att styra diverse aspekter av calibreens beteende. Du kan ändra
dem genom att gå till inställningar Preferences->Advanced->Tweaks. Grundinställningsvärde för justeringar visas
nedan
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
__license__
= 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
'''
Contains various tweaks that affect calibre behavior. Only edit this file if
you know what you are doing. If you delete this file, it will be recreated from
defaults.
'''
#: Auto increment series index
# The algorithm used to assign a book added to an existing series a series number.
# New series numbers assigned using this tweak are always integer values, except
# if a constant non-integer is specified.
# Possible values are:
# next - First available integer larger than the largest existing number
# first_free - First available integer larger than 0
# next_free - First available integer larger than the smallest existing number
# last_free - First available integer smaller than the largest existing number
#
Return largest existing + 1 if no free number is found
# const - Assign the number 1 always
# no_change - Do not change the series index
# a number - Assign that number always. The number is not in quotes. Note that
#
0.0 can be used here.
# Examples:
# series_index_auto_increment = 'next'
# series_index_auto_increment = 'next_free'
# series_index_auto_increment = 16.5
#
92 http://www.computerhope.com/issues/ch000549.htm
93 http://www.dowdandassociates.com/blog/content/howto-set-an-environment-variable-in-mac-os-x-home-slash-dot-macosx-slashenvironment-dot-plist/
1.10. Anpassa calibre
255
calibre Användarhandbok, Utgåva 2.22.0
# Set the use_series_auto_increment_tweak_when_importing tweak to True to
# use the above values when importing/adding books. If this tweak is set to
# False (the default) then the series number will be set to 1 if it is not
# explicitly set during the import. If set to True, then the
# series index will be set according to the series_index_auto_increment setting.
# Note that the use_series_auto_increment_tweak_when_importing tweak is used
# only when a value is not provided during import. If the importing regular
# expression produces a value for series_index, or if you are reading metadata
# from books and the import plugin produces a value, than that value will
# be used irrespective of the setting of the tweak.
series_index_auto_increment = 'next'
use_series_auto_increment_tweak_when_importing = False
#: Add separator after completing an author name
# Should the completion separator be append
# to the end of the completed text to
# automatically begin a new completion operation
# for authors.
# Can be either True or False
authors_completer_append_separator = False
#: Author sort name algorithm
# The algorithm used to copy author to author_sort
# Possible values are:
# invert: use "fn ln" -> "ln, fn"
# copy : copy author to author_sort without modification
# comma : use 'copy' if there is a ',' in the name, otherwise use 'invert'
# nocomma : "fn ln" -> "ln fn" (without the comma)
# When this tweak is changed, the author_sort values stored with each author
# must be recomputed by right-clicking on an author in the left-hand tags pane,
# selecting 'manage authors', and pressing 'Recalculate all author sort values'.
# The author name suffixes are words that are ignored when they occur at the
# end of an author name. The case of the suffix is ignored and trailing
# periods are automatically handled. The same is true for prefixes.
# The author name copy words are a set of words which if they occur in an
# author name cause the automatically generated author sort string to be
# identical to the author name. This means that the sort for a string like Acme
# Inc. will be Acme Inc. instead of Inc., Acme
author_sort_copy_method = 'comma'
author_name_suffixes = ('Jr', 'Sr', 'Inc', 'Ph.D', 'Phd',
'MD', 'M.D', 'I', 'II', 'III', 'IV',
'Junior', 'Senior')
author_name_prefixes = ('Mr', 'Mrs', 'Ms', 'Dr', 'Prof')
author_name_copywords = ('Corporation', 'Company', 'Co.', 'Agency', 'Council',
'Committee', 'Inc.', 'Institute', 'Society', 'Club', 'Team')
#: Splitting multiple author names
# By default, calibre splits a string containing multiple author names on
# ampersands and the words "and" and "with". You can customize the splitting
# by changing the regular expression below. Strings are split on whatever the
# specified regular expression matches, in addition to ampersands.
# Default: r'(?i),?\s+(and|with)\s+'
authors_split_regex = r'(?i),?\s+(and|with)\s+'
#: Use author sort in Tag Browser
# Set which author field to display in the tags pane (the list of authors,
# series, publishers etc on the left hand side). The choices are author and
# author_sort. This tweak affects only what is displayed under the authors
256
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# category in the tags pane and content server. Please note that if you set this
# to author_sort, it is very possible to see duplicate names in the list because
# although it is guaranteed that author names are unique, there is no such
# guarantee for author_sort values. Showing duplicates won't break anything, but
# it could lead to some confusion. When using 'author_sort', the tooltip will
# show the author's name.
# Examples:
#
categories_use_field_for_author_name = 'author'
#
categories_use_field_for_author_name = 'author_sort'
categories_use_field_for_author_name = 'author'
#: Control partitioning of Tag Browser
# When partitioning the tags browser, the format of the subcategory label is
# controlled by a template: categories_collapsed_name_template if sorting by
# name, categories_collapsed_rating_template if sorting by average rating, and
# categories_collapsed_popularity_template if sorting by popularity. There are
# two variables available to the template: first and last. The variable 'first'
# is the initial item in the subcategory, and the variable 'last' is the final
# item in the subcategory. Both variables are 'objects'; they each have multiple
# values that are obtained by using a suffix. For example, first.name for an
# author category will be the name of the author. The sub-values available are:
# name: the printable name of the item
# count: the number of books that references this item
# avg_rating: the average rating of all the books referencing this item
# sort: the sort value. For authors, this is the author_sort for that author
# category: the category (e.g., authors, series) that the item is in.
# Note that the "r'" in front of the { is necessary if there are backslashes
# (\ characters) in the template. It doesn't hurt anything to leave it there
# even if there aren't any backslashes.
categories_collapsed_name_template = r'{first.sort:shorten(4,,0)} - {last.sort:shorten(4,,0)}'
categories_collapsed_rating_template = r'{first.avg_rating:4.2f:ifempty(0)} - {last.avg_rating:4.2f:i
categories_collapsed_popularity_template = r'{first.count:d} - {last.count:d}'
#: Control order of categories in the tag browser
# Change the following dict to change the order that categories are displayed in
# the tag browser. Items are named using their lookup name, and will be sorted
# using the number supplied. The lookup name '*' stands for all names that
# otherwise do not appear. Two names with the same value will be sorted
# using the default order; the one used when the dict is empty.
# Example: tag_browser_category_order = {'series':1, 'tags':2, '*':3}
# resulting in the order series, tags, then everything else in default order.
tag_browser_category_order = {'*':1}
#: Specify columns to sort the booklist by on startup
# Provide a set of columns to be sorted on when calibre starts
# The argument is None if saved sort history is to be used
# otherwise it is a list of column,order pairs. Column is the
# lookup/search name, found using the tooltip for the column
# Order is 0 for ascending, 1 for descending
# For example, set it to [('authors',0),('title',0)] to sort by
# title within authors.
sort_columns_at_startup = None
#: Control how dates are displayed
# Format to be used for publication date and the timestamp (date).
# A string controlling how the publication date is displayed in the GUI
# d
the day as number without a leading zero (1 to 31)
1.10. Anpassa calibre
257
calibre Användarhandbok, Utgåva 2.22.0
# dd
the day as number with a leading zero (01 to 31)
# ddd
the abbreviated localized day name (e.g. 'Mon' to 'Sun').
# dddd the long localized day name (e.g. 'Monday' to 'Sunday').
# M
the month as number without a leading zero (1-12)
# MM
the month as number with a leading zero (01-12)
# MMM
the abbreviated localized month name (e.g. 'Jan' to 'Dec').
# MMMM the long localized month name (e.g. 'January' to 'December').
# yy
the year as two digit number (00-99)
# yyyy the year as four digit number
# h
the hours without a leading 0 (0 to 11 or 0 to 23, depending on am/pm) '
# hh
the hours with a leading 0 (00 to 11 or 00 to 23, depending on am/pm) '
# m
the minutes without a leading 0 (0 to 59) '
# mm
the minutes with a leading 0 (00 to 59) '
# s
the seconds without a leading 0 (0 to 59) '
# ss
the seconds with a leading 0 (00 to 59) '
# ap
use a 12-hour clock instead of a 24-hour clock, with "ap"
#
replaced by the localized string for am or pm '
# AP
use a 12-hour clock instead of a 24-hour clock, with "AP"
#
replaced by the localized string for AM or PM '
# iso
the date with time and timezone. Must be the only format present
# For example, given the date of 9 Jan 2010, the following formats show
# MMM yyyy ==> Jan 2010
yyyy ==> 2010
dd MMM yyyy ==> 09 Jan 2010
# MM/yyyy ==> 01/2010
d/M/yy ==> 9/1/10
yy ==> 10
# publication default if not set: MMM yyyy
# timestamp default if not set: dd MMM yyyy
# last_modified_display_format if not set: dd MMM yyyy
gui_pubdate_display_format = 'MMM yyyy'
gui_timestamp_display_format = 'dd MMM yyyy'
gui_last_modified_display_format = 'dd MMM yyyy'
#: Control sorting of titles and series in the library display
# Control title and series sorting in the library view. If set to
# 'library_order', the title sort field will be used instead of the title.
# Unless you have manually edited the title sort field, leading articles such as
# The and A will be ignored. If set to 'strictly_alphabetic', the titles will be
# sorted as-is (sort by title instead of title sort). For example, with
# library_order, The Client will sort under 'C'. With strictly_alphabetic, the
# book will sort under 'T'.
# This flag affects Calibre's library display. It has no effect on devices. In
# addition, titles for books added before changing the flag will retain their
# order until the title is edited. Double-clicking on a title and hitting return
# without changing anything is sufficient to change the sort.
title_series_sorting = 'library_order'
#: Control formatting of title and series when used in templates
# Control how title and series names are formatted when saving to disk/sending
# to device. The behavior depends on the field being processed. If processing
# title, then if this tweak is set to 'library_order', the title will be
# replaced with title_sort. If it is set to 'strictly_alphabetic', then the
# title will not be changed. If processing series, then if set to
# 'library_order', articles such as 'The' and 'An' will be moved to the end. If
# set to 'strictly_alphabetic', the series will be sent without change.
# For example, if the tweak is set to library_order, "The Lord of the Rings"
# will become "Lord of the Rings, The". If the tweak is set to
# strictly_alphabetic, it would remain "The Lord of the Rings". Note that the
# formatter function raw_field will return the base value for title and
# series regardless of the setting of this tweak.
save_template_title_series_sorting = 'library_order'
258
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
#: Set the list of words considered to be "articles" for sort strings
# Set the list of words that are to be considered 'articles' when computing the
# title sort strings. The articles differ by language. By default, calibre uses
# a combination of articles from English and whatever language the calibre user
# interface is set to. In addition, in some contexts where the book language is
# available, the language of the book is used. You can change the list of
# articles for a given language or add a new language by editing
# per_language_title_sort_articles. To tell calibre to use a language other
# than the user interface language, set, default_language_for_title_sort. For
# example, to use German, set it to 'deu'. A value of None means the user
# interface language is used. The setting title_sort_articles is ignored
# (present only for legacy reasons).
per_language_title_sort_articles = {
# English
'eng' : (r'A\s+', r'The\s+', r'An\s+'),
# Esperanto
'epo': (r'La\s+', r"L'", 'L\xb4'),
# Spanish
'spa' : (r'El\s+', r'La\s+', r'Lo\s+', r'Los\s+', r'Las\s+', r'Un\s+',
r'Una\s+', r'Unos\s+', r'Unas\s+'),
# French
'fra' : (r'Le\s+', r'La\s+', r"L'", u'L´', r'Les\s+', r'Un\s+', r'Une\s+',
r'Des\s+', r'De\s+La\s+', r'De\s+', r"D'", u'D´'),
# Italian
'ita': ('Lo\\s+', 'Il\\s+', "L'", 'L\xb4', 'La\\s+', 'Gli\\s+',
'I\\s+', 'Le\\s+', 'Uno\\s+', 'Un\\s+', 'Una\\s+', "Un'",
'Un\xb4', 'Dei\\s+', 'Degli\\s+', 'Delle\\s+', 'Del\\s+',
'Della\\s+', 'Dello\\s+', "Dell'", 'Dell\xb4'),
# Portuguese
'por' : (r'A\s+', r'O\s+', r'Os\s+', r'As\s+', r'Um\s+', r'Uns\s+',
r'Uma\s+', r'Umas\s+', ),
# Romanian
'ron' : (r'Un\s+', r'O\s+', r'Ni¸
ste\s+', ),
# German
'deu' : (r'Der\s+', r'Die\s+', r'Das\s+', r'Den\s+', r'Ein\s+',
r'Eine\s+', r'Einen\s+', r'Dem\s+', r'Des\s+', r'Einem\s+',
r'Eines\s+'),
# Dutch
'nld' : (r'De\s+', r'Het\s+', r'Een\s+', r"'n\s+", r"'s\s+", r'Ene\s+',
r'Ener\s+', r'Enes\s+', r'Den\s+', r'Der\s+', r'Des\s+',
r"'t\s+"),
# Swedish
'swe' : (r'En\s+', r'Ett\s+', r'Det\s+', r'Den\s+', r'De\s+', ),
# Turkish
'tur' : (r'Bir\s+', ),
# Afrikaans
'afr' : (r"'n\s+", r'Die\s+', ),
# Greek
'ell' : (r'O\s+', r'I\s+', r'To\s+', r'Ta\s+', r'Tus\s+', r'Tis\s+',
r"'Enas\s+", r"'Mia\s+", r"'Ena\s+", r"'Enan\s+", ),
# Hungarian
'hun' : (r'A\s+', 'Az\s+', 'Egy\s+',),
}
default_language_for_title_sort = None
title_sort_articles=r'^(A|The|An)\s+'
1.10. Anpassa calibre
259
calibre Användarhandbok, Utgåva 2.22.0
#: Specify a folder calibre should connect to at startup
# Specify a folder that calibre should connect to at startup using
# connect_to_folder. This must be a full path to the folder. If the folder does
# not exist when calibre starts, it is ignored. If there are '\' characters in
# the path (such as in Windows paths), you must double them.
# Examples:
#
auto_connect_to_folder = 'C:\\Users\\someone\\Desktop\\testlib'
#
auto_connect_to_folder = '/home/dropbox/My Dropbox/someone/library'
auto_connect_to_folder = ''
#: Specify renaming rules for SONY collections
# Specify renaming rules for sony collections. This tweak is only applicable if
# metadata management is set to automatic. Collections on Sonys are named
# depending upon whether the field is standard or custom. A collection derived
# from a standard field is named for the value in that field. For example, if
# the standard 'series' column contains the value 'Darkover', then the
# collection name is 'Darkover'. A collection derived from a custom field will
# have the name of the field added to the value. For example, if a custom series
# column named 'My Series' contains the name 'Darkover', then the collection
# will by default be named 'Darkover (My Series)'. For purposes of this
# documentation, 'Darkover' is called the value and 'My Series' is called the
# category. If two books have fields that generate the same collection name,
# then both books will be in that collection.
# This set of tweaks lets you specify for a standard or custom field how
# the collections are to be named. You can use it to add a description to a
# standard field, for example 'Foo (Tag)' instead of the 'Foo'. You can also use
# it to force multiple fields to end up in the same collection. For example, you
# could force the values in 'series', '#my_series_1', and '#my_series_2' to
# appear in collections named 'some_value (Series)', thereby merging all of the
# fields into one set of collections.
# There are two related tweaks. The first determines the category name to use
# for a metadata field. The second is a template, used to determines how the
# value and category are combined to create the collection name.
# The syntax of the first tweak, sony_collection_renaming_rules, is:
# {'field_lookup_name':'category_name_to_use', 'lookup_name':'name', ...}
# The second tweak, sony_collection_name_template, is a template. It uses the
# same template language as plugboards and save templates. This tweak controls
# how the value and category are combined together to make the collection name.
# The only two fields available are {category} and {value}. The {value} field is
# never empty. The {category} field can be empty. The default is to put the
# value first, then the category enclosed in parentheses, it isn't empty:
# '{value} {category:|(|)}'
# Examples: The first three examples assume that the second tweak
# has not been changed.
# 1: I want three series columns to be merged into one set of collections. The
# column lookup names are 'series', '#series_1' and '#series_2'. I want nothing
# in the parenthesis. The value to use in the tweak value would be:
#
sony_collection_renaming_rules={'series':'', '#series_1':'', '#series_2':''}
# 2: I want the word '(Series)' to appear on collections made from series, and
# the word '(Tag)' to appear on collections made from tags. Use:
#
sony_collection_renaming_rules={'series':'Series', 'tags':'Tag'}
# 3: I want 'series' and '#myseries' to be merged, and for the collection name
# to have '(Series)' appended. The renaming rule is:
#
sony_collection_renaming_rules={'series':'Series', '#myseries':'Series'}
# 4: Same as example 2, but instead of having the category name in parentheses
# and appended to the value, I want it prepended and separated by a colon, such
# as in Series: Darkover. I must change the template used to format the category name
# The resulting two tweaks are:
260
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
#
sony_collection_renaming_rules={'series':'Series', 'tags':'Tag'}
#
sony_collection_name_template='{category:||: }{value}'
sony_collection_renaming_rules={}
sony_collection_name_template='{value}{category:| (|)}'
#: Specify how SONY collections are sorted
# Specify how sony collections are sorted. This tweak is only applicable if
# metadata management is set to automatic. You can indicate which metadata is to
# be used to sort on a collection-by-collection basis. The format of the tweak
# is a list of metadata fields from which collections are made, followed by the
# name of the metadata field containing the sort value.
# Example: The following indicates that collections built from pubdate and tags
# are to be sorted by the value in the custom column '#mydate', that collections
# built from 'series' are to be sorted by 'series_index', and that all other
# collections are to be sorted by title. If a collection metadata field is not
# named, then if it is a series- based collection it is sorted by series order,
# otherwise it is sorted by title order.
# [(['pubdate', 'tags'],'#mydate'), (['series'],'series_index'), (['*'], 'title')]
# Note that the bracketing and parentheses are required. The syntax is
# [ ( [list of fields], sort field ) , ( [ list of fields ] , sort field ) ]
# Default: empty (no rules), so no collection attributes are named.
sony_collection_sorting_rules = []
#: Control how tags are applied when copying books to another library
# Set this to True to ensure that tags in 'Tags to add when adding
# a book' are added when copying books to another library
add_new_book_tags_when_importing_books = False
#: Set the maximum number of tags to show per book in the content server
max_content_server_tags_shown=5
#: Set custom metadata fields that the content server will or will not display.
# content_server_will_display is a list of custom fields to be displayed.
# content_server_wont_display is a list of custom fields not to be displayed.
# wont_display has priority over will_display.
# The special value '*' means all custom fields. The value [] means no entries.
# Defaults:
#
content_server_will_display = ['*']
#
content_server_wont_display = []
# Examples:
# To display only the custom fields #mytags and #genre:
#
content_server_will_display = ['#mytags', '#genre']
#
content_server_wont_display = []
# To display all fields except #mycomments:
#
content_server_will_display = ['*']
#
content_server_wont_display['#mycomments']
content_server_will_display = ['*']
content_server_wont_display = []
#: Set the maximum number of sort 'levels'
# Set the maximum number of sort 'levels' that calibre will use to resort the
# library after certain operations such as searches or device insertion. Each
# sort level adds a performance penalty. If the database is large (thousands of
# books) the penalty might be noticeable. If you are not concerned about multi# level sorts, and if you are seeing a slowdown, reduce the value of this tweak.
maximum_resort_levels = 5
#: Choose whether dates are sorted using visible fields
1.10. Anpassa calibre
261
calibre Användarhandbok, Utgåva 2.22.0
# Date values contain both a date and a time. When sorted, all the fields are
# used, regardless of what is displayed. Set this tweak to True to use only
# the fields that are being displayed.
sort_dates_using_visible_fields = False
#: Fuzz value for trimming covers
# The value used for the fuzz distance when trimming a cover.
# Colors within this distance are considered equal.
# The distance is in absolute intensity units.
cover_trim_fuzz_value = 10
#: Control behavior of the book list
# You can control the behavior of doubleclicks on the books list.
# Choices: open_viewer, do_nothing,
# edit_cell, edit_metadata. Selecting anything other than open_viewer has the
# side effect of disabling editing a field using a single click.
# Default: open_viewer.
# Example: doubleclick_on_library_view = 'do_nothing'
# You can also control whether the book list scrolls horizontal per column or
# per pixel. Default is per column.
doubleclick_on_library_view = 'open_viewer'
horizontal_scrolling_per_column = True
#: Language to use when sorting.
# Setting this tweak will force sorting to use the
# collating order for the specified language. This might be useful if you run
# calibre in English but want sorting to work in the language where you live.
# Set the tweak to the desired ISO 639-1 language code, in lower case.
# You can find the list of supported locales at
# http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/nls/rbagsicusortsequencetables.htm
# Default: locale_for_sorting = '' -- use the language calibre displays in
# Example: locale_for_sorting = 'fr' -- sort using French rules.
# Example: locale_for_sorting = 'nb' -- sort using Norwegian rules.
locale_for_sorting = ''
#: Number of columns for custom metadata in the edit metadata dialog
# Set whether to use one or two columns for custom metadata when editing
# metadata one book at a time. If True, then the fields are laid out using two
# columns. If False, one column is used.
metadata_single_use_2_cols_for_custom_fields = True
#: Order of custom column(s) in edit metadata
# Controls the order that custom columns are listed in edit metadata single
# and bulk. The columns listed in the tweak are displayed first and in the
# order provided. Any columns not listed are dislayed after the listed ones,
# in alphabetical order. Do note that this tweak does not change the size of
# the edit widgets. Putting comments widgets in this list may result in some
# odd widget spacing when using two-column mode.
# Enter a comma-separated list of custom field lookup names, as in
# metadata_edit_custom_column_order = ['#genre', '#mytags', '#etc']
metadata_edit_custom_column_order = []
#: The number of seconds to wait before sending emails
# The number of seconds to wait before sending emails when
# public email server like gmail or hotmail. Default is: 5
# Setting it to lower may cause the server's SPAM controls
# making email sending fail. Changes will take effect only
# calibre.
262
using a
minutes
to kick in,
after a restart of
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
public_smtp_relay_delay = 301
#: The maximum width and height for covers saved in the calibre library
# All covers in the calibre library will be resized, preserving aspect ratio,
# to fit within this size. This is to prevent slowdowns caused by extremely
# large covers
maximum_cover_size = (1650, 2200)
#: Where to send downloaded news
# When automatically sending downloaded news to a connected device, calibre
# will by default send it to the main memory. By changing this tweak, you can
# control where it is sent. Valid values are "main", "carda", "cardb". Note
# that if there isn't enough free space available on the location you choose,
# the files will be sent to the location with the most free space.
send_news_to_device_location = "main"
#: What interfaces should the content server listen on
# By default, the calibre content server listens on '0.0.0.0' which means that it
# accepts IPv4 connections on all interfaces. You can change this to, for
# example, '127.0.0.1' to only listen for connections from the local machine, or
# to '::' to listen to all incoming IPv6 and IPv4 connections (this may not
# work on all operating systems)
server_listen_on = '0.0.0.0'
#: Unified toolbar on OS X
# If you enable this option and restart calibre, the toolbar will be 'unified'
# with the titlebar as is normal for OS X applications. However, doing this has
# various bugs, for instance the minimum width of the toolbar becomes twice
# what it should be and it causes other random bugs on some systems, so turn it
# on at your own risk!
unified_title_toolbar_on_osx = False
#: Save original file when converting/polishing from same format to same format
# When calibre does a conversion from the same format to the same format, for
# example, from EPUB to EPUB, the original file is saved, so that in case the
# conversion is poor, you can tweak the settings and run it again. By setting
# this to False you can prevent calibre from saving the original file.
# Similarly, by setting save_original_format_when_polishing to False you can
# prevent calibre from saving the original file when polishing.
save_original_format = True
save_original_format_when_polishing = True
#: Number of recently viewed books to show
# Right-clicking the View button shows a list of recently viewed books. Control
# how many should be shown, here.
gui_view_history_size = 15
#: Change the font size of book details in the interface
# Change the font size at which book details are rendered in the side panel and
# comments are rendered in the metadata edit dialog. Set it to a positive or
# negative number to increase or decrease the font size.
change_book_details_font_size_by = 0
#: Compile General Program Mode templates to Python
# Compiled general program mode templates are significantly faster than
# interpreted templates. Setting this tweak to True causes calibre to compile
# (in most cases) general program mode templates. Setting it to False causes
# calibre to use the old behavior -- interpreting the templates. Set the tweak
1.10. Anpassa calibre
263
calibre Användarhandbok, Utgåva 2.22.0
# to False if some compiled templates produce incorrect values.
# Default:
compile_gpm_templates = True
# No compile: compile_gpm_templates = False
compile_gpm_templates = True
#: What format to default to when using the Tweak feature
# The Tweak feature of calibre allows direct editing of a book format.
# If multiple formats are available, calibre will offer you a choice
# of formats, defaulting to your preferred output format if it is available.
# Set this tweak to a specific value of 'EPUB' or 'AZW3' to always default
# to that format rather than your output format preference.
# Set to a value of 'remember' to use whichever format you chose last time you
# used the Tweak feature.
# Examples:
#
default_tweak_format = None
(Use output format)
#
default_tweak_format = 'EPUB'
#
default_tweak_format = 'remember'
default_tweak_format = None
#: Do not preselect a completion when editing authors/tags/series/etc.
# This means that you can make changes and press Enter and your changes will
# not be overwritten by a matching completion. However, if you wish to use the
# completions you will now have to press Tab to select one before pressing
# Enter. Which technique you prefer will depend on the state of metadata in
# your library and your personal editing style.
preselect_first_completion = False
#: Completion mode when editing authors/tags/series/etc.
# By default, when completing items, calibre will show you all the candidates
# that start with the text you have already typed. You can instead have it show
# all candidates that contain the text you have already typed. To do this, set
# completion_mode to 'contains'. For example, if you type asi it will match both
# Asimov and Quasimodo, whereas the default behavior would match only Asimov.
completion_mode = 'prefix'
#: Recognize numbers inside text when sorting
# This means that when sorting on text fields like title the text "Book 2"
# will sort before the text "Book 100". If you want this behavior, set
# numeric_collation = True note that doing so will cause problems with text
# that starts with numbers and is a little slower.
numeric_collation = False
#: Sort the list of libraries alphabetically
# The list of libraries in the Copy to Library and Quick Switch menus are
# normally sorted by most used. However, if there are more than a certain
# number of such libraries, the sorting becomes alphabetic. You can set that
# number here. The default is ten libraries.
many_libraries = 10
#: Highlight the virtual library name when using a Virtual Library
# The virtual library name next to the Virtual Library button is highlighted in
# yellow when using a Virtual Library. You can choose the color used for the
# highlight with this tweak. Set it to 'transparent' to disable highlighting.
highlight_virtual_library = 'yellow'
#: Choose available output formats for conversion
# Restrict the list of available output formats in the conversion dialogs.
# For example, if you only want to convert to EPUB and AZW3, change this to
264
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
# restrict_output_formats = ['EPUB', 'AZW3']. The default value of None causes
# all available output formats to be present.
restrict_output_formats = None
#: Set the thumbnail image quality used by the content server
# The quality of a thumbnail is largely controlled by the compression quality
# used when creating it. Set this to a larger number to improve the quality.
# Note that the thumbnails get much larger with larger compression quality
# numbers.
# The value can be between 50 and 99
content_server_thumbnail_compression_quality = 75
1.10.4 Överrider ikoner, mallar, etc
calibre gör att du kan överrida de statiska resurser, som ikoner, javascript och mallar för metadata omslag,
kataloger, etc. med anpassade versioner som du gillar. Alla statiska resurser sparas i resursundermappar i calibres installationsplats. I Windows är det oftast C:\Program Files\Calibre2\resources. På OS X
/Applications/calibre.app/Contents/Resources/resources/. På Linux, om du använder det binära installationsprogrammet från calibres webbplats blir det /opt/calibre/resources. Dessa vägar kan ändras beroende på var du väljer att installera calibre.
Du ska inte ändra filer i denna resurskatalog, eftersom dina ändringar kommer skrivas över nästa gång du uppdaterar
calibre. Gå i stället till Inställningar->Avancerat->Diverse och klicka Öppna calibres inställningsmapp. I denna konfigurationskatalog skapa en underkatalog med namnet resurser och placera filerna du vill överrida i den. Placera filer
i lämplig underkatalog, som till exempel för bilder resources/images, etc. calibre kommer automatisk använda
dessa anpassade inställningar i stället för de inbyggda nästa gång det startar.
Till exempel, om du vill anvnda ikonen för Ta bort böcker åtgärd, ska du för titta i den inbyggda resurskatalogen och se att den relevanta filen är resources/images/trash.png. Med antagandet att du
har en alternativ ikon i PNG-format kallad mytrash.png kommer du spara den i konfigurationskatalogen som resources/images/trash.png. Alla ikoner som används av Calibres-användargränssnitt är i
resources/images och dess underkataloger.
Observera: Det finns flera ersättningsikonuppsättningar för calibre skapade av användare genom åren. Du hittar dem
samlade i detta forum thread94 .
1.10.5 Anpassa calibre med tilläggsprogram
calibre är en väldigt modulär konstruktion. Nästan alla funktioner i calibre kommer i form av tilläggsprogram. Tilläggsprogram används för omvandling, för nedladdning av nyheter (även om dessa kallas för recept), för diverse komponenter av användargränssnitt, för anslutning av olika enheter, för bearbetning av filer när de läggs till calibre och så
vidare. Du kan få en komplett lista av alla inbyggda tilläggsprogram i calibre genom att gå till Inställningar->Tillägg.
Du kan skriva dina egna tilläggsprogram för att anpassa och utöka beteendet av calibre. Tilläggsprogramarkiteturen i
calibre är mycket enkel, se handledningen Skriva dina egna tillägg för att utöka calibres funktionalitet (sida 207).
1.11 Kommandoradsgränssnitt
94 http://www.mobileread.com/forums/showthread.php?t=151397
1.11. Kommandoradsgränssnitt
265
calibre Användarhandbok, Utgåva 2.22.0
Observera:
På
OS
X,
kommandoradverktyget
är
inne
i
calibre
paketet,
till
exempel
om
du
installerar
calibre
i
/Applications
är
kommandoradverktyget
i
/Applications/calibre.app/Contents/console.app/Contents/MacOS/.
1.11.1 Dokumenterade kommandon
calibre
calibre [opts] [path_to_ebook]
Sätt i gång :command:‘calibre‘s grafiska användargränssnitt och valfritt lägg till e-boken för path_to_ebook till databasen.
Närhelst du skickar argument till calibre som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
[options]
--detach
Koppla bort från styrande terminal, om någon (bara för Linux)
--help, -h
visa denna hjälptext och avsluta
--ignore-plugins
Ignorera anpassade instickmoduler, användbart om du har installerat en insticksmodul som hindrar calibre från
att starta
--no-update-check
Sök inte efter uppdateringar
--shutdown-running-calibre, -s
Orsak en till exempel en körande calibre, om någon, avsluta denna. Observera att om jobb körs, kommer det tyst
aborteras, så använd med försiktighet.
--start-in-tray
Starta minimerad till systemfältet.
--verbose, -v
Ignoreras, ska inte användas. Närvarande endast för arvsskäl
--version
visar programmets versionsnummer och avsluta
--with-library
Använd biblioteket som ligger på den angivna sökvägen.
calibre-customize
calibre-customize tillval
Anpassa calibre genom att ladda externa tillägg.
Närhelst du skickar argument till calibre-customize som har mellanrum i dem, omslut argumenten med citattecken.
Till exempel “C:some path with spaces”
266
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
[options]
--add-plugin, -a
Installera ett tillägg genom att ange sökvägen till zip-filen som innehåller detta.
--build-plugin, -b
För tilläggsutvecklare: Sökväg till den katalog där du utvecklar tilläggsprogram. Detta kommando kommer
automatiskt att komprimera tillägget och uppdatera calibre
--customize-plugin
Anpassa tillägg. Ange tilläggets namn och anpassningssträngen åtskilda av ett kommatecken.
--disable-plugin
Inaktivera namngivet tillägg
--enable-plugin
Aktivera namngivet tillägg
--help, -h
visa denna hjälptext och avsluta
--list-plugins, -l
Lista alla installerade tillägg
--remove-plugin, -r
Ta bort ett tillägg utifrån dess namn. Har ingen effekt på inbyggda tillägg
--version
visar programmets versionsnummer och avsluta
calibre-debug
calibre-debug [alternativ]
Olika kommandorad gränssnitt användbart för felsökning av calibre. Med några alternativ, detta kommando startar en
inbäddad python-tolk. Du kan också köra den viktigaste calibre GUI, calibre-bläddrare och calibre-redigeringverktyg
i felsökningsläge.
Den innehåller även gränssnitt för olika bitar av calibre som inte har dedikerade kommandoraden, till exempel teckensnitt delmängder, ebook diff verktyg och så vidare.
Du kan också använda calibre-debug för att köra fristående skript. För att göra det använder det så här:
calibre-debug myscript.py -- --option1 --option2 fil1 fil2 ...
Allt efter det - skickas till skriptet.
Närhelst du skickar argument till calibre-debug som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
[options]
--add-simple-plugin
Lägg till ett enkelt tilläggsprogram ( i.e. ett tilläggsprogram som består av bara en .py fil), genom att ange
sökvägen till py-filen som innehåller programkoden.
--command, -c
Kör python-kod
1.11. Kommandoradsgränssnitt
267
calibre Användarhandbok, Utgåva 2.22.0
--debug-device-driver, -d
Felsöker enhetsdetektering
--default-programs
(Av)registrera calibre från Windows standardprogram. --default-programs=(register|unregister)
--diff
Kör calibre diff verktyget. Till exempel: calibre-debug --diff (sida 268) fil1 fil2
--edit-book, -t
Sätt i gång calibres bokredigeringsverktyg i avlusningsläge.
--exec-file, -e
Kör python-kod i fil.
--explode-book, -x
Bryt i sär boken (exportera boken som en kollektion av HTML-filer och metadata, vilka du kan redigera genom att använda en standard HTML-editor, och sedan bygg om filen från redigerade HTML-filer. Gör ingen
ytterligare ändring till HTML, till skillnad mot calibres konvertering).
--gui, -g
Kör gränssnittet med avlusning aktiverad. Avlusningsloggar skrivs till stdout och stderr.
--gui-debug
Kör gränssnittet med avlusningskonsol, loggning till angiven sökväg. Bara för intern användning, använd -g
alternativet för att köra gränssnittet i avlusningsläge
--help, -h
visa denna hjälptext och avsluta
--inspect-mobi, -m
Undersök MOBI-filen(filerna) i angiven sökväg(sökvägarna)
--paths
Skicka ut nödvändiga sökvägar för att sätta upp calibres miljö
--py-console, -p
Kör python-konsol
--reinitialize-db
Återinitialisera calibre-databasen sqlite i angiven sökväg. Användbart vid återställning vid db-korruption.
--run-plugin, -r
Kör ett tillägg som ger ett kommandoradsgränssnitt. Till exempel: calibre-debug-r “Lägg till böcker” -- file1
--option1 Allt efter - kommer att skickas till tilläggsprogrammet som argument.
--shutdown-running-calibre, -s
Orsak en till exempel en körande calibre, om någon, avsluta denna. Observera att om jobb körs, kommer det tyst
aborteras, så använd med försiktighet.
--subset-font, -f
Skapa delmängd av angivet typsnitt
--test-build
Testbinärmoduler i bygge
--version
visar programmets versionsnummer och avsluta
--viewer, -w
Kör e-bokläsare i avlusningsläge
268
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
calibre-server
calibre-server [alternativ]
Starta calibres mediaserver. calibres mediaserver gör ditt bibliotek tillgängligt via Internet. Med hjälp av standardgränssnittet kan du bläddra i ditt bibliotek. Du kan också använda ett gränssnitt särskilt anpassat för mobila webbläsare
och OPDS-baserade gränssnitt för att använda med opds-applikationer.
OPDS-gränssnittet annonseras automatiskt via BonJour.
Närhelst du skickar argument till calibre-server som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
[options]
--auto-reload
Automatisk laddning från servern vid förändringar i källkod. Fungerar inte i alla miljöer.
--daemonize
Kör process i bakgrund som en demon. Har ingen påverkan på Windows.
--develop
Utvecklingsläge. Server startar automatiskt om vid filförändringar och tillhörande kodfiler (html, css, js) från
filsystemet i stället för calibres resurssystem.
--help, -h
visa denna hjälptext och avsluta
--max-cover
Den maximala storleken på visade omslag. Grundinställning är ‘600x800’
--max-opds-items
Det maximala antalet träffar att skicka per OPDS-fråga. Detta påverkar integrationen med Stanza, WordPlayer,
m.fl..
--max-opds-ungrouped-items
Gruppera poster i kategorier som författare/etiketter efter första bokstaven när det finns fler än detta antal poster.
Grundinställning: 100. Ange ett stort tal för att inaktivera gruppering.
--password
Ange ett lösenord för att kontrollera behörigheten. Som standard finns ingen behörighetskontroll.
--pidfile
Skriv process-PID till angiven fil
--port, -p
Port att lyssna på. Grundinställning är 8080
--restriction
Anger ett virtuellt bibliotek som skall användas för detta anrop. Det här alternativet åsidosätts för bibliotek
inställningar som anges i det grafiska gränssnittet. För kompatibilitet, om värdet inte är ett virtuellt bibliotek,
men är en sparad sökning, är det en sparad sökning som används. Observera också att du inte anger om en
begränsning, kommer det värde som anges i det grafiska gränssnittet (om någon) att användas.
--thread-pool
Max antal arbetstrådar att använda. Grundinställning är 30
--timeout, -t
Server-timeout i sekunder. Grundinställning är 120
1.11. Kommandoradsgränssnitt
269
calibre Användarhandbok, Utgåva 2.22.0
--url-prefix
Prefix för alla URL. Kan användas för omvänd proxy till denna server från Apache/nginx/etc.
--username
Användarnamn för behörighet. Som standard är det ‘calibre’.
--version
visar programmets versionsnummer och avsluta
--with-library
Sökväg till biblioteksmappen som medieservern skall dela ut
calibre-smtp
calibre-smtp [options] [from to text]
Skicka post genom använda SMTP-protokoll. calibre-smtp har två lägen av utförande. I komponera-läget anger du
från och text och dessa används för att bygga och skicka ett e-postmeddelande. I filtrera-läget, läser calibre-smtp ett
komplett e-postmeddelande från STDIN och skickar det.
text är brödtexten av e-postmeddelandet. Om text inte anges, läses ett komplett e-postmeddelande från STDIN. från är
avsändare och till är mottagare av e-postmeddelandet. När ett komplett e-postmeddelande är läst från STDIN, används
bara från och till i SMTP-förhandlingen, meddelandehuvuden påverkas inte.
Närhelst du skickar argument till calibre-smtp som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
[options]
--fork, -f
Dela upp om leverera meddelande i bakgrund. Om du använder detta alternativ bör du också använda
--outbox (sida 270) (ut-låda) för hantera misslyckade leveranser.
--help, -h
visa denna hjälptext och avsluta
--localhost, -l
Värdnamn av lokalvärden. Används vid anslutning till SMTP-server.
--outbox, -o
Sökväg till postkatalog för att lagra misslyckade leveranser av postmeddelande i.
--timeout, -t
Tidsbegränsning för förbindelse
--verbose, -v
Var mer uttrycklig
--version
visar programmets versionsnummer och avsluta
COMPOSE MAIL Alternativ för att komponera e-post. Ignoreras om ingen text anges
--attachment, -a
Fil att infoga till e-posten
--subject, -s
Ämnesrad för e-posten
270
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
SMTP RELAY Alternativ vid användning av en SMTP-reläserver för att skicka post. calibre kommer försöka skicka
direkt om inte –relay (reläa) anges.
--encryption-method, -e
Krypteringsmetod att använda vid anslutning till reläenhet.
--password, -p
Lösenord vid reläa
--port
Port att ansluta reläserver till. Grundinställning är att använda 465 om krypteringsmetod är SSL och annars 25.
--relay, -r
En SMTP-reläserver för att skicka post.
--username, -u
Användarnamn vid reläa
calibredb
calibredb kommando [alternativ] [argument]
calibredb is the command line interface to the calibre database. It has several sub-commands, documented below:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Globala alternativ (sida 271)
list (sida 272)
add (sida 272)
remove (sida 273)
add_format (sida 274)
remove_format (sida 274)
show_metadata (sida 274)
set_metadata (sida 275)
export (sida 275)
catalog (sida 276)
saved_searches (sida 277)
add_custom_column (sida 277)
custom_columns (sida 278)
remove_custom_column (sida 278)
set_custom (sida 278)
restore_database (sida 279)
check_library (sida 279)
list_categories (sida 279)
backup_metadata (sida 280)
clone (sida 280)
embed_metadata (sida 281)
Globala alternativ
--dont-notify-gui
Meddela inte det aktiva calibres användargränssnitt (om någon) att databasen har ändrats. Använd med försiktighet, eftersom det kan leda till databaskorruption!
--library-path
Sökväg till calibre-biblioteket. Som standard används den sökväg som lagrats i inställningarna.
1.11. Kommandoradsgränssnitt
271
calibre Användarhandbok, Utgåva 2.22.0
list
calibredb lista [alternativ]
Lista de böcker som finns i calibre-databasen.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--ascending
Sortera resultaten i stigande ordning
--fields, -f
Fält att visa vid listning av böcker i databasen. Skall vara en kommaseparerad lista av fält. Tillgängliga fält: author_sort, authors, comments, cover, formats, identifiers, isbn, last_modified, pubdate, publisher, rating, series,
series_index, size, tags, timestamp, title, uuid Grundinställning title,authors. Specialfältet “all” kan användas för
att välja alla fält
--for-machine
Generera utdata i JSON-format, vilket är mer lämpat för maskintolkning. Resulterar i radbredd och separatoralternativ ignoreras,
--help, -h
visa denna hjälptext och avsluta
--limit
Maximalt antal resultat att visa. Grundinställning: alla
--line-width, -w
Den maximala bredden på en enda rad i utdata. Som standard används den detekterade skärmstorleken.
--prefix
Prefixet för alla sökvägar. Standard är den absoluta sökvägen till biblioteksmappen.
--search, -s
Filtrera sökningens resultat. För information om sökformatet, se tillhörande sökdokumentation i användarhandbok. Som standard filtreras sökningen ej.
--separator
Sträng som används för att separera fält. Standard är mellanslag.
--sort-by
Fältet att sortera resultatet efter. Tillgängliga fält: author_sort, authors, comments, cover, formats, identifiers,
isbn, last_modified, pubdate, publisher, rating, series, series_index, size, tags, timestamp, title, uuid Grundinställning: None
--version
visar programmets versionsnummer och avsluta
add
calibredb add [alternativ] fil1 fil2 fil3 ...
Lägg till de angivna filerna som böcker till databasen. Du kan även ange kataloger, se katalog-relaterade alternativ
nedan.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
272
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
--authors, -a
Ställ författarna till sattes boken/böckerna
--cover, -c
Vägen till omslaget för att använda för extra bok
--duplicates, -d
Lägg till böcker till databasen även om de redan finns. Jämförelsen görs utifrån boktitlarna.
--empty, -e
Lägg till en tom bok (en bok utan format)
--help, -h
visa denna hjälptext och avsluta
--isbn, -i
Ange ISBN för den tillsatta boken/böckernar
--languages, -l
En kommaseparerad lista med språk (bäst att använda ISO639 språkkoder, även om vissa språknamn kan också
användas)
--one-book-per-directory, -1
Antag att varje katalog bara har en enda logisk bok och att alla filer i katalogen är samma e-bok i olika format.
--recurse, -r
Sök igenom kataloger rekursivt
--series, -s
Ställ serien av den tillagda boken/böckerna
--series-index, -S
Ställ in serienummer av den tillagda boken/böckerna
--tags, -T
Ställ in markeringar i den tillsatta boken/böckerna
--title, -t
Ställ titeln på den tillsatta bok/böcker
--version
visar programmets versionsnummer och avsluta
remove
calibredb borttagna identiteter (ids)
Ta böckerna identifierade identiteter från databasen. Identiteter bör vara en kommaseparerad lista med id-nummer (du
kan få id-nummer med kommandot list). Till exempel, 23,34,57-85 (när du anger ett intervall, är det sista numret i
intervallet inte ingår).
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
1.11. Kommandoradsgränssnitt
273
calibre Användarhandbok, Utgåva 2.22.0
add_format
calibredb add_format [flaggor] id ebok_file
Lägg e-bok i ebok_file till tillgängliga format för logiska boken identifieras av id (identitet). Du kan få id genom att
använda kommandot list. Om formatet redan finns, det ersätts, såvida ersätter inte alternativet anges.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--dont-replace
Byt inte format om det redan existerar
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
remove_format
calibredb remove_format [flaggor] id FMT
Ta bort formatet FMT från den logiska boken som identifierats med ID. Du kan få ID genom att använda kommandot
list. FMT bör vara en filändelse som LRF, TXT eller EPUB. Om logiska boken inte har FMT tillgänglig, görs ingenting.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
show_metadata
calibredb show_metadata [alternativ] id
Visa metadata som lagras i calibre databas för boken som identifierats med ID. ID är ett ID-nummer från listkommandot.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--as-opf
Skriv metadata i OPF-form (XML)
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
274
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
set_metadata
calibredb set_metadata [options] id [/path/to/metadata.opf]
Ställ in metadata som lagras i calibres databasen för boken som identifieras av id från OPF-fil metadata.opf. id är ett idnummer från kommandolistan. ni kan få en snabb känsla för OPF-format med hjälp av –as-opf valet till show_metadata
kommando. Du kan också ställa in metadata för enskilda fält med –field alternativet. Om du använder –field alternativet, finns det ingen anledning att specificera en OPF-fil.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--field, -f
Fältet för att ställa in. Format är field_name: värde, till exempel: --field (sida 275) etiketter: etikett1, etikett2. Använd --list-fields (sida 275) för att få en lista över alla fältnamn. Du kan ange det här alternativet flera gånger för att ställa in flera fält. Obs: För språk du måste använda ISO639 språkkoder (t.ex.
EN för engelska, fr för franska och så vidare). För identifierare, är syntaxen --field (sida 275) identifiers:isbn:XXXX,doi:YYYYY. För Boolean (ja / nej) fält använder Sann och Falsk eller ja och nej.
--help, -h
visa denna hjälptext och avsluta
--list-fields, -l
Ange namn på metadatafält som kan användas med det --field (sida 275) är alternativt
--version
visar programmets versionsnummer och avsluta
export
calibredb export [flaggor] ids
Exportera böckerna som anges av ID:n (en kommaseparerad lista) till filsystemet. Exportoperationen sparar alla format
av boken, omslaget och metadata (i en opf fil). Du kan få ID-nummer från kommandot list.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--all
Exportera alla böcker i databasen och ignorera ID-listan.
--dont-asciiize
Normalt kommer calibre att konvertera alla icke-engelska i filnamnet till engelska motsvarigheter. VARNING:
Om du stänga av denna funktion kan det uppstå fel vid sparande, beroende på hur väl filsystemet du sparar till
stöder Unicode. Om denna växel aktiveras, kommer detta beteende att stängas av.
--dont-save-cover
Normalt kommer calibre att spara omslaget i en separat fil tillsammans med själva e-bokfilerna. Om denna växel
aktiveras, kommer detta beteende att stängas av.
--dont-update-metadata
Normalt kommer calibre att uppdatera metadata i de sparade filerna utifrån det som finns i calibre-biblioteket.
Detta gör att filerna sparas långsammare till disken. Om denna växel aktiveras, kommer detta beteende att
stängas av.
--dont-write-opf
Normalt kommer calibre skriva metadata i en separat OPF-fil tillsammans med själva e-bokfilerna. Om denna
växel aktiveras, kommer detta beteende att stängas av.
1.11. Kommandoradsgränssnitt
275
calibre Användarhandbok, Utgåva 2.22.0
--formats
Kommaseparerad lista av format att spara för varje bok. Som standard sparas alla tillgängliga format.
--help, -h
visa denna hjälptext och avsluta
--replace-whitespace
Ersätt blanksteg med understreck
--single-dir
Exportera alla böcker till en enda katalog
--template
Mallen styr filnamnet och katalogstrukturen för sparade filer. Grundinställning är “{author_sort}/{title}/{title}
- {authors}” som kommer spara böcker i en per-författare underkatalog med filnamn bestående av titel och författare. Tillgängliga val är: {author_sort, authors, id, isbn, languages, last_modified, pubdate, publisher, rating,
series, series_index, tags, timestamp, title}
--timefmt
I vilket format för datumvisning. %d - dag, %b - månad, %m - månadsnummer, %Y - år. Grundinställning är:
%b, %Y
--to-dir
Exportera böcker till den angivna katalogen. Standard är .
--to-lowercase
Konvertera sökvägar till gemener.
--version
visar programmets versionsnummer och avsluta
catalog
calibredb sökväg /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]
Exportera en sökväg i format specifierat med ath/to/destination tillägg. Alternativval hur uppslag visas i det genererade
utdatat.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--fields
Fälten till utgång när katalogisera böcker i databasen. Bör vara en kommaseparerad lista med fält. Tillgängliga fält: all, title, title_sort, author_sort, authors, comments, cover, formats, id, isbn, library_name, ondevice,
pubdate, publisher, rating, series_index, series, size, tags, timestamp, uuid, languages, identifiers, plus användarskapade anpassade fält. Exampel: :option:‘–fields=titel,f‘örfattare,etikett Grundinställning: ‘all’ Gäller: CSV,
XML utdataformat
--help, -h
visa denna hjälptext och avsluta
--ids, -i
Kommaseparerad lista av databas-ID till katalogen. Om de deklareras, ignoreras --search (sida 276).
Grundinställning: alla
--search, -s
Filtrera sökningens resultat. Se sökrelaterad dokumentation i användarhandbok för information om sökformatet.
Grundinställning: Ingen filtrering
276
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
--sort-by
Utgång fält att sortera p. Tillgängliga fält: author_sort, id, betyg, storlek, tidsstämpel, title_sort Grundinställning:
‘id’ Tillämpas på: CSV, XML utformat
--verbose, -v
Visa detaljerad utdata. Användbart för felsökning
--version
visar programmets versionsnummer och avsluta
saved_searches
calibredb sparade_sökningar [flaggor] lista
calibredb sparade_sökningar lägga namnsökning calibredb sparade_sökningar bort namn
Hantera sparade sökningar I denna databas. Om du försöker lägga till en fråga med ett namn som redan finns, kommer
det att ersättas.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
add_custom_column
calibredb add_custom_column [flaggor] kolumnetikett namn datatyp
Skapa en egen kolumn. Kolumnetikett är det maskinvänliga namnet på kolumnen. Bör inte innehålla blanksteg eller
kolon. Namn är det människovänliga namnet på kolumnen. Datatypen är en av: (0)
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--display
En ordbok med alternativ för att anpassa hur data i denna kolumn ska tolkas. Detta är en JSON-sträng.
För uppräknings kolumner, användning:option:–display=“{“enum_values”:[”val1”, “val2”]}” Det finns många
alternativ som kan gå in i visningsalternativ variabel. Alternativ för kolumntyp är: composite: composite_template, composite_sort, make_category,contains_html, use_decorations datetime: date_format enumeration: enum_values, enum_colors, use_decorations int, float: number_format text: is_names, use_decorations
Det bästa sättet att hitta giltiga kombinationer är att skapa en anpassad kolumn av lämplig typ i gränssnittet
och sedan titta på säkerhetskopian OPF för en bok (se till att en ny OPF har skapats sedan kolumn lades). Du
kommer att se JSON för “display” för den nya kolumnen i OPF.
--help, -h
visa denna hjälptext och avsluta
--is-multiple
Denna kolumn lagrar etiketter som data (d.v.s. flera kommaseparerade värden). Gäller endast om datatypen är
text.
--version
visar programmets versionsnummer och avsluta
1.11. Kommandoradsgränssnitt
277
calibre Användarhandbok, Utgåva 2.22.0
custom_columns
calibredb custom_columns [flaggor]
Lista anpassade kolumner. Visar kolumnetiketter och ID:n.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--details, -d
Visa detaljer för varje kolumn.
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
remove_custom_column
calibredb remove_custom_column [flaggor] kolumnetikett
Ta bort den anpassade kolumnen som identifieras med etikett. Du kan se tillgängliga kolumner med kommandot
custom_columns.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--force, -f
Fråga inte efter bekräftelse
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
set_custom
calibredb set_custom [flaggor] kolumnen id värde
Sätt värdet på en egen kolumn för boken identifieras av ID. Du kan få en lista med ID:n med hjälp av kommandot list.
Du kan få en lista med anpassade kolumnnamn med hjälp av kommandot custom_columns.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--append, -a
Om kolumnen lagrar flera värden, lägg angivna värden till de redan befintliga, i stället för att ersätta dem.
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
278
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
restore_database
calibredb restore_database [flaggor]
Återställ databasen från metadata lagrat i OPF filer i varje katalog av calibresbiblioteket. Detta är användbart om din
metadata-.db fil har blivit skadat.
VARNING: Detta kommando återskapar helt databasen. Du kommer att förlora alla sparade sökningar, användarkategorier, kontrollpaneler, lagra-per-bok omvandlingsinställningar och anpassade recept. Återställat metadata kommer
bara vara så korrekta som vad finns i OPF filer.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--help, -h
visa denna hjälptext och avsluta
--really-do-it, -r
Verklig återhämtning. Kommandot kan inte köras om inte detta alternativ har angetts.
--version
visar programmets versionsnummer och avsluta
check_library
calibredb check_library [flaggor]
Utföra vissa kontroller av filsystemet som representerar ett bibliotek. Rapporter är (0)
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--csv, -c
Resultat från CSV
--help, -h
visa denna hjälptext och avsluta
--ignore_extensions, -e
Kommaseparerad lista med tillägg att ignorera. Grundinställning: Alla
--ignore_names, -n
Kommaseparerad lista med namn att ignorera. Grundinställning: Alla
--report, -r
Kommaseparerad lista av rapporter. Grundinställning: Alla
--version
visar programmets versionsnummer och avsluta
list_categories
calibredb list_categories [flaggor]
Ta fram en rapport i kategorin information i databasen. Den informationen motsvarar det som visas i markeringsrutan.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
1.11. Kommandoradsgränssnitt
279
calibre Användarhandbok, Utgåva 2.22.0
--categories, -r
Kommaseparerad lista av kategori uppslagsnamn. Standard: Alla
--csv, -c
Resultat från CSV
--help, -h
visa denna hjälptext och avsluta
--item_count, -i
Skriv ut endast antalet objekt i en kategori i stället för räkna per post inom kategorin
--quote, -q
Tecknet till att sätta runt den kategorivärdet i CSV-läge. Standard är citattecken (”).
--separator, -s
Den sträng som används för att skilja fält i CSV-läge. Standard är ett kommatecken.
--version
visar programmets versionsnummer och avsluta
--width, -w
Den maximala bredden på en enda rad i utdata. Som standard används den detekterade skärmstorleken.
backup_metadata
calibredb backup_metadata [options]
Säkerhetskopierat metadata lagras i databasen i individuella OPF-filer i varje boks katalog. Detta sker normalt automatiskt, men du kan köra det här kommando för att tvinga ny generering av OPF-filer med –all alternativet.
Observera att det är normalt ingen anledning att göra detta, eftersom de OPF-filer säkerhetskopieras automatiskt, varje
gång metadata ändras.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--all
Normalt fungerar detta kommando endast på böcker som har inaktuella OPF-filer. Det här alternativet gör att
det fungerar på alla böcker.
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
clone
calibredb clone path/to/new/library
Skapa en klon av det aktuella biblioteket. Detta skapar ett nytt, tomt bibliotek som har alla samma anpassade kolumner,
virtuella bibliotek och andra inställningar som det aktuella biblioteket.
Den klonade biblioteket innehåller inga böcker. Om du vill skapa ett komplett duplikat, inklusive alla böcker, sedan
helt enkelt använda dina filsystemverktyg för att kopiera mappen biblioteket.
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
280
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
embed_metadata
calibredb embed_metadata [alternativ] book_id
Uppdatera metadata i själva bokens filer som lagras i calibres biblioteket från metadata i calibre-databasen. Normalt
är metadata uppdateras endast när filer exporteras från calibre, detta kommando är användbart om du vill att filerna
ska uppdateras på plats. Observera att olika filformat stödjer olika mängder av metadata. Du kan använda det speciella
värdet “alla” för book_id för att uppdatera metadata i alla böcker. Du kan också ange flera böckers ids åtskilda av
mellanslag och id områden separeras genom bindestreck. Till exempel: calibredb embed_metadata 1 2 10-15 23
Närhelst du skickar argument till calibredb som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
--help, -h
visa denna hjälptext och avsluta
--only-formats, -f
Uppdatera bara metadata i filer för ett specifikt format. Specificera det flera gånger för flera format. Som standard
kommer alla format uppdateras.
--version
visar programmets versionsnummer och avsluta
ebook-convert
ebook-convert input_file output_file [alternativ]
Konvertera en e-bok från ett format till ett annat.
input_file är indatafilen och output_file är utdatafilen. Båda måste anges som de två första argumenten i kommandot.
Utdataformatet för e-boken gissas utifrån filändelsen i output_file. output_file kan även ges specialformatet .EXT,
där EXT är utdatafiltillägget. Om det används kommer namnet på utdatafilen att härledas från namnet på indatafilen.
Observera att filnamnen inte får börja med bindestreck. Om inget filtillägg har angivits för utdatafilen, så behandlas
den som en mapp till vilken en “Open eBook” (OEB) bestående av HTML-filer kommer att skrivas. Dessa filer är de
filer som normalt sett skulle ha skickats till utdatainsticksmodulen.
Efter att ha angivit in- och utdatafilerna kan du anpassa konverteringen genom att ange olika alternativ. Vilka alternativ
som är tillgängliga beror på in- och utdatafiltyperna. För att få hjälp med dem, ange in- och utdatafilerna och lägg
därefter till alternativet -h.
För fullständig dokumentation om konverteringssystemet, gå till E-bokkonvertering (sida 51)
Närhelst du skickar argument till ebook-convert som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
Alternativen och standard värden för ändringsalternativ beror på både indata- och utdataformat, därför bör du alltid
kolla med:
ebook-convert myfile.input_format myfile.output_format -h
Nedan finns alternativen som är vanliga vid all konvertering följt av alternativen unika för varje indata- och utdataformat.
1.11. Kommandoradsgränssnitt
281
calibre Användarhandbok, Utgåva 2.22.0
•
•
•
•
•
•
•
•
•
Alternativ För Indata (sida 282)
Alternativ För Utdata (sida 282)
Utseende Och Beteende (sida 283)
Heuristisk Bearbetning (sida 285)
Sök Och Byt (sida 286)
Strukturdetektering (sida 287)
Innehållsförteckning (sida 287)
Metadata (sida 288)
Felsök (sida 289)
--help, -h
visa denna hjälptext och avsluta
--input-profile
Ange profilen för indata. Profilen ger information till konverteringssystemet om hur information i indata ska
tolkas. Till exempel upplösningberoende längd (d.v.s. längd i pixlar). Alternativen är:cybookg3, cybook_opus,
default, hanlinv3, hanlinv5, illiad, irexdr1000, irexdr800, kindle, msreader, mobipocket, nook, sony, sony300,
sony900
--list-recipes
Lista inbyggda receptnamn. Du kan skapa en e-bok från ett inbyggt recept så här: e-bokkonvertera “Recept
Name.recipe” output.epub
--output-profile
Ange utdataprofil. Utdataprofilen anger omvandlingen hur systemet kan optimera skapade dokumentet för den
angivna enheten. I vissa fall kan en utgång profil kan användas för att optimera resultatet för en viss enhet, men
det är sällan nödvändigt. Alternativen är:cybookg3, cybook_opus, default, generic_eink, generic_eink_large,
hanlinv3, hanlinv5, illiad, ipad, ipad3, irexdr1000, irexdr800, jetbook5, kindle, kindle_dx, kindle_fire, kindle_pw, kindle_voyage, kobo, msreader, mobipocket, nook, nook_color, nook_hd_plus, pocketbook_900, pocketbook_pro_912, galaxy, bambook, sony, sony300, sony900, sony-landscape, sonyt3, tablet
--version
visar programmets versionsnummer och avsluta
Alternativ För Indata
Alternativ för att kontrollera bearbetningen av ingående mobi-fil
--input-encoding
Ange teckenkodning för ingångsdokumentet. Detta alternativ åsidosätter eventuell teckenkodning som dokumentet själv anger. Används i första hand för dokument som anger felaktig teckenkodning eller ingen alls.
Alternativ För Utdata
Alternativ för att kontrollera bearbetningen av utdata epub
--dont-split-on-page-breaks
Inaktivera delning vid sidbrytningar. Normalt delas indatafilen automatiskt i två filer vid varje sidbrytning. Detta
ger en e-bok som kan tolkas snabbare och med mindre resurser, men delningen är långsam, och om källfilen
innehåller ett mycket stort antal sidbrytningar, bör du inaktivera delning vid sidbrytningar.
--epub-flatten
Detta alternativ behövs endast om du tänker använda EPUB med FBReaderJ. Det plattar ut filsystemet inuti
EPUB och lägger alla filer i den översta nivån.
282
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
--epub-inline-toc
Infoga en innehållsförteckning som kommer att visas som en del av bokens innehåll
--epub-toc-at-end
Lägg den infogade innehållsförteckningen i slutet av boken istället för i början.
--extract-to
Extrahera innehållet i den genererade EPUB filen till den angivna katalogen. Innehållet i katalogen först tas bort,
så var försiktig.
--flow-size
Dela alla HTML-filer som är större än denna storlek (i KiB). Detta är nödvändigt eftersom de flesta EPUB-läsare
inte kan hantera stora filer. Standardvärdet 260 KiB är den storlek som krävs för Adobe Digital Editions.
--no-default-epub-cover
Om indatafilen inte har något omslag och du inte anger ett, skapas normalt ett standardomslag skapats med titel,
författare, m.m. Med detta alternativ aktiverat skapas inga standardomslag.
--no-svg-cover
Använd inte SVG-grafik till omslag. Används om din epub-fil kommer att användas på enheter som inte stöder
SVG, t.ex. iPhone och JetBook Lite. Om detta alternativ ej väljs, kommer dessa enheter att visa ett tomt omslag.
--preserve-cover-aspect-ratio
När du använder ett SVG-omslag kommer detta alternativ att leda till att omslaget skalas om, med bibehållna
proportioner, för att täcka den tillgängliga bildytan. Det innebär att det kan finnas vita kanter på sidorna eller
toppen och på botten av bilden, men bilden kommer aldrig att bli förvrängd. Om detta alternativ inaktiveras, kan
bilden bli en aning förvrängd, men det kommer inte finnas några ramar.
--pretty-print
Om detta anges, kommer tillägget att försöka skapa utskrifter som är så läsliga som möjligt. Detta kanske inte
har någon effekt för vissa tilläggs utdata.
--toc-title
Titel för alla infogade innehållsförteckningar.
Utseende Och Beteende
Alternativ för utdatas utseende
--asciiize
Translitterera Unicode-tecken till en ASCII-representation. Används med försiktighet, eftersom detta kommer
att ersätta Unicode-tecken med ASCII. Till exempel kommer det att ersätta “Михаил Горбачёв” med “Mikhail
Gorbachiov”. Tänk också på att i de fall där det finns flera representationer av ett tecken (tecken som delas
av kinesiska och japanska till exempel) representationen grundar sig på nuvarande calibres gränssnittsspråk
kommer att användas.
--base-font-size
Basstorleken i punkter. Alla teckenstorlekar i den producerade boken kommer att skalas om utifrån denna storlek. Genom att välja en större storlek kan du göra teckensnitten i dokumentet större och vice versa. Som standard
väljs basstorleken utifrån den utdataprofil du valt.
--change-justification
Ändra textjusteringen. Värdet “vänster” konverterar all marginaljusterad text i källan till vänsterjusterad text
(d.v.s. ojusterad). Med värdet “justera” konverteras all ojusterad text till mariginaljusterad. Värdet “original”
(standard) behåller de inställningar för justering som anges i källfilen. Observera att endast vissa format stöder
mariginaljustering.
--disable-font-rescaling
Omskala inga teckenstorlekar.
1.11. Kommandoradsgränssnitt
283
calibre Användarhandbok, Utgåva 2.22.0
--embed-all-fonts
Bädda in varje teckensnitt som refereras i ingången dokumentet men inte redan inbäddade typsnitt. Detta kommer att söka i ditt system för teckensnitt, och om den påträffas, kommer de att vara inbäddade. Inbäddning
fungerar bara om det format du konverterar till stöd för inbäddade typsnitt, t.ex. EPUB, AZW3 eller PDF. Vänligen se till att du har rätt licens för att bädda in teckensnitt som används i detta dokument.
--embed-font-family
Lägg till det angivna teckensnittet till boken. Här anges “bas” typsnittet som används för boken. Om grunddokumentet specificerar sina egna typsnitt kan de åsidosätta detta standardtypsnitt. Du kan använda filteralternativet
stilinformationen för att ta bort typsnitt från grunddokumentet. Observera att teckensnittsinbäddning fungerar
bara med vissa utdataformat, främst EPUB och AZW3.
--expand-css
Som standard kommer calibre använda stenografiformen för olika CSS-egenskaper såsom marginal, utfyllnad,
kanter, etc. Detta alternativ kommer att få den att använda hela expanderade formen istället. Observera att CSS
alltid är expanderat vid generering av EPUB-filer med utgångsprofilen inställd på en av Nook profiler eftersom
Nook inte kan hantera stenografi CSS.
--extra-css
Antingen sökvägen till en CSS-stilmall eller rå CSS. Denna CSS-kod kommer att läggas till stilreglerna i källfilen. De kan också användas för att åsidosätta källfilens bestämmelser.
--filter-css
En kommaseparerad lista av CSS-egenskaper som kommer att tas bort från alla CSS regler. Detta är användbart
om förekomsten av en viss stilinformationen hindrar den från att åsidosättas på enheten. Till exempel: fontfamily, färg, margin-left, marginal-höger
--font-size-mapping
Omvandlar teckensnittsnamn från CSS till teckenstorlekar i punkter. En exempelinställning är
12,12,14,16,18,20,22,24. Detta omvandlar storlekarna xx-small till xx-large - det sista värdet används för
enorma teckensnitt. Omskalningsalgoritmen använder dessa storlekar för att på ett smart sätt omskala
teckensnitten. Som standard omvandlas teckensnitten utifrån vald utdataprofil.
--insert-blank-line
Infoga en blankrad mellan stycken. Fungerar inte om källfilen inte använder stycken (<p>-eller <div>- markeringar).
--insert-blank-line-size
Ställ in höjden på in tomma rader (i EM). Höjden av linjerna mellan punkterna blir dubbelt det värde som här.
--keep-ligatures
Bevara ligaturer som finns i indatadokumentet. En ligatur är en speciell rendering ett teckenpar som ff, fi, fl et
cetera. De flesta läsplattor saknar stöd för ligaturer i deras standardteckensnitt, så det är osannolikt att de återges
korrekt. Som standard omvandlar calibre en ligatur till motsvarande par av vanliga tecken. Detta alternativ
kommer att bevara ligaturerna i stället.
--line-height
Radavståndet i punkter. Styr avståndet mellan på varandra följande textrader. Gäller endast element som inte
definierar sitt eget radavstånd. I de flesta fall är det minsta radavståndet valet mer användbart. Som standard
utför ingen ändring i radavstånd.
--linearize-tables
Vissa dokument med dålig formgivning använder tabeller för att styra textflödet på sidan. När dessa dokument
konverteras finns ofta text som går utanför sidan och andra artefakter. Detta alternativ kommer att extrahera
innehållet från tabellerna och presentera det linjärt.
--margin-bottom
Ställ in den nedre marginalen på pts. Grundinställning är 5.0. Genom att ställa in detta till mindre än noll kommer
284
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
resultera i att någon marginal ska ställas in (inställningen marginalen i det ursprungliga dokumentet bevaras).
OBS: 72 punkter motsvarar 1 tum
--margin-left
Ställ in den vänstra marginalen i pts. Grundinställning är 5.0. Genom att ställa in detta till mindre än noll kommer
resultera i att någon marginal ska ställas in (inställningen marginalen i det ursprungliga dokumentet bevaras).
OBS: 72 punkter motsvarar 1 tum
--margin-right
Ställ in höger marginal i poäng. Grundinställning är 5.0. Genom att ställa in detta till mindre än noll kommer
resultera i att någon marginal ska ställas in (inställningen marginalen i det ursprungliga dokumentet bevaras).
OBS: 72 punkter motsvarar 1 tum
--margin-top
Ställ in den övre marginalen i pts. Grundinställning är 5.0. Genom att ställa in detta till mindre än noll kommer
resultera i att någon marginal ska ställas in (inställningen marginalen i det ursprungliga dokumentet bevaras).
OBS: 72 punkter motsvarar 1 tum
--minimum-line-height
Den minsta radavståndet, som andel av elementets beräknat mha teckenstorlek. calibre kommer att säkerställa
att varje element har en radavstånd av minst denna inställning, oavsett vad det ingående dokument specificerar.
Sätt till noll för att avaktivera. Standard är 120%. Använd den här inställningen i stället för det direkt angivna
radavståndet, såvida inte du vet vad du gör. Till exempel kan du uppnå “dubbelt radavstånd” text genom att sätta
detta till 240.
--remove-paragraph-spacing
Tar bort mellanrum mellan stycken. Indenterar även första raden på det nya stycket 1,5 em. Mellanrum kan inte
tas bort om källfilen inte använder stycken (<p>- eller <div>-markeringar).
--remove-paragraph-spacing-indent-size
När calibre tar bort tomma rader mellan stycken, anger det automatiskt ett styckeindrag, för att se till att styckeindelningen syns tydligt. Det här alternativet styr bredden för indraget (i em). Om du anger ett negativt värde
kommer indraget som anges i indatadokumentet användas, det vill säga, calibre ändrar inte indraget.
--smarten-punctuation
Omvandla rena citat, bindestreck och ellips deras typografiskt korrekta motsvarigheter. För detaljer, se
http://daringfireball.net/projects/smartypants
--subset-embedded-fonts
Använd delmängd av alla inbäddade typsnitt. Varje inbäddat typsnitt reduceras till endast innehålla de glyfer
som används i detta dokument. Detta minskar storleken på typsnittsfiler. Användbart om du bädda in ett särskilt
stort typsnitt med massor av oanvända glyfer.
--unsmarten-punctuation
Konvertera snitsiga citat, streck, och specialtecken till deras motsvarigheter i vanlig text.
Heuristisk Bearbetning
Modify the document text and structure using common patterns. Disabled by default. Use –enable-heuristics to enable.
Individual actions can be disabled with the –disable-* options.
--disable-dehyphenate
Analysera avstavade ord i hela dokumentet. Själva dokumentet används som ett ordlista för att avgöra om bindestreck ska behållas eller tas bort.
--disable-delete-blank-paragraphs
Ta bort tomma stycken ur dokumentet när de finns mellan varannan paragraf
1.11. Kommandoradsgränssnitt
285
calibre Användarhandbok, Utgåva 2.22.0
--disable-fix-indents
Vänd indrag skapas från flera icke-brytande mellanslag enheter i CSS-indrag.
--disable-format-scene-breaks
Vänsterjusteras scen brytningsmarkörer är centrerade. Ersätt mjuka scen pauser som använder flera tomma rader
med övergripande linjer.
--disable-italicize-common-cases
Leta efter vanliga ord och mönster som betecknar kursiv och kursivera dem.
--disable-markup-chapter-headings
Identifiera oformaterad huvudrubriker och underrubriker. Ändra dem till H2 och H3 taggar. Den här inställningen kommer inte att skapa en innehållsförteckning, men kan användas i kombination med strukturupptäcktsinställning att skapa ett.
--disable-renumber-headings
Letar efter förekomster av sekventiella <h1> eller <h2> markeringar. Markeringarna skall numreras för att förhindra uppdelning i mitten av kapitelrubrikerna.
--disable-unwrap-lines
Tar bort radbrytning genom att använda skiljetecken och annan formateringsindikationer.
--enable-heuristics
Aktivera heuristisk bearbetning. Denna möjlighet måste anges för någon heuristisk bearbetning ske.
--html-unwrap-factor
Skala som används för att bestämma längden på vilken en rad bör har ha för undvika radbrytning. Giltiga värden
är ett decimaltal mellan 0 och 1. Standard är 0,4, strax under median värde av radlängden. Om bara några rader
i dokumentet kräver korregering för radbrytning bör detta värde sänkas
--replace-scene-breaks
Ersätt scen byten med den angivna texten. Som standard är texten från ingången dokument som används.
Sök Och Byt
Ändra dokumentets text och struktur med hjälp av användardefinierade mönster.
--search-replace
Sökvägen till en fil som innehåller sök och ersätt reguljärtuttryck. Filen måste innehålla alternerande rader av
reguljära uttryck följt av ersättande mönster (vilket kan vara en tom rad). Det reguljära uttrycket ska vara i
python regex syntax och filen måste vara UTF-8-kodad.
--sr1-replace
Ersättning för att ersätta texten som hittades med SR1-sökning.
--sr1-search
Sökmönster (reguljära uttryck) skall ersättas med SR1-ersättning.
--sr2-replace
Ersättning för att ersätta texten hittades med SR2-sökning.
--sr2-search
Sökmönster (reguljära uttryck) skall ersättas med SR2-ersättning.
--sr3-replace
Ersättning för att ersätta texten hittades med SR3-sökning.
--sr3-search
Sökmönster (reguljära uttryck) skall ersättas med SR3-ersättning.
286
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Strukturdetektering
Kontrollera automatisk detektering av dokumentets struktur.
--chapter
Ett XPath-uttryck för att upptäcka kapitelrubrikerna. Standardinställningen är att överväga <h1> eller <h2>
markeringar som innehåller orden “kapitel”, “bok”, “avsnitt”, “Prolog”, “epilog” eller “del” som kapitelrubriker
samt eventuella markeringar som har class = “kapitel”. Uttrycket används måste utvärderas till en lista med
element. För att avaktivera upptäckt av kapitel, använda uttrycket “/”. Se XPath introduktionen i calibres användarhandbok för ytterligare hjälp med att använda den här funktionen.
--chapter-mark
Anger hur upptäckta kapitel markeras. Värdet “pagebreak” infogar en sidbrytning före varje nytt kapitel. Värdet
“rule” infogar en blankrad före nytt kapitel. Värdet “none” inaktiverar kapitelmärkning, och om värdet “both”
anges, kommer både sidbrytningar och blankrader att markera nya kapitel.
--disable-remove-fake-margins
Vissa dokument anger sidmarginaler genom att ange en vänster och höger marginal på varje enskild punkt.
calibre kommer att försöka upptäcka och ta bort dessa marginaler. Ibland kan detta orsaka avlägsnande av
marginaler som inte borde ha tagits bort. I detta fall kan du inaktivera borttagning.
--insert-metadata
Infoga bokens metadata i början av boken. Används om din läsplatta inte kan visa eller söka efter metadata
direkt.
--page-breaks-before
Ett XPath-uttryck. Sidbrytningar infogas före de angivna elementen. Så här inaktiverar använda uttrycket: /
--prefer-metadata-cover
Använd omslag från källfilen i stället för det angivna omslaget.
--remove-first-image
Ta bort den första bilden från den inmatade e-boken. Praktiskt om indatadokumentet har en omslagsbild som
inte identifieras som ett omslag. I så fall, om du anger ett omslag i calibre, kommer det resulterande dokumentet
ha två omslagsbilder om du inte markerar det här alternativet.
--start-reading-at
Ett XPath-uttryck för att upptäcka den plats i dokumentet där du vill börja läsa. Vissa e-bokläsningsprogram
(framförallt Kindle) använda denna plats som position för att öppna boken. Se XPath introduktionen i calibres
användarhandbok för ytterligare hjälp med att använda den här funktionen.
Innehållsförteckning
Styr hur innehållsförteckningen skapas. Om källfilen har en innehållsförteckning, kommer denna att användas i stället
för den automatiskt skapade.
--duplicate-links-in-toc
När du skapar en innehållsförteckning från länkar i input dokumentet, tillåter dubbla poster, dvs att fler än en
post med samma text, förutsatt att de pekar på en annan plats.
--level1-toc
XPath-uttryck som anger alla markeringar som ska läggas till i innehållsförteckningen på nivå ett. Om detta
anges, får de prioritet över andra former av automatisk detektering. Se XPath introduktionen i calibres användarhandbok för exempel.
--level2-toc
XPath-uttryck som anger alla markeringar som ska läggas till i innehållsförteckningen på nivå två. Varje post
läggs till under den tidigare nivån en post. Se XPath introduktionen i calibres användarhandbok för exempel.
1.11. Kommandoradsgränssnitt
287
calibre Användarhandbok, Utgåva 2.22.0
--level3-toc
XPath-uttryck som anger alla markeringar som ska läggas till i innehållsförteckningen på nivå tre. Varje post
läggs till under den tidigare nivån två post. Se XPath introduktionen i calibres användarhandbok för exempel.
--max-toc-links
Maximalt antal länkar för att infoga i innehållsförteckningen. Sätt till 0 för att inaktivera. Grundinställning är:
50. Länkarna läggs endast till innehållsförteckningen om antalet upptäckta kapitel är lägre än tröskelvärdet.
--no-chapters-in-toc
Lägg inte automatiskt upptäckta kapitel till innehållsförteckningen.
--toc-filter
Ta bort poster från innehållsförteckningen vilkas titlar passar det angivna reguljära uttrycket. Passande poster
och alla deras barn tas bort.
--toc-threshold
Om färre än detta antal kapitel upptäcks, så läggs länkar till innehållsförteckningen. Default: 6
--use-auto-toc
Om källfilen redan har en innehållsförteckning, används normalt denna i stället för den automatiskt skapade.
Med det här alternativet används alltid den automatiskt skapade.
Metadata
Alternativ för att skriva metadata till utdata
--author-sort
Sträng som ska användas vid sortering av författaren.
--authors
Ange författarna. Flera författare ska avgränsas med et-tecken.
--book-producer
Ange bokproducenten.
--comments
Ange e-bokbeskrivning.
--cover
Ange omslag till angivna filer eller URL
--isbn
Ange ISBN för boken.
--language
Ange språket.
--pubdate
Ange publiceringsdatum.
--publisher
Ange e-bokutgivare.
--rating
Ange betyg. Skall vara ett nummer mellan 1 och 5.
--read-metadata-from-opf, -m
Läs metadata från den angivna OPF-filen. Metadata från denna fil kommer att åsidosätta alla metadata i källfilen.
--series
Ange serien denna e-bok tillhör.
288
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
--series-index
Ange bokens nummer i serien.
--tags
Ange etiketter för boken. Skall vara en kommaseparerad lista.
--timestamp
Ställ in bokens tidsstämpel (används inte längre)
--title
Ange titeln.
--title-sort
Versionen av titeln som ska användas för sortering.
Felsök
Alternativ för att hjälpa till att felsöka konverteringen
--debug-pipeline, -d
Spara utdata från olika stadier av konverteringssekvensen till den angivna katalogen. Användbart om du är
osäker på i vilket stadium en fel uppträder.
--verbose, -v
Nivå på informationsnivån. Ange flera gånger för ökad informationsnivån. Ange den två gånger ska resultera i
full informationsnivån, en gång i medelinformationsnivån och noll gånger minsta nivån.
ebook-edit
ebook-edit [opts] [path_to_ebook] [name_of_file_inside_book ...]
Starta calibres bokredigeringsverktyg. Du kan som alternativ också ange namnen på
filer inne i boken vilken som ska automatiskt öppnas för redigering.
Närhelst du skickar argument till ebook-edit som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
[options]
--detach
Koppla bort från styrande terminal, om någon (bara för Linux)
--help, -h
visa denna hjälptext och avsluta
--version
visar programmets versionsnummer och avsluta
ebook-meta
ebook-meta ebook_file [alternativ]
Läs/Skriv metadata från/till e-bokfiler.
Format som stöds för att läsa metadata: azw, azw1, azw3, azw4, cbr, cbz, chm, docx, epub, fb2, html, htmlz, imp, lit,
lrf, lrx, mobi, odt, oebzip, opf, pdb, pdf, pml, pmlz, pobi, prc, rar, rb, rtf, snb, tpz, txt, txtz, updb, zip
1.11. Kommandoradsgränssnitt
289
calibre Användarhandbok, Utgåva 2.22.0
Format som stöds för att skriva metadata: azw, azw1, azw3, azw4, docx, epub, fb2, htmlz, lrf, mobi, pdb, pdf, prc, rtf,
tpz, txtz
Olika filtyper stöder olika typer av metadata. Om du försöker sätta några metadata på en filtyp som inte finns stöd för,
kommer metadata ignoreras i tysthet.
Närhelst du skickar argument till ebook-meta som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
[options]
--author-sort
Sträng som ska användas vid sortering av författare. Om denna ej anges, och författare anges, kommer strängen
automatiskt genereras från författarens namn.
--authors, -a
Ange författarna. Flera författare skall avskiljas med et-tecken. Författarnamnen bör vara i ordningen Förnamn
Efternamn.
--book-producer, -k
Ange bokproducenten.
--category
Ange bokkategori.
--comments, -c
Ange e-bokbeskrivning.
--cover
Ange omslag till den angivna filen.
--date, -d
Ange publiceringsdatum.
--from-opf
Läs metadata från den angivna OPF-filen och använd dem som metadata i e-boken. Metadata som anges på
kommandoraden kommer att åsidosätta metadata som lästs från OPF-filen
--get-cover
Hämta omslag från e-bok och spara det som specificerad filen.
--help, -h
visa denna hjälptext och avsluta
--identifier
Ställ in identifierare för boken, kan anges flera gånger. Till exempel: --identifier (sida 290)
URI:http://acme.com --identifier (sida 290) isbn:12345 För att ta bort en identifierare, ange inte något
värde, --identifier (sida 290) isbn: Observera att för EPUB-filer, en identifierare markeras som paketetidentifierare kan inte tas bort.
--index, -i
Ange bokens nummer i serien.
--isbn
Ange ISBN för boken.
--language, -l
Ange språket.
--lrf-bookid
Ange BookID i LRF-filer
290
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
--publisher, -p
Ange e-bokutgivare.
--rating, -r
Ange betyg. Skall vara ett nummer mellan 1 och 5.
--series, -s
Ange serien denna e-bok tillhör.
--tags
Ange etiketter för boken. Skall vara en kommaseparerad lista.
--title, -t
Ange titeln.
--title-sort
Titelversionen som ska användas för sortering. Om denna ej anges, och titeln är angiven, kommer den automatiskt genereras från titeln.
--to-opf
Ange namnet på en OPF-fil. Metadata kommer att skrivas till OPF-filen.
--version
visar programmets versionsnummer och avsluta
ebook-polish
ebook-polish [options] input_file [output_file]
Polerar böcker handlar om att få en glans av perfektion glans på dina väl genomtänkta e-böcker.
Polering försöker minimera förändringar på intern kodning av din e-bok. Till skillnad från konvertering, kommer det
inte platta ut CSS, ändra filnamn, ändra typsnitts- storlekar, justera marginaler, etc. Varje åtgärd utför bara minsta
möjliga mängd av ändringar som behövs för önskad effekt.
Du bör använda det här verktyget som det sista steget i din e-bokskapande process.
Notera att polering bara fungerar på filer i AZW3 eller EPUB format.
Närhelst du skickar argument till ebook-polish som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
[options]
--cover, -c
Sökvägen till en omslagsbild. Ändrar omslag angivit i boken. Om inget omslag finns, eller omslaget inte är
korrekt identifierade, infogas ett nytt omslag.
--embed-fonts, -e
Bädda in alla teckensnitt som refereras i dokumentet och som inte redan är inbäddade. Detta kommer att söka
igenom datorn efter typsnitt, och om de finns, kommer de att vara bäddas in i dokumentet. Se till att du har giltig
licens för att bädda in teckensnitt som används i detta dokument.
--help, -h
visa denna hjälptext och avsluta
--jacket, -j
Sätt ett “skyddsomslag” i början av boken som innehåller allt om bokens metadata som titel, markeringar,
författare, serier, kommentarer, etc. Eventuella tidigare skyddsomslag kommer att ersättas.
1.11. Kommandoradsgränssnitt
291
calibre Användarhandbok, Utgåva 2.22.0
--opf, -o
Sökväg till en OPF fil. Metadata i boken uppdateras från OPF filen.
--remove-jacket
Ta bort tidigare infört skyddsomslag.
--remove-unused-css, -u
Ta bort alla oanvända CSS-regler från stilmallar och etiketter. Vissa böcker skapas från produktionsmallar kan
ha ett stort antal extra CSS-regler som inte passar någon av det faktiska innehållet. Dessa extra regler kan slöa
ner läsare när den behöver tolka dem alla.
--smarten-punctuation, -p
Konvertera klartext streck, ellipser, citationstecken, flertal bindestreck, etc. i deras typografiskt korrekta motsvarigheter. Observera att algoritmen ibland kan generera felaktiga resultat, särskilt när apostrof i början av
sammandragningar är inblandade.
--subset-fonts, -f
Delmängder av typsnitt innebär att minska ett inbäddat typsnitt att innehålla endast de tecken som används av
det typsnittet i boken. Detta kraftigt reducerar storleken på typsnittet filer (halvering av typsnitt filstorlekar är
vanligt). Till exempel, om boken använder ett visst typsnitt för rubriker, då delmängder kommer att minska det
typsnittet bara ska innehålla tecken finns i själva rubriker i boken. Eller om den Boken bäddar in fet och kursiv
versioner av ett typsnitt, men fet och kursiv text är relativt sällsynt, eller saknas helt, då Fet och kursiv typsnitt
kan antingen reduceras till endast ett fåtal tecken eller helt tas bort. Enda nackdelen med att delmängder typsnitt
är att om, vid en senare Hittills har du väljer att lägga till mer text till dina böcker, de nytillkomna text kanske
inte omfattas av den delmängd typsnitt.
--verbose
Producera mera utförligt utdata, användbart för felsökning.
--version
visar programmets versionsnummer och avsluta
ebook-viewer
ebook-viewer [alternativ] fil
Visa en e-bok.
Närhelst du skickar argument till ebook-viewer som har mellanrum i dem, omslut argumenten med citattecken. Till
exempel “C:some path with spaces”
[options]
--debug-javascript
Skriv javaskriptnotifieringar och konsolmeddelanden till konsolen
--detach
Koppla bort från styrande terminal, om någon (bara för Linux)
--full-screen, -f
Om vald kommer visningsfönstret försöker öppna helskärm när den startas.
--help, -h
visa denna hjälptext och avsluta
--open-at
Positionen för att öppna den angivna boken. Positionen är en plats som visas i det övre vänstra hörnet av betraktaren.
292
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
--raise-window
Om angivet, kommer läsfönstret att försöka lägga sig överst vid start.
--version
visar programmets versionsnummer och avsluta
fetch-ebook-metadata
fetch-ebook-metadata [options]
Hämta bokmetadata från nätresurser. Du måste ange åtminstone en av titel, författare eller ISBN.
Närhelst du skickar argument till fetch-ebook-metadata som har mellanrum i dem, omslut argumenten med citattecken. Till exempel “C:some path with spaces”
[options]
--authors, -a
Bokförfattare
--cover, -c
Ange ett filnamn. Omslaget, om tillgängligt, kommer att sparas till det. Utan denna parameter kommer omslaget
inte laddas ner.
--help, -h
visa denna hjälptext och avsluta
--isbn, -i
Bok ISBN
--opf, -o
Mata ut metadata i OPF-format i stället för läsbar text.
--timeout, -d
Tidsbegränsning i sekunder. Grundinställning är 30
--title, -t
Boktitel
--verbose, -v
Skriv loggen till konsolen (stderr)
--version
visar programmets versionsnummer och avsluta
lrf2lrs
lrf2lrs book.lrf
Konvertera en LRF-fil till en LRS-fil (XML, UTF-8-kodad)
Närhelst du skickar argument till lrf2lrs som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
1.11. Kommandoradsgränssnitt
293
calibre Användarhandbok, Utgåva 2.22.0
[options]
--dont-output-resources
Spara inte inbäddade bild- och typsnittfiler till hårddisken
--help, -h
visa denna hjälptext och avsluta
--output, -o
LRS-fil för utdata
--verbose
Var mer uttrycklig
--version
visar programmets versionsnummer och avsluta
lrfviewer
lrfviewer [options] bok.lrf
Läs LRF-e-bok bok.lrf
Närhelst du skickar argument till lrfviewer som har mellanrum i dem, omslut argumenten med citattecken. Till exempel “C:some path with spaces”
[options]
--disable-hyphenation
Deaktivera ihopbindning. Bör signifikant snabba upp renderingen.
--help, -h
visa denna hjälptext och avsluta
--profile
Profilera LRF-rendering
--verbose
Skriv ut mer information om renderingsprocessen
--version
visar programmets versionsnummer och avsluta
--visual-debug
Slå på visuell hjälp för avlusning av renderingsmotorn
--white-background
Som standard är bakgrunden gulvit vilket jag finner mer vilsamt för ögonen. Detta alternativ gör bakgrunden
helvit.
lrs2lrf
lrs2lrf [alternativ] file.lrs
Skapa LRF-fil från LRS-fil.
Närhelst du skickar argument till lrs2lrf som har mellanrum i dem, omslut argumenten med citattecken. Till exempel
“C:some path with spaces”
294
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
[options]
--help, -h
visa denna hjälptext och avsluta
--lrs
Konvertera LRS till LRS. Används vid felsökning.
--output, -o
Sökväg till utdatafil
--verbose
Följ bearbetningsprocessen
--version
visar programmets versionsnummer och avsluta
web2disk
web2disk URL
Där URL är t.ex. http://google.com
Närhelst du skickar argument till web2disk som har mellanrum i dem, omslut argumenten med citattecken. Till exempel “C:some path with spaces”
[options]
--base-dir, -d
Baskatalogen där webbadressen sparas. Grundinställningen är .
--delay
Minsta intervall i sekunder mellan på varandra följandande hämtningar. Grundinställning är 0 s
--dont-download-stylesheets
Hämta inte CSS-stilmallar.
--encoding
Teckenkodning för de webbplatser som du försöker hämta. Grundinställningen är att försöka gissa kodningen.
--filter-regexp
Varje länk som passar detta reguljära uttryck kommer att ignoreras. Detta alternativ kan anges flera gånger, i
vilket fall så länge någon regexp passar en länk, kommer det att ignoreras. Som standard ignoreras inga länkar.
Om både filtera regexp och passar regexp specificeras, då används filtrera regexp först.
--help, -h
visa denna hjälptext och avsluta
--match-regexp
Endast länkar som passar det reguljära uttrycket kommer att följas. Detta alternativ kan anges flera gånger. Då
kommer länkar att följas så länge de passar det reguljära uttrycket. Som standard följs alla länkar.
--max-files, -n
Det maximala antal filer att hämta. Endast för filer med <a href>-taggar. Grundinställning är
9223372036854775807
--max-recursions, -r
Maximalt antal nivåer, d.v.s. länkdjup, att följa. Grundinställning 1
1.11. Kommandoradsgränssnitt
295
calibre Användarhandbok, Utgåva 2.22.0
--timeout, -t
Tidsgräns i sekunder att vänta på ett svar från servern. Grundinställning 10.0
--verbose
Visa detaljerad utdata. Användbart för felsökning
--version
visar programmets versionsnummer och avsluta
1.11.2 Odokumenterade kommandon
• ebook-device
• markdown-calibre
Du kan se användning av odokumenterade kommando genom att exekvera dem utan argument i ett terminalfönster.
1.12 Konfigurera calibre utvecklingsmiljö
calibre är helt öppen källkod, licensierat under GNU GPL v395 . Det innebär att du är fri att ladda ner och ändra
programmet till ditt hjärtas innehåll. I det här avsnittet får du lära dig hur du inrättar en calibre-utvecklingsmiljö på
vilket operativsystem du valt. calibre är skriven främst i Python96 med lite C/C++ kod för hastighet och systemets
gränssnitt. Observera att calibre inte är kompatibel med Python 3 och kräver minst Python 2.7.
Innehåll
• Konstruktionsfilosofi (sida 296)
– Kodutformning (sida 297)
• Få koden (sida 298)
– Skicka in dina ändringar som skall ingå (sida 298)
• Windows utvecklingsmiljö (sida 299)
• OS X utvecklingsmiljö (sida 299)
• Linux utvecklingsmiljö (sida 300)
• Att ha separata “normal” och “utveckling” calibre-installereringar på samma dator (sida 301)
• Felsökningstips (sida 301)
– Användsa print-satser (sida 301)
– Med hjälp av en interaktiv python-tolk (sida 301)
– Använda python-felsökare som fjärrfelsökare (sida 302)
– Använda felsökaren i din favorit python IDE (sida 302)
– Kör godtyckliga skript i calibre python-miljön (sida 302)
• Använda calibre i dina projekt (sida 303)
– Binär installation av calibre (sida 303)
– Installera källkod på Linux (sida 303)
• API-dokumentation för olika delar av calibre (sida 303)
1.12.1 Konstruktionsfilosofi
calibre har sina rötter i Unix världen, vilket innebär att dess konstruktions är mycket modulärt. Modulerna interagerar
med varandra via väl definierade gränssnitt. Detta gör att lägga till nya funktioner och rätta fel i calibre mycket lätt,
95 http://www.gnu.org/copyleft/gpl.html
96 https://www.python.org
296
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
vilket resulterar i en frenetisk takt i utvecklingen. På grund av sina rötter, har calibre ett omfattande kommandoradsgränssnitt för alla dess funktioner, dokumenterade i Kommandoradsgränssnitt (sida 265).
Den modulära konstruktionen av calibre uttrycks via ‘‘tillägg‘‘s/insticksprogram. Det finns en handledning (sida 230)
om att skriva calibre tilläggsprogram. Till exempel, för att lägga till stöd för en ny enhet till calibre vanligtvis innebär
att skriva mindre än 100 rader kod i form av en drivrutinstillägg. Du kan bläddra i inbyggda drivrutiner97 . På samma
sätt lägga till stöd för nya konverteringsformat involverar skrivande indata- / utdataformat tillägg. Ett annat exempel på
den modulära konstruktionen är receptsystemet (sida 121) för att hämta nyheter. För fler exempel på tilläggsprogram
som syftar till att lägga till funktioner till calibre, se plugin index98 .
Kodutformning
All calibre pythonkod finns i caliber paketet. Paketet innehåller följande huvud-underpaket
• enheter - Alla drivrutiner. Bara titta igenom några av de inbyggda drivrutiner för att få en uppfattning om hur de
fungerar.
– För mer information, se: devices.interface som definierar gränssnitt stöds av drivrutiner och
devices.usbms som definierar en generisk drivrutin som ansluter till en USBMS enhet. Alla USBMS
baserade drivrutiner i calibre ärver från den.
• e-böcker
All
e-bokkonvertering
/
metadatakod.
En
bra
utgångspunkt
är
calibre.ebooks.conversion.cli vilken är modulen som driver ebook-convert kommandot.
Konverteringen styrs via conversion.plumber . Formatoberoende kod är alla i ebooks.oeb och
formatberoende kod finns i ebooks.format_name .
– Metadataläsning, skrivning, och nedladdning är allt i ebooks.metadata
– Konvertering sker i en “rörledning”, för strukturen av rörledningen, se Introduktion . Rörledningen består av ett indataprogram, olika omvandlingar och ett utdataprogram. Den kod som konstruerar och driver
rörledningen i plumber.py. Rörledningen fungerar på en representation av en e-bok som är som en
uppackade epub, med manifest, rygg, innehållsförteckning, guide, html innehåll, etc. Den klass som hanterar denna representation är OEBBook i ebooks.oeb.base . De olika omvandlingar som tillämpas
på boken under omvandlingar finns i oeb/transforms/*.py. Och input och output plugins bor i
conversion/plugins/*.py.
– E-bokredigering sker med hjälp av en annat kontainerobjekt. Det är dokumenterat i API-dokumentation
för e-bok redigeringsverktyg (sida 342).
• db - Databasens bakända. Se API-dokumentation för databasgränssnitt för gränssnittet till calibre-biblioteket.
• mediaserver: library.server är calibres mediaserver.
• gui2 - Det grafiska användargränssnittet (GUI). GUI initialiseringen händer i gui2.main‘‘och
‘‘gui2.ui. Den e-bokvisaren i gui2.viewer. E-bokeditor finns i gui2.tweak_book.
Om du vill hitta startplatser för alla de olika calibres körbara delar, titta på entry_points struktur i linux.py99 .
Om du behöver hjälp att förstå koden, post i development forum100 och du kommer sannolikt att få hjälp av en av
calibres många utvecklare.
97 https://github.com/kovidgoyal/calibre/tree/master/src/calibre/devices
98 http://www.mobileread.com/forums/showthread.php?p=1362767#post1362767
99 https://github.com/kovidgoyal/calibre/blob/master/src/calibre/linux.py
100 http://www.mobileread.com/forums/forumdisplay.php?f=240
1.12. Konfigurera calibre utvecklingsmiljö
297
calibre Användarhandbok, Utgåva 2.22.0
1.12.2 Få koden
Du kan få calibre-källkoden på två sätt, med hjälp av ett versionshanteringssystem eller direkt ladda ner en “tarboll” tarball101 .
calibre använder Git102 , ett distribuerat versionshanteringssystem. Git är tillgänglig på alla plattformar calibre stöder.
När du har installerat Git kan du få calibre-källkod med kommandot:
git clone git://github.com/kovidgoyal/calibre.git
I Windows behöver du den fullständiga sökvägen, som kommer att vara något i stil med C:\Program
Files\Git\git.exe.
calibre är ett mycket stort projekt med en mycket lång källkontrollshistoria, så ovanstående kan ta ett tag (10 minuter
till en timme beroende på din internet hastighet).
Om du vill få koden snabbare, är källkoden för den senaste versionen alltid finns som ett arkiv103 .
För att uppdatera en filial till den senaste koden använder du kommandot:
git pull --no-edit
Skicka in dina ändringar som skall ingå
Om du bara planerar att göra några små förändringar kan du göra dina ändringar och skapa ett “merge direktivet” som
du sedan kan fästa på ett ärende i calibre bug tracker <https://bugs.launchpad.net/calibre>‘_. För att göra detta, gör
ändringarna, kör sedan:
git commit -am "Comment describing your changes"
git format-patch origin/master --stdout > my-changes
Detta kommer att skapa en file:my-changes-fil i den aktuella katalogen, helt enkelt bifoga det till ett ärende i calibre
bug tracker104 . Observera att detta kommer att omfatta alla de åtgärder du har gjort. Om du bara vill skicka några
åtgärder, måste du ändra origin/master ovan. Om du vill skicka bara den senaste bekräftelsen, använd:
git format-patch HEAD~1 --stdout > my-changes
Om du vill skicka de senaste n ändringar, byt 1 med n , till exempel under de senaste 3 ändringarna:
git format-patch HEAD~3 --stdout > my-changes
Var noga med att inte inkludera sammanslagningar när HEAD~n .
If you plan to do a lot of development on calibre, then the best method is to create a GitHub105 account. Below is a
basic guide to setting up your own fork of calibre in a way that will allow you to submit pull requests for inclusion
into the main calibre repository:
• Installering av git på maskinen som beskrivs i denna artikel: Setup Git106
• Installera ssh nycklar för autentisering till GitHub, som beskrivs här: Generating SSH keys107
• Gå till https://github.com/kovidgoyal/calibre och klicka på Förgrenings knappen.
• I en terminal utför:
101 http://code.calibre-ebook.com/dist/src
102 http://www.git-scm.com/
103 http://code.calibre-ebook.com/dist/src
104 https://bugs.launchpad.net/calibre
105 https://github.com
106 https://help.github.com/articles/set-up-git
107 https://help.github.com/articles/generating-ssh-keys
298
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
git clone git@github.com:<username>/calibre.git
git remote add upstream https://github.com/kovidgoyal/calibre.git
Ersätt <användarnamn> ovan med ditt github användarnamn. Det kommer att få din förgrening utcheckat lokalt.
• Du kan göra ändringar och överlämna dem när du vill. När du är redo att ha ditt arbete ihopslaget, gör en:
git push
och gå till https://github.com/<username>/calibre och klicka på Hämtbegäran knappen för att
generera en hämtbegäran som kan slås samman.
• Du kan uppdatera din lokala kopia med kod från huvudarkivet när som helst genom att göra:
git pull upstream
Du bör också hålla ett öga på calibre development forum108 . Innan du gör stora förändringar, bör du diskutera dem i
forumet eller kontakta Kovid direkt (hans e-postadress är hela källkoden).
1.12.3 Windows utvecklingsmiljö
Observera: Du måste också få calibre-källkod för sig enligt ovan.
Installera calibre normalt, med hjälp av installationsprogrammet för Windows. Öppna sedan en kommandotolk och
ändra till tidigare utcheckad calibre-kodkatalogen. Till exempel:
cd C:\Users\kovid\work\calibre
calibre är den katalog som innehåller src och resurser underkataloger.
Nästa steg är att ställa in miljövariabeln CALIBRE_DEVELOP_FROM till den absoluta sökvägen till src-katalog. Så,
efter exemplet ovan skulle det vara C:\Users\kovid\work\calibre\src. Här är en kort guide till109 att sätta
miljövariabler i Windows.
När du har ställt in miljövariabeln, öppna en ny kommandotolk och kontrollera att den blev rätt inställd med kommandot:
echo %CALIBRE_DEVELOP_FROM%
Ställa denna miljövariabel innebär att calibre kommer nu laddar all sin Python kod från den angivna platsen.
Det är allt! Du är nu redo att börja hacka på calibre-koden. Till exempel öppna filen src\calibre\__init__.py
i din favoriteditor och lägg till raden:
print ("Hello, world!")
nära toppen av filen. Nu kör kommandot calibredb . Den allra första raden av produktionen bör vara Hej världen! .
Du kan även konfigurera en calibres utvecklingsmiljö inuti gratis Microsoft Visual Studio, om man så vill, att följa
instruktionerna här110 .
1.12.4 OS X utvecklingsmiljö
Observera: Du måste också få calibre-källkod för sig enligt ovan.
108 http://www.mobileread.com/forums/forumdisplay.php?f=240
109 https://docs.python.org/2/using/windows.html#excursus-setting-environment-variables
110 http://www.mobileread.com/forums/showthread.php?t=251201
1.12. Konfigurera calibre utvecklingsmiljö
299
calibre Användarhandbok, Utgåva 2.22.0
Installera calibre normalt med den medföljande .dmg. Öppna sedan en terminal och ändra till den tidigare utcheckad
calibre-kodkatalogen, till exempel:
cd /Users/kovid/work/calibre
calibre är den katalog som innehåller src och resurser underkataloger. Se till att du har installerat den calibre kommandoradsverktyg via Inställningar->Avancerat->Diverse i calibre-grafiska gränssnitt.
Nästa steg är att skapa ett bash skript som kommer att sätta miljövariabeln CALIBRE_DEVELOP_FROM till den
absoluta sökvägen till katalogen src när man kör calibre i felsökningsläge.
Skapa en vanlig textfil:
#!/bin/sh
export CALIBRE_DEVELOP_FROM="/Users/kovid/work/calibre/src"
calibre-debug -g
Spara filen som /usr/bin/calibre-develop , ställ sedan dess rättigheter, så att den kan köras:
chmod +x /usr/bin/calibre-develop
När du har gjort det, kör:
calibre-develop
Du bör se några diagnostisk information i terminalfönstret som calibre startar, och du bör se en asterisk efter versionsnumret i grafiska gränssnittsfönstret, vilket indikerar att du kör från källkod.
1.12.5 Linux utvecklingsmiljö
Observera: Du måste också få calibre-källkod för sig enligt ovan.
calibre är i första hand utvecklad för Linux. Du har två val i inrättandet av utvecklingsmiljön. Du kan installera
calibre-binär som vanligt och använda den som en runtime-miljö för att göra din utveckling. Detta tillvägagångssätt
liknar det som används i Windows och OS X. Du kan installera calibre från källan. Instruktioner för hur du installerar
en utvecklingsmiljö från källan är i filen INSTALL i källkodsträdet. Här kommer vi att ta itu med den binära vid
körning, vilket är den rekommenderade metoden.
Installera calibre att använda den binära installationsprogrammet. Öppna sedan en terminal och ändra till den tidigare
utcheckade calibre-kodkatalogen, till exempel:
cd /home/kovid/work/calibre
calibre är den katalog som innehåller src och resurser underkataloger.
Nästa steg är att ställa in miljövariabeln CALIBRE_DEVELOP_FROM till den absoluta sökvägen till src katalog. Så,
efter exemplet ovan skulle det vara /home/kovid/work/calibre/src. Så ställer du in miljövariabler beror på
din Linux-distribution och vad kommandoskal du använder.
När du har ställt in miljövariabeln, öppna en ny terminal och kontrollera att den blev rätt inställd med kommandot:
echo $CALIBRE_DEVELOP_FROM
Ställa denna miljövariabel innebär att calibre kommer nu laddar all sin Python kod från den angivna platsen.
Det är allt! Du är nu redo att börja hacka på calibre-koden. Till exempel öppna filen src/calibre/__init__.py
i din favorit editor och lägg till raden:
300
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
print ("Hello, world!")
nära toppen av filen. Nu kör kommandot calibredb . Den allra första raden av produktionen bör vara Hej världen! .
1.12.6 Att ha separata “normal” och “utveckling” calibre-installereringar på samma
dator
calibre-källkodsträd är mycket stabila och sällan brytes sönder, men om du känner behov av att köras från källan på
ett separat testbibliotek och kör släppt calibre-version med ditt vardagliga biblioteket kan du uppnå detta enkelt med
hjälp bat-filer eller skalskript för att starta calibre. Exemplet nedan visar hur man gör detta på Windows med bat-filer
(instruktionerna för andra plattformar är samma, bara använda ett skalskript i stället för en bat-fil)
För att starta den utgivna versionen av calibre med din vardagliga biblioteket:
calibre-normal.bat:
calibre.exe "--with-library=C:\path\to\everyday\library folder"
calibre-dev.bat:
set CALIBRE_DEVELOP_FROM=C:\path\to\calibre\checkout\src
calibre.exe "--with-library=C:\path\to\test\library folder"
1.12.7 Felsökningstips
Python är ett dynamiskt typat språk med utmärkta faciliteter för introspektion. Kovid skrev kärndelar av calibrekod
utan en gång med hjälp av ett avlusningsprogram. Det finns många strategier för att felsöka calibrekod:
Användsa print-satser
Det här är Kovids favorit sätt att felsöka. Sätt bara in utskrift-satser vid intressanta punkter och köra ditt program i
terminalen. Till exempel kan du starta det grafiska gränssnittet från terminalen som:
calibre-debug -g
På samma sätt kan du starta e-bokläsaren med:
calibre-debug -w /path/to/file/to/be/viewed
Den e-bokeditorn kan startas med:
calibre-debug -t /path/to/be/edited
Med hjälp av en interaktiv python-tolk
Du kan infoga följande två rader kod för att starta en interaktiv python-session på den punkten:
from calibre import ipython
ipython(locals())
När du kör från kommandoraden, kommer detta att starta en interaktiv python-tolk med tillgång till alla lokalt definierade variabler (variabler i den lokala omfattning). Den interaktiva prompten har till och med TAB komplettering för
objektegenskaper och du kan använda de olika python-finnesser för introspektion, såsom dir(), type(), repr(),
etc.
1.12. Konfigurera calibre utvecklingsmiljö
301
calibre Användarhandbok, Utgåva 2.22.0
Använda python-felsökare som fjärrfelsökare
Du kan använda den inbyggda python-felsökare (PDB) som fjärrfelsökare från kommandoraden. Först startar fjärrfelsökaren vid den punkt i calibre-koden du är intresserad av, så här:
from calibre.rpdb import set_trace
set_trace()
Kör sedan calibre, antingen som vanligt, eller använda någon av calibre-felsökningskommandon som beskrivs i föregående avsnitt. När ovanstående punkt i koden är nådd kommer calibre frysa, väntar på felsökaren för att ansluta.
Nu öppna en terminal eller kommandotolk och använd följande kommando för att starta felsökningssessionen:
calibre-debug -c "from calibre.rpdb import cli; cli()"
Du kan läsa om hur man använder python-felsökaren i python stdlib docs för pdb modulen111 .
Observera: Som standard kommer fjärrfelsökaren försöker ansluta på port 4444. Du kan ändra det, genom att
skicka portparametern till både set_trace()- och cli()-funktioner ovan, så här: set_trace(port=1234) och
cli(port=1234).
Observera: Python-felsökaren kan inte hantera flera trådar, så du måste anropa set_trace en gång per tråd, varje gång
med ett annat portnummer.
Använda felsökaren i din favorit python IDE
Det är möjligt att använda den inbyggda felsökaren i din favorit python-IDE, om den stödjer fjärrfelsökning. Det
första steget är att lägga till utcheckat calibre src till PYTHONPATH i IDE. Med andra ord, den katalog du anger som
CALIBRE_DEVELOP_FROM måste ovan, också vara i PYTHONPATH din IDE.
Placera sedan IDE fjärrfelsökarmodulen i src katalog till calibre-källkod kassan. Lägg allt vad kod som behövs för att
starta fjärrfelsökaren för calibre på den intressanta, till exempel i huvudfunktionen. Kör sedan calibre som vanligt. Din
IDE bör nu kunna ansluta till fjärrfelsökaren kör inne i calibre.
Kör godtyckliga skript i calibre python-miljön
calibre-debug-kommandot ger ett par praktiska flaggor för att köra egen kod, med tillgång till calibre-moduler:
calibre-debug -c "some python code"
är bra för att testa en liten kodsnutt på kommandoraden. Det fungerar på samma sätt som den -c flaggan till pythontolken:
calibre-debug myscript.py
kan användas för att köra din egen Python-skript. Det fungerar på samma sätt som att skicka skriptet till Pythontolken, förutom att calibre miljön är helt initierad, så att du kan använda alla calibre-kod i skriptet. För att använda
kommandoradsargument med ditt manus, använd formuläret:
calibre-debug myscript.py -- --option1 arg1
Den -- leder till att alla efterföljande argument skickas till ditt skript.
111 https://docs.python.org/2/library/pdb.html#debugger-commands
302
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
1.12.8 Använda calibre i dina projekt
Det är möjligt att direkt använda calibrefunktioner / kod i Python-projektet. Två sätt finns för att göra detta:
Binär installation av calibre
Om du har en binär installation av calibre, kan du använda Python-tolken som medföljer calibre, så här:
calibre-debug /path/to/your/python/script.py -- arguments to your script
Installera källkod på Linux
Förutom att använda ovanstående teknik, om du gör en källkodsinstallation på Linux, kan du också direkt importera
calibre, enligt följande:
import init_calibre
import calibre
print calibre.__version__
Det är viktigt att du importerar init_calibre modulen innan någon annan calibre modules/packages som det sätter upp
tolken att köra calibre-kod.
1.12.9 API-dokumentation för olika delar av calibre
API dokumentation för recept
API för skriva recept är definierade av BasicNewsRecipe (sida 303)
class calibre.web.feeds.news.BasicNewsRecipe(options, log, progress_reporter)
Basklass som innehåller logik behövs i alla recept. Av överrida progressivt mer av funktionaliteten i denna
klass, kan du göra allt mer kundanpassade / kraftfulla recept. En handledning introduktion till att skapa recept,
se Lägga till din favorit nyhetswebbplats (sida 121).
abort_recipe_processing(msg)
Orsakar att receptetnedladdningssystemet avbryter nedladdningen av detta recept, visar en enkel återkopplingsmeddelande till användaren.
add_toc_thumbnail(article, src)
Kalla detta från populate_article_metadata med attributet src för en <img> etiketten från artikeln som är
lämplig att använda som ikon representerar artikeln i innehållsförteckningen. Huruvida ikonen faktiskt
används är beroende av enhet (för närvarande endast används av Kindles). Observera att den refererade
bilden måste vara en som framgångsrikt hämtats, annars kommer det att ignoreras.
classmethod adeify_images(soup)
Om ditt recept vid konvertering till EPUB har problem med bilderna när de visas i Adobe Digital Editions,
kalla denna metod inifrån postprocess_html() (sida 306).
cleanup()
Anropas efter alla artiklar har laddats ner. Använd den för att göra godtycklig sanering som att logga ut
från prenumerationsplatser etc.
clone_browser(br)
Klona webbläsare br. Klonade webbläsare används för multi-trådade nedladdningar, eftersom mechanize
1.12. Konfigurera calibre utvecklingsmiljö
303
calibre Användarhandbok, Utgåva 2.22.0
(mekanisera) inte är trådsäkert. Standardkloningsrutiner ska fånga de flesta webbläsaranpassningar, men
om du gör något exotiskt i ditt recept, ska du åsidosätta den här metoden i ditt recept och klona manuellt.
Klonade webbläsarinstanser använder samma, trådsäkra CookieJar som standard, såvida du inte har anpassat cookie-hantering.
default_cover(cover_file)
Skapa en generisk omslag för recept som inte har ett omslag
download()
Hämta och förbearbeta alla artiklar från flöde i detta recept. Denna metod bör kallas en gång för en viss
receptinstans. Kallas det mer än en gång kommer det att leda till odefinierade beteenden. :return: Path to
index.html
extract_readable_article(html, url)
Tar fram huvudartikelns innehåll från “html”, rensar upp och återvänder som en (article_html, extracted_title) tupel. Baserat på den ursprungliga läsbarhet algoritm genom Arc90.
get_article_url(article)
Överrid i en underklass för att anpassa utvinning av URL som pekar på innehållet för varje artikel. Returnera artikel-URLn. Den anropas med article, ett objekt som representerar en analyserad artikel från ett
flöde. Se ‘feedparser <https://pythonhosted.org/feedparser/>’ _. Normalt söker den efter den ursprungliga
länken (till flöde syndikerade via en tjänst som Feedburner eller pheedo) och om den hittas, returnerar detta
eller annars returneras article.link112 .
get_browser(*args, **kwargs)
Returnera en webbläsare instans som används för att hämta dokument från webben. Som standard den
returnerar en mechanize (mekanisera)113 browser instans som stöder cookies, ignorerar robots.txt, hanterar
fräschar och har ett Mozilla Firefox användaragent.
Om ditt recept kräver att du loggar in först, överrids denna metod i din underklass. Till exempel är följande
kod används i New York Times recept för att logga in för full tillgång:
def get_browser(self):
br = BasicNewsRecipe.get_browser(self)
if self.username is not None and self.password is not None:
br.open('http://www.nytimes.com/auth/login')
br.select_form(name='login')
br['USERID']
= self.username
br['PASSWORD'] = self.password
br.submit()
return br
get_cover_url()
Returnera en URL till omslagsbild för den här utgåvan eller‘ None‘. Som standard returnerar värdet av
elementet self.cover_url som normalt är None. Om du vill att ditt recept för att hämta ett omslag för eboken överrids den här metoden i din underklass, eller ställa medlemsvariabeln self.cover_url innan denna
metod anropas.
get_feeds()
Returnera en lista med RSS flöde att hämta för den här profilen. Varje element i listan måste vara ett
2-elements tupel av formen (titel, url). Om titeln är None eller en tom sträng, används titeln från flödet.
Denna metod är användbar om du receptet behöver göra en del bearbetning för att räkna ut lista med inlägg
för att ladda ner. Om så är fallet, överrid i din underklass.
get_masthead_title()
Överrids i underklass för att använda något annat än receptets titel
112 https://pythonhosted.org/feedparser/reference-entry-link.html
113 http://wwwsearch.sourceforge.net/mechanize/
304
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
get_masthead_url()
Returnera en URL till redaktionsloggo till denna utgåva eller‘ None‘. Som standard returnerar värdet av
elementet self.masthead_url som normalt är None. Om du vill att ditt recept ska hämta en redationsloggon
för e-boken överrrid den här metoden i din underklass, eller sätt medlemmen variabeln self.masthead_url
innan denna metod anropas. Redaktionsloggo används i Kindle MOBI-filer.
get_obfuscated_article(url)
Om du sätter articles_are_obfuscated anropas denna metod med varje artikel URL. Det ska returnera
sökvägen till en fil i filsystemet som innehåller artikeln HTML. Filen bearbetas av den rekursiva HTMLhämtmotor, så det kan innehålla länkar till sidor / bilder på webben.
Denna metod är oftast användbart för webbplatser som försöker göra det svårt att komma åt artikelns
innehåll automatiskt.
classmethod image_url_processor(baseurl, url)
Utför någon behandling på bildwebbadresser (kanske ta bort storleksbegränsningar för dynamiskt skapade
bilder, etc.) och returnera bearbetad URL.
index_to_soup(url_or_raw, raw=False, as_tree=False)
Bekväm metod som använder en webadress (URL) för indexera en sida och returnerar en BeautifulSoup114
av den.
url_or_raw: Antingen en webbadress eller den nedladdade indexsidan som en sträng
is_link_wanted(url, tag)
Returnerar Sann om länken ska följas eller Falsk annars. Som standard höjer NotImplementedError som
orsakar hämtningen att ignorera det.
Parametrar
• url – Webbadressen som skall följas
• tag – Ettiketen för vilken URL erhölls
javascript_login(browser, username, password)
Denna metod används för att logga in på en webbplats som använder javascript för sitt inloggningsformulär.
Efter inloggningen är klar, kopieras kakorna från webbplatsen kopieras till en normal (icke-javascript)
webbläsare och nedladdningen fortsätter som använder dessa kakor.
Ett exempel på implementering:
def javascript_login(self, browser, username, password):
browser.visit('http://some-page-that-has-a-login')
form = browser.select_form(nr=0) # Select the first form on the page
form['username'] = username
form['password'] = password
browser.submit(timeout=120) # Submit the form and wait at most two minutes for loading t
Observera att du också kan välja formulär med CSS2 väljare, så här:
browser.select_form('form#login_form')
browser.select_from('form[name="someform"]')
parse_feeds()
Skapa en lista över artiklar i listan över flöden som returneras av BasicNewsRecipe.get_feeds()
(sida 304). Returnerar en lista med Feed objekt.
parse_index()
Denna metod bör implementeras på recept för att tolka en webbplats istället för flöde för att skapa en
lista med artiklar. Typiska användningsområden är för nyhetskällor som har en “Print Edition” webbsida
114 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
1.12. Konfigurera calibre utvecklingsmiljö
305
calibre Användarhandbok, Utgåva 2.22.0
som listar alla artiklar i den aktuella tryckupplagan. Om denna funktion implementeras kommer den att
användas i stället för BasicNewsRecipe.parse_feeds() (sida 305).
Det måste returnera en lista. Varje element i listan måste vara ett 2-inslag tupel av formen (fflödestitel", lista med artiklar).
Varje lista av artiklar måste innehålla ordlister på formen:
{
'title'
'url'
'date'
'description'
'content'
:
:
:
:
:
article title,
URL of print version,
The publication date of the article as a string,
A summary of the article
The full article (can be an empty string). Obsolete
do not use, instead save the content to a temporary
file and pass a file:///path/to/temp/file.html as
the URL.
}
Till exempel, se receptet för nedladdning The Atlantic. Dessutom kan du lägga till “författare” för författaren till artikeln.
Om du vill avbryta behandlingen av någon anledning och låta calibre visa användaren ett enkelt budskap i
stället för ett fel, anropa abort_recipe_processing() (sida 303).
populate_article_metadata(article, soup, first)
Anropas när varje HTML-sida som hör till artikeln hämtas. Avsedd att användas för att få artikelns metadata som författaren / sammandrag / etc. från analyserad HTML (soppa). :param artikel: Ett objekt av
klassen calibre.web.feeds.Article. Om du ändrar sammanfattningen, kom ihåg att också ändra text_summary :param soup: Tolkad HTML tillhör denna artikel :param first: Sann om och endast om
analyserad HTML är den första sidan av artikeln.
postprocess_book(oeb, opts, log)
Körs om någon efterbehandling behövs på analyserad nedladdade e-bok.
Parametrar
• oeb – Ett OEBBook-objekt
• opts – Konverteringsalternativ
postprocess_html(soup, first_fetch)
Denna metod kallas med källan till varje nedladdad: term HTML fil, efter att den analyserats för länkar och
bilder. Den kan användas för att göra godtyckligt kraftfull efterbehandling på HTML. Det bör returnera
soup efter bearbetning det.
Parametrar
• soup – En BeautifulSoup115 instans innehållande nerladdad HTML.
• first_fetch – Sann om detta är första sidan av en artikel.
preprocess_html(soup)
Denna metod kallas med källan till varje nedladdad HTML fil, innan den analyseras för länkar och bilder.
Det kallas efter rensningen som specificerats remove_tags etc. Det kan användas för att göra godtyckliga
och starka förbearbetning på HTML. Det bör returnera soup efter bearbetning det.
soup: En BeautifulSoup116 instans innehållande nerladdad HTML.
115 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
116 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
306
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
preprocess_raw_html(raw_html, url)
Denna metod anropas med källa av varje nedladdad HTML fil, innan den tolkas i ett objektträd. raw_html
är en unicode sträng som representerar råa HTML nedladdningen från webben. url är URL från vilken
HTML var nedladdad.
Obserevera att denna metod agerar innan preprocess_regexps.
Denna metod måste returnera den bearbetade raw_html som ett unicode-objekt.
classmethod print_version(url)
Ta en url som pekar på en webbsida med artikelinnehåll och returnerar URL som pekar på en utskrivbar
version av artikeln. Som standard gör ingenting. TIll exempel:
def print_version(self, url):
return url + '?&pagewanted=print'
skip_ad_pages(soup)
Denna metod anropas med källan till varje nedladdad HTML fil, innan någon av rensningsattribut som
remove_tags, keep_only_tags tillämpas. Observera att preprocess_regexps kommer redan ha använts. Det
är tänkt att låta receptet att hoppa över annonssidor. Om soup är en annonssida, returnera HTML den
verkliga sidan. Annars returneras None.
soup: En BeautifulSoup117 instans innehållande nerladdad HTML.
sort_index_by(index, weights)
Bekväm metod för att sortera titlar i index enligt weights. index‘ sorteras på plats. Returnerar index.
index: En lista av titlar.
weights: En ordlista som översätter vikt mot titel., Om något titelindex inte har vikt. antas de ha vikten 0.
classmethod tag_to_string(tag, use_alt=True, normalize_whitespace=True)
Bekväm metod som använder en BeautifulSoup118 tag-etikett och extraherar text från den rekursivt, inkluderande godtycklig CDATA sektion och alt-attribut. Returnerar en möjlig tom unicode-sträng.
use_alt: Om True försök använd alt attribut för etiketter som inte har något textinnehåll
tag: BeautifulSoup119 Tag (Etikett)
articles_are_obfuscated = False
Sätt till Sann och implementerar get_obfuscated_article() (sida 305) för hantera webbsidor som
försöker göra det svårt att skrapa fram innehåll.
auto_cleanup = False
Automatiskt extrahera all text från nedladdade artikelsidor. Använder algoritmerna från läsbarhet projektet.
Sätt denna sann innebär att du inte behöver oroa dig för att städa upp den nedladdade HTML manuellt (även
om manuell rensning alltid kommer att vara bättre).
auto_cleanup_keep = None
Specify elements that the auto cleanup algorithm should never remove. The syntax is a XPath expression.
For example:
auto_cleanup_keep = '//div[@id="article-image"]' will keep all divs with
id="article-image"
auto_cleanup_keep = '//*[@class="important"]' will keep all elements
with class="important"
auto_cleanup_keep = '//div[@id="article-image"]|//span[@class="important"]'
will keep all divs with id="article-image" and spans
with class="important"
117 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
118 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
119 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
1.12. Konfigurera calibre utvecklingsmiljö
307
calibre Användarhandbok, Utgåva 2.22.0
center_navbar = True
Om sann centreras navigationslisten annars är den vänsterjusterad
compress_news_images = False
Ställ in den till Falsk för att ignorera alla skalnings- och komprimeringsparametrar och passera bilder
igenom omodifierad. Om Sann och andra komprimeringsparametrar behåller sina standardvärden, kommer
jpeg-bilder skalas för att passa in skärmmått som fastställts av utskriftsprofil och komprimeras till storleken
på de flesta (b * h) / 16 där bxh är det skalade bildens dimensioner .
compress_news_images_auto_size = 16
Den faktor som används när automatisk komprimera jpeg-bilder. Om värdet är None, är komprimering automatisk inaktiverad. Annars kommer bilderna att minskas i storlek till (b * h) / compress_news_images_auto_size byte om möjligt genom att minska kvalitetsnivån, där bxh är bildens dimensioner i pixlar. Den minsta jpeg-kvalitet kommer att vara 5/100 så det är möjligt denna begränsning inte
kommer att uppfyllas. Denna parameter kan överridas av parametern compress_news_images_max_size
som ger en fast maximal storlek för bilder. Observera att om du aktiverar scale_news_images_to_device
kommer sedan bilden först skalas och sedan dess kvalitet sänkas tills dess storlek är mindre än (b*h)/faktor
där w och h är nu bildens skalade dimensioner. Med andra ord, denna kompression sker efter skalning.
compress_news_images_max_size = None
Sätt jpeg-kvalitet så att bilder inte överskrider angiven storlek (i kBytes). Om satt, överrider denna parameter automatisk komprimering via compress_news_images_auto_size. Minimum jpeg-kvalitet kommer
vara 5/100 so det är möjligt att denna restriktion inte möts.
conversion_options = {}
Receptspecifika alternativ för att styra konvertering av nedladdat innehåll in i en e-bok. Dessa kommer
överrida alla användare eller tilläggsspecifika värden, så använd bara om det är absolut nödvändigt. TIll
exempel:
conversion_options =
'base_font_size'
'tags'
'title'
'linearize_tables'
}
{
:
:
:
:
16,
'mytag1,mytag2',
'My Title',
True,
cover_margins = (0, 0, ‘#ffffff’)
Som standard returneras omslagsbild av get_cover_url () och kommer att användas som omslag för tidskriften. Överridning av detta i ditt recept instruerar calibre att anpassa det nedladdade omslaget i en ram
vars bredd och höjd uttrycks som en procentandel av den nedladdade omslaget. cover_margins = (10, 15,
“#ffffff”) fyller omslaget med en vit marginal 10px på vänster och höger, 15px på toppen och botten. Färgnamn som fastställts på http://www.imagemagick.org/script/color.php Notera att av någon anledning, vitt
fungerar inte alltid på fönster. Använd #ffffff istället
delay = 0
Fördröjning mellan konsekutiva nedladdningar i sekunder. Argumentet kan vara ett flyttal för att indikera
mer exakt tid.
description = u’‘
Ett par rader som beskriver innehållet detta recept laddar ner. Detta kommer främst att användas i ett
användargränssnitt som presenterar en lista med recept.
encoding = None
Ange en kodningsöverridning för webbplatser som har en felaktig charset-specifikation. Det vanligaste är
att ange latin1 och använda cp1252. Om None, försöka identifiera kodningen. Om det är en anropbar,
anropas den anropbara med två argument: Receptobjektet och den källa som skall avkodas. Det måste
returnera den avkodade källan.
extra_css = None
308
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Ange någon extra CSS som bör läggas till ladda ned HTML-filer. Det kommer att införas i <style> etiketter,
precis före den avslutande </head> etikett därmed tvingande allt CSS utom det som deklareras med hjälp
av stilattribut på individuella HTML etiketter . Exempelvis:
extra_css = '.heading { font: serif x-large }'
feeds = None
Förteckning över flöde för att ladda ner. Kan vara antingen [url1, url2, ...] eller [(’title1’,
url1), (’title2’, url2),...]
filter_regexps = []
Lista över reguljära uttryck som avgör vilka länkar att ignorera. Om den är tom ignoreras det. Endast
användas om is_link_wanted inte implementeras. Exempelvis:
filter_regexps = [r'ads\.doubleclick\.net']
kommer ta bort alla URLer som har ads.doubleclick.net in sig.
Bara
en
av
BasicNewsRecipe.match_regexps
(sida
BasicNewsRecipe.filter_regexps (sida 309) skulle bara definierad.
309)
eller
ignore_duplicate_articles = None
Ignorera dubbletter av artiklar som finns i mer än ett avsnitt. En dubblettartikel är en artikel som har samma
titel och / eller webbadress. Att ignorera artiklar med samma titel, ställa detta till:
ignore_duplicate_articles = {'title'}
För att använda URL:er i stället, sätt den till:
ignore_duplicate_articles = {'url'}
För träff mot titel eller URL, sätt den till:
ignore_duplicate_articles = {'title', 'url'}
keep_only_tags = []
Håll endast specificerade etiketter och deras barn. För formatet för att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Om denna lista inte är tom, då blir <body> etikett
tom och återfylld med etiketter som passar poster i denna lista. Till exempel:
keep_only_tags = [dict(id=['content', 'heading'])]
kommer bara ha etiketter som har ett id attribut av “content” eller “heading”.
language = ‘und’
Språket som nyheterna är i. Måste vara en ISO-639-kod antingen två eller tre tecken långt
masthead_url = None
Som standard, kommer calibre att använda en redaktionslogga (endast Kindle). Åsido detta i ditt recept för
att ge en url för att användas som en redaktionslogga.
match_regexps = []
Lista över reguljära uttryck som avgör vilka länkar att följa. Om den är tom, ignoreras den. Endast användas
om is_link_wanted inte implementeras. Exempelvis:
match_regexps = [r'page=[0-9]+']
kommer passa mot alla URLer som har page=some number i sig.
Bara
en
av
BasicNewsRecipe.match_regexps
(sida
BasicNewsRecipe.filter_regexps (sida 309) skulle bara definierad.
1.12. Konfigurera calibre utvecklingsmiljö
309)
eller
309
calibre Användarhandbok, Utgåva 2.22.0
max_articles_per_feed = 100
Maximalt antal artiklar att ladda ned från varje flöde. Den är primärt användbar för flöde som inte har
artikeldatum. För de flesta flödes, bör du använda BasicNewsRecipe.oldest_article (sida 310)
needs_subscription = False
Om Sann kommer gränssnittet att be användaren om ett användarnamn och lösenord för att använda vid
nedladdning. Om inställningen är “frivilligt” att använda ett användarnamn och lösenord blir tillval
no_stylesheets = False
Bekväm flagga för att inaktivera laddning av formatmallar för webbplatser som har alltför komplexa mallar
som är olämpliga för konvertering till e-böcker format. Om Sann hämtas inte mallar och bearbetas
oldest_article = 7.0
Äldsta artikel att ladda ner från denna nyhetskälla. I dagarna.
preprocess_regexps = []
Lista av regexp substitutionsregler att köras vid nedladdning HTML. Varje element i listan bör vara en
tupel. Första elementet av tupel bör vara ett kompilerat regujärt uttryck och andra en anropsbar som tar ett
passande objekt och returnerar en sträng för att ersätta träffen. Till exempel:
preprocess_regexps = [
(re.compile(r'<!--Article ends here-->.*</body>', re.DOTALL|re.IGNORECASE),
lambda match: '</body>'),
]
kommer ta bort allt från <!–Article ends here–> till </body>.
publication_type = ‘unknown’
Publikationstyp Inställd på tidning, tidskrift eller blogg. Om satt till None, kommer ingen publikationstypsmetadata skrivas till opf-filen.
recipe_disabled = None
Ställ in på en icke tom sträng för att inaktivera detta recept. Strängen kommer att användas som inaktiverade meddelande
recursions = 0
Antal nivåer av länkar att följa på en artikelwebbsida
remove_attributes = []
Lista över attribut för att ta bort från alla etiketter. Exempelvis:
remove_attributes = ['style', 'font']
remove_empty_feeds = False
Om Sann tas tomma flöden bort från utdata. Det här alternativet har ingen effekt om parse_index överrids i
underklassen. Den är avsedd endast för recept som returnerar en lista med flöden som använder feeds eller
get_feeds() (sida 304). Den används också om du använder alternativet ignore_duplicate_articles.
remove_javascript = True
Bekväm flagga att strippa alla javascript etiketter från den nedladdade HTMLn
remove_tags = []
Lista med etiketter som skall avlägsnas. Angivna etiketter tas bort från nedladdad HTML. En etiketter
anges som en ordlista på formen:
{
name
attrs
: 'tag name',
#e.g. 'div'
: a dictionary, #e.g. {class: 'advertisment'}
}
310
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Alla tangenter är valbara. För full förklaring av sökningskriteria, se Beautiful Soup120 Ett vanligt exempel:
remove_tags = [dict(name='div', attrs={'class':'advert'})]
Detta tar bort alla <div class=”advert”> etiketter och deras barn från nerladdade HTML.
remove_tags_after = None
Ta bort alla etiketter som förekommer efter angiven etikett. För formatet att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Till exempel:
remove_tags_after = [dict(id='content')]
kommer ta bort alla etiketter efter första elementet med id=”content”.
remove_tags_before = None
Ta bort alla etiketter som förekommer före angiven etikett. För formatet att ange en etikett se
BasicNewsRecipe.remove_tags (sida 310). Till exempel:
remove_tags_before = dict(id='content')
kommer ta bort alla etiketter före första elementet med id=”content”.
requires_version = (0, 6, 0)
Minimum version av calibre som behövs för detta recept
reverse_article_order = False
Omvänd ordning av artiklar i varje flöde
scale_news_images = None
Maximala dimensioner (w, h) att skala bilder till. Om scale_news_images_to_device är Sann så är detta
inställt på enhetens skärmmått för utskriftsprofil om det inte finns någon profil som, i vilket fall det är kvar
på oavsett värde den har tilldelats (standard None).
scale_news_images_to_device = True
Skala om bilder för att passa enhetens skärmmått satta av utdataprofilen. Ignoreras om ingen utdataprofil
är angiven.
simultaneous_downloads = 5
Antal samtidiga nedladdningar. Sätt till 1 om servern är petig. Automatisk reducerat till 1 om attr:BasicNewsRecipe.delay > 0
summary_length = 500
Maximal antal tecken i den korta beskrivningen
template_css = u’\n .article_date {\n color: gray; font-family: monospace;\n }\n\n .article_description {\n text-indent: 0
CSS som används för att utforma mallar, dvs de navigeringsfält och innehållsförteckningar. I stället för att
överrida denna variabel bör du använda extra_css i receptet för att anpassa utseende och beteende.
timefmt = ‘ [%a, %d %b %Y]’
Formatsträng för datum att visa på första sidan. Som standard: Day_Name, Day_Number Month_Name
Year
timeout = 120.0
Tidsbegränsning för hämta filer från servern i sekunder
title = u’Ok\xe4nd nyhetsk\xe4lla’
Titel att använda för e-bok
use_embedded_content = None
Normalt försöker vi gissa om ett flöde har hela artiklar inbäddade i den baserat på längden av inbäddat in120 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#Searching%20the%20Parse%20Tree
1.12. Konfigurera calibre utvecklingsmiljö
311
calibre Användarhandbok, Utgåva 2.22.0
nehåll. Om None, sedan standard används gissning. Om True då antar vi alltid flöden har inbäddat innehåll
och om‘ False‘ kan vi alltid utgå från flödet inte har inbäddat innehåll.
use_javascript_to_login = False
Om du sätter detta till Sann, så använder calibre javascript för att logga in på webbplatsen. Detta behövs
för vissa webbplatser som kräver användning av javascript för att logga in. Om du ställer in detta till
Sann måste du implementera javascript_login() (sida 305) metoden, för att göra den faktiska
inloggningen.
API dokumentation för tilläggsprogram
Definiera diverse abstrakta klasser som kan vara underklasser för att skapa kraftfulla tilläggsprogram. Dessa användbara klasser är:
•
•
•
•
•
•
•
•
•
•
Tilläggsprogram (sida 312)
FileTypePlugin (sida 314)
Metadatatillägg (sida 315)
Katalogtillägg (sida 315)
Metadata-nedladdningstillägg (sida 316)
Konverteringstillägg (sida 319)
Enhetsdrivrutiner (sida 321)
Användargränssnittsåtgärder (sida 331)
Inställningar Tillägg (sida 333)
Visningstillägg (sida 335)
Tilläggsprogram
class calibre.customize.Plugin(plugin_path)
Ett Calibre-tilläggsprogram. Användbara medlemmar inkluderar:
•self.plugin_path: Lagrar sökvägen till zip-filen som innehåller detta tillägg eller None om det
är ett inbyggt tillägg
•self.site_customization: Lagrar en anpassad inmatad sträng av användaren.
Metoder som ska överridas i underklasser
•initialize() (sida 313)
•customization_help() (sida 314)
Användbara metoder:
•temporary_file() (sida 314)
•__enter__()
•load_resources() (sida 313)
supported_platforms = []
Lista av platformar som detta tillägg fungerar på. Till exempel: [’windows’, ’osx’, ’linux’]
name = ‘Trivial Plugin’
Namnet på detta tillägg. Du måste ange något annan än Trivial Plugin för att den ska fungera.
version = (1, 0, 0)
Versionen på detta tillägg är n 3-tupel (major, minor, revision)
312
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
description = u’G\xf6r absolut ingenting’
En kort sträng som beskriver vad detta tillägg gör
author = u’Ok\xe4nd’
Författare av tillägget
priority = 1
När mer än ett tillägg finns för en filtyp, kommer tilläggen att köras i fallande prioritet dvs tillägg med
högre prioritet kommer köras först. Det högsta möjliga prioritet är sys.maxint. Grundinställning på
prioritet är 1.
minimum_calibre_version = (0, 4, 118)
Den tidigaste versionen av calibre som detta tillägg kräver
can_be_disabled = True
Om Falsk, kommer inte användaren kunna deaktivera detta tillägg. Använd med försiktighet.
type = u’Bas’
Typen av detta tillägg. Används för kategorisera tillägg i användargränsnittet
initialize()
Anropas en gång när calibre-tillägg initieras. Tillägg åter initieras varje gång ett nytt tillägg läggs till.
Observera också att om tillägg körs i en arbetsprocess, såsom att lägga till böcker, då kommer tillägg att
initieras för varje ny arbetsprocess.
Utför godtyckligt tilläggsinitialisering här, såsom att utvinna resurser från tilläggets zip-fil. Sökvägen till
zip-filen är tillgänglig som self.plugin_path.
Notera att self.site_customization är inte tillgänglig vid detta tillfälle.
config_widget()
Implementera denna metod och save_settings() (sida 313) i ditt tillägg för att anpassa en konfigurationsdialog, snarare än att förlita sig på en enkel strängbaserad standard anpassning.
Denna metod, om implementerad, måste returnera en QWidget. Denna grej kan ha en alternativ metod
validate() som inte tar några argument och anropas omedelbart efter användaren klickat OK. Förändringar
tillämpas om och bara om metoden returnerar Sann.
Om du av någon anledning inte kan utföra konfigurationen vid denna tid, returnera en tupel av två strängar
(meddelande, detaljer), kommer dessa att visas som en varningsdialogruta för användaren och processen
avbryts.
save_settings(config_widget)
Spara inställningarna som anges av användaren med config_widget.
Parametrar config_widget
–
Gränssnittskomponenten
config_widget() (sida 313).
som
returneras
av
do_user_config(parent=None)
Denna metod visar en inställningsdialogruta för detta tillägg. Den returnerar Sann om användaren klickar
på OK, annars Falsk. Ändringarna tillämpas automatiskt.
load_resources(names)
Om detta tillägg kommer i en ZIP-fil (användartillagt tillägg), kommer denna metod tillåta dig läsa in
resurser från ZIP-fil.
Till exempel att läsa in en bild:
pixmap = QPixmap()
pixmap.loadFromData(self.load_resources(['images/icon.png']).itervalues().next())
icon = QIcon(pixmap)
1.12. Konfigurera calibre utvecklingsmiljö
313
calibre Användarhandbok, Utgåva 2.22.0
Parametrar names – Förteckning över sökvägar till resurser i zip-filen som använder / som
avskiljare
Returnerar En ordlista av formen {namn:file_contents}. Några namn som inte finns i
zip-filen kommer inte att vara närvarande i ordlistan.
customization_help(gui=False)
Returnera en sträng som ger hjälp om hur du anpassar detta tillägg. Som standard upp en
NotImplementedError, vilket tyder på att tillägget inte kräver anpassning.
Om du åter-implementera den här metoden i din underklass, kommer användaren att bli ombedd att skriva
in en sträng som anpassning för detta tillägg. Den anpassning strängen kommer att finnas tillgänglig som
self.site_customization.
Platsanpassning skulle kunna vara vad som helst, till exempel vägen till en välbehövlig binär på användarens dator.
Parametrar gui – Om Sann returneras HTML-hjälp, annars returneras vanlig hjälptext.
temporary_file(suffix)
Returnera en fil-liknande objekt som är en temporär fil i filsystemet. Denna fil kommer att vara tillgänglig
även efter nedstängning och kommer endast att tas bort på vid avstängning. Använd name medlem av den
returnerade objektet för att komma åt den fullständiga sökvägen till den skapade temporärfilen.
Parametrar suffix – Suffixet att den temporära filen kommer att ha.
cli_main(args)
Denna metod är den viktigaste inkörsporten för tilläggskommandoradsgränssnitt. Det kallas när användaren utför calibre-debug -r “Tilläggsnamn”. Alla argument som skickas finns i variabeln args.
FileTypePlugin
class calibre.customize.FileTypePlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som är associerad med en viss uppsättning filtyper.
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra. Till exempel: {’lit’, ’mobi’, ’prc’}
on_import = False
Om Sann, körs detta tillägg när böcker läggs till i databasen
on_postimport = False
Om Sann, körs detta tillägg efter böcker läggs till i databasen
on_preprocess = False
Om Sann, körs detta tillägg alldeles innan konvertering
on_postprocess = False
Om Sann, körs detta tillägg efter konvertering på den sista filen som produceras av konvertering utdatatillägget.
run(path_to_ebook)
Kör tillägg. Måste genomföras i underklasser. Det bör utföra vad som behöver modifieras på e-boken och
returnera den absoluta sökvägen till den modifierade e-boken. Om inga ändringar behövs, bör den returnera sökvägen till den ursprungliga e-boken. Om ett fel inträffar bör det ge ett undantag. Genomförandet
returnerar som standard sökvägen till den ursprungliga e-boken.
Den modifierade e-bokfilen ska skapas med temporary_file() metod.
314
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Parametrar path_to_ebook – Absolut sökväg till e-boken.
Returnerar Absolut sökväg till den modifierade e-boken.
postimport(book_id, book_format, db)
Anropas efter import, dvs efter att bokfilen har lagts till i databasen.
Parametrar
• book_id – Databas id för tillagda boken.
• book_format – Den filtyp av boken som lades till.
• db – Biblioteksdatabas.
Metadatatillägg
class calibre.customize.MetadataReaderPlugin(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som implementerar läsning av metadata från en uppsättning filtyper.
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra Till exempel: set([’lit’, ’mobi’, ’prc’])
get_metadata(stream, type)
Returnerar metadata för filen som representeras av ström (en fil som objekt som stöder behandlingen). Signalera ett undantag när det finns ett fel med indata. :param type: Typen av fil. Garanterat för att vara en av de
uppgifter i file_types (sida 315). :return: A calibre.ebooks.metadata.book.Metadata
objekt
class calibre.customize.MetadataWriterPlugin(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som implementerar läsning av metadata från en uppsättning filtyper.
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra Till exempel: set([’lit’, ’mobi’, ’prc’])
set_metadata(stream, mi, type)
Ange metadata för filen som representeras av ström (en fil som objekt som stöder behandlingen). Signalera
ett undantag när det finns ett fel med indata. :param type: Typen av fil. Garanterat för att vara en av de uppgifter i file_types (sida 315). :param mi: A calibre.ebooks.metadata.book.Metadata
objekt
Katalogtillägg
class calibre.customize.CatalogPlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som implementerar en kataloggenerator.
file_types = set([])
Utdatafiltyp som detta tillägg ska köra Till exempel: “epub” eller “xml”
cli_options = []
CLI tolkningsalternativ som är specifika för detta tillägg, deklareras som namngiven tupel Alternativ:
1.12. Konfigurera calibre utvecklingsmiljö
315
calibre Användarhandbok, Utgåva 2.22.0
from collections import namedtuple
Option = namedtuple('Option', 'option, default, dest, help')
cli_options = [Option('--catalog-title',
default = 'My Catalog',
dest = 'catalog_title',
help = (_('Title of generated catalog. \nDefault:') + " '" +
'%default' + "'"))]
cli_options parsed in library.cli:catalog_option_parser()
initialize()
Om tillägget inte är ett inbyggt, kopiera tillägget .ui och .py filer från zip-filen till $TMPDIR. Tab kommer att genereras dynamiskt och läggas till dialogrutan Katalogalternativ i calibre.gui2.dialogs.catalog.py:Catalog
run(path_to_output, opts, db, ids, notification=None)
Kör tillägget. Måste implementeras i underklasser. Det ska generera katalogen i det format som anges i
file_types, återvänder den absoluta sökvägen till den genererade katalogfilen. Om ett fel inträffar bör det
signalera ett undantag.
Den genererade katalogfilen ska skapas med temporary_file() metod.
Parametrar
• path_to_output – Absoluta sökvägen till den genererade katalogfilen.
• opts – En ordlista av nyckelordsargument
• db – Ett LibraryDatabase2 objekt
Metadata-nedladdningstillägg
class calibre.ebooks.metadata.sources.base.Source(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
capabilities = frozenset([])
Uppsättning funktioner som stöds av detta tillägg. Användbara funktioner är: “identify”, “cover”
touched_fields = frozenset([])
Lista över metadatafält som potentiellt kan laddas ner från detta tillägg under identifieringsfasen
has_html_comments = False
Sätt detta till Sann om ditt tillägg returnerar HTML-formaterade kommentarer
supports_gzip_transfer_encoding = False
Sätta den här Sann innebär att webbläsaren objektet kommer att lägga Accept-Encoding: gzip på
alla förfrågningar. Detta kan snabba upp nedladdningar men se till att källan faktiskt stöder gzipöverföringskodning korrekt först
cached_cover_url_is_reliable = True
Buffrade omslags-URL:er kan ibland vara otillförlitliga (dvs nedladdningen kan misslyckas eller returnerad binär kan vara falsk. Om så är ofta fallet med denna källa sätt till Falsk
options = ()
En lista av Option objects. De kommer användas för automatiskt skapa konfigurationsgränssnittskomponenten för detta tillägg
config_help_message = None
En sträng som visas högst upp på gränssnittskomponenten för detta tillägg
316
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
can_get_multiple_covers = False
Om Sann kan denna källa returnera flera omslag för en viss fråga
auto_trim_covers = False
Om satt till Sann nedladdade omslag trimmas automatiskt av detta tillägg.
prefer_results_with_isbn = True
Om värdet är Sann, och denna källa returnerar flera resultat för en fråga, av vilka några har ISBN och av
vilka en del inte, så ignoreras resultaten utan ISBN
is_configured()
Returnerar Falsk om ditt tillägg måste konfigureras innan det kan användas. Till exempel kan det behöva
ett användarnamn/lösenord/API-nyckel.
get_author_tokens(authors, only_first_author=True)
Ta en lista över författare och returnera en lista med symboler som är användbara för en OCH sökfrågan.
Denna funktion försöker returnera stafettpinnar i ordningen mellannamn förnamn efternamn, genom att
anta att om ett komma är i författarens namn, är namnet i efternamn, andra namn bildningar.
get_title_tokens(title, strip_joiners=True, strip_subtitle=False)
Ta en titel och returnera en lista med symboler som är användbara för en OCH sökfrågan. Utesluter konnektiva (valfritt) och skiljetecken.
split_jobs(jobs, num)
Dela upp en lista med jobb i högst num grupper, så jämnt som möjligt
test_fields(mi)
Återgå till det första fältet från self.touched_fields som är null på mi objektet
clean_downloaded_metadata(mi)
Anropa den här metoden i ditt tillägg för att identifiera metod att normalisera metadata innan metadataobjektet läggs i result_queue. Du kan naturligtvis använda en anpassad algoritm som passar din metadatakälla.
get_book_url(identifiers)
Returnerar en 3-tupel eller None. 3-tupeln har formen: (identifier_type, identifier_value, URL). URLn är
webbadressen till boken som identifieras av identifierare vid denna källa. identifier_type, identifier_value
anger identifierare som motsvarar URL. Den här URLn måste vara bläddringsbar av en människa med en
webbläsare. Det är tänkt att ge en klickbar länk för användaren att enkelt besöka sidan böcker vid denna
källa. Om ingen URL hittas returneras None. Denna metod måste vara snabb, och konsekvent, så att bara
genomföra det om det är möjligt att konstruera URLn från ett känt schema av givna identifierare.
get_book_url_name(idtype, idval, url)
Returnerar ett läsbart namn från returvärdet för get_book_url().
get_book_urls(identifiers)
Åsidosätta denna metod om du vill återvända flera webbadresser för den här boken. Returnera en lista med
3-tupler. Som standard kallar metoden helt enkelt get_book_url() (sida 317).
get_cached_cover_url(identifiers)
Returnera buffrad omslags-URL för boken som identifieras av identifierare dict eller None om ingen sådan
URL finns.
Observera att den här metoden bara måste återvända validerade URL:er, dvs inte webbadresser som kan
resultera i en generisk omslagsbild eller inte hittat felet.
identify_results_keygen(title=None, authors=None, identifiers={})
Returnerar en funktion som används för att generera en nyckel som kan sortera metadataobjekt genom
deras relevans givet en sökfråga (titel, författare, kännetecken).
Dessa nycklar används för att sortera resultatet av ett anrop till identify() (sida 318).
1.12. Konfigurera calibre utvecklingsmiljö
317
calibre Användarhandbok, Utgåva 2.22.0
Mer information om standardalgoritmen, se: klass InternalMetadataCompareKeyGen (sida 318).
Åter implementera denna funktion i ditt tillägg om standardalgoritmen inte är lämplig.
identify(log, result_queue, abort, title=None, authors=None, identifiers={}, timeout=30)
Identifiera en bok med dess titel/författare/isbn/etc.
Om identifierare anges och ingen passning hittas och detta metadatakälla inte lagrar alla relaterade identifierare (till exempel alla ISBN i en bok), bör denna metod försöka igen med bara titel och författare
(förutsatt att de specificerades).
Om denna metadatakälla också ger omslag, ska den webbadress till omslaget buffras så att ett efterföljande
anrop till get omslags-API med samma ISBN/special identifierare inte behöver få omslags-URL igen.
Använd buffrings-API för detta.
Varje metadataobjekt infört i result_queue med denna metod måste ha en source_relevance attribut som är
ett heltal som anger i vilken ordning resultaten returnerades av metadatakällan för den här frågan. Detta
heltal kommer att användas av compare_identify_results(). Om ordningen är oviktigt, sätt den
till noll för varje resultat.
Se till att alla omslag/isbn korsreferensinformation mellanlagras innan Metadataobjektet läggs i result_queue.
Parametrar
• log – Ett logg-objekt, använd det för att överföra felsökningsinformation/fel
• result_queue – Ett resultat Kö, resultaten läggas in i den. Varje resultat är ett metadataobjekt
• abort – Om abort.is_set() returnerar Sann, avbryt vidare bearbetning och återvända så
snart som möjligt
• title – Titel av boken, kan vara None
• authors – En lista av författare av en bok, kan vara None
• identifiers – En ordlista av andra identifieringsuppgifter oftast {‘isbn’:‘1234...’}
• timeout – Tidsbegränsning i sekunder bör ingen nätverksbegäran dröja längre än timeout
Returnerar None om inga fel har inträffat, annars en Unicode-representation av felet som är
lämplig för att visa för användaren
download_cover(log, result_queue, abort, title=None, authors=None, identifiers={}, timeout=30,
get_best_cover=False)
Ladda ner ett omslag och sätta det i result_queue. Parametrarna alla har samma betydelse som för
identify() (sida 318). Put (jaget, cover_data) i result_queue.
Denna metod bör använda buffrade omslags-URLer för effektivitet när det är möjligt. När buffrat data inte
är närvarande, de flesta tillägg anropar helt enkelt identifiera och använder dess resultat.
Om parametern get_best_cover är Sann, och kan detta tillägg få flera omslag, det bör bara få det “bästa”.
class calibre.ebooks.metadata.sources.base.InternalMetadataCompareKeyGen(mi,
source_plugin,
title,
authors,
identifiers)
Generera en slags nyckel för jämförelse av relevansen av metadataobjekt, ges en sökfråga. Detta används endast
318
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
för att jämföra resultat från samma metadatakälla, inte mellan olika informationskällor.
Sorteringsnyckeln säkerställer att en stigande ordning sortera är en sortera fallande relevans.
Algoritmen är:
•Föredrar resultat som har åtminstone en identifierare samma som för frågan
•Föredrar resultat med en buffrad omslags-URL
•Föredrar resultat med alla tillgängliga fält ifyllda
•Föredrar resultat med samma språk som aktuella användarens gränssnittsspråk
•Föredrar resultat som är en exakt titelpassning på frågan
•Föredrar resultat med längre kommentarer (mer än 10% längre)
•Använd relevansen av resultatet som rapporterats av metadatakällans sökning engine
Konverteringstillägg
class calibre.customize.conversion.InputFormatPlugin(*args)
Baserad: calibre.customize.Plugin (sida 312)
InputFormatPlugins ansvarar för att omvandla ett dokument till HTML+OPF+CSS+ osv. Resultatet av konverteringen måste kodas i UTF-8. Den viktigaste åtgärden händer i convert() (sida 319).
file_types = set([])
Uppsättning med filtyper som detta tillägg ska köra Till exempel: set([’azw’, ’mobi’, ’prc’])
is_image_collection = False
Om Sann, genererar detta indatatillägg en samling bilder, en per HTML-fil. Detta kan ställas in dynamiskt, i
konverteringsmetoden om indatafilerna kan vara både bildsamlingar och icke-bildsamlingar. Om du ställer
in detta till Sann måste du implementera get_images () som returnerar en lista med bilder.
core_usage = 1
Antal CPU-kärnor används av detta tillägg Ett värde av -1 betyder att den använder alla tillgängliga kärnor
for_viewer = False
Om värdet är Sann, kommer indatatillägget specialbearbeta att göra sitt utdata lämpligt för visning
output_encoding = ‘utf-8’
Kodningen som detta indatatillägg skapar filer i. Ett värde på None betyder att kodningen är odefinierad
och måste upptäckas var för sig
common_options = set([<calibre.customize.conversion.OptionRecommendation object at 0x7f6febde9650>])
Alternativ som delas av alla indatatillägg. Överrids inte i underklasser. Användning options (sida 319)
istället. Varje alternativ skall vara en instans av OptionRecommendation.
options = set([])
Alternativ för att anpassa beteendet hos detta tillägg. Varje alternativ skall vara en instans av
OptionRecommendation.
recommendations = set([])
En uppsättning av 3-tupler av formen (option_name, recommended_value, recommendation_level)
get_images()
Returnerar en lista med absoluta sökvägar till bilderna, om detta indatatillägg representerar en bildsamling.
Listan med bilder är i samma ordning som bokryggen och innehållsförteckningen.
1.12. Konfigurera calibre utvecklingsmiljö
319
calibre Användarhandbok, Utgåva 2.22.0
convert(stream, options, file_ext, log, accelerators)
Denna metod måste implementeras i underklasser. Den måste returnera sökvägen till den skapade OPFfilen eller en OEBBook instans. All utdata skall ingå i den aktuella katalogen. Om detta tilläggskapar
filer utanför den aktuella katalogen som de måste raderas / markeras för borttagning innan denna metod
avslutas.
Parametrar
• stream – En fil som objekt som innehåller indatafilen.
• options – Alternativ för att anpassa konverteringen. Garanterat att ha attribut som motsvarar alla de alternativ som deklarerats av detta tillägg. Dessutom kommer det att ha en
utförlig attribut som tar intergralvärden från noll och uppåt. Högre siffror innebär att vara mer utförlig. En annan användbar egenskap är input_profile det är en instans av
calibre.customize.profiles.InputProfile.
• file_ext – Filtyp (utan . ) i indatafilen. Det är garanterat att vara en av de file_types stöds
av detta tillägg.
• log – Ett calibre.utils.logging.Log objekt. All utdata bör använda detta objekt.
• accelarators – En ordlista för olika uppgifter indatatillägg kan få lätt som skulle kunna
påskynda de efterföljande stegen i omvandlingen.
postprocess_book(oeb, opts, log)
Anropas för att tillåta indatatillägg för att utföra efterbehandling efter att boken har tolkats.
specialize(oeb, opts, log, output_fmt)
Anropas för att tillåta indatatillägg att specialisera den analyserade boken för en viss utdataformat. Anropas
efter postprocess_book och innan några transformer utförs på den analyserade boken.
gui_configuration_widget(parent, get_option_by_name, get_option_help, db, book_id=None)
Anroas för att skapa gränssnittskomponenten som används för att konfigurera detta tillägg i calibres GUI.
Gränssnittskomponenten måste vara en instans av PluginWidget klass. Se bygga indatatillägg för exempel.
class calibre.customize.conversion.OutputFormatPlugin(*args)
Baserad: calibre.customize.Plugin (sida 312)
UtdataFormatTillägg är ansvariga för att omvandla ett OEB-dokument (OPF + HTML) till e-bokutdata.
OEB-dokumentet kan antas vara kodade i UTF-8. Den viktigaste åtgärden händer i convert() (sida 320).
file_type = None
Filtypen (typ utan ledande punkt) att detta tillägg matar ut
common_options = set([<calibre.customize.conversion.OptionRecommendation object at 0x7f6febde97d0>])
Alternativ som delas av alla indatatillägg. Överrids inte i underklasser. Användning options (sida 320)
istället. Varje alternativ skall vara en instans av OptionRecommendation.
options = set([])
Alternativ för att anpassa beteendet hos detta tillägg. Varje alternativ skall vara en instans av
OptionRecommendation.
recommendations = set([])
En uppsättning av 3-tupler av formen (option_name, recommended_value, recommendation_level)
convert(oeb_book, output, input_plugin, opts, log)
Återge innehållet i oeb_book (som är en instans av calibre.ebooks.oeb.OEBBook ) till filen som
anges av utdata.
Parametrar
320
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• output – Antingen en fil som ett objekt eller en sträng. Om det är en sträng är sökvägen
till en katalog som kan eller inte kan existera. Utdatatillägget ska skriva utdata till den
katalogen. Om det är en fil som objekt, bör utdatatillägget skriva utdata i filen.
• input_plugin – Indatatillägget som användes i början av omvandlingsrörledningen.
• opts – Konverteringsalternativ. Garanterat att ha attribut som motsvarar OptionRecommendations av detta tillägg.
• log – Loggern. Skriv ut felsöknings/infomeddelanden etc. med hjälp av denna.
specialize_css_for_output(log, opts, item, stylizer)
Kan användas för att göra ändringar i css under CSS tillplattningsprocessen.
Parametrar
• item – Elementet (HTML-fil) som bearbetas
• stylizer – Ett stiliseringsobjekt som innehåller de tillplattade stilarna för objektet. Du kan
få stilen för alla element av stylizer.style(element).
gui_configuration_widget(parent, get_option_by_name, get_option_help, db, book_id=None)
Anropas för att skapa gränssnittskomponent som används för att konfigurera detta tillägg i calibres GUI.
Gränssnittskomponenten måste vara en instans av PluginWidget klass. Se inbyggda utdatatillägg för exempel.
Enhetsdrivrutiner
Basklass för alla drivrutiner är DevicePlugin (sida 321). Men om din enhet exponerar sig som en USBMS-enhet
till operativsystemet, bör du använda USBMS-klassen i stället eftersom den genomför all logik som behövs för att
stödja dessa typer av enheter.
class calibre.devices.interface.DevicePlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Definierar gränssnitt som ska implementeras av bakomliggande system som kommunicerar med en e-bokläsare.
FORMATS = [’lrf’, ‘rtf’, ‘pdf’, ‘txt’]
Ordnad lista över format som stöds
VENDOR_ID = 0
VENDOR_ID kan vara antingen ett heltal, en lista av heltal eller ett ordlista om det är ett ordlista, måste
det vara en ordlista av ordlistor, på formen:
{
integer_vendor_id : { product_id : [list of BCDs], ... },
...
}
PRODUCT_ID = 0
Ett heltal eller en lista med heltal
BCD = None
BCD kan vara antingen None att inte skilja mellan enheter baserade på BCD, eller det kan vara en lista
över BCD-numren för alla enheter som stöds av denna drivrutin.
THUMBNAIL_HEIGHT = 68
Höjd för omslagsikoner på enheten
1.12. Konfigurera calibre utvecklingsmiljö
321
calibre Användarhandbok, Utgåva 2.22.0
THUMBNAIL_COMPRESSION_QUALITY = 75
Bredd för omslagsikoner på enheten. Ställa detta kommer att tvinga bilderna till denna storlek, inte med
bibehållet bildförhållande. Om den inte är inställd, då kommer bildförhållandet att bevaras och omslagsikoner inte skall vara högre än THUMBNAIL_HEIGHT kompressionskvalitet för omslagsikoner. Ställ in
denna närmare 100 för att få bättre kvalitet och omslagsikoner med färre komprimeringsartefakter. Naturligtvis blir omslagsikoner större också.
WANTS_UPDATED_THUMBNAILS = False
Ställ in den här till Sann om enheten stödjer uppdatering av omslagsikoner under sync_booklists. Ställ in
den till Sann kommer att be device.py att uppdatera omslagsikoner under bokpassning
CAN_SET_METADATA = [’title’, ‘authors’, ‘collections’]
Huruvida metadata om böckerna kan ställas in via GUI.
CAN_DO_DEVICE_DB_PLUGBOARD = False
Hurvida enheten kan hantera device_db metadatakontrollpaneler
path_sep = ‘/’
Sökvägsseparator för sökvägar till böcker på enheten
icon = ‘/home/kovid/work/calibre/resources/images/reader.png’
Ikon för denna enhet
UserAnnotation
alias för Annotation
OPEN_FEEDBACK_MESSAGE = None
Gränssnittet visar detta som ett meddelande om inte None. Användbart om öppning kan ta lång tid
VIRTUAL_BOOK_EXTENSIONS = frozenset([])
Uppsättning av typer som är “virtuella böcker” på enheten och därför kan inte visas/sparas/läggas till
biblioteket Till exempel: frozenset([’kobo’])
NUKE_COMMENTS = None
I fall det ska förstöra kommentarer i kopian av boken som skickas till enheten. Om inte None bör detta
vara kort sträng som kommentarerna kommer att ersättas av.
MANAGES_DEVICE_PRESENCE = False
Om Sann indikerar att denna drivrutin helt hanterar enhetsupptäckt, utmatning och så vidare. Om du ställer
in detta till Sann, måste du implmentera detect_managed_devices och debug_managed_device_detection
metoder. En drivrutin med denna uppsättning till Sann är ansvarig för upptäckt av enheter, hantering av en
svartlista över enheter, en förteckning över de utmatade enheter och så vidare. calibre kommer regelbundet kalla detect_managed_devices() metoden och om det returnerar en detekterad enhet, kommer calibre
anropa open(). open() kommer att anropas varje gång en enhet returneras även om tidigare anrop för att
open() misslyckades, därför måste drivrutin bibehålla sin egen svartlista över misslyckade enheter. Likaså
vid utmatning, kommer calibre anropa eject() och sedan antar nästa anrop till detect_managed_devices()
returnerar None, kommer det att anropa post_yank_cleanup().
SLOW_DRIVEINFO = False
Om satt Sannt, kommer calibre anropa get_driveinfo() (sida 324) metoden efter boklistor har lästs
för att få “driveinfo”.
ASK_TO_ALLOW_CONNECT = False
Om värdet är Sann, kommer calibre fråga användaren om de vill hantera enheten med calibre, första gången
den upptäcktes. Om du ställer in detta till Sann måste du implementera get_device_uid() (sida 327)
och ignore_connected_device() (sida 327) och get_user_blacklisted_devices() (sida 327) och set_user_blacklisted_devices() (sida 327)
user_feedback_after_callback = None
Ställ in den till en ordlista av formen {‘title’:title, ‘msg’:msg, ‘det_msg’:detailed_msg} låta calibre ta fram
322
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
ett meddelande till användaren efter några återanrop körs (för närvarande endast upload_books). Var noga
med att inte spamma användaren med för många meddelanden. Denna variabel kontrolleras efter varje
anrop, så att bara den sätts när du verkligen behöver.
is_usb_connected(devices_on_system, debug=False, only_presence=False)
Returnera Sann, device_info om en enhet som hanteras av detta tillägg är ansluten.
Parametrar devices_on_system – Förteckning över anslutna enheter
detect_managed_devices(devices_on_system, force_refresh=False)
Anropas bara om MANAGES_DEVICE_PRESENCE är Sann.
Sök efter enheter som denna drivrutin kan hantera. Ska returnera en enhetsobjekt om en enhet hittas.
Detta syfte kommer att vidarebefordras till open() metoden som connected_device. Om ingen enhet hittas,
retruneras None. Den returnerade objektet kan vara vad som helst, calibre använder inte den, det skickas
bara till open().
Denna metod kallas periodiskt av användargränssnittet, så se till att den inte är för resurskrävande. Använd
en buffert för att inte behöva skanna systemet.
Parametrar
• devices_on_system – Sätts om USB-enhet hittas i systemet
• force_refresh – Om Sann och drivrutinen använder en buffert för att förhindra upprepad
skanning måste bufferten vara tömd.
debug_managed_device_detection(devices_on_system, output)
Anropas bara om MANAGES_DEVICE_PRESENCE är Sann.
Bör skriva information om enheterna som upptäckts på systemet till utdata, vilket är en fil som objekt.
Ska returnera Sann om en enhet upptäcktes och öppnades, annars Falsk.
reset(key=’-1’, log_packets=False, report_progress=None, detected_device=None)
Parametrar
• key – Nyckel för att låsa upp enhet
• log_packets – Om Sann loggas paketströmmen till/från enheten
• report_progress – Funktion som anropas med en procent (%) progress (tal mellan 0 och
100) för olika uppgifter om det kallas med -1 som innebär att uppgiften inte har några
progressinformation
• detected_device – Enhetsinformation från enhetens skanner
can_handle_windows(device_id, debug=False)
Valfri metod för att utföra ytterligare kontroller på en enhet för att se om den här drivrutinen kan hantera
det. Om det inte är det ska returnera Falsk. Denna metod anropas endast efter leverantör, produkt-ID och
bcd har passats, så det kan göra några relativt tidskrävande kontroller. Genomförandet standard returnerar
Sann. Denna metod kallas bara i Windows. Se även can_handle() (sida 323).
Parametrar device_info – På windows en enhets ID-sträng. På Unix en tupel av
(vendor_id, product_id, bcd).
can_handle(device_info, debug=False)
Unix-version av can_handle_windows() (sida 323)
Parametrar device_info – Är en tupel av (VID, pid, BCD, tillverkare, produkt, serienummer)
open(connected_device, library_uuid)
Utför specifik initiering på alla enheter. Anropas efter att enheten identifieras men innan några andra funktioner kommunicerar med enheten. Till exempel: För enheter som presenterar sig
1.12. Konfigurera calibre utvecklingsmiljö
323
calibre Användarhandbok, Utgåva 2.22.0
som USB-masslagringsenheter, skulle denna metod vara ansvarig för montering av enheten eller om enheten har en automatisk montering, för att ta reda på var det har monterats. Metoden
calibre.devices.usbms.device.Device.open() har en implementering av denna funktion
som bör tjäna som ett gott exempel för USB-masslagringsenheter.
Denna metod kan indikera ett OpenFeedback-undantag för att visa ett meddelande till användaren.
Parametrar
• connected_device – Den enhet som vi försöker öppna. Det är en tupel av (leverantörs id,
produkt-id, BCD, tillverkarens namn, produktnamn, enhetens serienummer). Vissa enheter
har inget serienummer och i Windows är endast de tre första fälten närvarande, resten är
None.
• library_uuid – UUID för det aktuella calibre-biblioteket. Kan vara None om det inte finns
något bibliotek (till exempel när det används från kommandoraden).
eject()
Avmontera/mata ut enheten från OS. Detta innebär inte kontroll om det finns väntande jobb som behöver
kommuniceras med enheten.
OBS: Att denna metod kan inte kallas på samma tråd som resten av enhetsmetoderna.
post_yank_cleanup()
Anropas om användaren rycker enheten utan att mata ut det först.
set_progress_reporter(report_progress)
Sätter en funktion för att rapportera progressinformationen.
Parametrar report_progress – Funktion som anropas med en procent (%) progress (tal mellan
0 och 100) för olika uppgifter om det kallas med -1 som innebär att uppgiften inte har några
progressinformation
get_device_information(end_session=True)
Fråga enheten efter enhetsinformation . Se L{DeviceInfoQuery}.
Returnerar (enhetsnamn, enhetsversion, programvaruversion på enheten, MIME-typ) Tupeln
kan eventuellt ha ett femte element, som är en enhetsinformationsordlista. Se usbms.driver
för ett exempel.
get_driveinfo()
Returnera driveinfo-ordlistan. Vanligtvis anropas från get_device_information(), men om laddning av driveinfo är långsam för denna drivrutin, så borde den sätta SLOW_DRIVEINFO. I detta fall kommer den
här metoden anropas av calibre efter bokenlistor har laddats. Observera att den inte anropas på enhetens
processtråd, så att drivrutinen ska buffra driveinfo i books() och funktionen ska returnera det buffrade datat.
card_prefix(end_session=True)
Returnera en 2-elementlista med prefixet till sökvägar på korten. Om inget kort finns sätts Noneför kortets
prefix. Till exempel (‘/place’, ‘/place2’) (None, ‘place2’) (‘place’, None) (None, None)
total_space(end_session=True)
Få total utrymme på monteringspunkter:
1. Inbyggt minne
2. Minneskort A
3. Minneskort B
Returnerar En 3-elementlista med totalt utrymme i oktetter av (1, 2, 3). Om en viss enhet inte
har någon av dessa platser den ska visa 0.
324
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
free_space(end_session=True)
Få ledigt utrymme på monteringspunkter:
1. Inbyggt minne
2. Kort A
3. Kort B
Returnerar En 3-elementlista med fritt utrymme i oktetter av (1, 2, 3). Om en viss enhet inte
har någon av dessa platser den ska returnera -1.
books(oncard=None, end_session=True)
Returnera en lista av e-böcker på enheten.
Parametrar oncard – Om “carda” eller “cardb” returnera en lista med e-böcker på den specifika
minneskortet, annars returnera lista med e-böcker i huvudminnet av enhet. Om ett kort är
specificerad och inga böcker finns på kortet returnera den tomma listan.
Returnerar En BookList.
upload_books(files, names, on_card=None, end_session=True, metadata=None)
Ladda upp en lista med böcker till enheten. Om en fil redan finns på enheten, ska den bytas ut. Denna
metod bör signalera ett FreeSpaceError om det inte finns tillräckligt med ledigt utrymme på enheten.
Texten till FreeSpaceError måste innehålla ordet “kort” om on_card inte None annars måste innehålla
ordet “minne”.
Parametrar
• files – En lista av sökvägar
• names – En lista med filnamn som böckerna skulle ha när väl uppladdade till enheten.
len(names) == len(files)
• metadata – Om inte None, det är en lista av Metadata objekt. Tanken är att använda metadata för att avgöra var på enheten att lägga boken. len(metadata) == len(files).
Bortsett från det vanliga omslaget (sökväg för omslaget), kan det också finnas ett omslagsikonattribut, som ska användas i stället. Omslagsikonattributet är på formen (bredd, höjd,
cover_data som jpeg).
Returnerar En lista med 3-elements tupler.
add_books_to_metadata() (sida 325).
Listan
är
tänkt
att
skickas
till
classmethod add_books_to_metadata(locations, metadata, booklists)
Lägg till platser till boklistor. Denna funktion får inte kommunicera med enheten.
Parametrar
• locations – Resultat av ett anrop till L{upload_books}
• metadata – Lista av Metadata objects, samma som för upload_books() (sida 325).
• booklists – En tupel innehåller resultatet av anrop till (books(oncard=None)(),
books(oncard=’carda’)(), :meth‘books(oncard=’cardb’)‘).
delete_books(paths, end_session=True)
Ta bort böcker i sökvägar på enhet.
classmethod remove_books_from_metadata(paths, booklists)
Ta böcker från metadatalistan. Denna funktion får inte kommunicera med enheten.
Parametrar
1.12. Konfigurera calibre utvecklingsmiljö
325
calibre Användarhandbok, Utgåva 2.22.0
• paths – sökvägar till böcker på enheten.
• booklists – En tupel innehåller resultatet av anrop till (books(oncard=None)(),
books(oncard=’carda’)(), :meth‘books(oncard=’cardb’)‘).
sync_booklists(booklists, end_session=True)
Uppdatera metadata på enhet.
Parametrar booklists
–
En
tupel
till
(books(oncard=None)(),
:meth‘books(oncard=’cardb’)‘).
innehåller
resultatet
av
anrop
books(oncard=’carda’)(),
get_file(path, outfile, end_session=True)
Läs filen på sökväg på enheten och skriva den till utfil.
Parametrar outfile – filobjekt som sys.stdout eller resultatet av ett open() (sida 323)
anrop.
classmethod config_widget()
Bör returnera en QWidget-gränssnittskomponent. QWidget-gränssnittskomponent innehåller inställningarna för enhetens gränssnitt
classmethod save_settings(settings_widget)
Ska spara inställningar till disk. Tar gränssnittskomponenten som skapas i config_widget() (sida 326) och sparar alla inställningar till disk.
classmethod settings()
Ska returnera ett opts-objekt. Den opts-objektet bör ha minst ett attribut format_map vilket är en ordnad
lista av format för enheten.
set_plugboards(plugboards, pb_func)
ge drivrutin den aktuella uppsättningen kontrollpaneler och en funktion för att välja kontrollpanel. Denna
metod kallas omedelbart före add_books och sync_booklists.
pb_func är anropbar med följande signatur: def pb_func(device_name, format, plugboards)
Du ger den nuvarande enheten namn (antingen klassnamnet eller DEVICE_PLUGBOARD_NAME), det
format du är intresserad av (en “riktig” format eller “device_db”), och de kontrollpaneler (du fick dem från
set_plugboards, på samma ställe som du fick denna metod).
Returnerar Ingen eller en kontrollpanelinstans.
set_driveinfo_name(location_code, name)
Ange enhetens namn i driveinfo-filen till “namn”. Inställningen kvarstår tills filen återskapas eller namnet
ändras igen.
Icke-diskenheter bör genomföra
get_device_information() metoden.
denna
metod
baserad
på
platskoder
som
returneras
av
prepare_addable_books(paths)
Givet en lista över sökvägar, returnerar en annan lista med sökvägar. Dessa sökvägar pekar på adderbara
versioner av böckerna.
Om det finns ett fel vid förberedning av en bok, så i stället för en sökväg, den position i den returnerade
listan för att boken ska vara en tre tupel: (original_path, undantaget instans, återsöknings)
startup()
Anropas när calibre starar enheten. Gör godtycklig initiering som krävs. Notera att flera instanser av klassen kan instansieras, och sålunda __init__ kan anropas flera gånger, men bara en instans kommer att ha
den här metoden anropad. Denna metod kallas på enhetens processtråd, inte GUI-tråden.
326
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
shutdown()
Anropas när calibre stängs, antingen för gott eller är under förberedelser för att starta om. Gör den sanering
som krävs. Denna metod kallas på enhetens processtråd, inte GUI-tråden.
get_device_uid()
Måste returnera ett unikt ID för ansluten enhet (detta kallas direkt efter ett lyckat anrop till open()). Du
måste implementera den här metoden om du sätter ASK_TO_ALLOW_CONNECT = Sann
ignore_connected_device(uid)
Borde ignorera enheten som identifieras av uid (resultatet av ett anrop till get_device_uid()) i framtiden.
Du måste implementera den här metoden om du sätter ASK_TO_ALLOW_CONNECT = Sann. Observera
att denna funktion kallas direkt efter open(), så om open() buffrar vissa tillstånd, bör drivrutinen återställa
det tillståndet.
get_user_blacklisted_devices()
Returnera lista över enheten uid till eget namn på alla enheter som användaren begärt att ignorera.
set_user_blacklisted_devices(devices)
Ställ en lista över enhets uid:er som ska ignoreras av denna drivrutin.
specialize_global_preferences(device_prefs)
Implementera denna metod om din enhet vill överrida en viss preferens. Du måste se till att alla anrops platser som vill ha en inställning som kan överridas använder device_prefs [’något’] istället för prefs[’något’].
Din metod ska anropa device_prefs.set_overrides(pref = val, pref = val, ...). För närvarande används för:
metadata management (prefs[’manage_device_metadata’])
set_library_info(library_name, library_uuid, field_metadata)
Implementera den här metoden om du vill ha information om den aktuella calibre-biblioteket. Denna metod
kallas vid uppstart och när calibres biblioteket ändras när den är ansluten.
is_dynamically_controllable()
Anropas av enhetshanteraren vid start av tillägg. Om den här metoden returnerar en sträng, då a) den
stödjer enhetshanteraren dynamiska kontroll gränssnitt, och b) det namnet ska användas när man talar med
tillägget.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
start_plugin()
Denna metod anropas för att starta tillägget. Tillägget ska börja acceptera enhetsanslutningar men det gör
det. Om tillägget redan acceptera anslutningar, så gör ingenting.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
stop_plugin()
Denna metod kallas för att stoppa tillägget. Tillägget bör inte längre acceptera anslutningar, och bör städa upp efter sig. Det är troligt att denna metod ska anropa avstängning. Om tillägget redan slutat emot
anslutningar, så gör ingenting.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
get_option(opt_string, default=None)
Returnera värdet av optionen indikerad av opt_string. Den här metoden kan anropas när tillägget inte
startats. Returnera None om alternativet inte finns.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
1.12. Konfigurera calibre utvecklingsmiljö
327
calibre Användarhandbok, Utgåva 2.22.0
set_option(opt_string, opt_value)
Ange värdet av alternativ som indikeras av opt_string. Den här metoden kan anropas när tillägget inte
startats.
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
is_running()
Returnera Sann om tillägg startas, annars falsk
Den här metoden kan anropas i GUI-processtråden. En drivrutin som implementerar den här metoden
måste vara trådsäkert.
synchronize_with_db(db, book_id, book_metadata, first_call)
Anropas under bokenpassning när en bok på enheten jämförs med en bok i calibres db. Metoden är ansvarig
för synkronisering av data från enheten till calibres db (om det behövs).
Metoden ska returnera en två-värd tupel. Det första värdet är en uppsättning av calbres bok-ids som ändras
om calbres databas ändrades eller None om databasen inte ändrades. Om det första värdet är en tom mängd
så uppdateras metadata för boken på med calbres metadata och ges tillbaka till enheten, men ingen GUIuppdatering av den boken sker. Detta är användbart när calbres data är korrekt, men måste skickas till
enheten.
Det andra värdet är i sig en 2-värdes tupel. Det första värdet i tupeln anger om ett bokformat ska skickas
till enheten. Avsikten är att möjliggöra kontroll av att boken på enheten är densamma som boken i calibre.
Värdet måste vara None om ingen bok ska skickas, annars returnera basfilnamnet på enheten (en sträng
som foobar.epub). Var noga med att inkludera en förlängning i namnet. Enhets delsystem kommer att
bygga ett send_books jobb för alla böcker med inte- None returnerade värden. Obs: annat än att senare
hämta filtyp, är namnet ignoreras i de fall där enheten använder en mall för att skapa filnamnet, vilket de
flesta gör. Det andra värdet i den returnerade tupeln anges om formatet är framtidsdaterad. Returnera Sann
om det är, annars returnera Falsk. Calibre visar en dialogruta där användaren listar alla framtida daterade
böcker.
Extremt viktigt: den här metoden anropas på GUI-processtråden. Den måste vara trådsäker i förhållande
till enhetens huvudtråd.
book_id: calibres id för boken i databasen. book_metadata: Metadataobjektet för boken som kommer från
enheten. first_call: Sann om det är första anropet under en synkronisering, Falsk annars
class calibre.devices.interface.BookList(oncard, prefix, settings)
Baserad: list
En lista med böcker. Varje bokobjektet måste ha fälten
1.titel
2.författare
3.storlek (filstorlek av boken)
4.datumtid (en UTC-tids tupel)
5.sökväg (sökväg på enheten till boken)
6.omslagsikon (kan vara None) omslagsikon är antingen ett str/bytes-objekt med bilddata eller det borde ha
ett attribut image_path som lagrar en absolut (plattformsberoende) sökvägen till bilden
7.etiketter (en lista med strängar, kan vara tom).
supports_collections()
Returnera Sann om enheten stöder kollektioner för denna boklista.
328
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
add_book(book, replace_metadata)
Lägg boken till boklista. Avsikten är att behålla alla enheters interna metadata. Returnerar Sann om boklistor måste synkroniseras
remove_book(book)
Ta bort en bok från boklista. Rätta en enhets metadata samtidigt
get_collections(collection_attributes)
Returnera en ordlista av samlingar som skapats från collection_attributes. Varje post i ordlistan är på formen kollektionsnamn:[lista med böcker]
Listan över böcker sorterad efter boktitel, förutom samlingar som skapats från serien, i vilket fall series_index används.
Parametrar collection_attributes – En lista med attribut av bokobjektet
USB-masslagringsbaserade enheter Basklass för sådan enhet är calibre.devices.usbms.driver.USBMS
(sida 330). Denna klass ärver i sin tur en del av dess funktioner från sina baser, dokumenterad nedan. En typisk grund
USBMS baserad drivrutin ser ut så här:
from calibre.devices.usbms.driver import USBMS
class PDNOVEL(USBMS):
name = 'Pandigital Novel device interface'
gui_name = 'PD Novel'
description = _('Communicate with the Pandigital Novel')
author = 'Kovid Goyal'
supported_platforms = ['windows', 'linux', 'osx']
FORMATS = ['epub', 'pdf']
VENDOR_ID
PRODUCT_ID
BCD
= [0x18d1]
= [0xb004]
= [0x224]
VENDOR_NAME = 'ANDROID'
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = '__UMS_COMPOSITE'
THUMBNAIL_HEIGHT = 144
EBOOK_DIR_MAIN = 'eBooks'
SUPPORTS_SUB_DIRS = False
def upload_cover(self, path, filename, metadata):
coverdata = getattr(metadata, 'thumbnail', None)
if coverdata and coverdata[2]:
with open('%s.jpg' % os.path.join(path, filename), 'wb') as coverfile:
coverfile.write(coverdata[2])
class calibre.devices.usbms.device.Device(plugin_path)
Baserad:
calibre.devices.usbms.deviceconfig.DeviceConfig,
calibre.devices.interface.DevicePlugin (sida 321)
Denna klass ger logik som är gemensam för alla drivrutiner för enheter som exporterar själva som USBmasslagringsenheter. Ger implementationer för montering/utmatning av USBMS-enheter på alla plattformar.
WINDOWS_MAIN_MEM = None
Sträng identifierar huvudminne på enheten i Windows PnP id strängar Detta kan vara None, string, lista
med string eller sammanställad regex
1.12. Konfigurera calibre utvecklingsmiljö
329
calibre Användarhandbok, Utgåva 2.22.0
WINDOWS_CARD_A_MEM = None
Sträng som identifierar det första kortet av anordningen i Windows PnP id strängar Detta kan vara None,
string, lista med string eller sammanställad regex
WINDOWS_CARD_B_MEM = None
Sträng som identifierar det andra kortet av anordningen i Windows PnP id strängar Detta kan vara None,
string, lista med string eller sammanställad regex
OSX_MAIN_MEM_VOL_PAT = None
Används av den nya drivrutinens upptäckt att klargöra huvudminnet från minneskort. Bör vara ett reguljärt
uttryck som passar huvudminnets monteringspunkt tilldelad av OS X
MAX_PATH_LEN = 250
Den maximala längden av sökvägar som skapats på enheten
NEWS_IN_FOLDER = True
Lägg nyheter i en egen mapp
windows_sort_drives(drives)
Anriopas för att klargöra huvudminnet och minneskortet för enheter som inte skiljer mellan dem på grundval av WINDOWS_CARD_NAME. För t.ex .: The EB600
sanitize_callback(path)
Tillbakaanrop för att låta enskilda drivrutiner överrida sökvägens sanering som används av
create_upload_path().
filename_callback(default, mi)
Tillbakaanrop för att låta enskilda
create_upload_path().
drivrutiner
ändra
standard
filnamnet
fastställt
av
sanitize_path_components(components)
Utför någon enhetsspecifik sanering på sökvägskomponenter för filer som laddas upp till enheten
get_annotations(path_map)
Lösa upp path_map till annotation_map filer som finns på enheten
add_annotation_to_library(db, db_id, annotation)
Lägg en anteckning till calibres biblioteket
class calibre.devices.usbms.cli.CLI
class calibre.devices.usbms.driver.USBMS(plugin_path)
Baserad: calibre.devices.usbms.cli.CLI (sida 330), calibre.devices.usbms.device.Device
(sida 329)
Basklass för alla USBMS-enheter. Implementerar logiken för att skicka/få/uppdatera metadata/buffra metadata
/ etc.
upload_cover(path, filename, metadata, filepath)
Ladda upp bokomslag till enheten. Grundinställning gör implementationen ingenting.
Parametrar
• path – Den fullständiga sökvägen till katalogen där den tillhörande boken är placerad.
• filename – Namnet på bokfilen utan filtyp.
• metadata – metadata som hör till boken. Använd metadata.thumbnail för omslag
• filepath – Fullständig sökväg till e-bokfilen
classmethod normalize_path(path)
Returnera sökväg med plattformsursprungliga sökvägsseparatorer
330
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Användargränssnittsåtgärder
Om du lägger till ditt eget tillägg i en zip-fil, ska du skapa underklass både till InterfaceActionBase och InterfaceAction. Den load_actual_plugin() metod för din InterfaceActionBase underklass måste returnera ett instansierat
objekt för din InterfaceBase underklass.
class calibre.gui2.actions.InterfaceAction(parent, site_customization)
Baserad: PyQt5.QtCore.QObject
Ett tillägg som representerar en “åtgärd” som kan tas i det grafiska användargränssnittet. Alla objekt i verktygsfältet och snabbmenyer implementerar av dessa tillägg.
Observera att den här klassen är basklassen för dessa tillägg, dock att integrera tillägg med calibre tilläggssystem,
måste du göra en omslagsklass som refererar till det faktiska tillägget. Se calibre.customize.builtins
modul för exempel.
Om två InterfaceAction objekt har samma namn, tar den med högre prioritet företräde.
Underklasser bör implementera genesis(), library_changed(), location_selected()
shutting_down() och initialization_complete() metoder.
När initierats, har detta tillägg tillgång till de calibres huvud-GUI via gui medlem. Du kan komma åt andra
tillägg med namn, till exempel:
self.gui.iactions['Save To Disk']
För att komma åt själva tillägget, använd interface_action_base_plugin attribut, detta attribut blir
först tillgänglig efter det tillägget har initierats. Användbart om du vill använda metoder från tilläggklassen som
do_user_config().
QAction anges av action_spec skapas automatiskt och blir tillgänglig via self.qaction.
name = ‘Implement me’
Tilläggnamnet. Om två tillägg med samma namn är närvarande, tar en med högre prioritet företräde.
priority = 1
TIlläggets prioritet. Om två tillägg med samma namn är närvarande, tar en med högre prioritet företräde.
popup_type = 1
Extrafönstermenytypen när detta tillägg läggs till ett verktygsfält
auto_repeat = False
Huruvida denna åtgärd bör automatiskt upprepas när dess kortkommando hålls nere.
action_spec = (‘text’, ‘icon’, None, None)
Av formen: (text, icon_path, verktygstips, kortkommando) ikonen, verktygstips och kortkommandot kan
vara None genväg måste vara en sträng, None eller tupel av genvägar. Om None är ett kortkommando
som motsvarar åtgärden inte är registrerad. Om du skickar en tom tabellrad, då registreras genvägen utan
bindande standardnyckel.
action_add_menu = False
Om Sann, skapas en meny automatiskt och läggs till self.qaction
action_menu_clone_qaction = False
Om Sann, läggs en klon av self.qaction till menyn för self.qaction Om du vill att texten i denna åtgärd att
vara annorlunda än self.qaction, ställa in den här variabeln till den nya texten
dont_add_to = frozenset([])
Uppsättning av platser som denna åtgärd får inte tilläggas. Se all_locations för en lista över möjliga
platser
1.12. Konfigurera calibre utvecklingsmiljö
331
calibre Användarhandbok, Utgåva 2.22.0
dont_remove_from = frozenset([])
Uppsättning av platser som denna åtgärd inte får ta bort. Se all_locations för en lista över möjliga
platser
action_type = ‘global’
Typ av åtgärd “nuvarande” innebär, agerar på den aktuella vyn “global”: en åtgärd som inte verkar på den
aktuella vyn, utan snarare på calibre som helhet
accepts_drops = False
Om Sann, kommer detta InterfaceAction att ha möjlighet att interagera med dra och släpp händelser. Se
de metoder, accept_enter_event(), :meth‘:accept_drag_move_event‘, drop_event() för mer
information.
accept_enter_event(event, mime_data)
Metoden ska returnera sant om och endast detta gränssnitt åtgärd kan hantera dra händelsen. Anropa inte
acceptera/ignorera vid händelsen, som kommer att tas om hand av den calibres UI
accept_drag_move_event(event, mime_data)
Metoden ska returnera sant om och endast detta gränssnitt åtgärd kan hantera dra händelsen. Anropa inte
acceptera/ignorera vid händelsen, som kommer att tas om hand av den calibres UI
drop_event(event, mime_data)
Denna metod bör utföra några användbara åtgärder och returnera Sann om endast om detta gränssnittsåtgärd kan hantera händelsen “drop”. Anropa inte acceptera/ignorera vid händelsen, som kommer att tas om
hand av den calibres UI. Du ska inte utföra blockering/långa operationer i denna funktion. Istället avger en
signal eller använd QTimer.singleShot och returnera snabbt tillbaka. Se de inbyggda åtgärder för exempel.
create_menu_action(menu, unique_name, text, icon=None, shortcut=None, description=None,
triggered=None, shortcut_name=None)
Bekväm metod för att enkelt lägga handlingar till en QMenu. Returnerar den skapade QAction, denna
åtgärd har ett extra attribut calibre_shortcut_unique_name som om den inte None avser det unika namn
under vilket denna åtgärd är registrerad med tangentbordsansvarig.
Parametrar
• menu – QMenu:s nyskapade åtgärder kommer att läggas till
• unique_name – Ett unikt namn för denna åtgärd, detta måste vara globalunikt, så gör det
så beskrivande som möjligt. Om du är osäker lägg till ett uuid till den.
• text – Texten för denna åtgärd.
• icon – Antingen en QIcon eller ett filnamn. Filnamnet skickas till inbyggda I(), så du
behöver inte ange den fullständiga sökvägen till bildkatalogen.
• shortcut – En sträng, en lista med strängar, None eller Falsk. Om Falsk har inget kortkommando registrerats för denna åtgärd. Om None har ett kortkommando med ingen standardtangentbindning registrerats. Sträng och lista med strängar registrerar en genväg med
standardtangentbindning som anges.
• description – En beskrivning för denna åtgärd. Används för att ställa in verktygsråd.
• triggered – En anropbar som är ansluten till den utlösta signalen i den skapade åtgärden.
• shortcut_name – Testet visas för användaren när du anpassar kortkommandon för denna
åtgärd. Som standard är satt till värdet på text.
load_resources(names)
Om detta tillägg kommer i en ZIP-fil (användartillagt tillägg), kommer denna metod tillåta dig läsa in
resurser från ZIP-fil.
Till exempel att läsa in en bild:
332
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
pixmap = QPixmap()
pixmap.loadFromData(self.load_resources(['images/icon.png']).itervalues().next())
icon = QIcon(pixmap)
Parametrar names – Förteckning över sökvägar till resurser i zip-filen som använder / som
avskiljare
Returnerar En ordlista på formen {name : file_contents}. Namn som inte finns i zipfilen kommer inte att vara närvarande i ordlistan.
genesis()
Ställ in detta tillägg. Endast anropas en gång under initieringen. self.gui är tillgänglig. Den funktion som
specificerats action_spec finns som self.qaction.
location_selected(loc)
Anropas när boken listan som visas i calibre förändringas. För närvarande är värden för loc: bibliotek,
huvud, kort och cardb.
Denna metod bör aktivera/inaktivera denna åtgärd och dess underåtgärder som är lämpliga för platsen.
library_changed(db)
Anropas var gång det aktuella biblioteket är ändrat.
Parametrar db – LibraryDatabase motsvarar det aktuella biblioteket.
gui_layout_complete()
Anropas en gång per åtgärd när formgivningen hos huvud-GUI är avslutad. Om åtgärder måste göra ändringar i formgivningen, bör de göras här, snarare än i initialization_complete().
initialization_complete()
Anropas en gång per åtgärd när installationen av huvud-GUI är färdigt.
shutting_down()
Anropas en gång per tillägg när huvud-GUI är i färd med att stängas av. Släpp alla använda resurser, men
försök att inte blockera avstängning under långa tidsperioder.
Returnerar Falsk för att stoppa avstängningen. Du är ansvarig för att tala om för användaren
varför avstängningen stoppades.
class calibre.customize.InterfaceActionBase(*args, **kwargs)
Baserad: calibre.customize.Plugin (sida 312)
load_actual_plugin(gui)
Denna metod måste returnera själva gränssnittsåtgärden av tilläggsobjektet.
Inställningar Tillägg
class calibre.customize.PreferencesPlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
Ett tillägg som representerar en gränssnittskomponenten visas i inställningsdialogen.
Detta tillägg har bara en viktig metod create_widget(). De olika fälten i tillägget styr hur den kategoriseras
i användargränssnittet.
config_widget = None
Importera sökväg till modul som innehåller en klass namngiven ConfigWidget vilken implementerar ConfigWidgetInterface. Används av create_widget().
1.12. Konfigurera calibre utvecklingsmiljö
333
calibre Användarhandbok, Utgåva 2.22.0
category_order = 100
Var i listan av kategorier category av detta tillägg bör vara.
name_order = 100
Var i listan av namn i en kategori gui_name detta tillägg bör vara
category = None
Kategorin detta tillägg bör vara i
gui_category = None
Kategorinamnet som visas till användaren för detta tillägg
gui_name = None
Namnet som visar till användaren för detta tillägg
icon = None
Ikonen för detta tillägg, bör vara en absolut sökväg
description = None
Beskrivning som används för verktygsråd och liknande
create_widget(parent=None)
Skapa
och
returnerar
den
faktiska
Qt-gränssnittskomponenten
som
ställa
in
denna
grupps
inställningar.
Gränssnittskomponenten
måste
calibre.gui2.preferences.ConfigWidgetInterface (sida 334).
används
för
implementera
Standard implementationen använder config_widget för att instansiera gränssnittskomponenten.
class calibre.gui2.preferences.ConfigWidgetInterface
Denna klass definierar gränssnittet som alla gränssnittskomponenter visar i Inställningsdialogen som måste implementeras. Se ConfigWidgetBase för en basklass som implementerar detta gränssnitt och också definierar
olika bekväma metoder.
changed_signal = None
Denna signal ska avges när användaren ändrar ett värde i den här gränssnittskomponenten
supports_restoring_to_defaults = True
Sätt till Sann om och bara om restore_to_defaults() metoden är implementerad.
restore_defaults_desc = u’\xc5terst\xe4ll till standardv\xe4rden. Du m\xe5ste klicka p\xe5 Verkst\xe4ll f\xf6r att fa
Verktygsrådet för Återställning till grundinställningsknappen
restart_critical = False
Om Sann tillåter inte Inställningsdialogrutan inte användaren att ställa in några fler inställningar. Endast
har verkan om commit() returnerar Sann.
genesis(gui)
Anropas en gång innan gränssnittskomponent visas, borde utföra alla nödvändig inställningar.
Parametrar gui – calibres huvudanvändargränssnitt
initialize()
Bör sätta alla konfigureringsvärden till deras initiala värden (värdena lagras i konfigurationsfiler).
restore_defaults()
Bör sätta alla konfigureringsvärden till deras grundinställningar.
commit()
Spara alla ändrade inställningar. Returnerar Sann om förändringarna kräver en omstart, annars Falsk. Signalera ett AbortCommit undantag för att indikera att ett fel har inträffat. Du är ansvarig för att ge användaren återkoppling på vad felet är och hur man rättar till det.
334
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
refresh_gui(gui)
Anropas en gång efter denna gränssnittskomponent läggs in. Ansvarig för att orsakat gui att läsa om ändrade inställningar. Observera att som standard åter initierar grafiska gränssnittet olika element i alla fall, så
de flesta gränssnittskomponenter inte behöver använda den här metoden.
class calibre.gui2.preferences.ConfigWidgetBase(parent=None)
Basklass som innehåller kod för att enkelt lägga till standard konfigureringsgränssnittskomponenter som
kryssrutor, kombinationsrutor, textfält och så vidare. se register() method.
Denna klass hanterar automatiskt förändringsnoteringar, återställning till standard, översättning mellan guiobjekt och konfigurationsobjekt etc. för registrerade inställningar.
Om din konfigureringsgränssnittskomponent ärver från denna klass men inkluderar inställning som inte är registrerade, bör du överrida ConfigWidgetInterface metoder och kallar basklassmetoder inuti överridningarna.
register(name, config_obj, gui_name=None, choices=None, restart_required=False,
ty_string_is_None=True, setting=<class ‘calibre.gui2.preferences.Setting’>)
Registrera en inställning.
emp-
Parametrar
• name – Satta namnet
• config – Konfigureringsobjektet som läser/skriver instälningen
• gui_name – Namnet på det grafiska objekt som presenterar ett gränssnitt för att ändra
inställningen. Som standard antas vara ’opt_’ + name.
• choices – Om inställningen är en flervals (ComboBox) baserad inställning, listan över
alternativ. Listan är en lista på två-elements tupler av formen: [(gui name, value),
...]
• setting – Klassen ansvarar för att hantera den här inställningen. Standard klassen hanterar
nästan alla fall, så den här param används sällan.
Visningstillägg
class calibre.customize.ViewerPlugin(plugin_path)
Baserad: calibre.customize.Plugin (sida 312)
type = u’Bl\xe4ddare’
Dessa tillägg används för att lägga till funktionalitet till calibres granskare.
load_fonts()
Denna metod anropas en gång vid start av granskare. Det borde ladda godtyckligt typsnitt som det vill göra
tillgängligt. Till exempel:
def load_fonts():
from PyQt5.Qt import QFontDatabase
font_data = get_resources(['myfont1.ttf', 'myfont2.ttf'])
for raw in font_data.itervalues():
QFontDatabase.addApplicationFontFromData(raw)
load_javascript(evaljs)
Denna metod anropas varje gång ett nytt HTML-dokument laddas i granskaren. Använd det för att ladda
javaskriptsbibliotek in i granskaren. Till exempel:
def load_javascript(self, evaljs):
js = get_resources('myjavascript.js')
evaljs(js)
1.12. Konfigurera calibre utvecklingsmiljö
335
calibre Användarhandbok, Utgåva 2.22.0
run_javascript(evaljs)
Denna metod anropas varje gång ett dokument laddats klart. Använd det på samma sätt som load_javascript().
customize_ui(ui)
Denna metod anropas en gång när betraktaren skapas. Använd den för att göra några anpassningar som du
vill till tittarens användargränssnitt. Till exempel kan du ändra verktygsfält via ui.tool_bar och ui.tool_bar2.
customize_context_menu(menu, event, hit_test_result)
Denna metod anropas varje gång menyn i sammanhanget (högerklicka) visas. Du kan använda den för
att anpassa snabbmenyn. event är snabbmenyn händelsen och hit_test_result är QWebHitTestResult för
denna händelse i det inlästa dokumentet.
API-dokumentation för databasgränssnittet
Detta API är trådsäkert (det används en flerläsare, singelskrivare utelåsningsschema). Du kan access detta API så här:
from calibre.library import db
db = db('Path to calibre library folder').new_api
Om du är i ett Calibre-tilläggsprogram, som är del av Calibres huvudgränssnitt, får du i stället access till det så här:
db = self.gui.current_db.new_api
class calibre.db.cache.Cache(backend)
En inminnesbuffer av metadata.db-filen från Calibres bibliotek. Denna klass fungerar också som ett trådsäkert
API för accessa databasen. Inminnesbufferten hanteras på normalt sätt för maximal prestanda.
SQLITE används helt enkelt som ett stabilt sätt att läsa och skriva från metadata.db.
add_books(books,
add_duplicates=True,
apply_import_tags=True,
preserve_uuid=False,
run_hooks=True, dbapi=None)
Lägg till angivna böcker till biblioteket. Böcker bör vara en uppräknelig mängd i multipel av 2, varje 2mängdsgrupp i form av (mi, format_map) var mi är ett metadataobjekt och format_map är en ordlista
i formen {fmt: path_or_stream}, till exempel {’EPUB’: ’/path/to/file.epub’}.
Returnerar ett listpar: ids, duplicates. ids innehållande bokens identiteter för all nyligen skapade
böcker i databasen. “duplikat” innehåller (mi, format_map) for alla böcker som redan finns i databasen genom enkel duplikdetektionheuristik använd av has_book() (sida 339).
add_custom_book_data(name, val_map, delete_first=False)
Lägg till data för namn där val_map är en karta över book_ids till värden. Om delete_first är Sann kommer
alla tidigare lagrade data för namn tas bort.
add_format(book_id, fmt, stream_or_path, replace=True, run_hooks=True, dbapi=None)
Lägg ett format till angiven bok. Returnerar True om formatet lyckades att läggas till.
Parametrar
• replace – Om True ersätt existerande format, annars om formatet redan finns, returneras
False
• run_hooks – Om True, körs filtypstillägg på formatet innan och efter tillägg.
• dbapi – Bara för internt bruk.
all_book_ids(type=<type ‘frozenset’>)
Frusen uppsättning av alla kända bokidentiteter.
all_field_for(field, book_ids, default_value=None)
Samma som field_for, förutom att den opererar på flera böcker på samma gång
336
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
all_field_ids(name)
Frusen uppsättning av identiteter för alla värden i fältet “namn”.
all_field_names(field)
Frusen uppsättning av alla fältnamn (bör bara användas för många till en och många till många fält)
author_data(author_ids=None)
Returnerar författardata som ordlista med nycklar: namn, sort, länk
Om inga författare med angivna identiteter hittas returneras en tom ordlista. Om author_ids är None,
returneras data för alla författare.
author_sort_from_authors(authors)
Givet en lista av författare, returnerar author_sort sträng för författare, framför författarsortering associerad
med författare över bearbetade strängen.
books_for_field(name, item_id)
Returnerar alla böcker associerade med posten identifierad av item_id, där posten tillhör fältet name.
Returnerat värde är en mängd av bokidentiteter eller den tomma mängden om posten eller fältet inte finns.
copy_cover_to(book_id, dest, use_hardlink=False)
Kopiera omslag till filen som objektet dest. Returnerar Falsk om inget omslag finns eller dest är samma
fil som det aktuella omslaget. dest kan också vara en sökväg i vilket fall omslaget kopieras till det om och
endast om sökvägen är en annan än den aktuella sökvägen (med små bokstäver i beräkningen).
copy_format_to(book_id, fmt, dest, use_hardlink=False)
Kopiera formatet fmt till filen som posten dest. Om angivet format inte existerar, ger NoSuchFormat
fel. dest kan också vara en sökväg, i så fall kopieras formatet till den, om (och endast om) sökvägen är
skilt i från aktuell sökväg (med beaktning på teckenskiftläge).
cover(book_id, as_file=False, as_image=False, as_path=False)
Returnerar omslagsbild eller inget. Som standard, returneras omslag som en oktettsträng.
VARNING: Att använda as_path kommer att kopiera omslaget till en temp-fil och returnera sökvägen till
temp-filen. Du bör ta bort temp-filen när du är klar med den.
Parametrar
• as_file – Om Sann returnerar bilden som ett öppet filobjekt (en SpooledTemporaryFile)
• as_image – Om Sann returnera bilden som ett Q-bildobjekt
• as_path – Om Sann returnera bilden som en sökväg till en temporärfil
data_for_find_identical_books()
Returnerar uppgifter som kan användas för att implementera find_identical_books() (sida 338) i
en arbetsprocess utan tillgång till db. Se db.utils för en implementering
data_for_has_book()
Returnerar data som är lämpliga för användning i :meth:’has_book‘. Detta kan användas för en implementering av has_book() (sida 339) i en arbetsprocess utan tillgång till db.
delete_custom_book_data(name, book_ids=())
Ta bort uppgifter om namn. Av raderar som standard all data, om du bara vill ta bort data för vissa bok ids,
passera i en lista med bok ids.
embed_metadata(book_ids, only_fmts=None, report_error=None, report_progress=None)
Uppdatera metadata i alla format av de angivna bok_ids till aktuell metadata i databasen.
fast_field_for(field_obj, book_id, default_value=None)
Samma som field_for, förutom att den undviker extra uppslag för att få fältobjektet
1.12. Konfigurera calibre utvecklingsmiljö
337
calibre Användarhandbok, Utgåva 2.22.0
field_for(name, book_id, default_value=None)
Returnera värdet av fältet name för boken som identifieras av book_id. Om ingen sådan bok existerar eller inte har något definierat värde för fältet name eller inget sådant fält finns, så returneras
default_value.
default_value används inte för title, title_sort, authors, author_sort och series_index. Detta för dessa
alltid har värden i databasen default_value används för anpassade kolumner.
Det returnerade värdet för is_multiple fält är alltid tupler, även om inga värden finns (med andra ord,
default_value ignoreras). Undantaget är identifierare som det returnerade värdet alltid är en ‘dict’. De
returnerade tupler är alltid länkordning, det vill säga i vilken ordning de skapades.
field_ids_for(name, book_id)
Returnera id:ar (som en tupel) för de värden som fältet namn har på boken som identifieras av book_id.
Om det inte finns några värden, eller ingen sådan bok, eller något sådant fält, returneras en tom tupel
tillbaka.
find_identical_books(mi, search_restriction=u’‘, book_ids=None)
Hittar böcker som har en övermängd av författarna i mi och samma titel (titeln är luddig matchas). Se även
:meth:’data_for_find_identical_books‘.
format(book_id, fmt, as_file=False, as_path=False, preserve_filename=False)
Returnera e-bokformat som en oktettsträng eller None om formatet inte finns, eller att vi inte har behörighet
att skriva till e-bokfilen.
Parametrar
• as_file – Om Sann returneras e-bokformat som ett filobjekt. Observera att filobjektet är
en SpooledTemporaryFile, så om vad du vill göra är att kopiera formatet till en annan fil,
använd: meth: copy_format_to stället för utförande.
• as_path – Kopierar formatet filen till en temp-fil och returnerar sökvägen till temp-fil
• preserve_filename – Om Sann och returneras en sökväg, filnamnet är samma som den
som används i biblioteket. Observera att detta innebär att upprepade anrop ger samma
temp-fil (som återskapas varje gång)
format_abspath(book_id, fmt)
Returnera absolut sökväg till e-bokfilen i formatet format. Du bör nästan aldrig använda det, eftersom det
bryter trådsäkerhetsgarantin i detta API. Använd istället, copy_format_to() (sida 337).
Används för närvarande endast i calibredb listan, visaren, redigera boken, compare_format till originalformat, öppna med och katalogerna (via get_data_as_dict ()).
Bortsett från visaren, öppna med och redigera boken, tror jag inte någon av de andra gör någon
filskrivnings-I/O med resultaten av detta anrop.
format_hash(book_id, fmt)
Returnera hash för det angivna formatet för den angivna boken. Den typ av hash är algoritmberoende, men
är oftast SHA-256.
format_metadata(book_id, fmt, allow_cache=True, update_db=False)
Returnerar sökväg, storlek och mtime för det specifika formatet för den specifika boken. Du bör inte
använda sökväg annat om du absolut måste, eftersom direktaccess av den förstör trådsäkerhetsgarantin av
detta API(gränssnitt). I stället använd copy_format_to() (sida 337) metoden.
Parametrar
• allow_cache – Om Sann, används buffrade värden, annars sker en långsam filsystemaccess . Buffrade värden kan vara utdaterade om access sker till filsystem utanför detta API
(gränssnitt).
338
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• update_db – Om Sann är max_size-fältet av databasen uppdatering av denna bok.
formats(book_id, verify_formats=True)
Returnerar tupel av alla format för den specifika boken. Om verify_formats är Sann verifieras att filer
existerar på disken.
get_categories(sort=u’name’,
book_ids=None,
first_letter_sort=False)
Används internt för att implementera etikettbläddraren
icon_map=None,
already_fixed=None,
get_custom_book_data(name, book_ids=(), default=None)
Hämta data för namn. Som standard returneras data för alla book_ids, förse med en lista av bok identiteter
om du bara vill ha några data. Returnerar en översikt av book_id till värden. Om en speciellt värde inte
kan identifieras, används i stället standardvärde för den.
get_id_map(field)
Returnerar en översik av id nummer till värden för specifika fält. Fältet måste vara en många-en eller
många-många fält, annars genereras ett ValueError.
get_ids_for_custom_book_data(name)
Returnerar en uppsättning bok id för vilket namn har data.
get_item_id(field, item_name)
Returnerar posten id för item_name (skiftlägesokänslig)
get_item_ids(field, item_names)
Returnerar posten id för item_name (skiftlägesokänslig)
get_item_name(field, item_id)
Returnerar postnamnet för posten som anges av item_id i specificerat fält. Se också get_id_map()
(sida 339).
get_metadata(book_id, get_cover=False, get_user_categories=True, cover_as_data=False)
Returnerar metadata för boken identifierat av book_id som ett Metadata objekt. Notera att listan av
format inte är verifierad. Om get_cover är Sann, kommer omslag att returneras, antingen som en sökväg
till temporärfilen mi.cover eller om cover_as_data är Sant som mi.cover_data.
get_next_series_num_for(series, field=u’series’, current_indices=False)
Returnerar nästa serieindex för den specifika serien, med beaktning av olika förval som styr generering av
nästa serienummer.
Parametrar
• field – Serielikt fält (som standard för inbyggda seriekolumnen)
• current_indices – Om Sann, returnerar en översikt av book_id till aktuell serie_indexvärde i stället.
get_proxy_metadata(book_id)
Liksom: meth: get_metadata förutom att den returnerar ett ProxyMetadata-objekt som bara läser värden
från databasen på förfrågan. Det är mycket snabbare än get_metadata när endast ett mindre antal fält
behöver nås från returnerat metadataobjekt.
get_usage_count_by_id(field)
Returnerar en översikt av id till räkningsanvändning för alla värden på det angivna området, som måste
vara en många-en eller många-många fält.
has_book(mi)
Returnerar Sann om och endast om databasen innehåller en post med samma titel som den angivna i
metadataobjektet. Jämförelsen är skiftlägeskänsliga . Se även :meth:’data_for_has_book‘.
has_format(book_id, fmt)
Returnerar Sann om (och endast om) formatet existerar på disk
1.12. Konfigurera calibre utvecklingsmiljö
339
calibre Användarhandbok, Utgåva 2.22.0
has_id(book_id)
Returnerar Sann om (och endast om) specificerat bok_id existerar i db
init()
Initialisera denna buffring med data från fjärrsidan.
multisort(fields, ids_to_sort=None, virtual_fields=None)
Returnerar en lista av sorterade bok id. Om ids_to_sort är None, kommer alla all bok id att returneras.
fälten måste vara en lista av 2-tupler på formatet (field_name, ascending=True eller False). Det mest signifikata fältet är den första 2-tupeln.
pref(name, default=None)
Returnerar värdet för det specifika förvalet eller värdet angivet som standard om inget förval är angivet.
read_backup(book_id)
Returnerar OPF-metadatalagringen för boken som en oktettsträng eller None om ingen sådan lagrad finns.
remove_books(book_ids, permanent=False)
Ta bort böcker angivna av book_ids från databasen eller tar bort deras formatfiler. Om permanent är
False, så kommer inte formatfiler tas bort.
remove_formats(formats_map, db_only=False)
Ta bort angivna format från angivna böcker.
Parametrar
• formats_map – En översikt av book_id till en lista av format som ska tas bort från boken.
• db_only – Om Sann, tas bara handlingen av format från databasen, tar inte bort de aktuella
filformaten från filsystemet.
remove_items(field, item_ids, restrict_to_book_ids=None)
Radera alla poster i det angivna området med de angivna ids. Returnerar uppsättningen påverkade bok-id.
restrict_to_book_ids är en valfri uppsättning bok-id. Om specificerat, kommer endast objekten
att tas bort från dessa böcker.
rename_items(field, item_id_to_new_name_map, change_index=True, restrict_to_book_ids=None)
Döp om poster från många-en eller många-många fält som etiketter eller serier.
Parametrar
• change_index – Vi omdöpning i en serielikt fält förändras även series_index värden.
• restrict_to_book_ids – En valfri uppsättning bok-id där namnbyte skall utföras, standard
för alla böcker.
restore_book(book_id, mi, last_modified, path, formats)
Återställer bokuppslaget i databasen för en bok som redan finns i filsystemet.
restore_original_format(book_id, original_fmt)
Återställer det angivna formatet från tidigare sparat ORIGINAL_FORMAT, om något. Returnerar Sann
vid framgång. The ORIGINAL_FORMAT tas bort efter en lyckad återställning.
safe_read_lock
Ett säker läsningslås är ett lås som gör ingenting om tråden redan har en skrivlås, annars begärs ett läslås.
Detta är nödvändigt för att förhindra DowngradeLockErrors, vilket kan ske vid uppdatering av sökningen
bufferten i närvaro av kompositkolumner. Uppdatering av sökningen bufferten har ett exklusivt lås, men
söker en sammansatt kolumn vilket innebär läsning av fältvärden via ProxyMetadata som försöker att få
ett delat lås. Det kan finnas andra scenarier som utlöser detta.
340
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
Den här egenskapen returnerar ett nytt låsobjekt på varje access. Detta låsobjekt är inte rekursivt (för
prestanda) och får endast användas i ett med uttalande som with cache.safe_read_lock: annars
kommer dåliga saker att hända.
save_original_format(book_id, fmt)
Spara en kopia i angivet format som ORIGINAL_FORMAT, skriver över alla befintliga ORIGINAL_FORMAT.
search(query, restriction=u’‘, virtual_fields=None, book_ids=None)
Söker i databasen med angiven sökning, returnerar en uppsättning av passande bok id:ar.
Parametrar
• restriction – En begränsning som är AND-ad med angiven förfrågan. Observera att restriktioner mellanlagras, alltså sökandet efter a AND b kommer att vara långsammare än
en med a restriktions b.
• virtual_fields – Använt internt (virtuella fält som on_device för söka efter)
• book_ids – Om inte None, en uppsättning bok id:ar där böckerna kommer att sökas i stället
för att söka alla böcker.
set_conversion_options(options, fmt=u’PIPE’)
alternativ måste vara en översikt på formen {book_id:conversion_options}
set_cover(book_id_data_map)
Ange omslag för denna bok. data kan antingen vara en QImage, QPixmap, filobjekt eller oktettsträng. Det
kan också vara None, i fallet omslag är borttaget.
set_field(name, book_id_to_val_map, allow_case_change=True, do_path_update=True)
Ange värden av fält angivna av namn. Returnerar uppsättningen av bok id:ar som påverkades av förändringen.
Parametrar
• book_id_to_val_map – Översikt av book_ids till värden som ska tillämpas.
• allow_case_change – Om Sann, i fall det rör sig om många-en eller många-många områden förändras. Till exempel, om en bok har etiketten tag1 och du anger etiketten
för en annan bok till Tag1 då kommer båda böckerna att ha etiketten Tag1 om allow_case_change är Sann, annars kommer de båda ha etiketten tag1.
• do_path_update – Används internt, du bör aldrig ändra den.
set_metadata(book_id,
mi,
ignore_errors=False,
force_changes=False,
set_authors=True, allow_case_change=False)
Ange metadata för boken id från Metadata-objektet mi
set_title=True,
När man sätter force_changes = Sann tvingas set_metadata att uppdatera fält, även om mi innehåller tomma
värden. I det här fallet är “None” skiljt från “empty”. Om mi.XXX är None ersätts XXX inte, annars görs
det. Etiketter, identifierare, och omslagsattribut är specialfall. Etiketter och identifierare kan inte ställas in
på None för då kommer de alltid ersättas om force_changes är Sann. Du måste se till att mi innehåller de
värden som du vill att boken ska ha. Omlslag förändras alltid om ett nytt omslag finns, men de raderas
aldrig . Observera också att force_changes har ingen effekt på inställningen titel eller författare.
set_pref(name, val)
Ange angivna förval till de angivna värdet. Se också pref() (sida 340).
tags_older_than(tag, delta=None, must_have_tag=None, must_have_authors=None)
Returnera ids av alla böcker som har etiketten ‘‘ etikett‘‘ som är äldre än den angivna tiden. etikettenjämförelse är skiftlägesoberoende.
Parametrar
1.12. Konfigurera calibre utvecklingsmiljö
341
calibre Användarhandbok, Utgåva 2.22.0
• delta – En timedelta-objekt eller None. Om None kommer alla id:ar med etiketten returneras.
• must_have_tag – Om inte None listan av träffar kommer begränsas till böcker som har
denna etikett
• must_have_authors – En lista av författare. Om inte None listan av träffar kommer begränsas till böcker som har dessa författare (skiftlägesokänslig).
user_categories_for_books(book_ids, proxy_metadata_map=None)
Returnera användarkategorier för de angivna böckerna. proxy_metadata_map är valfritt och är användbar
för en prestandaökning, i sammanhang där ett ProxyMetadata objekt för böckerna redan finns. Det bör
vara en korsreferens av book_ids till deras motsvarande ProxyMetadata objekt.
API-dokumentation för e-bok redigeringsverktyg
E-boksredigeringsverktygen består av calibre.ebooks.oeb.polish.container.Container (sida 342)
objekt som representerar en bok som en samling av HTML + resursfiler, samt olika verktyg som kan användas för att utföra operationer på behållaren . Alla verktyg är i form av modulnivåsfunktioner i de olika calibre.ebooks.oeb.polish.*‘
moduler. Du erhåller ett behållarobjekt för en bok på en sökväg så här:
from calibre.ebooks.oeb.polish.container import get_container
container = get_container('Path to book file', tweak_mode=True)
Om du skriver ett tillägg för e-bokeditorn, får du den aktuella behållaren för boken som redigeras så här:
from calibre.gui2.tweak_book import current_container
container = current_container()
if container is None:
report_error # No book has been opened yet
Behållarobjektet
class calibre.ebooks.oeb.polish.container.Container(rootpath,
opfpath,
log,
clone_data=None)
En behållare är en Open eBook som en katalog full av filer och en opf-fil. Det finns två viktiga begrepp:
•Rotkatalogen. Detta är basen i e-boken. Alla e-boksfilerna är inne katalogen och i dess underkataloger.
•Namn: Dessa är sökvägar till böckernas filerna relativt rotkatalogen. De innehåller alltid POSIX separatorer och är utan citattecken. De kan ses som kanoniska identifierare för filer i boken. De flesta metoder på
behållarobjektet arbetar med namn. Namn är alltid i NFC unicode normalformen
•Kloner: behållarobjektet stödjer effektiva on-disk kloning, som används för att implementera kontrollpunkter i e-bokeditorn. För att göra detta arbete, bör du aldrig komma åt filer på filsystemet direkt. Istället
används raw_data() (sida 344) eller :meth:‘ open‘ att läsa / skriva till komponentfiler i boken.
När du konverterar mellan hrefs och namn använd de metoder som denna klass tillhandahåller, de antar att alla
hrefs är i citattecken.
abspath_to_name(fullpath, root=None)
Konvertera en absolut sökväg till en kanoniskt namn i förhållande till root
Parametrar root – Baskatalogen. Som standard används roten till detta behållarobjekt.
add_file(name, data, media_type=None, spine_index=None)
Lägg en fil till denna behållare. Posten för filen skapas automatiskt i OPF manifestet och ryggrad (om filen
är ett textdokument)
342
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
add_name_to_manifest(name)
Lägg till en post i manifestet för en fil med det angivna namnet. Returnerar manifestet id.
book_type = u’oeb’
Typen av bok (epub för EPUB-filer och azw3 för AZW3 filer)
commit(outpath=None, keep_parsed=False)
Överlämna alla nedsmutsade tolkade objekt till filsystemet och skriver ut e-boksfilen på :param output:
Sökvägen att skriva den sparade e-boksfilen till. Om None, är sökvägen till den ursprungliga bokfilen som
används. :param keep_parsed: Om Sann hålls tolkade representationer av engagerade poster i buffertminnet.
commit_item(name, keep_parsed=False)
Överlämnar ett tolkat objekt till disken (det är serialiserade och skrivs till den underliggande fil). Om
keep_parsed är Sann behålls den tolkade representationen i bufferten. Se också: parsed() (sida 344)
decode(data, normalize_to_nfc=True)
Automatiskt avkoda data in i ett unicode objekt.
Parametrar normalize_to_nfc – Normalisera tillbaka unicode till NFC normalform som krävs
av både EPUB och AZW3 format.
dirty(name)
Mark the parsed object corresponding to name as dirty. See also: parsed() (sida 344).
exists(name)
Sann om en fil som motsvarar det kanoniska namn som finns. Observera att denna funktion lider av begränsningarna i det underliggande operativsystemets filsystemet, i särskilda fall (i) känsligheten. Så ifall
okänsligt filsystem kommer tillbaka gäller även om det rör sig om namn skiljer sig från fallet med den
underliggande filsystemet filen. Se även has_name() (sida 343)
filesize(name)
Returnera storlek i oktetter av filen som representeras av det angivna kanoniska namnet. Automatiskt
hanterar smutsiga tolkade objekt. Se även: :met:’parsed‘
generate_item(name, id_prefix=None, media_type=None, unique_href=True)
Lägg till ett objekt i manifestetet med href som härrör från förnamnet. Säkerställer unika href och id
automatiskt. Returnerar genererade objekt.
guess_type(name)
Returnera de förväntade mimetype för den angivna filnamnet baserat på dess ändelse.
guide_type_map
Översättning styr guidetyp till kanoniskt namn
has_name(name)
Return true om en fil med samma kanoniska namn som angetts existerar. Till skillnad exists() (sida 343) denna metod är alltid små och stora bokstäver.
href_to_name(href, base=None)
Konvertera en href (i förhållande till bas) till ett namn. basen måste vara ett namn eller None, i vilket fall
self.root används.
insert_into_xml(parent, item, index=None)
Infoga objekt i förälder (eller lägga om index är None), fastställande indrag. Fungerar endast med självstängande objekt.
iterlinks(name, get_line_numbers=True)
Iterera över alla länkar i namnet. Om get_line_numbers är Sann ger det resultat i form (länk, line_number,
offset). Där line_number är line_number där länken förekommer och offset är antalet tecken från början
av raden. Observera att offset kan faktiskt omfatta flera rader om inte noll.
1.12. Konfigurera calibre utvecklingsmiljö
343
calibre Användarhandbok, Utgåva 2.22.0
manifest_has_name(name)
Returnar True om manifestet har en post som motsvarar namnet
manifest_id_map
Översättning av manifest id till kanoniska namn
manifest_type_map
Översättnig av manifest mediatyp till lista av kanoniska namn av den mediatypen
mi
Metadatat som ett metadataobjekt av denna bok. Observera att detta objekt är konstruerad i farten varje
gång den här egenskapen begärs, så använd den sparsamt.
name_to_abspath(name)
Konvertera ett kanoniskt namn till en absolut OS-beroende sökväg
name_to_href(name, base=None)
Konvertera ett namn till en href förhållande till basen, som måste vara ett namn eller None i vilket fall
self.root används som bas
names_that_must_not_be_changed
Uppsättning med namn som aldrig få byta nytt namn. Beror på e-bokformat.
names_that_must_not_be_removed
Uppsättning med namn som aldrig får tas bort från behållaren. Beror på e-bokformat.
names_that_need_not_be_manifested
Uppsättning av namn som får saknas i manifestet. Beror på e-bokformat.
open(name, mode=u’rb’)
Öppna filen som utpekas av namn för direkt läs / skriv. Observera att detta kommer att förkasta filen om
den är smutsig och ta bort den från tolkningsbufferten. Du måste avsluta med den här filen innan du öppnar
den tolkas versionen av den igen, eller dåliga saker kommer att hända.
opf
Den analyserad OPF-filen
opf_get_or_create(name)
Bekvämlig metod för att antingen returnera första XML-element med det angivna namnet eller skapar den
under opf:package element och sedan lämna tillbaka den, om den inte redan finns.
opf_version
The version set on the OPF’s <package> element
opf_xpath(expr)
Bekväm metod för att beräkna ett XPath-uttryck på OPF-filen har fördefinierade opf: och dc:namespace
prefix.
parsed(name)
Returnerar en analyserad representation av den fil som anges med namn. För HTML och XML-filer returneras ett lxml träd. För CSS-filer returneras ett cssutils format. Observera att analyserat objekt mellanlagras
för prestanda. Om du gör några ändringar i objekttolkningen måste du anropa dirty() (sida 343) så att
behållaren vet att bufferten ska uppdateras. Se även replace() (sida 345).
raw_data(name, decode=True, normalize_to_nfc=True)
Returnera rådata motsvarande filen som anges med namn
Parametrar
• decode – Om Sann och filen har en textbaserad mimetype, avkoda den och returnera ett
unicode-objekt i stället för råa oktetten.
344
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
• normalize_to_nfc – Om Sann det returneras unicode objektet som är normaliserad till
NFC normalform som krävs för EPUB- och AZW3-filformat.
relpath(path, base=None)
Konvertera en absolut sökväg (med os avskiljare) till en sökväg i förhållande till basen (standard att
self.root). Den relativa sökvägen är inte ett namn. Använd abspath_to_name() (sida 342) för detta.
remove_from_spine(spine_items, remove_if_no_longer_in_spine=True)
Ta
bort
de
angivna
objekten
(av
kanoniskt
namn)
från
ryggraden.
Om
remove_if_no_longer_in_spine är Sann, tas även objekten bort från boken, inte bara från
bokryggen.
remove_from_xml(item)
Tar bort objektet från förälder, fasta indrag (fungerar bara med självstängande artiklar)
remove_item(name, remove_from_guide=True)
Ta bort objektet identifierat med namn från denna behållare. Detta tar bort alla referenser till objektet i
OPF-manifestet, guide och bokrygg samt från eventuella interna buffertar.
rename(current_name, new_name)
Byter namn på en fil från current_name till NEW_NAME. Det automatiskt baserar om alla länkar inne i
filen om katalogfilen har förändringar. Observera dock att länkar inte uppdateras i de övriga filer som kan
referera den här filen. Detta är för prestanda, sådana uppdateringar ska göras en gång, i grupp.
replace(name, obj)
Byt analyserade objekt som motsvarar namn med obj, som måste vara ett liknande objekt, det vill säga en
lxml-träd för HTML / XML eller cssutils formatmall för en CSS-fil.
replace_links(name, replace_func)
Byt ut alla länkar i namn med replace_func, vilket måste vara en anropsbar som accepterar en URL och
returnerar den utbytta URL. Den måste också ha en “ersatt” attribut som är satt till Sann om någon faktisk
ersättning görs. Praktiska sätt att skapa sådana anropbara använd LinkReplacer och LinkRebaser
klasser.
serialize_item(name)
Konvertera en analyserat objekt (identifieras av kanoniskt namn) i en oktettsträng. Se parsed() (sida 344).
set_spine(spine_items)
Ställ in bokryggen att vara spine_items där spine_items visas som en iterabel av formen (namn, linjär).
Kommer ge ett felmeddelande om ett av namnen finns inte i manifestet.
spine_items
En iterator som ger kanoniskt namn för varje post i bokens rygg. Se även: spine_iter (sida 345) och
spine_iter (sida 345).
spine_iter
En iterator som ger posten, namn is_linear för varje post i bokens rygg. Posten är lxml elementet, som har
det kanoniska filnamnet och is_linear är Sann om objektet är linjärt. Se även: spine_names (sida 345)
och spine_items (sida 345).
spine_names
En iterator som ger namn och is_linear för varje post i bokens rygg. Se även: spine_iter (sida 345)
and spine_items (sida 345).
1.12. Konfigurera calibre utvecklingsmiljö
345
calibre Användarhandbok, Utgåva 2.22.0
Hantera komponentfiler i en behållare
calibre.ebooks.oeb.polish.replace.replace_links(container,
link_map,
frag_map=<function
<lambda> at 0x7f6fcb1fd668>, replace_in_opf=False)
Byt länkar till filer i behållaren. Kommer iterera över alla filer i behållaren och ändra de angivna länkar i dem.
Parametrar
• link_map – En översättning av kanoniska namn till nya kanoniska namn. Till exempel:
{’images/old.png’: ’images/new.png’}
• frag_map – Ett anropbart som tar två argument (namn, ankare) och returnerar ett nytt
ankare. Detta är användbart om du behöver ändra ankare i HTML-filer. Som standard gör
det ingenting.
• replace_in_opf – Om Falsk, ersätts inte länkar i OPF-filen.
calibre.ebooks.oeb.polish.replace.rename_files(container, file_map)
Byt namn på filer i behållaren, automatiskt uppdatera alla länkar till dem.
Parametrar file_map – En översättning av gamla kanoniska namn till nya kanoniska, till exempel:
{’text/chapter1.html’: ’chapter1.html’}.
calibre.ebooks.oeb.polish.replace.get_recommended_folders(container, names)
Returnerar mapparna som rekommenderas för de givna filnamnen. Rekommendationen är baserad på var majoriteten av filer av samma typ finns i behållaren. Om inga filer av en viss typ är närvarande, antas den rekommenderade mappen vara den mapp som innehåller OPF-filen.
Fin utskrift och automatisk reparation av tolkningsfel
calibre.ebooks.oeb.polish.pretty.fix_html(container, raw)
Åtgärda eventuella tolkningsfel i HTML representeras som en råsträng. Åtgärd görs med HTML5 tolkningsalgoritmen.
calibre.ebooks.oeb.polish.pretty.fix_all_html(container)
Åtgärda eventuella tolkningsfel i alla HTML-filer i containern. Åtgärd görs med HTML5 tolkningsalgoritmen.
calibre.ebooks.oeb.polish.pretty.pretty_html(container, name, raw)
Fin utskrift HTML representeras som en råsträng
calibre.ebooks.oeb.polish.pretty.pretty_css(container, name, raw)
Fin utskrift CSS representerad som en råsträng
calibre.ebooks.oeb.polish.pretty.pretty_xml(container, name, raw)
Fin utskrift XML representeras som en råsträng. Om name är namnet på OPF, är extra OPF-specifik försköning
utförs.
calibre.ebooks.oeb.polish.pretty.pretty_all(container)
Fin utskrift alla HTML / CSS / XML-filer i behållaren
Hantera bokomslag
calibre.ebooks.oeb.polish.jacket.remove_jacket(container)
Ta bort ett befintligt skyddsomslag, om något. Returnerar Falsk om inget befintligt skyddsomslag hittades.
346
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
calibre.ebooks.oeb.polish.jacket.add_or_replace_jacket(container)
Antingen skapa ett nytt omslag från bokens metadata eller ersätta en befintligt omslag. Returnerar Sann om ett
befintligt omslag ersattes.
Delning och sammanslagning av filer
calibre.ebooks.oeb.polish.split.split(container, name, loc_or_xpath, before=True, totals=None)
Dela upp filen som anges med namn vid den position som anges av loc_or_xpath. Uppdelning migrerar automatiskt alla länkar och referenser till de berörda filerna.
Parametrar
• loc_or_xpath – Bör vara ett XPath-uttryck som //h:div[@id=”split_here”]. Kan också vara
en loc som används internt för att genomföra uppdelningen i förhandsvisningspanelen.
• before – Om Sann sker uppdelningen innan det identifierade elementet annars efter det.
• totals – Används internt
calibre.ebooks.oeb.polish.split.multisplit(container, name, xpath, before=True)
Dela den angivna filen på flera platser (alla etiketter som passar det angivna XPath-uttrycket Se också: split()
(sida 347) Delning migrerar automatiskt alla länkar och referenser till de berörda filerna
Parametrar before – Om Sann sker uppdelningar innan det identifierade elementet annars efter det.
calibre.ebooks.oeb.polish.split.merge(container, category, names, master)
Slå ihop de angivna filerna till en enda fil, automatiskt migrera alla länkar och referenser till de berörda filerna.
Alla filet måste vara antingen HTML eller CSS-filer.
Parametrar
• category – Måste vara antingen ’text’ för HTML-filer eller ’styles’ för CSS-filer
• names – Listan över filer som ska slås samman
• master – Vilken av de sammanslagna filer är huvud -fil, som är den fil som kommer att
finnas kvar efter sammanslagning.
Hanterar omslag
calibre.ebooks.oeb.polish.cover.set_cover(container, cover_path,
tions=None)
Ställ in omslaget till boken till den bild som utpekas av cover_path.
report=None,
op-
Parametrar
• cover_path – Antingen den absoluta sökvägen till en bildfil eller kanoniska namn på en bild
i boken. När du använder en bild i boken, måste du också ställa in alternativ, se nedan.
• report – En valfri anropsbar som tar ett enda argument. Det kommer att kallas med information om de uppgifter som behandlas.
• options – Ingen eller en ordlista som styr hur omslaget sätts in. Ordlistan kan ha poster:
keep_aspect: Sann eller Falsk (Bevara bildförhållande på omslag i EPUB) no_svg: Sann
eller Falsk (Använd en SVG omslagshölje i EPUB Titeln) befintliga: Sann eller Falsk (‘‘
cover_path‘‘ refererar till en befintlig bild i boken)
calibre.ebooks.oeb.polish.cover.mark_as_cover(container, name)
Markera den angivna bilden som omslagsbild.
1.12. Konfigurera calibre utvecklingsmiljö
347
calibre Användarhandbok, Utgåva 2.22.0
calibre.ebooks.oeb.polish.cover.mark_as_titlepage(container,
name,
ve_to_start=True)
Markera den angivna HTML-filen som Titel av EPUB.
mo-
Parametrar move_to_start – Om Sann HTML-filen flyttas till början av ryggen
Att arbeta med CSS
calibre.ebooks.oeb.polish.fonts.change_font(container, old_name, new_name=None)
Ändra ett typsnitt familj från old_name att NEW_NAME. Ändrar alla förekomster av typsnittet i stilmallar, formatetiketter och stilattribut. Om old_name avser ett inbäddat teckensnitt, tas det bort. Du kan ställa
NEW_NAME till None för att ta bort typsnittet i stället för att ändra det.
calibre.ebooks.oeb.polish.css.remove_unused_css(container,
report=None,
remove_unused_classes=False)
Ta bort alla oanvända CSS-regler från boken. En oanvänd CSS-regel är en som inte passar allt materiellt innehåll.
Parametrar
• report – En valfri anropsbar som tar ett enda argument. Det kallas med information om den
verksamhet som utförs.
• remove_unused_classes – Om Sann, klassattribut i HTML som inte passar några CSSregler tas också bort.
calibre.ebooks.oeb.polish.css.filter_css(container, properties, names=())
Ta bort de angivna CSS-egenskaperna från alla CSS-regler i boken.
Parametrar
• properties – Uppsättning av egenskaper för att ta bort. Till exempel: {’font-family’,
’color’}.
• names – Filerna som att ta bort egenskaper. Standardvärden för alla HTML- och CSS-filer
i boken.
Arbetar med innehållsförteckning
calibre.ebooks.oeb.polish.toc.from_xpaths(container, xpaths)
Generera en innehållsförteckning från en lista med XPath-uttryck. Varje uttryck i listan motsvarar en nivå av
den genererade innehållsförteckningen. Till exempel: [’//h:h1’, ’//h:h2’, ’//h:h3’] kommer att
generera en trenivåers innehållsförteckning från <h1>, <h2> and <h3> etiketter.
calibre.ebooks.oeb.polish.toc.from_links(container)
Generera innehållsförteckning från länkar i boken.
calibre.ebooks.oeb.polish.toc.from_files(container)
Generera innehållsförteckning från filer i boken.
calibre.ebooks.oeb.polish.toc.create_inline_toc(container, title=None)
Skapa en infogad (HTML) Innehållsförteckning från en befintlig NCX innehållsförteckning.
Parametrar title – Titel för denna innehållsförteckning.
Bokredigeringsverktyg
class calibre.gui2.tweak_book.plugin.Tool
Baserad: object Basklass för enskilda verktyg i ett bokredigeringstillägg. Användbara medlemmar är:
348
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
•self.plugin: En referens till: calibre.customize.Plugin (sida 312) objekt till vilket detta
verktyg tillhör.
•self. boss (sida 349)
•self. gui (sida 349)
Metoder som måste bli ersatta i underklasser:
•create_action() (sida 349)
•register_shortcut() (sida 349)
name = None
Ställ in detta till ett unikt namn det kommer att användas som en nyckel
allowed_in_toolbar = True
Om Sann användaren kan välja att placera detta verktyg i tilläggsverktygsfältet
allowed_in_menu = True
Om Sann användaren kan välja att placera detta verktyg i tilläggsmenyn
toolbar_button_popup_mode = u’delayed’
Rullgardinsläget för menyn (om någon) på knappen i verktygsfältet. Möjliga värden är “fördröjt”, “snabb”,
“knappen”
boss
calibre.gui2.tweak_book.boss.Boss (sida 350) objektet. Används för att styra användargränssnittet.
gui
Huvudfönstret i användargränssnittet
current_container
Returnera nuvarande calibre.ebooks.oeb.polish.container.Container (sida 342) objekt som representerar boken som redigeras.
register_shortcut(qaction, unique_name, default_keys=(), short_text=None, description=None,
**extra_data)
Registrera ett kortkommando som utlöser den angivna qaction. Detta kortkommandot blir automatiskt
anpassningsbart av användaren i avsnittet Tangentbord av editorinställningar.
Parametrar
• qaction – En QAction objekt kommer det att utlösas när den konfigurerade tangentkombinationen trycks av användaren.
• unique_name – Ett unikt namn för genvägen / åtgärd. Den kommer att användas internt,
får den inte delas av några andra åtgärder i detta tillägg.
• default_keys – En lista över standardtangentbordsgenvägarna. Om inget anges kommer
inga standardgenvägar att fastställas. Om genväg anges här konflikt med antingen inbyggda genvägar och genvägar från användarkonfigurations / andra tillägg, kommer de att ignoreras. I så fall kommer användarna att behöva anpassa snabb manuellt via Inställningar.
Till exempel: default_keys = (’Ctrl+J",F9").
• short_text – En valfri kort beskrivning av denna åtgärd. Om inte angivet kommer texten
från QAction att användas.
• description – En valfri längre beskrivning av denna åtgärd, det kommer att användas i
inställningsposten för den här genvägen.
1.12. Konfigurera calibre utvecklingsmiljö
349
calibre Användarhandbok, Utgåva 2.22.0
create_action(for_toolbar=True)
Skapa en QAction som kommer att läggas till antingen tilläggets verktygsfält eller tilläggets meny beroende på for_toolbar. Till exempel:
def create_action(self, for_toolbar=True):
ac = QAction(get_icons('myicon.png'), 'Do something')
if for_toolbar:
# We want the toolbar button to have a popup menu
menu = QMenu()
ac.setMenu(menu)
menu.addAction('Do something else')
subaction = menu.addAction('And another')
# Register a keyboard shortcut for this toolbar action be
# careful to do this for only one of the toolbar action or
# the menu action, not both.
self.register_shortcut(ac, 'some-unique-name', default_keys=('Ctrl+K',))
return ac
Se även:
Metod register_shortcut() (sida 349).
Styr editorns användargränssnitt
E-bokeditorns användargränssnitt styrs av ett enda global Boss objekt. Detta har många användbara metoder som kan
användas i tilläggskod för att utföra vanliga uppgifter.
class calibre.gui2.tweak_book.boss.Boss(parent, notify=None)
add_savepoint(msg)
Skapa en återställningskontrollpunkt med det namn som anges som msg
apply_container_update_to_gui(mark_as_modified=True)
Uppdatera alla komponenter i användargränssnittet för att återspegla de senaste data i den aktuella bokbehållaren.
Parametrar mark_as_modified – Om Sann, kommer boken att markeras som ändrad, så att
användaren uppmanas att spara den när du avslutar.
close_editor(name)
Stäng editorn som redigerar filen som anges av namn
commit_all_editors_to_container()
Utför eventuella ändringar som användaren har gjort i filer öppnas i editorn till behållaren. Du bör anropa
den här metoden innan du utför några åtgärder på den aktuella behållaren
currently_editing
Returnamnet på filen som redigeras för närvarande eller None om ingen fil redigeras
edit_file(name, syntax=None, use_template=None)
Öppna filen som namnges i en editor
Parametrar
• syntax – Mediatypen för filen, till exempel, ’text/html’. Om inget anges det gissas
den från filändelsen.
• use_template – En mall för att initiera öppnade editorn med
350
Kapitel 1. Avsnitten
calibre Användarhandbok, Utgåva 2.22.0
open_book(path=None, edit_file=None, clear_notify_data=True)
Öppna e-bok på sökväg för redigering. Kommer att visa ett fel om e-boken inte är i ett format som stöds
eller den aktuella boken har osparade ändringar.
Parametrar edit_file – Namnet på en fil inne i den nyöppnade boken för att börja redigera. Kan
också vara en lista med namn.
rewind_savepoint()
Ångra föregående skapande en återställningskontrollpunkt, användbart om du skapar en kontrollpunkt,
sedan avbryta med inga ändringar
save_book()
Spara boken. Sparning utförs i bakgrunden
set_modified()
Markera boken som har modifierats
show_current_diff(allow_revert=True, to_container=None)
Visa ändringarna i boken från sitt senaste kontrollpunktstillstånd
Parametrar
• allow_revert – Om Sann kommer skillnadsdialogrutan att ha en knapp för att göra det
möjligt för användaren att återställa alla förändringar
• to_container – En behållarobjekt för att jämföra den aktuella behållaren till. Om None är
det tidigare kontrollspunktsbehållare som används
show_editor(name)
Visa editorn som redigerar filen som anges av namn
sync_preview_to_editor()
Synkronisera position av förhandsvisningspanelen till den aktuella markörpositionen i den aktuella editorn
1.13 Ordförklaringar
RSS RSS (Really Simple Syndication) är en webbutfodringsformat som används för att publicera ofta uppdaterat
innehåll, som nyhetsartiklar, blogginlägg, etc. Det är ett format som är särskilt lämpad för att läsas av datorer,
och är därför det bästa sättet att få innehåll från webben till en e-bok. Det finns många andra utfodringsformat
som används på internet, och calibre förstår de flesta av dem. Framför allt har det bra stöd för ATOM format,
som ofta används för bloggar.
Recept Ett recept är en uppsättning instruktioner som lär calibre hur man konverterar en nyhetskälla på nätet, till
exempel en tidning eller en blogg, till en e-bok. Ett recept är i huvudsak Python121 code. Som sådant är det i
stånd att omvandla godtyckligt komplexa nyhetskällor i böcker. På den enklaste nivån, är det bara en uppsättning
variabler, såsom webbadresser, som ger calibre tillräckligt med information för att gå ut på Internet och ladda
nyheterna.
HTML HTML (Hyper Text Markup Language), en delmängd av Standard Generalized Markup Language (SGML)
för elektronisk publicering, är den specifika standard som används för World Wide Web.
CSS CSS (Cascading Style Sheets) är ett språk som används för att beskriva hur en HTML dokument bör göras/se ut
(visuell design).
API API (Application Programming Interface) är ett källkodsgränssnitt som ett bibliotek ger att stödja begäran om
tjänster som skall göras av den som datorprogram.
LRF LRF E-bokformat som läses av SONY e-bokläsare.
121 https://www.python.org
1.13. Ordförklaringar
351
calibre Användarhandbok, Utgåva 2.22.0
URL URL (Uniform Resource Locator) till exampel: http://example.com
regexp Reguljära uttryck ger en kortfattad och flexibelt sätt för att identifiera textsträngar av intresse, såsom särskilda tecken, ord eller mönster av tecken. Se regexp syntax122 för syntaxen för reguljära uttryck som används i
Python.
122 https://docs.python.org/2.7/library/re.html
352
Kapitel 1. Avsnitten
Python Modulindex
c
calibre.customize, 312
calibre.customize.conversion, 319
calibre.db.cache, 336
calibre.devices.interface, 321
calibre.ebooks.metadata.book.base, 195
calibre.ebooks.metadata.sources.base,
316
calibre.ebooks.oeb.polish.container, 342
calibre.ebooks.oeb.polish.cover, 347
calibre.ebooks.oeb.polish.css, 348
calibre.ebooks.oeb.polish.jacket, 346
calibre.ebooks.oeb.polish.pretty, 346
calibre.ebooks.oeb.polish.replace, 346
calibre.ebooks.oeb.polish.split, 347
calibre.ebooks.oeb.polish.toc, 348
calibre.gui2.tweak_book.boss, 350
calibre.gui2.tweak_book.plugin.Tool, 348
calibre.utils.formatter_functions, 186
calibre.web.feeds.news, 303
353
calibre Användarhandbok, Utgåva 2.22.0
354
Python Modulindex
Index
Symbols
–categories, -r
calibredb-list_categories kommandorad växel, 279
–add-plugin, -a
–category
calibre-customize kommandorad växel, 267
ebook-meta kommandorad växel, 290
–add-simple-plugin
–change-justification
calibre-debug kommandorad växel, 267
ebook-convert kommandorad växel, 283
–all
–chapter
calibredb-backup_metadata kommandorad växel,
ebook-convert kommandorad växel, 287
280
–chapter-mark
calibredb-export kommandorad växel, 275
ebook-convert kommandorad växel, 287
–append, -a
–command, -c
calibredb-set_custom kommandorad växel, 278
calibre-debug kommandorad växel, 267
–as-opf
calibredb-show_metadata kommandorad växel, 274 –comments
ebook-convert kommandorad växel, 288
–ascending
–comments, -c
calibredb-list kommandorad växel, 272
ebook-meta kommandorad växel, 290
–asciiize
–cover
ebook-convert kommandorad växel, 283
ebook-convert kommandorad växel, 288
–attachment, -a
ebook-meta kommandorad växel, 290
calibre-smtp kommandorad växel, 270
–cover, -c
–author-sort
calibredb-add kommandorad växel, 273
ebook-convert kommandorad växel, 288
ebook-polish kommandorad växel, 291
ebook-meta kommandorad växel, 290
fetch-ebook-metadata kommandorad växel, 293
–authors
–csv,
-c
ebook-convert kommandorad växel, 288
calibredb-check_library
kommandorad växel, 279
–authors, -a
calibredb-list_categories
kommandorad växel, 280
calibredb-add kommandorad växel, 272
–customize-plugin
ebook-meta kommandorad växel, 290
calibre-customize kommandorad växel, 267
fetch-ebook-metadata kommandorad växel, 293
–daemonize
–auto-reload
calibre-server kommandorad växel, 269
calibre-server kommandorad växel, 269
–date,
-d
–base-dir, -d
ebook-meta
kommandorad växel, 290
web2disk kommandorad växel, 295
–debug-device-driver,
-d
–base-font-size
calibre-debug
kommandorad
växel, 267
ebook-convert kommandorad växel, 283
–debug-javascript
–book-producer
ebook-viewer kommandorad växel, 292
ebook-convert kommandorad växel, 288
–debug-pipeline,
-d
–book-producer, -k
ebook-convert
kommandorad växel, 289
ebook-meta kommandorad växel, 290
–default-programs
–build-plugin, -b
calibre-debug kommandorad växel, 268
calibre-customize kommandorad växel, 267
–delay
355
calibre Användarhandbok, Utgåva 2.22.0
web2disk kommandorad växel, 295
–detach
calibre kommandorad växel, 266
ebook-edit kommandorad växel, 289
ebook-viewer kommandorad växel, 292
–details, -d
calibredb-custom_columns kommandorad växel,
278
–develop
calibre-server kommandorad växel, 269
–diff
calibre-debug kommandorad växel, 268
–disable-dehyphenate
ebook-convert kommandorad växel, 285
–disable-delete-blank-paragraphs
ebook-convert kommandorad växel, 285
–disable-fix-indents
ebook-convert kommandorad växel, 285
–disable-font-rescaling
ebook-convert kommandorad växel, 283
–disable-format-scene-breaks
ebook-convert kommandorad växel, 286
–disable-hyphenation
lrfviewer kommandorad växel, 294
–disable-italicize-common-cases
ebook-convert kommandorad växel, 286
–disable-markup-chapter-headings
ebook-convert kommandorad växel, 286
–disable-plugin
calibre-customize kommandorad växel, 267
–disable-remove-fake-margins
ebook-convert kommandorad växel, 287
–disable-renumber-headings
ebook-convert kommandorad växel, 286
–disable-unwrap-lines
ebook-convert kommandorad växel, 286
–display
calibredb-add_custom_column kommandorad växel,
277
–dont-asciiize
calibredb-export kommandorad växel, 275
–dont-download-stylesheets
web2disk kommandorad växel, 295
–dont-notify-gui
kommandorad växel, 271
–dont-output-resources
lrf2lrs kommandorad växel, 294
–dont-replace
calibredb-add_format kommandorad växel, 274
–dont-save-cover
calibredb-export kommandorad växel, 275
–dont-split-on-page-breaks
ebook-convert kommandorad växel, 282
–dont-update-metadata
356
calibredb-export kommandorad växel, 275
–dont-write-opf
calibredb-export kommandorad växel, 275
–duplicate-links-in-toc
ebook-convert kommandorad växel, 287
–duplicates, -d
calibredb-add kommandorad växel, 273
–edit-book, -t
calibre-debug kommandorad växel, 268
–embed-all-fonts
ebook-convert kommandorad växel, 283
–embed-font-family
ebook-convert kommandorad växel, 284
–embed-fonts, -e
ebook-polish kommandorad växel, 291
–empty, -e
calibredb-add kommandorad växel, 273
–enable-heuristics
ebook-convert kommandorad växel, 286
–enable-plugin
calibre-customize kommandorad växel, 267
–encoding
web2disk kommandorad växel, 295
–encryption-method, -e
calibre-smtp kommandorad växel, 271
–epub-flatten
ebook-convert kommandorad växel, 282
–epub-inline-toc
ebook-convert kommandorad växel, 282
–epub-toc-at-end
ebook-convert kommandorad växel, 283
–exec-file, -e
calibre-debug kommandorad växel, 268
–expand-css
ebook-convert kommandorad växel, 284
–explode-book, -x
calibre-debug kommandorad växel, 268
–extra-css
ebook-convert kommandorad växel, 284
–extract-to
ebook-convert kommandorad växel, 283
–field, -f
calibredb-set_metadata kommandorad växel, 275
–fields
calibredb-catalog kommandorad växel, 276
–fields, -f
calibredb-list kommandorad växel, 272
–filter-css
ebook-convert kommandorad växel, 284
–filter-regexp
web2disk kommandorad växel, 295
–flow-size
ebook-convert kommandorad växel, 283
–font-size-mapping
Index
calibre Användarhandbok, Utgåva 2.22.0
ebook-convert kommandorad växel, 284
–for-machine
calibredb-list kommandorad växel, 272
–force, -f
calibredb-remove_custom_column kommandorad
växel, 278
–fork, -f
calibre-smtp kommandorad växel, 270
–formats
calibredb-export kommandorad växel, 275
–from-opf
ebook-meta kommandorad växel, 290
–full-screen, -f
ebook-viewer kommandorad växel, 292
–get-cover
ebook-meta kommandorad växel, 290
–gui, -g
calibre-debug kommandorad växel, 268
–gui-debug
calibre-debug kommandorad växel, 268
–help, -h
calibre kommandorad växel, 266
calibre-customize kommandorad växel, 267
calibre-debug kommandorad växel, 268
calibre-server kommandorad växel, 269
calibre-smtp kommandorad växel, 270
calibredb-add kommandorad växel, 273
calibredb-add_custom_column kommandorad växel,
277
calibredb-add_format kommandorad växel, 274
calibredb-backup_metadata kommandorad växel,
280
calibredb-catalog kommandorad växel, 276
calibredb-check_library kommandorad växel, 279
calibredb-clone kommandorad växel, 280
calibredb-custom_columns kommandorad växel,
278
calibredb-embed_metadata kommandorad växel,
281
calibredb-export kommandorad växel, 276
calibredb-list kommandorad växel, 272
calibredb-list_categories kommandorad växel, 280
calibredb-remove kommandorad växel, 273
calibredb-remove_custom_column kommandorad
växel, 278
calibredb-remove_format kommandorad växel, 274
calibredb-restore_database kommandorad växel, 279
calibredb-saved_searches kommandorad växel, 277
calibredb-set_custom kommandorad växel, 278
calibredb-set_metadata kommandorad växel, 275
calibredb-show_metadata kommandorad växel, 274
ebook-convert kommandorad växel, 282
ebook-edit kommandorad växel, 289
ebook-meta kommandorad växel, 290
Index
ebook-polish kommandorad växel, 291
ebook-viewer kommandorad växel, 292
fetch-ebook-metadata kommandorad växel, 293
lrf2lrs kommandorad växel, 294
lrfviewer kommandorad växel, 294
lrs2lrf kommandorad växel, 295
web2disk kommandorad växel, 295
–html-unwrap-factor
ebook-convert kommandorad växel, 286
–identifier
ebook-meta kommandorad växel, 290
–ids, -i
calibredb-catalog kommandorad växel, 276
–ignore-plugins
calibre kommandorad växel, 266
–ignore_extensions, -e
calibredb-check_library kommandorad växel, 279
–ignore_names, -n
calibredb-check_library kommandorad växel, 279
–index, -i
ebook-meta kommandorad växel, 290
–input-encoding
ebook-convert kommandorad växel, 282
–input-profile
ebook-convert kommandorad växel, 282
–insert-blank-line
ebook-convert kommandorad växel, 284
–insert-blank-line-size
ebook-convert kommandorad växel, 284
–insert-metadata
ebook-convert kommandorad växel, 287
–inspect-mobi, -m
calibre-debug kommandorad växel, 268
–is-multiple
calibredb-add_custom_column kommandorad växel,
277
–isbn
ebook-convert kommandorad växel, 288
ebook-meta kommandorad växel, 290
–isbn, -i
calibredb-add kommandorad växel, 273
fetch-ebook-metadata kommandorad växel, 293
–item_count, -i
calibredb-list_categories kommandorad växel, 280
–jacket, -j
ebook-polish kommandorad växel, 291
–keep-ligatures
ebook-convert kommandorad växel, 284
–language
ebook-convert kommandorad växel, 288
–language, -l
ebook-meta kommandorad växel, 290
–languages, -l
calibredb-add kommandorad växel, 273
357
calibre Användarhandbok, Utgåva 2.22.0
–level1-toc
ebook-convert kommandorad växel, 287
–level2-toc
ebook-convert kommandorad växel, 287
–level3-toc
ebook-convert kommandorad växel, 287
–library-path
kommandorad växel, 271
–limit
calibredb-list kommandorad växel, 272
–line-height
ebook-convert kommandorad växel, 284
–line-width, -w
calibredb-list kommandorad växel, 272
–linearize-tables
ebook-convert kommandorad växel, 284
–list-fields, -l
calibredb-set_metadata kommandorad växel, 275
–list-plugins, -l
calibre-customize kommandorad växel, 267
–list-recipes
ebook-convert kommandorad växel, 282
–localhost, -l
calibre-smtp kommandorad växel, 270
–lrf-bookid
ebook-meta kommandorad växel, 290
–lrs
lrs2lrf kommandorad växel, 295
–margin-bottom
ebook-convert kommandorad växel, 284
–margin-left
ebook-convert kommandorad växel, 285
–margin-right
ebook-convert kommandorad växel, 285
–margin-top
ebook-convert kommandorad växel, 285
–match-regexp
web2disk kommandorad växel, 295
–max-cover
calibre-server kommandorad växel, 269
–max-files, -n
web2disk kommandorad växel, 295
–max-opds-items
calibre-server kommandorad växel, 269
–max-opds-ungrouped-items
calibre-server kommandorad växel, 269
–max-recursions, -r
web2disk kommandorad växel, 295
–max-toc-links
ebook-convert kommandorad växel, 288
–minimum-line-height
ebook-convert kommandorad växel, 285
–no-chapters-in-toc
ebook-convert kommandorad växel, 288
358
–no-default-epub-cover
ebook-convert kommandorad växel, 283
–no-svg-cover
ebook-convert kommandorad växel, 283
–no-update-check
calibre kommandorad växel, 266
–one-book-per-directory, -1
calibredb-add kommandorad växel, 273
–only-formats, -f
calibredb-embed_metadata kommandorad växel,
281
–open-at
ebook-viewer kommandorad växel, 292
–opf, -o
ebook-polish kommandorad växel, 291
fetch-ebook-metadata kommandorad växel, 293
–outbox, -o
calibre-smtp kommandorad växel, 270
–output, -o
lrf2lrs kommandorad växel, 294
lrs2lrf kommandorad växel, 295
–output-profile
ebook-convert kommandorad växel, 282
–page-breaks-before
ebook-convert kommandorad växel, 287
–password
calibre-server kommandorad växel, 269
–password, -p
calibre-smtp kommandorad växel, 271
–paths
calibre-debug kommandorad växel, 268
–pidfile
calibre-server kommandorad växel, 269
–port
calibre-smtp kommandorad växel, 271
–port, -p
calibre-server kommandorad växel, 269
–prefer-metadata-cover
ebook-convert kommandorad växel, 287
–prefix
calibredb-list kommandorad växel, 272
–preserve-cover-aspect-ratio
ebook-convert kommandorad växel, 283
–pretty-print
ebook-convert kommandorad växel, 283
–profile
lrfviewer kommandorad växel, 294
–pubdate
ebook-convert kommandorad växel, 288
–publisher
ebook-convert kommandorad växel, 288
–publisher, -p
ebook-meta kommandorad växel, 290
–py-console, -p
Index
calibre Användarhandbok, Utgåva 2.22.0
calibre-debug kommandorad växel, 268
–quote, -q
calibredb-list_categories kommandorad växel, 280
–raise-window
ebook-viewer kommandorad växel, 292
–rating
ebook-convert kommandorad växel, 288
–rating, -r
ebook-meta kommandorad växel, 291
–read-metadata-from-opf, -m
ebook-convert kommandorad växel, 288
–really-do-it, -r
calibredb-restore_database kommandorad växel, 279
–recurse, -r
calibredb-add kommandorad växel, 273
–reinitialize-db
calibre-debug kommandorad växel, 268
–relay, -r
calibre-smtp kommandorad växel, 271
–remove-first-image
ebook-convert kommandorad växel, 287
–remove-jacket
ebook-polish kommandorad växel, 292
–remove-paragraph-spacing
ebook-convert kommandorad växel, 285
–remove-paragraph-spacing-indent-size
ebook-convert kommandorad växel, 285
–remove-plugin, -r
calibre-customize kommandorad växel, 267
–remove-unused-css, -u
ebook-polish kommandorad växel, 292
–replace-scene-breaks
ebook-convert kommandorad växel, 286
–replace-whitespace
calibredb-export kommandorad växel, 276
–report, -r
calibredb-check_library kommandorad växel, 279
–restriction
calibre-server kommandorad växel, 269
–run-plugin, -r
calibre-debug kommandorad växel, 268
–search, -s
calibredb-catalog kommandorad växel, 276
calibredb-list kommandorad växel, 272
–search-replace
ebook-convert kommandorad växel, 286
–separator
calibredb-list kommandorad växel, 272
–separator, -s
calibredb-list_categories kommandorad växel, 280
–series
ebook-convert kommandorad växel, 288
–series, -s
calibredb-add kommandorad växel, 273
Index
ebook-meta kommandorad växel, 291
–series-index
ebook-convert kommandorad växel, 288
–series-index, -S
calibredb-add kommandorad växel, 273
–shutdown-running-calibre, -s
calibre kommandorad växel, 266
calibre-debug kommandorad växel, 268
–single-dir
calibredb-export kommandorad växel, 276
–smarten-punctuation
ebook-convert kommandorad växel, 285
–smarten-punctuation, -p
ebook-polish kommandorad växel, 292
–sort-by
calibredb-catalog kommandorad växel, 276
calibredb-list kommandorad växel, 272
–sr1-replace
ebook-convert kommandorad växel, 286
–sr1-search
ebook-convert kommandorad växel, 286
–sr2-replace
ebook-convert kommandorad växel, 286
–sr2-search
ebook-convert kommandorad växel, 286
–sr3-replace
ebook-convert kommandorad växel, 286
–sr3-search
ebook-convert kommandorad växel, 286
–start-in-tray
calibre kommandorad växel, 266
–start-reading-at
ebook-convert kommandorad växel, 287
–subject, -s
calibre-smtp kommandorad växel, 270
–subset-embedded-fonts
ebook-convert kommandorad växel, 285
–subset-font, -f
calibre-debug kommandorad växel, 268
–subset-fonts, -f
ebook-polish kommandorad växel, 292
–tags
ebook-convert kommandorad växel, 289
ebook-meta kommandorad växel, 291
–tags, -T
calibredb-add kommandorad växel, 273
–template
calibredb-export kommandorad växel, 276
–test-build
calibre-debug kommandorad växel, 268
–thread-pool
calibre-server kommandorad växel, 269
–timefmt
calibredb-export kommandorad växel, 276
359
calibre Användarhandbok, Utgåva 2.22.0
–timeout, -d
fetch-ebook-metadata kommandorad växel, 293
–timeout, -t
calibre-server kommandorad växel, 269
calibre-smtp kommandorad växel, 270
web2disk kommandorad växel, 295
–timestamp
ebook-convert kommandorad växel, 289
–title
ebook-convert kommandorad växel, 289
–title, -t
calibredb-add kommandorad växel, 273
ebook-meta kommandorad växel, 291
fetch-ebook-metadata kommandorad växel, 293
–title-sort
ebook-convert kommandorad växel, 289
ebook-meta kommandorad växel, 291
–to-dir
calibredb-export kommandorad växel, 276
–to-lowercase
calibredb-export kommandorad växel, 276
–to-opf
ebook-meta kommandorad växel, 291
–toc-filter
ebook-convert kommandorad växel, 288
–toc-threshold
ebook-convert kommandorad växel, 288
–toc-title
ebook-convert kommandorad växel, 283
–unsmarten-punctuation
ebook-convert kommandorad växel, 285
–url-prefix
calibre-server kommandorad växel, 269
–use-auto-toc
ebook-convert kommandorad växel, 288
–username
calibre-server kommandorad växel, 270
–username, -u
calibre-smtp kommandorad växel, 271
–verbose
ebook-polish kommandorad växel, 292
lrf2lrs kommandorad växel, 294
lrfviewer kommandorad växel, 294
lrs2lrf kommandorad växel, 295
web2disk kommandorad växel, 296
–verbose, -v
calibre kommandorad växel, 266
calibre-smtp kommandorad växel, 270
calibredb-catalog kommandorad växel, 277
ebook-convert kommandorad växel, 289
fetch-ebook-metadata kommandorad växel, 293
–version
calibre kommandorad växel, 266
calibre-customize kommandorad växel, 267
360
calibre-debug kommandorad växel, 268
calibre-server kommandorad växel, 270
calibre-smtp kommandorad växel, 270
calibredb-add kommandorad växel, 273
calibredb-add_custom_column kommandorad växel,
277
calibredb-add_format kommandorad växel, 274
calibredb-backup_metadata kommandorad växel,
280
calibredb-catalog kommandorad växel, 277
calibredb-check_library kommandorad växel, 279
calibredb-clone kommandorad växel, 281
calibredb-custom_columns kommandorad växel,
278
calibredb-embed_metadata kommandorad växel,
281
calibredb-export kommandorad växel, 276
calibredb-list kommandorad växel, 272
calibredb-list_categories kommandorad växel, 280
calibredb-remove kommandorad växel, 273
calibredb-remove_custom_column kommandorad
växel, 278
calibredb-remove_format kommandorad växel, 274
calibredb-restore_database kommandorad växel, 279
calibredb-saved_searches kommandorad växel, 277
calibredb-set_custom kommandorad växel, 278
calibredb-set_metadata kommandorad växel, 275
calibredb-show_metadata kommandorad växel, 274
ebook-convert kommandorad växel, 282
ebook-edit kommandorad växel, 289
ebook-meta kommandorad växel, 291
ebook-polish kommandorad växel, 292
ebook-viewer kommandorad växel, 293
fetch-ebook-metadata kommandorad växel, 293
lrf2lrs kommandorad växel, 294
lrfviewer kommandorad växel, 294
lrs2lrf kommandorad växel, 295
web2disk kommandorad växel, 296
–viewer, -w
calibre-debug kommandorad växel, 268
–visual-debug
lrfviewer kommandorad växel, 294
–white-background
lrfviewer kommandorad växel, 294
–width, -w
calibredb-list_categories kommandorad växel, 280
–with-library
calibre kommandorad växel, 266
calibre-server kommandorad växel, 270
A
abort_recipe_processing()
re.web.feeds.news.BasicNewsRecipe
40, 140, 303
(calibmetod),
Index
calibre Användarhandbok, Utgåva 2.22.0
abspath_to_name()
(calib- all_non_none_fields()
(calibre.ebooks.oeb.polish.container.Container
re.ebooks.metadata.book.base.Metadata
metod), 342
metod), 178, 196
accept_drag_move_event()
(calib- allowed_in_menu (calibre.gui2.tweak_book.plugin.Tool
re.gui2.actions.InterfaceAction metod), 250,
attribut), 349
332
allowed_in_toolbar
(calibaccept_enter_event()
(calibre.gui2.tweak_book.plugin.Tool
attribut),
re.gui2.actions.InterfaceAction metod), 250,
349
332
API, 351
accepts_drops (calibre.gui2.actions.InterfaceAction attri- apply_container_update_to_gui()
(calibbut), 250, 332
re.gui2.tweak_book.boss.Boss metod), 350
action_add_menu (calibre.gui2.actions.InterfaceAction articles_are_obfuscated
(calibattribut), 250, 331
re.web.feeds.news.BasicNewsRecipe attribut),
action_menu_clone_qaction
(calib44, 143, 307
re.gui2.actions.InterfaceAction
attribut), ASK_TO_ALLOW_CONNECT
(calib250, 331
re.devices.interface.DevicePlugin
attribut),
action_spec (calibre.gui2.actions.InterfaceAction attri241, 322
but), 250, 331
author (calibre.customize.Plugin attribut), 231, 313
action_type (calibre.gui2.actions.InterfaceAction attri- author_data() (calibre.db.cache.Cache metod), 337
but), 250, 332
author_sort_from_authors() (calibre.db.cache.Cache meadd_annotation_to_library()
(calibtod), 337
re.devices.usbms.device.Device
metod), auto_cleanup (calibre.web.feeds.news.BasicNewsRecipe
249, 330
attribut), 44, 144, 307
add_book() (calibre.devices.interface.BookList metod), auto_cleanup_keep
(calib247, 328
re.web.feeds.news.BasicNewsRecipe attribut),
add_books() (calibre.db.cache.Cache metod), 336
44, 144, 307
add_books_to_metadata()
(calib- auto_repeat (calibre.gui2.actions.InterfaceAction attrire.devices.interface.DevicePlugin klassmetod),
but), 250, 331
244, 325
auto_trim_covers
(calibadd_custom_book_data() (calibre.db.cache.Cache mere.ebooks.metadata.sources.base.Source
tod), 336
attribut), 235, 317
add_file() (calibre.ebooks.oeb.polish.container.Container
B
metod), 342
add_format() (calibre.db.cache.Cache metod), 336
BasicNewsRecipe (klass i calibre.web.feeds.news), 40,
add_name_to_manifest()
(calib139, 303
re.ebooks.oeb.polish.container.Container
BCD (calibre.devices.interface.DevicePlugin attribut),
metod), 342
240, 321
add_or_replace_jacket()
(i
modul
calib- book_type (calibre.ebooks.oeb.polish.container.Container
re.ebooks.oeb.polish.jacket), 346
attribut), 343
add_savepoint() (calibre.gui2.tweak_book.boss.Boss me- BookList (klass i calibre.devices.interface), 247, 328
tod), 350
books() (calibre.devices.interface.DevicePlugin metod),
add_toc_thumbnail()
(calib243, 325
re.web.feeds.news.BasicNewsRecipe metod), books_for_field() (calibre.db.cache.Cache metod), 337
40, 140, 303
boss (calibre.gui2.tweak_book.plugin.Tool attribut), 349
adeify_images()
(calib- Boss (klass i calibre.gui2.tweak_book.boss), 350
re.web.feeds.news.BasicNewsRecipe
klass- BuiltinAdd (klass i calibre.utils.formatter_functions),
metod), 40, 140, 303
168, 186
all_book_ids() (calibre.db.cache.Cache metod), 336
BuiltinAnd (klass i calibre.utils.formatter_functions),
all_field_for() (calibre.db.cache.Cache metod), 336
168, 186
all_field_ids() (calibre.db.cache.Cache metod), 336
BuiltinApproximateFormats
(klass
i
caliball_field_keys() (calibre.ebooks.metadata.book.base.Metadata
re.utils.formatter_functions), 169, 187
metod), 178, 196
BuiltinAssign (klass i calibre.utils.formatter_functions),
all_field_names() (calibre.db.cache.Cache metod), 337
175, 193
Index
361
calibre Användarhandbok, Utgåva 2.22.0
BuiltinAuthorLinks
(klass
i
calibre.utils.formatter_functions), 169, 187
BuiltinAuthorSorts
(klass
i
calibre.utils.formatter_functions), 170, 188
BuiltinBooksize
(klass
i
calibre.utils.formatter_functions), 170, 188
BuiltinCapitalize
(klass
i
calibre.utils.formatter_functions), 176, 194
BuiltinCmp (klass i calibre.utils.formatter_functions),
175, 193
BuiltinContains (klass i calibre.utils.formatter_functions),
172, 190
BuiltinCount (klass i calibre.utils.formatter_functions),
173, 191
BuiltinCurrentLibraryName
(klass
i
calibre.utils.formatter_functions), 170, 188
BuiltinCurrentLibraryPath
(klass
i
calibre.utils.formatter_functions), 170, 188
BuiltinDaysBetween
(klass
i
calibre.utils.formatter_functions), 168, 186
BuiltinDivide (klass i calibre.utils.formatter_functions),
168, 186
BuiltinEval (klass i calibre.utils.formatter_functions),
175, 193
BuiltinField (klass i calibre.utils.formatter_functions),
170, 188
BuiltinFinishFormatting
(klass
i
calibre.utils.formatter_functions), 169, 187
BuiltinFirstMatchingCmp
(klass
i
calibre.utils.formatter_functions), 176, 194
BuiltinFirstNonEmpty
(klass
i
calibre.utils.formatter_functions), 172, 190
BuiltinFormatDate
(klass
i
calibre.utils.formatter_functions), 169, 187
BuiltinFormatNumber
(klass
i
calibre.utils.formatter_functions), 169, 187
BuiltinFormatsModtimes
(klass
i
calibre.utils.formatter_functions), 170, 188
BuiltinFormatsPaths
(klass
i
calibre.utils.formatter_functions), 170, 188
BuiltinFormatsSizes
(klass
i
calibre.utils.formatter_functions), 171, 189
BuiltinHasCover
(klass
i
calibre.utils.formatter_functions), 171, 189
BuiltinHumanReadable
(klass
i
calibre.utils.formatter_functions), 169, 187
BuiltinIdentifierInList
(klass
i
calibre.utils.formatter_functions), 173, 191
BuiltinIfempty (klass i calibre.utils.formatter_functions),
172, 190
BuiltinInList (klass i calibre.utils.formatter_functions),
173, 191
BuiltinLanguageCodes
(klass
i
calibre.utils.formatter_functions), 171, 189
362
BuiltinLanguageStrings
(klass
i
calibre.utils.formatter_functions), 171, 189
BuiltinListDifference
(klass
i
calibre.utils.formatter_functions), 173, 191
BuiltinListEquals
(klass
i
calibre.utils.formatter_functions), 174, 192
BuiltinListIntersection
(klass
i
calibre.utils.formatter_functions), 174, 192
BuiltinListitem (klass i calibre.utils.formatter_functions),
173, 191
BuiltinListRe (klass i calibre.utils.formatter_functions),
174, 192
BuiltinListReGroup
(klass
i
calibre.utils.formatter_functions), 174, 192
BuiltinListSort (klass i calibre.utils.formatter_functions),
174, 192
BuiltinListUnion
(klass
i
calibre.utils.formatter_functions), 174, 192
BuiltinLookup (klass i calibre.utils.formatter_functions),
172, 190
BuiltinLowercase
(klass
i
calibre.utils.formatter_functions), 176, 194
BuiltinMultiply (klass i calibre.utils.formatter_functions),
168, 186
BuiltinNot (klass i calibre.utils.formatter_functions), 168,
186
BuiltinOndevice
(klass
i
calibre.utils.formatter_functions), 171, 189
BuiltinOr (klass i calibre.utils.formatter_functions), 168,
186
BuiltinPrint (klass i calibre.utils.formatter_functions),
175, 193
BuiltinRawField
(klass
i
calibre.utils.formatter_functions), 171, 189
BuiltinRawList (klass i calibre.utils.formatter_functions),
171, 189
BuiltinRe (klass i calibre.utils.formatter_functions), 176,
194
BuiltinReGroup
(klass
i
calibre.utils.formatter_functions), 176, 194
BuiltinSelect (klass i calibre.utils.formatter_functions),
173, 191
BuiltinSeriesSort
(klass
i
calibre.utils.formatter_functions), 171, 189
BuiltinShorten (klass i calibre.utils.formatter_functions),
177, 195
BuiltinStrcat (klass i calibre.utils.formatter_functions),
177, 195
BuiltinStrcatMax
(klass
i
calibre.utils.formatter_functions), 177, 195
BuiltinStrcmp (klass i calibre.utils.formatter_functions),
176, 194
BuiltinStrInList (klass i calibre.utils.formatter_functions),
173, 191
Index
calibre Användarhandbok, Utgåva 2.22.0
BuiltinStrlen (klass i calibre.utils.formatter_functions),
–remove-plugin, -r, 267
177, 195
–version, 267
BuiltinSubitems
(klass
i
calib- calibre-debug kommandorad växel
re.utils.formatter_functions), 174, 192
–add-simple-plugin, 267
BuiltinSublist (klass i calibre.utils.formatter_functions),
–command, -c, 267
175, 193
–debug-device-driver, -d, 267
BuiltinSubstr (klass i calibre.utils.formatter_functions),
–default-programs, 268
177, 195
–diff, 268
BuiltinSubtract (klass i calibre.utils.formatter_functions),
–edit-book, -t, 268
168, 186
–exec-file, -e, 268
BuiltinSwapAroundComma
(klass
i
calib–explode-book, -x, 268
re.utils.formatter_functions), 177, 195
–gui, -g, 268
BuiltinSwitch (klass i calibre.utils.formatter_functions),
–gui-debug, 268
172, 190
–help, -h, 268
BuiltinTemplate
(klass
i
calib–inspect-mobi, -m, 268
re.utils.formatter_functions), 175, 193
–paths, 268
BuiltinTest (klass i calibre.utils.formatter_functions),
–py-console, -p, 268
172, 190
–reinitialize-db, 268
BuiltinTitlecase
(klass
i
calib–run-plugin, -r, 268
re.utils.formatter_functions), 176, 194
–shutdown-running-calibre, -s, 268
BuiltinToday (klass i calibre.utils.formatter_functions),
–subset-font, -f, 268
168, 186
–test-build, 268
BuiltinTransliterate
(klass
i
calib–version, 268
re.utils.formatter_functions), 177, 195
–viewer, -w, 268
BuiltinUppercase
(klass
i
calib- calibre-server kommandorad växel
re.utils.formatter_functions), 176, 194
–auto-reload, 269
BuiltinUserCategories
(klass
i
calib–daemonize, 269
re.utils.formatter_functions), 171, 189
–develop, 269
BuiltinVirtualLibraries
(klass
i
calib–help, -h, 269
re.utils.formatter_functions), 172, 190
–max-cover, 269
–max-opds-items, 269
C
–max-opds-ungrouped-items, 269
–password, 269
Cache (klass i calibre.db.cache), 336
–pidfile, 269
cached_cover_url_is_reliable
(calib–port, -p, 269
re.ebooks.metadata.sources.base.Source
–restriction, 269
attribut), 235, 316
–thread-pool, 269
calibre kommandorad växel
–timeout, -t, 269
–detach, 266
–url-prefix, 269
–help, -h, 266
–username, 270
–ignore-plugins, 266
–version, 270
–no-update-check, 266
–with-library, 270
–shutdown-running-calibre, -s, 266
calibre-smtp kommandorad växel
–start-in-tray, 266
–attachment, -a, 270
–verbose, -v, 266
–encryption-method, -e, 271
–version, 266
–fork, -f, 270
–with-library, 266
–help, -h, 270
calibre-customize kommandorad växel
–localhost, -l, 270
–add-plugin, -a, 267
–outbox, -o, 270
–build-plugin, -b, 267
–password, -p, 271
–customize-plugin, 267
–port, 271
–disable-plugin, 267
–relay, -r, 271
–enable-plugin, 267
–subject, -s, 270
–help, -h, 267
–timeout, -t, 270
–list-plugins, -l, 267
Index
363
calibre Användarhandbok, Utgåva 2.22.0
–username, -u, 271
–verbose, -v, 270
–version, 270
calibre.customize (modul), 230, 312
calibre.customize.conversion (modul), 238, 319
calibre.db.cache (modul), 336
calibre.devices.interface (modul), 240, 321
calibre.ebooks.metadata.book.base (modul), 177, 195
calibre.ebooks.metadata.sources.base (modul), 235, 316
calibre.ebooks.oeb.polish.container (modul), 342
calibre.ebooks.oeb.polish.cover (modul), 347
calibre.ebooks.oeb.polish.css (modul), 348
calibre.ebooks.oeb.polish.jacket (modul), 346
calibre.ebooks.oeb.polish.pretty (modul), 346
calibre.ebooks.oeb.polish.replace (modul), 346
calibre.ebooks.oeb.polish.split (modul), 347
calibre.ebooks.oeb.polish.toc (modul), 348
calibre.gui2.tweak_book.boss (modul), 350
calibre.gui2.tweak_book.plugin.Tool (modul), 348
calibre.utils.formatter_functions (modul), 168, 186
calibre.web.feeds.news (modul), 40, 139, 303
calibredb-add kommandorad växel
–authors, -a, 272
–cover, -c, 273
–duplicates, -d, 273
–empty, -e, 273
–help, -h, 273
–isbn, -i, 273
–languages, -l, 273
–one-book-per-directory, -1, 273
–recurse, -r, 273
–series, -s, 273
–series-index, -S, 273
–tags, -T, 273
–title, -t, 273
–version, 273
calibredb-add_custom_column kommandorad växel
–display, 277
–help, -h, 277
–is-multiple, 277
–version, 277
calibredb-add_format kommandorad växel
–dont-replace, 274
–help, -h, 274
–version, 274
calibredb-backup_metadata kommandorad växel
–all, 280
–help, -h, 280
–version, 280
calibredb-catalog kommandorad växel
–fields, 276
–help, -h, 276
–ids, -i, 276
–search, -s, 276
364
–sort-by, 276
–verbose, -v, 277
–version, 277
calibredb-check_library kommandorad växel
–csv, -c, 279
–help, -h, 279
–ignore_extensions, -e, 279
–ignore_names, -n, 279
–report, -r, 279
–version, 279
calibredb-clone kommandorad växel
–help, -h, 280
–version, 281
calibredb-custom_columns kommandorad växel
–details, -d, 278
–help, -h, 278
–version, 278
calibredb-embed_metadata kommandorad växel
–help, -h, 281
–only-formats, -f, 281
–version, 281
calibredb-export kommandorad växel
–all, 275
–dont-asciiize, 275
–dont-save-cover, 275
–dont-update-metadata, 275
–dont-write-opf, 275
–formats, 275
–help, -h, 276
–replace-whitespace, 276
–single-dir, 276
–template, 276
–timefmt, 276
–to-dir, 276
–to-lowercase, 276
–version, 276
calibredb-list kommandorad växel
–ascending, 272
–fields, -f, 272
–for-machine, 272
–help, -h, 272
–limit, 272
–line-width, -w, 272
–prefix, 272
–search, -s, 272
–separator, 272
–sort-by, 272
–version, 272
calibredb-list_categories kommandorad växel
–categories, -r, 279
–csv, -c, 280
–help, -h, 280
–item_count, -i, 280
–quote, -q, 280
Index
calibre Användarhandbok, Utgåva 2.22.0
–separator, -s, 280
–version, 280
–width, -w, 280
calibredb-remove kommandorad växel
–help, -h, 273
–version, 273
calibredb-remove_custom_column kommandorad växel
–force, -f, 278
–help, -h, 278
–version, 278
calibredb-remove_format kommandorad växel
–help, -h, 274
–version, 274
calibredb-restore_database kommandorad växel
–help, -h, 279
–really-do-it, -r, 279
–version, 279
calibredb-saved_searches kommandorad växel
–help, -h, 277
–version, 277
calibredb-set_custom kommandorad växel
–append, -a, 278
–help, -h, 278
–version, 278
calibredb-set_metadata kommandorad växel
–field, -f, 275
–help, -h, 275
–list-fields, -l, 275
–version, 275
calibredb-show_metadata kommandorad växel
–as-opf, 274
–help, -h, 274
–version, 274
can_be_disabled (calibre.customize.Plugin attribut), 231,
313
CAN_DO_DEVICE_DB_PLUGBOARD
(calibre.devices.interface.DevicePlugin
attribut),
240, 322
can_get_multiple_covers
(calibre.ebooks.metadata.sources.base.Source
attribut), 235, 316
can_handle() (calibre.devices.interface.DevicePlugin metod), 242, 323
can_handle_windows()
(calibre.devices.interface.DevicePlugin
metod),
242, 323
CAN_SET_METADATA
(calibre.devices.interface.DevicePlugin
attribut),
240, 322
capabilities (calibre.ebooks.metadata.sources.base.Source
attribut), 235, 316
card_prefix() (calibre.devices.interface.DevicePlugin metod), 243, 324
CatalogPlugin (klass i calibre.customize), 234, 315
Index
category (calibre.customize.PreferencesPlugin attribut),
252, 334
category_order (calibre.customize.PreferencesPlugin attribut), 252, 333
center_navbar (calibre.web.feeds.news.BasicNewsRecipe
attribut), 44, 144, 307
change_font() (i modul calibre.ebooks.oeb.polish.fonts),
348
changed_signal (calibre.gui2.preferences.ConfigWidgetInterface
attribut), 253, 334
clean_downloaded_metadata()
(calibre.ebooks.metadata.sources.base.Source
metod), 236, 317
cleanup() (calibre.web.feeds.news.BasicNewsRecipe metod), 40, 140, 303
CLI (klass i calibre.devices.usbms.cli), 249, 330
cli_main() (calibre.customize.Plugin metod), 233, 314
cli_options (calibre.customize.CatalogPlugin attribut),
234, 315
clone_browser()
(calibre.web.feeds.news.BasicNewsRecipe metod),
40, 140, 303
close_editor() (calibre.gui2.tweak_book.boss.Boss metod), 350
commit() (calibre.ebooks.oeb.polish.container.Container
metod), 343
commit() (calibre.gui2.preferences.ConfigWidgetInterface
metod), 253, 334
commit_all_editors_to_container()
(calibre.gui2.tweak_book.boss.Boss metod), 350
commit_item() (calibre.ebooks.oeb.polish.container.Container
metod), 343
common_options
(calibre.customize.conversion.InputFormatPlugin
attribut), 238, 319
common_options
(calibre.customize.conversion.OutputFormatPlugin
attribut), 239, 320
compress_news_images
(calibre.web.feeds.news.BasicNewsRecipe attribut),
44, 144, 308
compress_news_images_auto_size
(calibre.web.feeds.news.BasicNewsRecipe attribut),
44, 144, 308
compress_news_images_max_size
(calibre.web.feeds.news.BasicNewsRecipe attribut),
45, 144, 308
config_help_message
(calibre.ebooks.metadata.sources.base.Source
attribut), 235, 316
config_widget (calibre.customize.PreferencesPlugin attribut), 252, 333
config_widget() (calibre.customize.Plugin metod), 232,
313
365
calibre Användarhandbok, Utgåva 2.22.0
config_widget() (calibre.devices.interface.DevicePlugin debug_managed_device_detection()
(calibklassmetod), 244, 326
re.devices.interface.DevicePlugin
metod),
ConfigWidgetBase (klass i calibre.gui2.preferences), 253,
242, 323
335
decode() (calibre.ebooks.oeb.polish.container.Container
ConfigWidgetInterface (klass i calibre.gui2.preferences),
metod), 343
252, 334
deepcopy() (calibre.ebooks.metadata.book.base.Metadata
Container (klass i calibre.ebooks.oeb.polish.container),
metod), 178, 196
342
default_cover() (calibre.web.feeds.news.BasicNewsRecipe
contains(), 155
metod), 40, 140, 304
conversion_options
(calib- delay (calibre.web.feeds.news.BasicNewsRecipe attrire.web.feeds.news.BasicNewsRecipe attribut),
but), 45, 145, 308
45, 144, 308
delete_books() (calibre.devices.interface.DevicePlugin
convert() (calibre.customize.conversion.InputFormatPlugin
metod), 244, 325
metod), 238, 319
delete_custom_book_data() (calibre.db.cache.Cache meconvert() (calibre.customize.conversion.OutputFormatPlugin
tod), 337
metod), 239, 320
description (calibre.customize.Plugin attribut), 231, 312
copy_cover_to() (calibre.db.cache.Cache metod), 337
description (calibre.customize.PreferencesPlugin attricopy_format_to() (calibre.db.cache.Cache metod), 337
but), 252, 334
core_usage (calibre.customize.conversion.InputFormatPlugindescription (calibre.web.feeds.news.BasicNewsRecipe atattribut), 238, 319
tribut), 45, 145, 308
cover() (calibre.db.cache.Cache metod), 337
detect_managed_devices()
(calibcover_margins (calibre.web.feeds.news.BasicNewsRecipe
re.devices.interface.DevicePlugin
metod),
attribut), 45, 144, 308
241, 323
create_action()
(calibre.gui2.tweak_book.plugin.Tool Device (klass i calibre.devices.usbms.device), 248, 329
metod), 349
DevicePlugin (klass i calibre.devices.interface), 240, 321
create_inline_toc()
(i
modul
calib- dirty()
(calibre.ebooks.oeb.polish.container.Container
re.ebooks.oeb.polish.toc), 348
metod), 343
create_menu_action()
(calib- do_user_config() (calibre.customize.Plugin metod), 232,
re.gui2.actions.InterfaceAction metod), 251,
313
332
dont_add_to (calibre.gui2.actions.InterfaceAction attricreate_widget()
(calibre.customize.PreferencesPlugin
but), 250, 331
metod), 252, 334
dont_remove_from (calibre.gui2.actions.InterfaceAction
CSS, 351
attribut), 250, 331
current_container (calibre.gui2.tweak_book.plugin.Tool download() (calibre.web.feeds.news.BasicNewsRecipe
attribut), 349
metod), 40, 140, 304
currently_editing (calibre.gui2.tweak_book.boss.Boss at- download_cover()
(calibtribut), 350
re.ebooks.metadata.sources.base.Source
custom_field_keys()
(calibmetod), 237, 318
re.ebooks.metadata.book.base.Metadata
drop_event() (calibre.gui2.actions.InterfaceAction memetod), 178, 196
tod), 250, 332
customization_help() (calibre.customize.Plugin metod),
E
232, 314
customize_context_menu()
(calib- ebook-convert kommandorad växel
re.customize.ViewerPlugin
metod),
254,
–asciiize, 283
336
–author-sort, 288
customize_ui() (calibre.customize.ViewerPlugin metod),
–authors, 288
254, 336
–base-font-size, 283
–book-producer, 288
D
–change-justification, 283
data_for_find_identical_books() (calibre.db.cache.Cache
–chapter, 287
metod), 337
–chapter-mark, 287
data_for_has_book() (calibre.db.cache.Cache metod),
–comments, 288
337
–cover, 288
–debug-pipeline, -d, 289
366
Index
calibre Användarhandbok, Utgåva 2.22.0
–disable-dehyphenate, 285
–disable-delete-blank-paragraphs, 285
–disable-fix-indents, 285
–disable-font-rescaling, 283
–disable-format-scene-breaks, 286
–disable-italicize-common-cases, 286
–disable-markup-chapter-headings, 286
–disable-remove-fake-margins, 287
–disable-renumber-headings, 286
–disable-unwrap-lines, 286
–dont-split-on-page-breaks, 282
–duplicate-links-in-toc, 287
–embed-all-fonts, 283
–embed-font-family, 284
–enable-heuristics, 286
–epub-flatten, 282
–epub-inline-toc, 282
–epub-toc-at-end, 283
–expand-css, 284
–extra-css, 284
–extract-to, 283
–filter-css, 284
–flow-size, 283
–font-size-mapping, 284
–help, -h, 282
–html-unwrap-factor, 286
–input-encoding, 282
–input-profile, 282
–insert-blank-line, 284
–insert-blank-line-size, 284
–insert-metadata, 287
–isbn, 288
–keep-ligatures, 284
–language, 288
–level1-toc, 287
–level2-toc, 287
–level3-toc, 287
–line-height, 284
–linearize-tables, 284
–list-recipes, 282
–margin-bottom, 284
–margin-left, 285
–margin-right, 285
–margin-top, 285
–max-toc-links, 288
–minimum-line-height, 285
–no-chapters-in-toc, 288
–no-default-epub-cover, 283
–no-svg-cover, 283
–output-profile, 282
–page-breaks-before, 287
–prefer-metadata-cover, 287
–preserve-cover-aspect-ratio, 283
–pretty-print, 283
Index
–pubdate, 288
–publisher, 288
–rating, 288
–read-metadata-from-opf, -m, 288
–remove-first-image, 287
–remove-paragraph-spacing, 285
–remove-paragraph-spacing-indent-size, 285
–replace-scene-breaks, 286
–search-replace, 286
–series, 288
–series-index, 288
–smarten-punctuation, 285
–sr1-replace, 286
–sr1-search, 286
–sr2-replace, 286
–sr2-search, 286
–sr3-replace, 286
–sr3-search, 286
–start-reading-at, 287
–subset-embedded-fonts, 285
–tags, 289
–timestamp, 289
–title, 289
–title-sort, 289
–toc-filter, 288
–toc-threshold, 288
–toc-title, 283
–unsmarten-punctuation, 285
–use-auto-toc, 288
–verbose, -v, 289
–version, 282
ebook-edit kommandorad växel
–detach, 289
–help, -h, 289
–version, 289
ebook-meta kommandorad växel
–author-sort, 290
–authors, -a, 290
–book-producer, -k, 290
–category, 290
–comments, -c, 290
–cover, 290
–date, -d, 290
–from-opf, 290
–get-cover, 290
–help, -h, 290
–identifier, 290
–index, -i, 290
–isbn, 290
–language, -l, 290
–lrf-bookid, 290
–publisher, -p, 290
–rating, -r, 291
–series, -s, 291
367
calibre Användarhandbok, Utgåva 2.22.0
–tags, 291
–title, -t, 291
–title-sort, 291
–to-opf, 291
–version, 291
ebook-polish kommandorad växel
–cover, -c, 291
–embed-fonts, -e, 291
–help, -h, 291
–jacket, -j, 291
–opf, -o, 291
–remove-jacket, 292
–remove-unused-css, -u, 292
–smarten-punctuation, -p, 292
–subset-fonts, -f, 292
–verbose, 292
–version, 292
ebook-viewer kommandorad växel
–debug-javascript, 292
–detach, 292
–full-screen, -f, 292
–help, -h, 292
–open-at, 292
–raise-window, 292
–version, 293
edit_file() (calibre.gui2.tweak_book.boss.Boss metod),
350
eject() (calibre.devices.interface.DevicePlugin metod),
242, 324
embed_metadata() (calibre.db.cache.Cache metod), 337
encoding (calibre.web.feeds.news.BasicNewsRecipe attribut), 45, 145, 308
exists() (calibre.ebooks.oeb.polish.container.Container
metod), 343
extra_css (calibre.web.feeds.news.BasicNewsRecipe attribut), 45, 145, 308
extract_readable_article()
(calibre.web.feeds.news.BasicNewsRecipe metod),
40, 140, 304
field_for() (calibre.db.cache.Cache metod), 337
field_ids_for() (calibre.db.cache.Cache metod), 338
file_type (calibre.customize.conversion.OutputFormatPlugin
attribut), 239, 320
file_types (calibre.customize.CatalogPlugin attribut),
234, 315
file_types (calibre.customize.conversion.InputFormatPlugin
attribut), 238, 319
file_types (calibre.customize.FileTypePlugin attribut),
233, 314
file_types (calibre.customize.MetadataReaderPlugin attribut), 234, 315
file_types (calibre.customize.MetadataWriterPlugin attribut), 234, 315
filename_callback()
(calibre.devices.usbms.device.Device
metod),
249, 330
filesize() (calibre.ebooks.oeb.polish.container.Container
metod), 343
FileTypePlugin (klass i calibre.customize), 233, 314
filter_css() (i modul calibre.ebooks.oeb.polish.css), 348
filter_regexps (calibre.web.feeds.news.BasicNewsRecipe
attribut), 45, 145, 309
find_identical_books() (calibre.db.cache.Cache metod),
338
fix_all_html() (i modul calibre.ebooks.oeb.polish.pretty),
346
fix_html() (i modul calibre.ebooks.oeb.polish.pretty), 346
for_viewer (calibre.customize.conversion.InputFormatPlugin
attribut), 238, 319
format() (calibre.db.cache.Cache metod), 338
format_abspath() (calibre.db.cache.Cache metod), 338
format_field() (calibre.ebooks.metadata.book.base.Metadata
metod), 179, 197
format_hash() (calibre.db.cache.Cache metod), 338
format_metadata() (calibre.db.cache.Cache metod), 338
FORMATS (calibre.devices.interface.DevicePlugin attribut), 240, 321
formats() (calibre.db.cache.Cache metod), 339
free_space() (calibre.devices.interface.DevicePlugin meF
tod), 243, 324
from_files() (i modul calibre.ebooks.oeb.polish.toc), 348
fast_field_for() (calibre.db.cache.Cache metod), 337
feeds (calibre.web.feeds.news.BasicNewsRecipe attri- from_links() (i modul calibre.ebooks.oeb.polish.toc), 348
from_xpaths() (i modul calibre.ebooks.oeb.polish.toc),
but), 45, 145, 309
348
fetch-ebook-metadata kommandorad växel
–authors, -a, 293
G
–cover, -c, 293
–help, -h, 293
generate_item() (calibre.ebooks.oeb.polish.container.Container
–isbn, -i, 293
metod), 343
–opf, -o, 293
genesis() (calibre.gui2.actions.InterfaceAction metod),
–timeout, -d, 293
251, 333
–title, -t, 293
genesis() (calibre.gui2.preferences.ConfigWidgetInterface
–verbose, -v, 293
metod), 253, 334
–version, 293
368
Index
calibre Användarhandbok, Utgåva 2.22.0
get_all_standard_metadata()
(calib- get_masthead_title()
(calibre.ebooks.metadata.book.base.Metadata
re.web.feeds.news.BasicNewsRecipe metod),
metod), 178, 196
41, 141, 304
get_all_user_metadata()
(calib- get_masthead_url()
(calibre.ebooks.metadata.book.base.Metadata
re.web.feeds.news.BasicNewsRecipe metod),
metod), 178, 196
41, 141, 304
get_annotations() (calibre.devices.usbms.device.Device get_metadata() (calibre.customize.MetadataReaderPlugin
metod), 249, 330
metod), 234, 315
get_article_url()
(calib- get_metadata() (calibre.db.cache.Cache metod), 339
re.web.feeds.news.BasicNewsRecipe metod), get_next_series_num_for() (calibre.db.cache.Cache me41, 140, 304
tod), 339
get_author_tokens()
(calib- get_obfuscated_article()
(calibre.ebooks.metadata.sources.base.Source
re.web.feeds.news.BasicNewsRecipe metod),
metod), 235, 317
41, 141, 305
get_book_url() (calibre.ebooks.metadata.sources.base.Source
get_option() (calibre.devices.interface.DevicePlugin memetod), 236, 317
tod), 246, 327
get_book_url_name()
(calib- get_proxy_metadata() (calibre.db.cache.Cache metod),
re.ebooks.metadata.sources.base.Source
339
metod), 236, 317
get_recommended_folders()
(i
modul
calibget_book_urls() (calibre.ebooks.metadata.sources.base.Source
re.ebooks.oeb.polish.replace), 346
metod), 236, 317
get_standard_metadata()
(calibget_browser() (calibre.web.feeds.news.BasicNewsRecipe
re.ebooks.metadata.book.base.Metadata
metod), 41, 140, 304
metod), 178, 196
get_cached_cover_url()
(calib- get_title_tokens()
(calibre.ebooks.metadata.sources.base.Source
re.ebooks.metadata.sources.base.Source
metod), 236, 317
metod), 235, 317
get_categories() (calibre.db.cache.Cache metod), 339
get_usage_count_by_id() (calibre.db.cache.Cache meget_collections() (calibre.devices.interface.BookList metod), 339
tod), 247, 329
get_user_blacklisted_devices()
(calibget_cover_url() (calibre.web.feeds.news.BasicNewsRecipe
re.devices.interface.DevicePlugin
metod),
metod), 41, 141, 304
245, 327
get_custom_book_data() (calibre.db.cache.Cache metod), get_user_metadata()
(calib339
re.ebooks.metadata.book.base.Metadata
get_device_information()
(calibmetod), 178, 196
re.devices.interface.DevicePlugin
metod), guess_type() (calibre.ebooks.oeb.polish.container.Container
243, 324
metod), 343
get_device_uid() (calibre.devices.interface.DevicePlugin gui (calibre.gui2.tweak_book.plugin.Tool attribut), 349
metod), 245, 327
gui_category (calibre.customize.PreferencesPlugin attriget_driveinfo() (calibre.devices.interface.DevicePlugin
but), 252, 334
metod), 243, 324
gui_configuration_widget()
(calibget_feeds() (calibre.web.feeds.news.BasicNewsRecipe
re.customize.conversion.InputFormatPlugin
metod), 41, 141, 304
metod), 239, 320
get_file() (calibre.devices.interface.DevicePlugin metod), gui_configuration_widget()
(calib244, 326
re.customize.conversion.OutputFormatPlugin
get_id_map() (calibre.db.cache.Cache metod), 339
metod), 239, 321
get_identifiers() (calibre.ebooks.metadata.book.base.Metadata
gui_layout_complete()
(calibmetod), 178, 196
re.gui2.actions.InterfaceAction metod), 251,
get_ids_for_custom_book_data()
(calib333
re.db.cache.Cache metod), 339
gui_name (calibre.customize.PreferencesPlugin attribut),
get_images() (calibre.customize.conversion.InputFormatPlugin
252, 334
metod), 238, 319
guide_type_map
(calibget_item_id() (calibre.db.cache.Cache metod), 339
re.ebooks.oeb.polish.container.Container
get_item_ids() (calibre.db.cache.Cache metod), 339
attribut), 343
get_item_name() (calibre.db.cache.Cache metod), 339
Index
369
calibre Användarhandbok, Utgåva 2.22.0
H
is_configured() (calibre.ebooks.metadata.sources.base.Source
metod), 235, 317
has_book() (calibre.db.cache.Cache metod), 339
is_dynamically_controllable()
(calibhas_format() (calibre.db.cache.Cache metod), 339
re.devices.interface.DevicePlugin
metod),
has_html_comments
(calib246, 327
re.ebooks.metadata.sources.base.Source
is_image_collection
(calibattribut), 235, 316
re.customize.conversion.InputFormatPlugin
has_id() (calibre.db.cache.Cache metod), 340
attribut), 238, 319
has_name() (calibre.ebooks.oeb.polish.container.Container
is_link_wanted()
(calibmetod), 343
re.web.feeds.news.BasicNewsRecipe
metod),
href_to_name() (calibre.ebooks.oeb.polish.container.Container
42, 141, 305
metod), 343
is_null()
(calibre.ebooks.metadata.book.base.Metadata
HTML, 351
metod), 178, 196
is_running() (calibre.devices.interface.DevicePlugin meI
tod), 246, 328
icon (calibre.customize.PreferencesPlugin attribut), 252,
is_usb_connected()
(calib334
re.devices.interface.DevicePlugin
metod),
icon (calibre.devices.interface.DevicePlugin attribut),
241, 323
240, 322
iterlinks()
(calibre.ebooks.oeb.polish.container.Container
identify() (calibre.ebooks.metadata.sources.base.Source
metod),
343
metod), 236, 318
identify_results_keygen()
(calibJ
re.ebooks.metadata.sources.base.Source
javascript_login()
(calibmetod), 236, 317
re.web.feeds.news.BasicNewsRecipe
metod),
ignore_connected_device()
(calib42, 141, 305
re.devices.interface.DevicePlugin
metod),
245, 327
ignore_duplicate_articles
(calib- K
re.web.feeds.news.BasicNewsRecipe attribut), keep_only_tags (calibre.web.feeds.news.BasicNewsRecipe
attribut), 46, 145, 309
46, 145, 309
kommandorad
växel
image_url_processor()
(calib–dont-notify-gui,
271
re.web.feeds.news.BasicNewsRecipe
klass–library-path,
271
metod), 41, 141, 305
index_to_soup()
(calibre.web.feeds.news.BasicNewsRecipe metod), L
42, 141, 305
language (calibre.web.feeds.news.BasicNewsRecipe atinit() (calibre.db.cache.Cache metod), 340
tribut), 46, 146, 309
initialization_complete()
(calib- library_changed() (calibre.gui2.actions.InterfaceAction
re.gui2.actions.InterfaceAction metod), 252,
metod), 251, 333
333
load_actual_plugin()
(calibinitialize() (calibre.customize.CatalogPlugin metod), 234,
re.customize.InterfaceActionBase
metod),
316
252, 333
initialize() (calibre.customize.Plugin metod), 232, 313
load_fonts() (calibre.customize.ViewerPlugin metod),
initialize() (calibre.gui2.preferences.ConfigWidgetInterface
254, 335
metod), 253, 334
load_javascript() (calibre.customize.ViewerPlugin meInputFormatPlugin (klass i calibre.customize.conversion),
tod), 254, 335
238, 319
load_resources() (calibre.customize.Plugin metod), 232,
insert_into_xml()
(calib313
re.ebooks.oeb.polish.container.Container
load_resources()
(calibre.gui2.actions.InterfaceAction
metod), 343
metod), 251, 332
InterfaceAction (klass i calibre.gui2.actions), 249, 331
location_selected() (calibre.gui2.actions.InterfaceAction
InterfaceActionBase (klass i calibre.customize), 252, 333
metod), 251, 333
InternalMetadataCompareKeyGen (klass i calib- LRF, 351
re.ebooks.metadata.sources.base), 237, 318
lrf2lrs kommandorad växel
–dont-output-resources, 294
370
Index
calibre Användarhandbok, Utgåva 2.22.0
–help, -h, 294
–output, -o, 294
–verbose, 294
–version, 294
lrfviewer kommandorad växel
–disable-hyphenation, 294
–help, -h, 294
–profile, 294
–verbose, 294
–version, 294
–visual-debug, 294
–white-background, 294
lrs2lrf kommandorad växel
–help, -h, 295
–lrs, 295
–output, -o, 295
–verbose, 295
–version, 295
M
MANAGES_DEVICE_PRESENCE
(calibre.devices.interface.DevicePlugin
attribut),
241, 322
manifest_has_name()
(calibre.ebooks.oeb.polish.container.Container
metod), 343
manifest_id_map
(calibre.ebooks.oeb.polish.container.Container
attribut), 344
manifest_type_map
(calibre.ebooks.oeb.polish.container.Container
attribut), 344
mark_as_cover()
(i
modul
calibre.ebooks.oeb.polish.cover), 347
mark_as_titlepage()
(i
modul
calibre.ebooks.oeb.polish.cover), 347
masthead_url (calibre.web.feeds.news.BasicNewsRecipe
attribut), 46, 146, 309
match_regexps (calibre.web.feeds.news.BasicNewsRecipe
attribut), 46, 146, 309
max_articles_per_feed
(calibre.web.feeds.news.BasicNewsRecipe attribut),
46, 146, 309
MAX_PATH_LEN (calibre.devices.usbms.device.Device
attribut), 248, 330
merge() (i modul calibre.ebooks.oeb.polish.split), 347
Metadata (klass i calibre.ebooks.metadata.book.base),
177, 195
metadata_for_field()
(calibre.ebooks.metadata.book.base.Metadata
metod), 178, 196
MetadataReaderPlugin (klass i calibre.customize), 234,
315
Index
MetadataWriterPlugin (klass i calibre.customize), 234,
315
mi (calibre.ebooks.oeb.polish.container.Container attribut), 344
minimum_calibre_version (calibre.customize.Plugin attribut), 231, 313
multisort() (calibre.db.cache.Cache metod), 340
multisplit() (i modul calibre.ebooks.oeb.polish.split), 347
N
name (calibre.customize.Plugin attribut), 231, 312
name (calibre.gui2.actions.InterfaceAction attribut), 250,
331
name (calibre.gui2.tweak_book.plugin.Tool attribut), 349
name(), 155
name_order (calibre.customize.PreferencesPlugin attribut), 252, 334
name_to_abspath()
(calibre.ebooks.oeb.polish.container.Container
metod), 344
name_to_href() (calibre.ebooks.oeb.polish.container.Container
metod), 344
names_that_must_not_be_changed
(calibre.ebooks.oeb.polish.container.Container
attribut), 344
names_that_must_not_be_removed
(calibre.ebooks.oeb.polish.container.Container
attribut), 344
names_that_need_not_be_manifested
(calibre.ebooks.oeb.polish.container.Container
attribut), 344
needs_subscription
(calibre.web.feeds.news.BasicNewsRecipe attribut),
46, 146, 310
NEWS_IN_FOLDER
(calibre.devices.usbms.device.Device
attribut),
248, 330
no_stylesheets (calibre.web.feeds.news.BasicNewsRecipe
attribut), 46, 146, 310
normalize_path() (calibre.devices.usbms.driver.USBMS
klassmetod), 249, 330
NUKE_COMMENTS
(calibre.devices.interface.DevicePlugin
attribut),
241, 322
O
oldest_article (calibre.web.feeds.news.BasicNewsRecipe
attribut), 46, 146, 310
on_import (calibre.customize.FileTypePlugin attribut),
233, 314
on_postimport (calibre.customize.FileTypePlugin attribut), 233, 314
on_postprocess (calibre.customize.FileTypePlugin attribut), 233, 314
371
calibre Användarhandbok, Utgåva 2.22.0
on_preprocess (calibre.customize.FileTypePlugin attribut), 233, 314
open() (calibre.devices.interface.DevicePlugin metod),
242, 323
open()
(calibre.ebooks.oeb.polish.container.Container
metod), 344
open_book() (calibre.gui2.tweak_book.boss.Boss metod), 350
OPEN_FEEDBACK_MESSAGE
(calibre.devices.interface.DevicePlugin
attribut),
241, 322
opf (calibre.ebooks.oeb.polish.container.Container attribut), 344
opf_get_or_create()
(calibre.ebooks.oeb.polish.container.Container
metod), 344
opf_version (calibre.ebooks.oeb.polish.container.Container
attribut), 344
opf_xpath() (calibre.ebooks.oeb.polish.container.Container
metod), 344
options (calibre.customize.conversion.InputFormatPlugin
attribut), 238, 319
options (calibre.customize.conversion.OutputFormatPlugin
attribut), 239, 320
options (calibre.ebooks.metadata.sources.base.Source attribut), 235, 316
OSX_MAIN_MEM_VOL_PAT
(calibre.devices.usbms.device.Device
attribut),
248, 330
output_encoding
(calibre.customize.conversion.InputFormatPlugin
attribut), 238, 319
OutputFormatPlugin
(klass
i
calibre.customize.conversion), 239, 320
P
parse_feeds() (calibre.web.feeds.news.BasicNewsRecipe
metod), 42, 142, 305
parse_index() (calibre.web.feeds.news.BasicNewsRecipe
metod), 42, 142, 305
parsed() (calibre.ebooks.oeb.polish.container.Container
metod), 344
path_sep (calibre.devices.interface.DevicePlugin attribut), 240, 322
Plugin (klass i calibre.customize), 231, 312
populate_article_metadata()
(calibre.web.feeds.news.BasicNewsRecipe metod),
43, 142, 306
popup_type (calibre.gui2.actions.InterfaceAction attribut), 250, 331
post_yank_cleanup()
(calibre.devices.interface.DevicePlugin
metod),
242, 324
372
postimport() (calibre.customize.FileTypePlugin metod),
233, 315
postprocess_book()
(calibre.customize.conversion.InputFormatPlugin
metod), 239, 320
postprocess_book()
(calibre.web.feeds.news.BasicNewsRecipe metod),
43, 142, 306
postprocess_html()
(calibre.web.feeds.news.BasicNewsRecipe metod),
43, 143, 306
pref() (calibre.db.cache.Cache metod), 340
prefer_results_with_isbn
(calibre.ebooks.metadata.sources.base.Source
attribut), 235, 317
PreferencesPlugin (klass i calibre.customize), 252, 333
prepare_addable_books()
(calibre.devices.interface.DevicePlugin
metod),
245, 326
preprocess_html()
(calibre.web.feeds.news.BasicNewsRecipe metod),
43, 143, 306
preprocess_raw_html()
(calibre.web.feeds.news.BasicNewsRecipe metod),
43, 143, 306
preprocess_regexps
(calibre.web.feeds.news.BasicNewsRecipe attribut),
46, 146, 310
pretty_all() (i modul calibre.ebooks.oeb.polish.pretty),
346
pretty_css() (i modul calibre.ebooks.oeb.polish.pretty),
346
pretty_html() (i modul calibre.ebooks.oeb.polish.pretty),
346
pretty_xml() (i modul calibre.ebooks.oeb.polish.pretty),
346
print_version() (calibre.web.feeds.news.BasicNewsRecipe
klassmetod), 43, 143, 307
priority (calibre.customize.Plugin attribut), 231, 313
priority (calibre.gui2.actions.InterfaceAction attribut),
250, 331
PRODUCT_ID (calibre.devices.interface.DevicePlugin
attribut), 240, 321
publication_type
(calibre.web.feeds.news.BasicNewsRecipe attribut),
47, 146, 310
R
raw_data() (calibre.ebooks.oeb.polish.container.Container
metod), 344
re:test(), 155
read_backup() (calibre.db.cache.Cache metod), 340
Recept, 351
Index
calibre Användarhandbok, Utgåva 2.22.0
recipe_disabled (calibre.web.feeds.news.BasicNewsRecipe remove_unused_css()
(i
modul
calibattribut), 47, 146, 310
re.ebooks.oeb.polish.css), 348
recommendations
(calib- rename() (calibre.ebooks.oeb.polish.container.Container
re.customize.conversion.InputFormatPlugin
metod), 345
attribut), 238, 319
rename_files()
(i
modul
calibrecommendations
(calibre.ebooks.oeb.polish.replace), 346
re.customize.conversion.OutputFormatPlugin
rename_items() (calibre.db.cache.Cache metod), 340
attribut), 239, 320
replace() (calibre.ebooks.oeb.polish.container.Container
recursions (calibre.web.feeds.news.BasicNewsRecipe atmetod), 345
tribut), 47, 146, 310
replace_links() (calibre.ebooks.oeb.polish.container.Container
refresh_gui() (calibre.gui2.preferences.ConfigWidgetInterface
metod), 345
metod), 253, 334
replace_links()
(i
modul
calibregexp, 352
re.ebooks.oeb.polish.replace), 346
register()
(calibre.gui2.preferences.ConfigWidgetBase requires_version
(calibmetod), 253, 335
re.web.feeds.news.BasicNewsRecipe attribut),
register_shortcut() (calibre.gui2.tweak_book.plugin.Tool
48, 147, 311
metod), 349
reset() (calibre.devices.interface.DevicePlugin metod),
relpath() (calibre.ebooks.oeb.polish.container.Container
242, 323
metod), 345
restart_critical (calibre.gui2.preferences.ConfigWidgetInterface
remove_attributes
(calibattribut), 253, 334
re.web.feeds.news.BasicNewsRecipe attribut), restore_book() (calibre.db.cache.Cache metod), 340
47, 146, 310
restore_defaults()
(calibremove_book() (calibre.devices.interface.BookList mere.gui2.preferences.ConfigWidgetInterface
tod), 247, 329
metod), 253, 334
remove_books() (calibre.db.cache.Cache metod), 340
restore_defaults_desc
(calibremove_books_from_metadata()
(calibre.gui2.preferences.ConfigWidgetInterface
re.devices.interface.DevicePlugin klassmetod),
attribut), 253, 334
244, 325
restore_original_format() (calibre.db.cache.Cache meremove_empty_feeds
(calibtod), 340
re.web.feeds.news.BasicNewsRecipe attribut), reverse_article_order
(calib47, 147, 310
re.web.feeds.news.BasicNewsRecipe attribut),
remove_formats() (calibre.db.cache.Cache metod), 340
48, 147, 311
remove_from_spine()
(calib- rewind_savepoint() (calibre.gui2.tweak_book.boss.Boss
re.ebooks.oeb.polish.container.Container
metod), 351
metod), 345
RSS, 351
remove_from_xml()
(calib- run() (calibre.customize.CatalogPlugin metod), 234, 316
re.ebooks.oeb.polish.container.Container
run() (calibre.customize.FileTypePlugin metod), 233, 314
metod), 345
run_javascript() (calibre.customize.ViewerPlugin metod),
remove_item() (calibre.ebooks.oeb.polish.container.Container
254, 335
metod), 345
S
remove_items() (calibre.db.cache.Cache metod), 340
remove_jacket()
(i
modul
calib- safe_read_lock (calibre.db.cache.Cache attribut), 340
re.ebooks.oeb.polish.jacket), 346
sanitize_callback() (calibre.devices.usbms.device.Device
remove_javascript
(calibmetod), 248, 330
re.web.feeds.news.BasicNewsRecipe attribut), sanitize_path_components()
(calib47, 147, 310
re.devices.usbms.device.Device
metod),
remove_tags (calibre.web.feeds.news.BasicNewsRecipe
249, 330
attribut), 47, 147, 310
save_book() (calibre.gui2.tweak_book.boss.Boss metod),
remove_tags_after
(calib351
re.web.feeds.news.BasicNewsRecipe attribut), save_original_format() (calibre.db.cache.Cache metod),
47, 147, 311
341
remove_tags_before
(calib- save_settings() (calibre.customize.Plugin metod), 232,
re.web.feeds.news.BasicNewsRecipe attribut),
313
47, 147, 311
Index
373
calibre Användarhandbok, Utgåva 2.22.0
save_settings() (calibre.devices.interface.DevicePlugin show_editor() (calibre.gui2.tweak_book.boss.Boss meklassmetod), 244, 326
tod), 351
scale_news_images
(calib- shutdown() (calibre.devices.interface.DevicePlugin mere.web.feeds.news.BasicNewsRecipe attribut),
tod), 245, 326
48, 147, 311
shutting_down()
(calibre.gui2.actions.InterfaceAction
scale_news_images_to_device
(calibmetod), 252, 333
re.web.feeds.news.BasicNewsRecipe attribut), simultaneous_downloads
(calib48, 147, 311
re.web.feeds.news.BasicNewsRecipe attribut),
search() (calibre.db.cache.Cache metod), 341
48, 147, 311
serialize_item() (calibre.ebooks.oeb.polish.container.Container
skip_ad_pages()
(calibmetod), 345
re.web.feeds.news.BasicNewsRecipe metod),
set_all_user_metadata()
(calib43, 143, 307
re.ebooks.metadata.book.base.Metadata
SLOW_DRIVEINFO
(calibmetod), 178, 196
re.devices.interface.DevicePlugin
attribut),
set_conversion_options() (calibre.db.cache.Cache me241, 322
tod), 341
smart_update() (calibre.ebooks.metadata.book.base.Metadata
set_cover() (calibre.db.cache.Cache metod), 341
metod), 179, 197
set_cover() (i modul calibre.ebooks.oeb.polish.cover), sort_index_by() (calibre.web.feeds.news.BasicNewsRecipe
347
metod), 44, 143, 307
set_driveinfo_name()
(calib- Source (klass i calibre.ebooks.metadata.sources.base),
re.devices.interface.DevicePlugin
metod),
235, 316
245, 326
specialize() (calibre.customize.conversion.InputFormatPlugin
set_field() (calibre.db.cache.Cache metod), 341
metod), 239, 320
set_identifier() (calibre.ebooks.metadata.book.base.Metadataspecialize_css_for_output()
(calibmetod), 178, 196
re.customize.conversion.OutputFormatPlugin
set_identifiers() (calibre.ebooks.metadata.book.base.Metadata
metod), 239, 321
metod), 178, 196
specialize_global_preferences()
(calibset_library_info() (calibre.devices.interface.DevicePlugin
re.devices.interface.DevicePlugin
metod),
metod), 246, 327
245, 327
set_metadata() (calibre.customize.MetadataWriterPlugin spine_items (calibre.ebooks.oeb.polish.container.Container
metod), 234, 315
attribut), 345
set_metadata() (calibre.db.cache.Cache metod), 341
spine_iter (calibre.ebooks.oeb.polish.container.Container
set_modified() (calibre.gui2.tweak_book.boss.Boss meattribut), 345
tod), 351
spine_names (calibre.ebooks.oeb.polish.container.Container
set_option() (calibre.devices.interface.DevicePlugin meattribut), 345
tod), 246, 327
split() (i modul calibre.ebooks.oeb.polish.split), 347
set_plugboards() (calibre.devices.interface.DevicePlugin split_jobs() (calibre.ebooks.metadata.sources.base.Source
metod), 245, 326
metod), 236, 317
set_pref() (calibre.db.cache.Cache metod), 341
standard_field_keys()
(calibset_progress_reporter()
(calibre.ebooks.metadata.book.base.Metadata
re.devices.interface.DevicePlugin
metod),
metod), 178, 196
243, 324
STANDARD_METADATA_FIELDS (i modul calibset_spine() (calibre.ebooks.oeb.polish.container.Container
re.ebooks.metadata.book.base), 179, 197
metod), 345
start_plugin()
(calibre.devices.interface.DevicePlugin
set_user_blacklisted_devices()
(calibmetod), 246, 327
re.devices.interface.DevicePlugin
metod), startup() (calibre.devices.interface.DevicePlugin metod),
245, 327
245, 326
set_user_metadata()
(calib- stop_plugin()
(calibre.devices.interface.DevicePlugin
re.ebooks.metadata.book.base.Metadata
metod), 246, 327
metod), 179, 197
summary_length
(calibsettings() (calibre.devices.interface.DevicePlugin klassre.web.feeds.news.BasicNewsRecipe attribut),
metod), 245, 326
48, 147, 311
show_current_diff() (calibre.gui2.tweak_book.boss.Boss supported_platforms (calibre.customize.Plugin attribut),
metod), 351
231, 312
374
Index
calibre Användarhandbok, Utgåva 2.22.0
supports_collections()
(calibre.devices.interface.BookList metod), 247,
328
supports_gzip_transfer_encoding
(calibre.ebooks.metadata.sources.base.Source
attribut), 235, 316
supports_restoring_to_defaults
(calibre.gui2.preferences.ConfigWidgetInterface
attribut), 253, 334
sync_booklists() (calibre.devices.interface.DevicePlugin
metod), 244, 326
sync_preview_to_editor()
(calibre.gui2.tweak_book.boss.Boss metod), 351
synchronize_with_db()
(calibre.devices.interface.DevicePlugin
metod),
246, 328
U
upload_books() (calibre.devices.interface.DevicePlugin
metod), 243, 325
upload_cover()
(calibre.devices.usbms.driver.USBMS
metod), 249, 330
URL, 352
USBMS (klass i calibre.devices.usbms.driver), 249, 330
use_embedded_content
(calibre.web.feeds.news.BasicNewsRecipe attribut),
48, 148, 311
use_javascript_to_login
(calibre.web.feeds.news.BasicNewsRecipe attribut),
48, 148, 312
user_categories_for_books() (calibre.db.cache.Cache metod), 342
user_feedback_after_callback
(calibre.devices.interface.DevicePlugin
attribut),
T
241, 322
tag_to_string() (calibre.web.feeds.news.BasicNewsRecipe UserAnnotation (calibre.devices.interface.DevicePlugin
klassmetod), 44, 143, 307
attribut), 240, 322
tags_older_than() (calibre.db.cache.Cache metod), 341
template_css (calibre.web.feeds.news.BasicNewsRecipe V
attribut), 48, 148, 311
VENDOR_ID (calibre.devices.interface.DevicePlugin attemplate_to_attribute()
(calibtribut), 240, 321
re.ebooks.metadata.book.base.Metadata
version (calibre.customize.Plugin attribut), 231, 312
metod), 179, 197
ViewerPlugin (klass i calibre.customize), 254, 335
temporary_file() (calibre.customize.Plugin metod), 233, VIRTUAL_BOOK_EXTENSIONS
(calib314
re.devices.interface.DevicePlugin
attribut),
test_fields() (calibre.ebooks.metadata.sources.base.Source
241, 322
metod), 236, 317
THUMBNAIL_COMPRESSION_QUALITY
(calib- W
re.devices.interface.DevicePlugin
attribut),
WANTS_UPDATED_THUMBNAILS
(calib240, 321
re.devices.interface.DevicePlugin
attribut),
THUMBNAIL_HEIGHT
(calib240, 322
re.devices.interface.DevicePlugin
attribut), web2disk kommandorad växel
240, 321
–base-dir, -d, 295
timefmt (calibre.web.feeds.news.BasicNewsRecipe attri–delay, 295
but), 48, 148, 311
–dont-download-stylesheets, 295
timeout (calibre.web.feeds.news.BasicNewsRecipe attri–encoding, 295
but), 48, 148, 311
–filter-regexp, 295
title (calibre.web.feeds.news.BasicNewsRecipe attribut),
–help, -h, 295
48, 148, 311
–match-regexp, 295
to_html() (calibre.ebooks.metadata.book.base.Metadata
–max-files, -n, 295
metod), 179, 197
–max-recursions, -r, 295
Tool (klass i calibre.gui2.tweak_book.plugin), 348
–timeout, -t, 295
toolbar_button_popup_mode
(calib–verbose, 296
re.gui2.tweak_book.plugin.Tool
attribut),
–version, 296
349
WINDOWS_CARD_A_MEM
(calibtotal_space() (calibre.devices.interface.DevicePlugin mere.devices.usbms.device.Device
attribut),
tod), 243, 324
248, 329
touched_fields (calibre.ebooks.metadata.sources.base.Source
WINDOWS_CARD_B_MEM
(calibattribut), 235, 316
re.devices.usbms.device.Device
attribut),
type (calibre.customize.Plugin attribut), 232, 313
248, 330
type (calibre.customize.ViewerPlugin attribut), 254, 335
Index
375
calibre Användarhandbok, Utgåva 2.22.0
WINDOWS_MAIN_MEM
re.devices.usbms.device.Device
248, 329
windows_sort_drives()
re.devices.usbms.device.Device
248, 330
376
(calibattribut),
(calibmetod),
Index
Download