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 &nbsp; 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 &amp; 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 &quot; 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 &quot; 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 &amp; &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} &amp; = \sigma(y-x) \\ \dot{y} &amp; = \rho x - y - xz \\ \dot{z} &amp; = -\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} &amp; = \sigma(y-x) \label{lorenz}\\ \dot{y} &amp; = \rho x - y - xz \\ \dot{z} &amp; = -\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} &amp; \mathbf{j} &amp; \mathbf{k} \\ \frac{\partial X}{\partial u} &amp; \frac{\partial Y}{\partial u} &amp; 0 \\ \frac{\partial X}{\partial v} &amp; \frac{\partial Y}{\partial v} &amp; 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|&lt;1$}. \]</p> <h2>Maxwell's Equations</h2> <p> \begin{align} \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} &amp; = \f \nabla \cdot \vec{\mathbf{E}} &amp; = 4 \pi \rho \\ \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} &amp; = \nabla \cdot \vec{\mathbf{B}} &amp; = 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