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.

Aritmetika

add

class calibre.utils.formatter_functions.BuiltinAdd[zdroj]

add(x [, y]*) – vrátí součet svých argumentů. Vyvolá výjimku, pokud některý argument není číslo. Ve většině případů můžete místo této funkce použít operátor +.

ceiling

class calibre.utils.formatter_functions.BuiltinCeiling[zdroj]

ceiling(value) – vrátí nejmenší celé číslo větší nebo rovné value. Vyvolá výjimku, pokud value není číslo.

divide

class calibre.utils.formatter_functions.BuiltinDivide[zdroj]

divide(x, y) – vrátí x / y. Vyvolá výjimku, pokud x nebo y není číslo. Tuto funkci lze obvykle nahradit operátorem /.

floor

class calibre.utils.formatter_functions.BuiltinFloor[zdroj]

floor(value) – vrátí největší celé číslo menší nebo rovné value. Vyvolá výjimku, pokud value není číslo.

fractional_part

class calibre.utils.formatter_functions.BuiltinFractionalPart[zdroj]

fractional_part(value) – vrátí část hodnoty za desetinnou tečkou. Například fractional_part(3.14) vrátí 0.14. Vyvolá výjimku, pokud value není číslo.

mod

class calibre.utils.formatter_functions.BuiltinMod[zdroj]

mod(value, y) – vrátí floor zbytku po dělení value / y. Vyvolá výjimku, pokud value nebo y není číslo.

multiply

class calibre.utils.formatter_functions.BuiltinMultiply[zdroj]

multiply(x [, y]*) – vrátí součin svých argumentů. Vyvolá výjimku, pokud některý argument není číslo. Tuto funkci lze obvykle nahradit operátorem *.

round

class calibre.utils.formatter_functions.BuiltinRound[zdroj]

round(value) – vrátí celé číslo nejbližší hodnotě value. Vyvolá výjimku, pokud value není číslo.

subtract

class calibre.utils.formatter_functions.BuiltinSubtract[zdroj]

subtract(x, y) – vrátí x - y. Vyvolá výjimku, pokud x nebo y není číslo. Tuto funkci lze obvykle nahradit operátorem -.

Databázové funkce

annotation_count

class calibre.utils.formatter_functions.BuiltinAnnotationCount[zdroj]

annotation_count() – vrátí celkový počet anotací všech typů připojených k aktuální knize. Tato funkce funguje pouze v GUI a Serveru s obsahem.

approximate_formats

class calibre.utils.formatter_functions.BuiltinApproximateFormats[zdroj]

approximate_formats() – vrátí čárkami oddělený seznam formátů přidružených ke knize. Protože seznam pochází z databáze calibre, ne ze systému souborů, není zaručeno, že je správný, i když pravděpodobně je. Pamatujte, že výsledné názvy formátů jsou vždy psány velkými písmeny, jako EPUB. Funkce approximate_formats() je mnohem rychlejší než funkce formats_....

Tato funkce funguje pouze v GUI. Pokud chcete tyto hodnoty použít v šablonách pro uložení na disk nebo odeslání do zařízení, musíte vytvořit vlastní „Sloupec sestavený z jiných sloupců“, použít funkci v šabloně tohoto sloupce a použít hodnotu tohoto sloupce ve svých šablonách pro uložení/odeslání.

book_count

class calibre.utils.formatter_functions.BuiltinBookCount[zdroj]

book_count(query, use_vl) – vrátí počet knih nalezených vyhledáním podle query. Pokud je use_vl rovno 0 (nula), virtuální knihovny se ignorují. Tato funkce a její doprovodná funkce book_values() jsou zvlášť užitečné ve vyhledávání pomocí šablony a podporují vyhledávání, která kombinují informace z mnoha knih, například hledání sérií s jedinou knihou. Nelze ji použít ve složených sloupcích, pokud není vylepšení allow_template_database_functions_in_composites nastaveno na True. Lze ji použít pouze v GUI.

Například toto vyhledávání pomocí šablony používá tuto funkci a její doprovodnou funkci k nalezení všech sérií s jedinou knihou:

  • Definujte uloženou šablonu (pomocí Předvolby → Rozšířené → Funkce šablony) nazvanou series_only_one_book (název je libovolný). Šablona je:

    program:
        vals = globals(vals='');
        if !vals then
            all_series = book_values('series', 'series:true', ',', 0);
            for series in all_series:
                if book_count('series:="' & series & '"', 0) == 1 then
                    vals = list_join(',', vals, ',', series, ',')
                fi
            rof;
            set_globals(vals)
        fi;
        str_in_list(vals, ',', $series, 1, '')
    

    Při prvním spuštění šablony (u první vyhodnocované knihy) uloží výsledky dotazů do databáze do globální proměnné šablony nazvané vals. Tyto výsledky se používají ke kontrole následujících knih, aniž by se dotazy prováděly znovu.

  • Použijte uloženou šablonu ve vyhledávání pomocí šablony:

template:"program: series_only_one_book()#@#:n:1"

Použití uložené šablony namísto vložení šablony přímo do vyhledávání odstraňuje problémy způsobené nutností escapovat uvozovky ve vyhledávacích výrazech.

Tuto funkci lze použít pouze v GUI a na serveru s obsahem.

book_values

class calibre.utils.formatter_functions.BuiltinBookValues[zdroj]

book_values(column, query, sep, use_vl) – vrátí seznam jedinečných hodnot obsažených ve sloupci column (lookup název), oddělených hodnotou sep, v knihách nalezených vyhledáním podle query. Pokud je use_vl rovno 0 (nula), virtuální knihovny se ignorují. Tato funkce a její doprovodná funkce book_count() jsou zvlášť užitečné ve vyhledávání pomocí šablony a podporují vyhledávání, která kombinují informace z mnoha knih, například hledání sérií s jedinou knihou. Nelze ji použít ve složených sloupcích, pokud není vylepšení allow_template_database_functions_in_composites nastaveno na True. Tuto funkci lze použít pouze v GUI a na serveru s obsahem.

extra_file_modtime

class calibre.utils.formatter_functions.BuiltinExtraFileModtime[zdroj]

extra_file_modtime(file_name, format_string) – vrátí čas změny dodatečného souboru file_name ve složce data/ knihy, pokud existuje, jinak -1. Hodnota modtime se formátuje podle format_string (podrobnosti najdete u format_date()). Pokud je format_string prázdný řetězec, vrátí modtime jako číslo s plovoucí desetinnou čárkou představující počet sekund od epochy. Viz také funkce has_extra_files(), extra_file_names() a extra_file_size(). Epocha závisí na operačním systému. Tuto funkci lze použít pouze v GUI a na serveru s obsahem.

extra_file_names

class calibre.utils.formatter_functions.BuiltinExtraFileNames[zdroj]

extra_file_names(sep [, pattern]) – vrátí seznam dodatečných souborů ve složce data/ knihy, oddělený pomocí sep. Pokud je zadán volitelný parametr pattern, regulární výraz, seznam se filtruje na soubory, které odpovídají pattern. Shoda se vzorem probíhá bez rozlišení velikosti písmen. Viz také funkce has_extra_files(), extra_file_modtime() a extra_file_size(). Tuto funkci lze použít pouze v GUI a na serveru s obsahem.

extra_file_size

class calibre.utils.formatter_functions.BuiltinExtraFileSize[zdroj]

extra_file_size(file_name) – vrátí velikost v bajtech dodatečného souboru file_name ve složce data/ knihy, pokud existuje, jinak -1. Viz také funkce has_extra_files(), extra_file_names() a extra_file_modtime(). Tuto funkci lze použít pouze v GUI a na serveru s obsahem.

formats_modtimes

class calibre.utils.formatter_functions.BuiltinFormatsModtimes[zdroj]

formats_modtimes(date_format_string) – vrátí čárkami oddělený seznam položek FMT:DATE oddělených dvojtečkami, které představují časy změny formátů knihy. Parametr date_format_string určuje, jak má být datum formátováno. Podrobnosti najdete u funkce format_date(). Funkci select() můžete použít k získání času změny pro konkrétní formát. Pamatujte, že názvy formátů jsou vždy psány velkými písmeny, jako EPUB.

formats_path_segments

class calibre.utils.formatter_functions.BuiltinFormatsPathSegments[zdroj]

formats_path_segments(with_author, with_title, with_format, with_ext, sep) – vrátí části cesty k formátu knihy v knihovně calibre oddělené pomocí sep. Parametr sep by obvykle měl být lomítko ('/'). Jedno použití je zajistit, aby cesty generované v šablonách pro akce Uložit na disk a Odeslat do zařízení byly zkracovány konzistentně. Další je zajistit, aby cesty v zařízení odpovídaly cestám v knihovně calibre.

Cesta knihy se skládá ze 3 segmentů: autora, názvu včetně ID databáze calibre v závorkách a souboru formátu. Aplikace calibre může kterýkoli z těchto tří segmentů zkrátit kvůli omezení délky názvu souboru. Segmenty, které se mají zahrnout, zvolíte předáním hodnoty 1 pro daný segment. Pokud segment nechcete, předejte pro něj 0 nebo prázdný řetězec. Následující příklad například vrátí jen název souboru formátu bez přípony:

formats_path_segments(0, 0, 1, 0, '/')

Protože existuje jen jeden segment, oddělovač se ignoruje.

Pokud existuje více formátů (více přípon), jedna z přípon se vybere náhodně. Pokud vám záleží na tom, která přípona se použije, získejte cestu bez přípony a potom k ní přidejte požadovanou příponu.

Příklady: Předpokládejme, že v knihovně calibre je kniha s formátem EPUB od autora Joe Blogs s názvem ‚Help‘. Měla by cestu

Joe Blogs/Help - (calibre_id)/Help - Joe Blogs.epub

Následující ukazuje, co se vrátí pro různé parametry:

  • formats_path_segments(0, 0, 1, 0, '/') vrátí Help - Joe Blogs

  • formats_path_segments(0, 0, 1, 1, '/') vrátí Help - Joe Blogs.epub

  • formats_path_segments(1, 0, 1, 1, '/') vrátí Joe Blogs/Help - Joe Blogs.epub

  • formats_path_segments(1, 0, 1, 0, '/') vrátí Joe Blogs/Help - Joe Blogs

  • formats_path_segments(0, 1, 0, 0, '/') vrátí Help - (calibre_id)

formats_paths

class calibre.utils.formatter_functions.BuiltinFormatsPaths[zdroj]

formats_paths([separator]) – vrátí seznam položek FMT:PATH oddělených dvojtečkami a mezi sebou oddělených pomocí separator, které udávají úplnou cestu k formátům knihy. Argument separator je volitelný. Pokud není zadán, oddělovač je ', ' (čárka a mezera). Pokud je oddělovačem čárka, můžete pomocí funkce select() získat cestu ke konkrétnímu formátu. Pamatujte, že názvy formátů jsou vždy psány velkými písmeny, jako EPUB.

formats_sizes

class calibre.utils.formatter_functions.BuiltinFormatsSizes[zdroj]

formats_sizes() – vrátí čárkami oddělený seznam položek FMT:SIZE oddělených dvojtečkami, které udávají velikosti formátů knihy v bajtech. Funkci select() můžete použít k získání velikosti pro konkrétní formát. Pamatujte, že názvy formátů jsou vždy psány velkými písmeny, jako EPUB.

get_note

class calibre.utils.formatter_functions.BuiltinGetNote[zdroj]

get_note(field_name, field_value, plain_text) – načte poznámku pro pole field_name s hodnotou field_value. Pokud je plain_text prázdný, vrátí HTML poznámky včetně obrázků. Pokud je plain_text 1 (nebo '1'), vrátí prostý text poznámky. Pokud poznámka neexistuje, vrátí v obou případech prázdný řetězec. Příklad:

  • Vrátí HTML poznámky připojené ke štítku Fiction:

    program:
        get_note('tags', 'Fiction', '')
    
  • Vrátí prostý text poznámky připojené k autorovi Isaac Asimov:

    program:
        get_note('authors', 'Isaac Asimov', 1)
    

Tato funkce funguje pouze v GUI a na serveru s obsahem.

has_extra_files

class calibre.utils.formatter_functions.BuiltinHasExtraFiles[zdroj]

has_extra_files([pattern]) – vrátí počet dodatečných souborů, jinak ‚‘ (prázdný řetězec). Pokud je zadán volitelný parametr pattern (regulární výraz), seznam se před spočítáním souborů filtruje na soubory, které odpovídají pattern. Shoda se vzorem probíhá bez rozlišení velikosti písmen. Viz také funkce extra_file_names(), extra_file_size() a extra_file_modtime(). Tuto funkci lze použít pouze v GUI a na serveru s obsahem.

has_note

class calibre.utils.formatter_functions.BuiltinHasNote[zdroj]

has_note(field_name, field_value). Zkontroluje, zda má pole poznámku. Tato funkce má dvě varianty:

  • Pokud field_value není '' (prázdný řetězec), vrátí '1', pokud má hodnota field_value v poli field_name poznámku, jinak ''.

    Příklad: has_note('tags', 'Fiction') vrátí '1', pokud má štítek Fiction připojenou poznámku, jinak ''.

  • Pokud je field_value '', vrátí seznam hodnot v field_name, které mají poznámku. Pokud žádná položka v poli poznámku nemá, vrátí ''. Tato varianta je užitečná pro zobrazení ikon sloupců, pokud má poznámku libovolná hodnota v poli, ne jen konkrétní hodnota.

    Příklad: has_note('authors', '') vrátí seznam autorů, kteří mají poznámky, nebo '', pokud žádný autor poznámku nemá.

To, zda mají poznámku všechny hodnoty v field_name, můžete otestovat porovnáním délky seznamu návratové hodnoty této funkce s délkou seznamu hodnot v field_name. Příklad:

list_count(has_note('authors', ''), '&') ==# list_count_field('authors')

Tato funkce funguje pouze v GUI a na serveru s obsahem.

reading_progress

class calibre.utils.formatter_functions.BuiltinReadingProgress[zdroj]

reading_progress(book_id, [user, output_fmt, which, fmt]) – vrátí průběh čtení v zadaném výstupním formátu.Ve výchozím nastavení parametr user odpovídá libovolnému uživateli. Hodnotu local použijte pro průběh čtení v Prohlížeči e-knih calibre. Hodnotu _ použijte pro průběh čtení anonymních uživatelů prohlížeče Serveru s obsahem. Jakákoli jiná hodnota odpovídá příslušnému uživatelskému jménu použitému na Serveru s obsahem.

Parametr output_fmt určuje formát textu vráceného touto funkcí. Nabývá jednu z těchto hodnot:

  • page_count - výchozí hodnota, vypíše přečtené strany / celkový počet stran. Pokud není povoleno počítání stran, vypíše místo toho procento přečtení.

  • percent - vypíše procento přečtení

  • percent_number - vypíše procento přečtení jako číslo bez koncového znaku procent, užitečné pro řazení.

  • pos_frac - vypíše zlomek mezi nulou a jednou.

Parametr which určuje, jak se vybere konkrétní záznam průběhu čtení pro zadaného uživatele user. Pokud není zadán žádný uživatel nebo pokud byla kniha čtena ve více formátech či na více zařízeních, může existovat více než jeden záznam. Přijímá dvě hodnoty:

  • most_recent - průběh z nejnovějšího čtení knihy (výchozí hodnota)

  • furthest - nejpokročilejší průběh čtení ze všech odpovídajících záznamů

Parametr fmt určuje, který formát knihy se použije. Ve výchozím nastavení se vrací záznamy pro všechny formáty a konkrétní záznam se pak vybere parametrem which.

Několik příkladů:

{id:reading_progress()} -- průběh čtení jako přečtené strany / celkový počet stran
                           pro nejnovější relaci čtení této knihy
{id:reading_progress(,percent)} -- stejné jako výše, ale jako procento
{id:reading_progress(,pos_frac,furthest)} -- stejné jako výše, ale jako zlomek a s použitím
                                                nejpokročilejšího průběhu čtení této knihy.
{id:reading_progress(bob,pos_frac,furthest,EPUB)} -- pro uživatele "bob" a formát "EPUB"

Formátování hodnot

f_string

class calibre.utils.formatter_functions.BuiltinFString[zdroj]

f_string(string) – interpretuje string podobně, jako Python interpretuje f-řetězce. Zamýšlené použití je zjednodušit dlouhé posloupnosti výrazů str & str nebo strcat(a,b,c).

Text mezi složenými závorkami ({ a }) musí být výrazy šablony v obecném režimu programu. Výrazy, které mohou být seznamy výrazů, se vyhodnocují v aktuálním kontextu (aktuální kniha a lokální proměnné). Text mimo složené závorky projde beze změny.

Příklady:

  • f_string('Here is the title: {$title}') - vrátí řetězec, v němž je {$title} nahrazeno názvem aktuální knihy. Pokud je například název knihy 20,000 Leagues Under the Sea, pak f_string() vrátí Here is the title: 20,000 Leagues Under the Sea.

  • Za předpokladu, že aktuální datum je 18. září 2025, tato funkce f_string()

    f_string("Today's date: the {d = today(); format_date(d, 'd')} of {format_date(d, 'MMMM')}, {format_date(d, 'yyyy')}")
    

    vrátí řetězec Today’s date: the 18 of September, 2025. Všimněte si seznamu výrazů (přiřazení a potom výraz format_date()) použitého v první skupině { ... } k přiřazení dnešního data lokální proměnné.

  • Pokud je kniha knihou č. 3 v sérii s názvem Foo, která má 5 knih, pak tato šablona

    program:
        if $series then
            series_count = book_count('series:"""=' & $series & '"""', 0);
            return f_string("{$series}, book {$series_index} of {series_count}")
        fi;
    return 'This book is not in a series'
    

    vrátí Foo, book 3 of 5

finish_formatting

class calibre.utils.formatter_functions.BuiltinFinishFormatting[zdroj]

finish_formatting(value, format, prefix, suffix) – použije format, prefix a suffix na value stejným způsobem jako v šabloně typu {series_index:05.2f| - |- }. Tato funkce usnadňuje převod složitých šablon v režimu jedné funkce nebo režimu programu šablony na šablony GPM. Například následující program vytvoří stejný výstup jako výše uvedená šablona:

program: finish_formatting(field("series_index"), "05.2f", " - ", " - ")

Další příklad: pro šablonu:

{series:re(([^\s])[^\s]+(\s|$),\1)}{series_index:0>2s| - | - }{title}

použijte:

program:
    strcat(
        re(field('series'), '([^\s])[^\s]+(\s|$)', '\1'),
        finish_formatting(field('series_index'), '0>2s', ' - ', ' - '),
        field('title')
    )

format_date

class calibre.utils.formatter_functions.BuiltinFormatDate[zdroj]

format_date(value, format_string) – formátuje value, což musí být řetězec s datem, pomocí format_string a vrátí řetězec. Nejlepší je, když je datum ve formátu ISO, protože použití jiných formátů data často způsobuje chyby, jelikož skutečnou hodnotu data nelze jednoznačně určit. Funkce format_date_field() je rychlejší i spolehlivější.

Formátovací kódy jsou:

  • d : den jako číslo bez počáteční nuly (1 až 31)

  • dd : den jako číslo s počáteční nulou (01 až 31)

  • ddd : zkrácený lokalizovaný název dne (např. „Mon“ až „Sun“)

  • dddd : dlouhý lokalizovaný název dne (např. „Monday“ až „Sunday“)

  • M : měsíc jako číslo bez počáteční nuly (1 až 12)

  • MM : měsíc jako číslo s počáteční nulou (01 až 12)

  • MMM : zkrácený lokalizovaný název měsíce (např. „Jan“ až „Dec“)

  • MMMM : dlouhý lokalizovaný název měsíce (např. „January“ až „December“)

  • yy : rok jako dvoumístné číslo (00 až 99)

  • yyyy : rok jako čtyřmístné číslo.

  • h : hodiny bez počáteční nuly (0 až 11 nebo 0 až 23, podle am/pm)

  • hh : hodiny s počáteční nulou (00 až 11 nebo 00 až 23, podle am/pm)

  • m : minuty bez počáteční nuly (0 až 59)

  • mm : minuty s počáteční nulou (00 až 59)

  • s : sekundy bez počáteční nuly (0 až 59)

  • ss : sekundy s počáteční nulou (00 až 59)

  • ap : použije 12hodinový formát času místo 24hodinového formátu času, přičemž ‚ap‘ se nahradí lokalizovaným řetězcem pro am nebo pm v malých písmenech

  • AP : použije 12hodinový formát času místo 24hodinového formátu času, přičemž ‚AP‘ se nahradí lokalizovaným řetězcem pro AM nebo PM ve velkých písmenech

  • aP : použije 12hodinový formát času místo 24hodinového formátu času, přičemž ‚aP‘ se nahradí lokalizovaným řetězcem pro AM nebo PM

  • Ap : použije 12hodinový formát času místo 24hodinového formátu času, přičemž ‚Ap‘ se nahradí lokalizovaným řetězcem pro AM nebo PM

  • iso : datum s časem a časovým pásmem. Musí být jediným použitým formátem

  • to_number : převede datum a čas na číslo s plovoucí desetinnou čárkou (časové razítko)

  • from_number : převede číslo s plovoucí desetinnou čárkou (časové razítko) na datum ve formátu ISO. Pokud chcete jiný formát data, přidejte požadovaný formátovací řetězec za from_number a dvojtečku (:). Příklad:

    format_date(val, 'from_number:MMM dd yyyy')
    

Pokud datum, které formátujete, obsahuje lokalizované názvy měsíců, můžete dostat neočekávané výsledky. To se může stát, pokud jste změnili formát data tak, aby obsahoval MMMM. Použitím funkce format_date_field() se tomuto problému vyhnete.

format_date_field

class calibre.utils.formatter_functions.BuiltinFormatDateField[zdroj]

format_date_field(field_name, format_string) – formátuje hodnotu v poli field_name, které musí být názvem vyhledávání standardního nebo vlastního datumového pole. Formátovací kódy najdete v format_date(). Tato funkce je mnohem rychlejší než format_date() a měla by se používat při formátování hodnoty v poli (sloupci). Je také spolehlivější, protože pracuje přímo s podkladovým datem. Nelze ji použít pro vypočítaná data ani data v řetězcových proměnných. Příklady:

format_date_field('pubdate', 'yyyy.MM.dd')
format_date_field('#date_read', 'MMM dd, yyyy')

format_duration

class calibre.utils.formatter_functions.BuiltinFormatDuration[zdroj]

format_duration(value, template, [largest_unit]) – naformátuje hodnotu představující počet sekund jako řetězec zobrazující týdny, dny, hodiny, minuty a sekundy. Pokud je hodnota typu float, zaokrouhlí se na nejbližší celé číslo. Způsob formátování hodnoty zvolíte pomocí šablony tvořené selektory hodnoty obklopenými znaky [ a ]. Selektory jsou:

  • [w]: týdny

  • [d]: dny

  • [h]: hodiny

  • [m]: minuty

  • [s]: sekundy

Mezi selektory můžete vložit libovolný text.

Následující příklady používají trvání 2 dny (172 800 sekund), 1 hodinu (3 600 sekund) a 20 sekund, což dohromady činí 176 420 sekund.

  • format_duration(176420, '[d][h][m][s]') vrátí hodnotu 2d 1h 0m 20s.

  • format_duration(176420, '[h][m][s]') vrátí hodnotu 49h 0m 20s.

  • format_duration(176420, 'Your reading time is [d][h][m][s]') vrátí hodnotu Your reading time is 2d 1h 0m 20s.

  • format_duration(176420, '[w][d][h][m][s]') vrátí hodnotu 2d 1h 0m 20s. Všimněte si, že nulová hodnota týdnů se nevrátí.

Pokud chcete zobrazit nulové hodnoty pro položky, jako jsou týdny ve výše uvedeném příkladu, použijte selektor s velkým písmenem. Například následující příklad používá 'W' k zobrazení nulového počtu týdnů:

format_duration(176420, '[W][d][h][m][s]') vrátí 0w 2d 1h 0m 20s.

Ve výchozím nastavení je text následující za hodnotou selektor následovaný mezerou. Můžete ho změnit na libovolný požadovaný text. Formát selektoru s vlastním textem je selektor následovaný dvojtečkou a textovými segmenty oddělenými znaky '|'. Musíte zahrnout všechny mezery, které chcete mít ve výstupu.

Můžete zadat jeden až tři textové segmenty.

  • Pokud zadáte jeden segment, například [w: weeks ], použije se tento segment pro všechny hodnoty.

  • Pokud zadáte dva segmenty, například [w: weeks | week ], první segment se použije pro 0 a více než 1. Druhý segment se použije pro 1.

  • Pokud zadáte tři segmenty, například [w: weeks | week | weeks ], první segment se použije pro 0, druhý segment pro 1 a třetí segment pro více než 1.

Druhá forma je v mnoha jazycích ekvivalentní třetí formě.

Například selektor:

  • [w: weeks | week | weeks ] vytvoří '0 weeks ', '1 week ' nebo '2 weeks '.

  • [w: weeks | week ] vytvoří '0 weeks ', '1 week ' nebo '2 weeks '.

  • [w: weeks ] vytvoří '0 weeks ', '1 weeks ' nebo '2 weeks '.

Volitelný parametr largest_unit určuje největší jednotku z týdnů, dnů, hodin, minut a sekund, kterou šablona vytvoří. Musí jít o jeden ze selektorů hodnoty. To se může hodit ke zkrácení hodnoty.

format_duration(176420, '[h][m][s]', 'd') vrátí hodnotu 1h 0m 20s místo 49h 0m 20s.

format_number

class calibre.utils.formatter_functions.BuiltinFormatNumber[zdroj]

format_number(value, template) – interpretuje value jako číslo a toto číslo formátuje pomocí pythonové formátovací šablony, například {0:5.2f}, {0:,d} nebo ${0:5,.2f}. Formátovací šablona musí začínat {0: a končit }, jako v příkladech výše. Výjimka: úvodní „{0:“ a koncové „}“ můžete vynechat, pokud šablona formátu obsahuje pouze formát. Další příklady najdete v dokumentaci jazyka šablon a Pythonu. Pokud formátování selže, vrátí prázdný řetězec.

human_readable

class calibre.utils.formatter_functions.BuiltinHumanReadable[zdroj]

human_readable(value) – očekává, že value je číslo, a vrátí řetězec představující toto číslo v KB, MB, GB atd.

rating_to_stars

class calibre.utils.formatter_functions.BuiltinRatingToStars[zdroj]

rating_to_stars(value, use_half_stars) – vrátí value jako řetězec tvořený znaky hvězdiček (). Hodnota musí být číslo od 0 do 5. Nastavte use_half_stars na 1, pokud chcete u desetinných hodnot dostupných ve vlastních sloupcích hodnocení použít znaky polovin hvězdiček.

Funkce grafického rozhraní

selected_books

class calibre.utils.formatter_functions.BuiltinSelectedBooks[zdroj]

selected_books([sorted_by, ascending]) – vrátí seznam ID knih v pořadí výběru pro aktuálně vybrané knihy.

Tuto funkci lze použít pouze v GUI.

selected_column

class calibre.utils.formatter_functions.BuiltinSelectedColumn[zdroj]

selected_column() – vrátí název vyhledávání sloupce obsahujícího aktuálně vybranou buňku. Pokud není vybrána žádná buňka, vrátí ''.

Tuto funkci lze použít pouze v GUI.

show_dialog

class calibre.utils.formatter_functions.BuiltinShowDialog[zdroj]

show_dialog(html_or_text) – zobrazí dialog obsahující HTML nebo text. Funkce vrátí '1', pokud uživatel stiskne OK, a '', pokud stiskne Zrušit.

Tuto funkci lze použít pouze v GUI.

sort_book_ids

class calibre.utils.formatter_functions.BuiltinSortBookIds[zdroj]

sort_book_ids(book_ids, sorted_by, ascending [, sorted_by, ascending]*) – vrátí seznam ID knih seřazený podle sloupce určeného názvem vyhledávání v sorted_by a směrem určeným pomocí ascending. Pokud je ascending '1', knihy se seřadí podle hodnoty ve sloupci sorted_by vzestupně, jinak sestupně. Můžete zadat více dvojic sorted_by, ascending. První dvojice určuje hlavní řazení.

Tuto funkci lze použít pouze v GUI.

width_from_pages

class calibre.utils.formatter_functions.BuiltinWidthFromPages[zdroj]

width_from_pages(value [, num_of_pages_for_max_width, logarithmic_factor, default_width]) – vrátí šířku hřbetu knihy jako zlomek mezi '0' a '1' pro zadaný počet stran. Používá se k výpočtu šířky hřbetu v Pohledu na poličku z počtu stran. Volitelné argumenty určují, jak se šířka vypočítá.

  • num_of_pages_for_max_width – určuje nejširší knihy; každé knize s alespoň zadaným počtem stran se nastaví šířka 1. Výchozí hodnota je 1500.

  • logarithmic_factor – určuje, jak rychle se šířka mění, když se počet stran pohybuje od 0 do maxima. Výchozí hodnota je 2.

  • default_width – šířka pro knihy s neplatným počtem stran.

Funkce pro URL

encode_for_url

class calibre.utils.formatter_functions.BuiltinEncodeForURL[zdroj]

encode_for_url(value, use_plus) – vrátí value zakódované pro použití v URL podle use_plus. Hodnota se nejdřív zakóduje pro URL. Potom, pokud je use_plus 0, jsou mezery nahrazeny znaménky '+' (plus). Pokud je 1, jsou mezery nahrazeny hodnotou %20.

Pokud nechcete, aby byla hodnota zakódována, ale chcete nahradit mezery, použijte funkci re(), například re($series, ' ', '%20').

Viz také funkce make_url(), make_url_extended() a query_string().

make_url

class calibre.utils.formatter_functions.BuiltinMakeUrl[zdroj]

make_url(path, [query_name, query_value]+) – tato funkce je nejsnazší způsob, jak sestavit URL s dotazem. Používá path, web a stránku, na které se chcete dotazovat, a dvojice query_name, query_value, ze kterých se dotaz sestaví. Obecně musí být query_value zakódováno pro URL. U této funkce je zakódováno vždy a mezery jsou vždy nahrazeny znaménky '+'.

Musí být zadána alespoň jedna dvojice query_name, query_value.

Příklad sestavení vyhledávací URL Wikipedie pro autora Niccolò Machiavelli:

make_url('https://en.wikipedia.org/w/index.php', 'search', 'Niccolò Machiavelli')

vrátí

https://en.wikipedia.org/w/index.php?search=Niccol%C3%B2+Machiavelli

Pokud píšete šablonu URL pro Podrobnosti o knize u vlastního sloupce, použijte $item_name nebo field('item_name') k získání hodnoty pole, na kterou bylo kliknuto. Příklad: pokud bylo kliknuto na Niccolò Machiavelli, můžete URL sestavit pomocí:

make_url('https://en.wikipedia.org/w/index.php', 'search', $item_name)

Viz také funkce make_url_extended(), query_string() a encode_for_url().

make_url_extended

class calibre.utils.formatter_functions.BuiltinMakeUrlExtended[zdroj]

make_url_extended(...) – tato funkce se podobá funkci make_url(), ale dává vám větší kontrolu nad komponentami URL. Komponenty URL jsou

schéma:://autorita/cesta?řetězec dotazu.

Další podrobnosti najdete na Wikipedii v článku Uniform Resource Locator.

Funkce má dvě varianty:

make_url_extended(scheme, authority, path, [query_name, query_value]+)

a

make_url_extended(scheme, authority, path, query_string)

Tato funkce vrátí URL sestavenou z scheme, authority, path a buď query_string, nebo řetězce dotazu sestaveného z dvojic argumentů dotazu. authority může být prázdné, což je případ URL se schématem calibre. Musíte zadat buď query_string, nebo alespoň jednu dvojici query_name, query_value. Pokud zadáte query_string a je prázdné, výsledná URL nebude mít část s řetězcem dotazu.

Příklad 1: sestavení vyhledávací URL Wikipedie pro autora Niccolò Machiavelli:

make_url_extended('https', 'en.wikipedia.org', '/w/index.php', 'search', 'Niccolò Machiavelli')

vrátí

https://en.wikipedia.org/w/index.php?search=Niccol%C3%B2+Machiavelli

Příklad použití make_url_extended() s query_string najdete u funkce query_string().

Pokud píšete šablonu URL pro Podrobnosti o knize u vlastního sloupce, použijte $item_name nebo field('item_name') k získání hodnoty pole, na kterou bylo kliknuto. Příklad: pokud bylo kliknuto na Niccolò Machiavelli, můžete URL sestavit pomocí:

make_url_extended('https', 'en.wikipedia.org', '/w/index.php', 'search', $item_name)

Viz také funkce make_url(), query_string() a encode_for_url().

query_string

class calibre.utils.formatter_functions.BuiltinQueryString[zdroj]

query_string([query_name, query_value, how_to_encode]+)– vrátí řetězec dotazu URL sestavený z trojic query_name, query_value, how_to_encode. Řetězec dotazu je řada položek, kde každá položka vypadá jako query_name=query_value a query_value je podle pokynů zakódováno pro URL. Položky dotazu jsou odděleny znaky '&' (ampersand).

Pokud je how_to_encode 0, query_value se zakóduje a mezery se nahradí znaménky '+' (plus). Pokud je how_to_encode 1, query_value se zakóduje s mezerami nahrazenými hodnotou %20. Pokud je how_to_encode 2, query_value se vrátí beze změny; žádné kódování se neprovede a mezery se nenahradí. Pokud nechcete, aby se query_value zakódovalo, ale chcete nahradit mezery, použijte funkci re(), například re($series, ' ', '%20').

Tuto funkci použijete, pokud potřebujete konkrétně řídit, jak se sestavují části řetězce dotazu. Výsledný řetězec dotazu pak můžete použít ve funkci make_url_extended(), například takto:

make_url_extended(
    'https', 'your_host', 'your_path',
    query_string('encoded', 'Hendrik Bäßler', 0, 'unencoded', 'Hendrik Bäßler', 2))

čímž získáte

https://your_host/your_path?encoded=Hendrik+B%C3%A4%C3%9Fler&unencoded=Hendrik Bäßler

Musíte mít alespoň jednu trojici query_name, query_value, how_to_encode, ale můžete jich mít libovolný počet.

Vrácená hodnota je řetězec dotazu URL se všemi zadanými položkami, například: name1=val1[&nameN=valN]*. Všimněte si, že oddělovač '?' mezi path a query string není ve vráceném výsledku zahrnut.

Pokud píšete šablonu URL pro Podrobnosti o knize u vlastního sloupce, použijte $item_name nebo field('item_name') k získání nezakódované hodnoty pole, na kterou bylo kliknuto. Máte také k dispozici item_value_quoted, kde je hodnota už zakódovaná tak, že mezery jsou nahrazeny znaménky plus, a item_value_no_plus, kde je hodnota už zakódovaná tak, že mezery jsou nahrazeny hodnotou %20.

Viz také funkce make_url(), make_url_extended() a encode_for_url().

to_hex

class calibre.utils.formatter_functions.BuiltinToHex[zdroj]

to_hex(val) – vrátí řetězec val zakódovaný do šestnáctkového zápisu. To je užitečné při sestavování URL calibre.

urls_from_identifiers

class calibre.utils.formatter_functions.BuiltinUrlsFromIdentifiers[zdroj]

urls_from_identifiers(identifiers, sort_results) – ze seznamu identifiers odděleného čárkami, kde identifier je dvojice hodnot oddělená dvojtečkou (id_name:id_value), vrátí seznam HTML adres URL vygenerovaných z identifikátorů a oddělený čárkami. Seznam se neseřadí, pokud je sort_results rovno 0 (znak nebo číslo), jinak se seřadí abecedně podle názvu identifikátoru. Adresy URL se generují stejným způsobem jako ve vestavěném sloupci identifikátorů při zobrazení v Podrobnostech o knize.

Funkce pro datum a čas

date_arithmetic

class calibre.utils.formatter_functions.BuiltinDateArithmetic[zdroj]

date_arithmetic(value, calc_spec, fmt) – vypočítá nové datum z value pomocí calc_spec. Vrátí nové datum formátované podle volitelného fmt: pokud není zadáno, výsledek bude ve formátu ISO. calc_spec je řetězec vytvořený zřetězením dvojic vW (valueWhat), kde v je případně záporné číslo a W je jedno z následujících písmen:

  • s: přičte v sekund k date

  • m: přičte v minut k date

  • h: přičte v hodin k date

  • d: přičte v dní k date

  • w: přičte v týdnů k date

  • y: přičte v let k date, kde rok má 365 dní.

Příklad: '1s3d-1m' přičte k date 1 sekundu, přičte 3 dny a odečte 1 minutu.

days_between

class calibre.utils.formatter_functions.BuiltinDaysBetween[zdroj]

days_between(date1, date2) – vrátí počet dní mezi date1 a date2. Číslo je kladné, pokud je date1 větší než date2, jinak je záporné. Pokud některá z hodnot date1 nebo date2 není datum, funkce vrátí prázdný řetězec.

today

class calibre.utils.formatter_functions.BuiltinToday[zdroj]

today() – vrátí řetězec s datem a časem pro dnešek (aktuální okamžik). Tato hodnota je určena pro použití ve funkcích format_date nebo days_between, ale lze s ní pracovat jako s jakýmkoli jiným řetězcem. Datum je ve formátu data/času ISO.

Iterace přes hodnoty

first_non_empty

class calibre.utils.formatter_functions.BuiltinFirstNonEmpty[zdroj]

first_non_empty(value [, value]*) – vrátí první value, která není prázdná. Pokud jsou prázdné všechny hodnoty, vrátí prázdný řetězec. Můžete zadat libovolný počet hodnot.

lookup

class calibre.utils.formatter_functions.BuiltinLookup[zdroj]

lookup(value, [ pattern, key, ]* else_key) – vzory se postupně zkontrolují proti value. Pokud se pattern shoduje, vrátí se hodnota pole pojmenovaného key. Pokud se neshoduje žádný vzor, vrátí se hodnota pole pojmenovaného else_key. Viz také funkce switch().

switch

class calibre.utils.formatter_functions.BuiltinSwitch[zdroj]

switch(value, [patternN, valueN,]+ else_value) – pro každou dvojici patternN, valueN zkontroluje, zda value odpovídá regulárnímu výrazu patternN, a pokud ano, vrátí přidruženou hodnotu valueN. Pokud se neshoduje žádný patternN, vrátí se else_value. Dvojic patternN, valueN můžete mít libovolný počet. Vrátí se první shoda.

switch_if

class calibre.utils.formatter_functions.BuiltinSwitchIf[zdroj]

switch_if([test_expression, value_expression,]+ else_expression) – pro každou dvojici test_expression, value_expression zkontroluje, zda je test_expression True (neprázdný), a pokud ano, vrátí výsledek value_expression. Pokud žádný test_expression není True, vrátí se výsledek else_expression. Dvojic test_expression, value_expression můžete mít libovolný počet.

Logické

and

class calibre.utils.formatter_functions.BuiltinAnd[zdroj]

and(value [, value]*) – vrátí řetězec '1', pokud jsou všechny hodnoty neprázdné, jinak vrátí prázdný řetězec. Můžete zadat libovolný počet hodnot. Ve většině případů můžete místo této funkce použít operátor &&. Jedním z důvodů, proč nenahradit and() operátorem &&, je situace, kdy zkratové vyhodnocování může kvůli vedlejším účinkům změnit výsledky. Například and(a='',b=5) vždy provede obě přiřazení, zatímco operátor && druhé neprovede.

not

class calibre.utils.formatter_functions.BuiltinNot[zdroj]

not(value) – vrátí řetězec '1', pokud je hodnota prázdná, jinak vrátí prázdný řetězec. Tuto funkci lze obvykle nahradit unárním operátorem not (!).

or

class calibre.utils.formatter_functions.BuiltinOr[zdroj]

or(value [, value]*) – vrátí řetězec '1', pokud alespoň jedna hodnota není prázdná, jinak vrátí prázdný řetězec. Můžete zadat libovolný počet hodnot. Tuto funkci lze obvykle nahradit operátorem ||. Důvodem, proč ji nahradit nelze, je situace, kdy zkratové vyhodnocování změní výsledky kvůli vedlejším účinkům.

Manipulace s řetězci

character

class calibre.utils.formatter_functions.BuiltinCharacter[zdroj]

character(character_name) – vrátí znak pojmenovaný hodnotou character_name. Například character('newline') vrátí znak nového řádku ('\n'). Podporované názvy znaků jsou newline, return, tab a backslash. Tato funkce se používá k vložení těchto znaků do výstupu šablon.

check_yes_no

class calibre.utils.formatter_functions.BuiltinCheckYesNo[zdroj]

check_yes_no(field_name, is_undefined, is_false, is_true) – zkontroluje, zda je hodnota pole ano/ne s lookup názvem field_name jednou z hodnot určených parametry, a pokud najde shodu, vrátí 'Yes', jinak vrátí prázdný řetězec. Nastavte parametr is_undefined, is_false nebo is_true na 1 (číslo), chcete-li tuto podmínku zkontrolovat, jinak ho nastavte na 0.

Příklad: check_yes_no("#bool", 1, 0, 1) vrátí 'Yes', pokud je pole ano/ne #bool buď True, nebo nedefinované (ani True, ani False).

Na 1 může být nastaven více než jeden z parametrů is_undefined, is_false nebo is_true.

contains

class calibre.utils.formatter_functions.BuiltinContains[zdroj]

contains(value, pattern, text_if_match, text_if_not_match) – zkontroluje, zda hodnota odpovídá regulárnímu výrazu pattern. Pokud se vzor shoduje s hodnotou, vrátí text_if_match, jinak vrátí text_if_not_match.

field_exists

class calibre.utils.formatter_functions.BuiltinFieldExists[zdroj]

field_exists(lookup_name) – zkontroluje, zda existuje pole (sloupec) s lookup názvem lookup_name; pokud ano, vrátí '1', jinak vrátí prázdný řetězec.

ifempty

class calibre.utils.formatter_functions.BuiltinIfempty[zdroj]

ifempty(value, text_if_empty) – pokud value není prázdné, vrátí toto value, jinak vrátí text_if_empty.

re

class calibre.utils.formatter_functions.BuiltinRe[zdroj]

re(value, pattern, replacement) – vrátí value po použití regulárního výrazu. Všechny výskyty pattern v hodnotě se nahradí pomocí replacement. Jazyk šablon používá regulární výrazy Pythonu bez rozlišení velikosti písmen.

re_group

class calibre.utils.formatter_functions.BuiltinReGroup[zdroj]

re_group(value, pattern [, template_for_group]*) – vrátí řetězec vytvořený použitím regulárního výrazu pattern na value a nahrazením každého odpovídajícího výskytu hodnotou vrácenou odpovídající šablonou. V režimu programu šablony, stejně jako u funkcí template a eval, použijte [[ pro { a ]] pro }.

Následující příklad hledá sérii s více než jedním slovem a převede první slovo na velká písmena:

program: re_group(field('series'), "(\S* )(.*)", "{$:uppercase()}", "{$}")'}

shorten

class calibre.utils.formatter_functions.BuiltinShorten[zdroj]

shorten(value, left_chars, middle_text, right_chars) – vrátí zkrácenou verzi value, sestávající z left_chars znaků ze začátku value, následovaných middle_text a potom right_chars znaky z konce value. left_chars a right_chars musí být nezáporná celá čísla.

Příklad: předpokládejme, že chcete zobrazit název s délkou nejvýše 15 znaků. Jedna šablona, která to dělá, je {title:shorten(9,-,5)}. U knihy s názvem Ancient English Laws inthe Times of Ivanhoe bude výsledek Ancient E-anhoe: prvních 9 znaků názvu, - a potom posledních 5 znaků. Pokud je délka hodnoty menší než left chars + right chars + délka middle text, hodnota se vrátí beze změny. Například název TheDome by se nezměnil.

strcat

class calibre.utils.formatter_functions.BuiltinStrcat[zdroj]

strcat(a [, b]*) – vrátí řetězec vytvořený zřetězením všech argumentů. Může přijmout libovolný počet argumentů. Ve většině případů můžete místo této funkce použít operátor &.

strcat_max

class calibre.utils.formatter_functions.BuiltinStrcatMax[zdroj]

strcat_max(max, string1 [, prefix2, string2]*) – vrátí řetězec vytvořený zřetězením argumentů. Vrácená hodnota se inicializuje na string1. Řetězce vytvořené z dvojic prefix, string se přidávají na konec hodnoty, dokud je výsledná délka řetězce menší než max. Předpony mohou být prázdné. Vrátí string1, i když je string1 delší než max. Můžete předat libovolný počet dvojic prefix, string.

strlen

class calibre.utils.formatter_functions.BuiltinStrlen[zdroj]

strlen(value) – vrátí délku řetězce value.

substr

class calibre.utils.formatter_functions.BuiltinSubstr[zdroj]

substr(value, start, end) – vrátí znaky value od start po end. První znak v value je znak na pozici nula. Pokud je end záporné, označuje tolik znaků počítaných zprava. Pokud je end nula, označuje poslední znak. Například substr('12345', 1, 0) vrátí '2345' a substr('12345', 1, -1) vrátí '234'.

swap_around_articles

class calibre.utils.formatter_functions.BuiltinSwapAroundArticles[zdroj]

swap_around_articles(value, separator) – vrátí value s členy přesunutými na konec a oddělenými středníkem. value může být seznam; v takovém případě se zpracuje každá položka seznamu. Pokud je value seznam, musíte zadat separator. Pokud separator není zadán nebo je oddělovačem prázdný řetězec, pak se value považuje za jednu hodnotu, nikoli za seznam. articles jsou členy, které calibre používá při generování title_sort.

swap_around_comma

class calibre.utils.formatter_functions.BuiltinSwapAroundComma[zdroj]

swap_around_comma(value) – při zadané hodnotě ve tvaru B, A vrátí A B. Nejužitečnější je při převodu jmen ve formátu Příjmení, Jméno na Jméno Příjmení. Pokud v value není čárka, funkce vrátí hodnotu beze změny.

test

class calibre.utils.formatter_functions.BuiltinTest[zdroj]

test(value, text_if_not_empty, text_if_empty) – vrátí text_if_not_empty, pokud hodnota není prázdná, jinak vrátí text_if_empty.

transliterate

class calibre.utils.formatter_functions.BuiltinTransliterate[zdroj]

transliterate(value) – vrátí řetězec v latince vytvořený přibližným zvukovým přepisem slov v value. Například pokud je value rovno Фёдор Миха́йлович Достоевский, tato funkce vrátí Fiodor Mikhailovich Dostoievskii.

Manipulace se seznamy

list_count

class calibre.utils.formatter_functions.BuiltinCount[zdroj]

list_count(value, separator) – interpretuje hodnotu jako seznam položek oddělených pomocí separator a vrátí počet položek v seznamu. Většina seznamů používá jako oddělovač čárku, ale authors používá znak ampersand (&).

Příklady: {tags:list_count(,)}, {authors:list_count(&)}.

Aliasy: count(), list_count()

list_count_field

class calibre.utils.formatter_functions.BuiltinFieldListCount[zdroj]

list_count_field(lookup_name)– vrátí počet položek v poli s názvem vyhledávání lookup_name. Pole musí být pole s více hodnotami, například authors nebo tags, jinak funkce vyvolá chybu. Tato funkce je mnohem rychlejší než list_count(), protože pracuje přímo s daty calibre, aniž by je nejdřív převáděla na řetězec. Příklad: list_count_field('tags').

list_count_matching

class calibre.utils.formatter_functions.BuiltinListCountMatching[zdroj]

list_count_matching(value, pattern, separator) – interpretuje value jako seznam položek oddělených pomocí separator a vrátí počet položek v seznamu, které odpovídají regulárnímu výrazu pattern.

Aliasy: list_count_matching(), count_matching()

list_difference

class calibre.utils.formatter_functions.BuiltinListDifference[zdroj]

list_difference(list1, list2, separator) – vrátí seznam vytvořený odebráním z list1 všech položek nalezených v list2 pomocí porovnání bez rozlišení velikosti písmen. Položky v list1 a list2 jsou odděleny pomocí separator a stejný oddělovač se použije i ve vráceném seznamu.

list_equals

class calibre.utils.formatter_functions.BuiltinListEquals[zdroj]

list_equals(list1, sep1, list2, sep2, yes_val, no_val) – vrátí yes_val, pokud list1 a list2 obsahují stejné položky, jinak vrátí no_val. Položky se určí rozdělením každého seznamu pomocí odpovídajícího znaku oddělovače (sep1 nebo sep2). Pořadí položek v seznamech není relevantní. Porovnání probíhá bez rozlišení velikosti písmen.

list_intersection

class calibre.utils.formatter_functions.BuiltinListIntersection[zdroj]

list_intersection(list1, list2, separator) – vrátí seznam vytvořený odebráním z list1 všech položek, které nejsou nalezeny v list2 pomocí porovnání bez rozlišení velikosti písmen. Položky v list1 a list2 jsou odděleny pomocí separator a stejný oddělovač se použije i ve vráceném seznamu.

list_join

class calibre.utils.formatter_functions.BuiltinListJoin[zdroj]

list_join(with_separator, list1, separator1 [, list2, separator2]*) – vrátí seznam vytvořený spojením položek ve zdrojových seznamech (list1 atd.) s použitím with_separator mezi položkami ve výsledném seznamu. Položky v každém zdrojovém list[123...] jsou odděleny odpovídajícím separator[123...]. Seznam může být prázdný. Může to být pole jako publisher, které je jednohodnotové, tedy ve skutečnosti jednopoložkový seznam. Duplicitní položky se odstraňují pomocí porovnání bez rozlišení velikosti písmen. Položky se vracejí v pořadí, v jakém se objevují ve zdrojových seznamech. Pokud se položky v seznamech liší pouze velikostí písmen, použije se poslední. Všechny oddělovače mohou mít více než jeden znak.

Příklad:

program:
list_join('#@#', $authors, '&', $tags, ',')

Funkci list_join můžete použít na výsledky předchozích volání list_join takto:

program:
a = list_join('#@#', $authors, '&', $tags, ',');
b = list_join('#@#', a, '#@#', $#genre, ',', $#people, '&', 'some value', ',')

K vytvoření seznamu můžete použít výrazy. Předpokládejme například, že chcete položky pro authors a #genre, ale s tím, že se žánr změní na slovo „Genre: „ následované prvním písmenem žánru, tj. žánr „Fiction“ se změní na „Genre: F“. To provede následující:

program:
    list_join('#@#', $authors, '&', list_re($#genre, ',', '^(.).*$', 'Genre: \1'),  ',')

list_re

class calibre.utils.formatter_functions.BuiltinListRe[zdroj]

list_re(src_list, separator, include_re, opt_replace) – vytvoří seznam tak, že nejprve rozdělí src_list na položky pomocí znaku separator. U každé položky v seznamu zkontroluje, zda odpovídá include_re. Pokud ano, přidá ji do vráceného seznamu. Pokud opt_replace není prázdný řetězec, použije před přidáním položky do vráceného seznamu náhradu.

list_re_group

class calibre.utils.formatter_functions.BuiltinListReGroup[zdroj]

list_re_group(src_list, separator, include_re, search_re [,template_for_group]*) – stejné jako list_re(), až na to, že náhrady nejsou volitelné. Při provádění náhrad používá re_group(item, search_re, template ...).

list_remove_duplicates

class calibre.utils.formatter_functions.BuiltinListRemoveDuplicates[zdroj]

list_remove_duplicates(list, separator) – vrátí seznam vytvořený odebráním duplicitních položek v list. Pokud se položky liší pouze velikostí písmen, vrátí se poslední. Položky v list jsou odděleny pomocí separator a stejný oddělovač se použije i ve vráceném seznamu.

list_sort

class calibre.utils.formatter_functions.BuiltinListSort[zdroj]

list_sort(value, direction, separator) – vrátí value seřazené pomocí lexikálního řazení bez rozlišení velikosti písmen. Pokud je direction nula (číslo nebo znak), value se seřadí vzestupně, jinak sestupně. Položky seznamu jsou odděleny pomocí separator a stejný oddělovač se použije i ve vráceném seznamu.

list_split

class calibre.utils.formatter_functions.BuiltinListSplit[zdroj]

list_split(list_val, sep, id_prefix) – rozdělí list_val na samostatné hodnoty pomocí sep a potom hodnoty přiřadí lokálním proměnným nazvaným id_prefix_N, kde N je pozice hodnoty v seznamu. První položka má pozici 0 (nula). Funkce vrátí poslední prvek v seznamu.

Příklad:

list_split('one:two:foo', ':', 'var')

je ekvivalentní:

var_0 = 'one'
var_1 = 'two'
var_2 = 'foo'

list_union

class calibre.utils.formatter_functions.BuiltinListUnion[zdroj]

list_union(list1, list2, separator) – vrátí seznam vytvořený sloučením položek v list1 a list2 a odstraněním duplicitních položek pomocí porovnání bez rozlišení velikosti písmen. Pokud se položky liší velikostí písmen, použije se ta z list1. Položky v list1 a list2 jsou odděleny pomocí separator a stejný oddělovač se použije i ve vráceném seznamu.

Aliasy: merge_lists(), list_union()

range

class calibre.utils.formatter_functions.BuiltinRange[zdroj]

range(start, stop, step, limit) – vrátí seznam čísel vytvořený procházením rozsahu určeného parametry start, stop a step s maximální délkou limit. První vytvořená hodnota je ‚start‘. Následující hodnoty jsou next_v = current_v + step. Smyčka pokračuje, dokud platí next_v < stop, pokud je step kladný, jinak dokud platí next_v > stop. Pokud start nesplní test start >= stop při kladném step, vytvoří se prázdný seznam. Parametr limit nastavuje maximální délku seznamu a má výchozí hodnotu 1000. Parametry start, step a limit jsou volitelné. Volání range() s jedním argumentem určuje stop. Dva argumenty určují start a stop. Tři argumenty určují start, stop a step. Čtyři argumenty určují start, stop, step a limit.

Příklady:

range(5) -> '0, 1, 2, 3, 4'
range(0, 5) -> '0, 1, 2, 3, 4'
range(-1, 5) -> '-1, 0, 1, 2, 3, 4'
range(1, 5) -> '1, 2, 3, 4'
range(1, 5, 2) -> '1, 3'
range(1, 5, 2, 5) -> '1, 3'
range(1, 5, 2, 1) -> error(limit exceeded)

subitems

class calibre.utils.formatter_functions.BuiltinSubitems[zdroj]

subitems(value, start_index, end_index) – Tato funkce rozkládá seznamy hierarchických položek podobných štítkům, například žánrů. Interpretuje value jako seznam položek podobných štítkům oddělených čárkami, kde každá položka je seznam oddělený tečkami. Vrátí nový seznam vytvořený extrahováním komponent od start_index do end_index z každé položky a následným sloučením výsledků zpět dohromady. Duplicitní položky se odeberou. První podpoložka v seznamu odděleném tečkami má index nula. Pokud je index záporný, počítá se od konce seznamu. Jako zvláštní případ se předpokládá, že end_index s hodnotou nula znamená délku seznamu.

Příklady:

  • Za předpokladu, že sloupec #genre obsahuje „A.B.C“:

    • {#genre:subitems(0,1)} vrátí „A“

    • {#genre:subitems(0,2)} vrátí „A.B“

    • {#genre:subitems(1,0)} vrátí „B.C“

  • Za předpokladu, že sloupec #genre obsahuje „A.B.C, D.E“:

    • {#genre:subitems(0,1)} vrátí „A, D“

    • {#genre:subitems(0,2)} vrátí „A.B, D.E“

sublist

class calibre.utils.formatter_functions.BuiltinSublist[zdroj]

sublist(value, start_index, end_index, separator) – interpretuje value jako seznam položek oddělených pomocí separator a vrátí nový seznam vytvořený z položek od start_index do end_index. První položka má číslo nula. Pokud je index záporný, počítá se od konce seznamu. Jako zvláštní případ se předpokládá, že end_index s hodnotou nula znamená délku seznamu.

Příklady předpokládající, že sloupec tags (který je oddělený čárkami) obsahuje „A, B, C“:

  • {tags:sublist(0,1,\,)} vrátí „A“

  • {tags:sublist(-1,0,\,)} vrátí „C“

  • {tags:sublist(0,-1,\,)} vrátí „A, B“

Ostatní

arguments

class calibre.utils.formatter_functions.BuiltinArguments[zdroj]

arguments(id[=expression] [, id[=expression]]*) – používá se v uložené šabloně k načtení argumentů předaných při volání. Deklaruje a zároveň inicializuje místní proměnné se zadanými názvy, tedy id, takže z nich fakticky dělá parametry. Proměnné jsou poziční; získají hodnotu argumentu zadaného při volání na stejné pozici. Pokud při volání není odpovídající argument zadán, přiřadí arguments() této proměnné zadanou výchozí hodnotu. Pokud výchozí hodnota není uvedena, nastaví se proměnná na prázdný řetězec.

assign

class calibre.utils.formatter_functions.BuiltinAssign[zdroj]

assign(id, value) – přiřadí value do id a potom vrátí value. id musí být identifikátor, ne výraz. Ve většině případů můžete místo této funkce použít operátor =.

globals

class calibre.utils.formatter_functions.BuiltinGlobals[zdroj]

globals(id[=expression] [, id[=expression]]*) – načte „globální proměnné“, které lze předat formátovacímu modulu. Název id je názvem globální proměnné. Deklaruje a zároveň inicializuje místní proměnné s názvy globálních proměnných předaných v parametrech id. Pokud odpovídající proměnná není v globálních proměnných uvedena, přiřadí této proměnné zadanou výchozí hodnotu. Pokud výchozí hodnota není uvedena, nastaví se proměnná na prázdný řetězec.

is_dark_mode

class calibre.utils.formatter_functions.BuiltinIsDarkMode[zdroj]

is_dark_mode() – vrátí '1', pokud calibre běží v tmavém režimu, jinak '' (prázdný řetězec). Tuto funkci lze použít v pokročilých pravidlech barev a ikon k výběru různých barev/ikon podle režimu. Příklad:

if is_dark_mode() then 'dark.png' else 'light.png' fi

print

class calibre.utils.formatter_functions.BuiltinPrint[zdroj]

print(a [, b]*) – vypíše argumenty na standardní výstup. Pokud calibre nespustíte z příkazového řádku (calibre-debug -g), výstup bude zahozen. Funkce print vždy vrátí svůj první argument.

set_globals

class calibre.utils.formatter_functions.BuiltinSetGlobals[zdroj]

set_globals(id[=expression] [, id[=expression]]*) – nastaví globální proměnné, které lze předat formátovacímu modulu. Globální proměnné dostanou název podle předaného id. Použije se hodnota id, pokud není zadán výraz.

Rekurze

eval

class calibre.utils.formatter_functions.BuiltinEval[zdroj]

eval(string) – vyhodnotí řetězec jako program a předá mu lokální proměnné. To umožňuje použít zpracovatel šablon k sestavení složitých výsledků z lokálních proměnných. V režimu programu šablony musíte kvůli tomu, že znaky { a } jsou interpretovány před vyhodnocením šablony, použít [[ pro znak { a ]] pro znak }. Převedou se automaticky. Pamatujte také, že při použití režimu programu šablony nelze v argumentu této funkce použít předpony a přípony (syntaxi |prefix|suffix).

template

class calibre.utils.formatter_functions.BuiltinTemplate[zdroj]

template(x) – vyhodnotí x jako šablonu. Vyhodnocení se provádí ve vlastním kontextu, což znamená, že proměnné nejsou sdíleny mezi volajícím a vyhodnocením šablony. Pokud nepoužíváte obecný režim programu, musíte kvůli speciálním znakům { a } použít [[ pro znak { a ]] pro znak }; převedou se automaticky. Například template(\'[[title_sort]]\') vyhodnotí šablonu {title_sort} a vrátí její hodnotu. Pamatujte také, že při použití režimu programu šablony nelze v argumentu této funkce použít předpony a přípony (syntaxi |prefix|suffix).

Relační

cmp

class calibre.utils.formatter_functions.BuiltinCmp[zdroj]

cmp(value, y, lt, eq, gt) – porovná value a y po převodu obou hodnot na čísla. Vrátí lt, pokud value <# y, eq, pokud value ==# y, jinak gt. Tuto funkci lze obvykle nahradit jedním z operátorů číselného porovnání (==#, <#, ># atd.).

first_matching_cmp

class calibre.utils.formatter_functions.BuiltinFirstMatchingCmp[zdroj]

first_matching_cmp(val, [ cmp, result, ]* else_result) – postupně porovnává val < cmp a vrátí přidružený result pro první úspěšné porovnání. Pokud neuspěje žádné porovnání, vrátí else_result.

Příklad:

i = 10;
first_matching_cmp(i,5,"small",10,"middle",15,"large","giant")

vrátí "large". Stejný příklad s první hodnotou 16 vrátí "giant".

strcmp

class calibre.utils.formatter_functions.BuiltinStrcmp[zdroj]

strcmp(x, y, lt, eq, gt) – provede lexikální porovnání x a y bez rozlišení velikosti písmen. Vrátí lt, pokud x < y, eq, pokud x == y, jinak gt. Tuto funkci lze často nahradit jedním z operátorů lexikálního porovnání (==, >, < atd.)

strcmpcase

class calibre.utils.formatter_functions.BuiltinStrcmpcase[zdroj]

strcmpcase(x, y, lt, eq, gt) – provede lexikální porovnání x a y s rozlišením velikosti písmen. Vrátí lt, pokud x < y, eq, pokud x == y, jinak gt.

Poznámka: Toto NENÍ výchozí chování používané v calibre, například v operátorech lexikálního porovnání (==, >, < atd.). Tato funkce může vést k neočekávaným výsledkům; pokud je to možné, používejte raději strcmp().

Vyhledávání v seznamech

identifier_in_list

class calibre.utils.formatter_functions.BuiltinIdentifierInList[zdroj]

identifier_in_list(val, id_name [, found_val, not_found_val]) – považuje val za seznam identifikátorů oddělených čárkami. Identifikátor má formát id_name:value. Parametr id_name je hledaný text id_name, buď id_name, nebo id_name:regexp. První případ odpovídá, pokud existuje nějaký identifikátor odpovídající danému id_name. Druhý případ odpovídá, pokud id_name odpovídá identifikátoru a regexp odpovídá hodnotě identifikátoru. Pokud jsou zadány found_val a not_found_val, pak se při shodě vrátí found_val, jinak not_found_val. Pokud found_val a not_found_val zadány nejsou, pak se při shodě vrátí dvojice identifier:value, jinak prázdný řetězec ('').

list_contains

class calibre.utils.formatter_functions.BuiltinInList[zdroj]

list_contains(value, separator, [ pattern, found_val, ]* not_found_val) – interpretuje value jako seznam položek oddělených pomocí separator a porovnává pattern s každou položkou v seznamu. Pokud se pattern shoduje s položkou, vrátí found_val, jinak vrátí not_found_val. Dvojici pattern a found_value lze opakovat libovolněkrát, což umožňuje vracet různé hodnoty podle hodnoty položky. Vzory se kontrolují v pořadí a vrátí se první shoda.

Aliasy: in_list(), list_contains()

list_item

class calibre.utils.formatter_functions.BuiltinListitem[zdroj]

list_item(value, index, separator) – interpretuje value jako seznam položek oddělených pomocí separator a vrátí položku na pozici index. První položka má číslo nula. Poslední položka má index -1 jako v list_item(-1,separator). Pokud položka v seznamu není, vrátí se prázdný řetězec. Oddělovač má stejný význam jako ve funkci count, obvykle čárka, ale u seznamů typu autorů ampersand.

select

class calibre.utils.formatter_functions.BuiltinSelect[zdroj]

select(value, key) – interpretuje value jako čárkami oddělený seznam položek, kde každá položka má tvar id:id_value (formát identifier v calibre). Funkce najde první dvojici s id rovným key a vrátí odpovídající id_value. Pokud se neshoduje žádné id, funkce vrátí prázdný řetězec.

str_in_list

class calibre.utils.formatter_functions.BuiltinStrInList[zdroj]

str_in_list(value, separator, [ string, found_val, ]+ not_found_val) – interpretuje value jako seznam položek oddělených pomocí separator a potom porovná string s každou hodnotou v seznamu. string není regulární výraz. Pokud se string rovná některé položce (bez rozlišení velikosti písmen), vrátí odpovídající found_val. Pokud string obsahuje separators, považuje se také za seznam a zkontroluje se každá dílčí hodnota. Dvojice string a found_value lze opakovat libovolněkrát, což umožňuje vracet různé hodnoty podle hodnoty řetězce. Pokud neodpovídá žádný řetězec, vrátí se not_found_value. Řetězce se kontrolují v pořadí. Vrátí se první shoda.

Změny velikosti písmen

capitalize

class calibre.utils.formatter_functions.BuiltinCapitalize[zdroj]

capitalize(value) – vrátí value s prvním písmenem velkým a zbytkem malými písmeny.

lowercase

class calibre.utils.formatter_functions.BuiltinLowercase[zdroj]

lowercase(value) – vrátí value malými písmeny.

titlecase

class calibre.utils.formatter_functions.BuiltinTitlecase[zdroj]

titlecase(value) – vrátí value s velkými počátečními písmeny.

uppercase

class calibre.utils.formatter_functions.BuiltinUppercase[zdroj]

uppercase(value) – vrátí value velkými písmeny.

Získávání hodnot z metadat

author_sorts

class calibre.utils.formatter_functions.BuiltinAuthorSorts[zdroj]

author_sorts(val_separator) – vrátí řetězec obsahující seznam hodnot řazení autora pro autory knihy. Jde o hodnoty řazení v metadatech autorů, které se mohou lišit od hodnoty author_sort v knihách. Vrácený seznam má tvar author sort 1 val_separator author sort 2 atd. bez přidaných mezer. Hodnoty řazení autora v tomto seznamu jsou ve stejném pořadí jako autoři knihy. Pokud chcete kolem val_separator mezery, zahrňte je do řetězce val_separator.

booksize

class calibre.utils.formatter_functions.BuiltinBooksize[zdroj]

booksize() – vrátí hodnotu pole size calibre. Pokud kniha nemá žádné formáty, vrátí ‚‘.

Tato funkce funguje pouze v GUI. Pokud chcete tuto hodnotu použít v šablonách pro uložení na disk nebo odeslání do zařízení, musíte vytvořit vlastní „Sloupec sestavený z jiných sloupců“, použít funkci v šabloně tohoto sloupce a použít hodnotu tohoto sloupce ve svých šablonách pro uložení/odeslání.

connected_device_name

class calibre.utils.formatter_functions.BuiltinConnectedDeviceName[zdroj]

connected_device_name(storage_location_key) – pokud je zařízení připojeno, vrátí název zařízení, jinak vrátí prázdný řetězec. Každé umístění úložiště v zařízení má vlastní název zařízení. Názvy storage_location_key jsou 'main', 'carda' a 'cardb'. Tato funkce funguje pouze v GUI.

connected_device_uuid

class calibre.utils.formatter_functions.BuiltinConnectedDeviceUUID[zdroj]

connected_device_uuid(storage_location_key) – pokud je zařízení připojeno, vrátí UUID zařízení (jedinečné ID), jinak vrátí prázdný řetězec. Každé umístění úložiště v zařízení má jiné UUID. Názvy umístění storage_location_key jsou 'main', 'carda' a 'cardb'. Tato funkce funguje pouze v GUI.

current_library_name

class calibre.utils.formatter_functions.BuiltinCurrentLibraryName[zdroj]

current_library_name() – vrátí poslední část cesty k aktuální knihovně calibre.

current_library_path

class calibre.utils.formatter_functions.BuiltinCurrentLibraryPath[zdroj]

current_library_path() – vrátí úplnou cestu k aktuální knihovně calibre.

current_virtual_library_name

class calibre.utils.formatter_functions.BuiltinCurrentVirtualLibraryName[zdroj]

current_virtual_library_name() – vrátí název aktuální virtuální knihovny, pokud nějaká existuje, jinak prázdný řetězec. Velikost písmen v názvu knihovny se zachová. Příklad:

program: current_virtual_library_name()

Tato funkce funguje pouze v GUI.

field

class calibre.utils.formatter_functions.BuiltinField[zdroj]

field(lookup_name) – vrátí hodnotu pole metadat s názvem vyhledávání lookup_name. Místo funkce lze použít předponu $, jako v $tags.

has_cover

class calibre.utils.formatter_functions.BuiltinHasCover[zdroj]

has_cover() – vrátí 'Yes', pokud má kniha obálku, jinak prázdný řetězec.

is_marked

class calibre.utils.formatter_functions.BuiltinIsMarked[zdroj]

is_marked() – zkontroluje, zda je kniha v calibre označená. Pokud ano, vrátí hodnotu označení, buď 'true' (malými písmeny), nebo čárkami oddělený seznam pojmenovaných označení. Pokud kniha není označená, vrátí '' (prázdný řetězec). Tato funkce funguje pouze v GUI.

language_codes

class calibre.utils.formatter_functions.BuiltinLanguageCodes[zdroj]

language_codes(lang_strings) – vrátí kódy jazyků pro názvy jazyků předané v lang_strings. Řetězce musí být v jazyce aktuálního národního prostředí. lang_strings je seznam oddělený čárkami.

language_strings

class calibre.utils.formatter_functions.BuiltinLanguageStrings[zdroj]

language_strings(value, localize) – vrátí názvy jazyků pro kódy jazyků (názvy a kódy najdete zde) předané v value. Příklad: {languages:language_strings()}. Pokud je localize nula, vrátí řetězce v angličtině. Pokud localize není nula, vrátí řetězce v jazyce aktuálního národního prostředí. lang_codes je seznam oddělený čárkami.

ondevice

class calibre.utils.formatter_functions.BuiltinOndevice[zdroj]

ondevice() – vrátí řetězec 'Yes', pokud je nastaveno ondevice, jinak vrátí prázdný řetězec. Tato funkce funguje pouze v GUI. Pokud chcete tuto hodnotu použít v šablonách pro uložení na disk nebo odeslání do zařízení, musíte vytvořit vlastní „Sloupec sestavený z jiných sloupců“, použít funkci v šabloně tohoto sloupce a použít hodnotu tohoto sloupce ve svých šablonách pro uložení/odeslání.

raw_field

class calibre.utils.formatter_functions.BuiltinRawField[zdroj]

raw_field(lookup_name [, optional_default]) – vrátí pole metadat pojmenované lookup_name bez použití jakéhokoli formátování. Pokud hodnota pole není definovaná (None), vyhodnotí a vrátí volitelný druhý argument optional_default. Místo funkce lze použít předponu $$, jako v $$pubdate.

raw_list

class calibre.utils.formatter_functions.BuiltinRawList[zdroj]

raw_list(lookup_name, separator) – vrátí seznam metadat pojmenovaný lookup_name bez použití jakéhokoli formátování nebo řazení, s položkami oddělenými pomocí separator.

series_sort

class calibre.utils.formatter_functions.BuiltinSeriesSort[zdroj]

series_sort() – vrátí hodnotu řazení série.

user_categories

class calibre.utils.formatter_functions.BuiltinUserCategories[zdroj]

user_categories() – vrátí seznam uživatelských kategorií, které obsahují tuto knihu, oddělený čárkami. Tato funkce funguje pouze v GUI. Pokud chcete tyto hodnoty použít v šablonách pro uložení na disk nebo odeslání do zařízení, musíte vytvořit vlastní sloupec typu Sloupec sestavený z jiných sloupců, použít tuto funkci v šabloně tohoto sloupce a hodnotu tohoto sloupce použít ve svých šablonách pro uložení/odeslání.

virtual_libraries

class calibre.utils.formatter_functions.BuiltinVirtualLibraries[zdroj]

virtual_libraries() – vrátí seznam virtuálních knihoven, které obsahují tuto knihu, oddělený čárkami. Tato funkce funguje pouze v GUI. Pokud chcete tyto hodnoty použít v šablonách pro uložení na disk nebo odeslání do zařízení, musíte vytvořit vlastní sloupec typu Sloupec sestavený z jiných sloupců, použít tuto funkci v šabloně tohoto sloupce a hodnotu tohoto sloupce použít ve svých šablonách pro uložení/odeslání.

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=('Neznámý',), other=None, template_cache=None, formatter=None)[zdroj]

A class representing all the metadata for a book. The various standard metadata fields are available as attributes 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() 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.

Please keep the method based API of this class to a minimum. Every method becomes a reserved field name.

is_null(field)[zdroj]

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 Metadata.<lambda>>)[zdroj]

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()[zdroj]

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)[zdroj]

Set all identifiers. Note that if you previously set ISBN, calling this method will delete it.

set_identifier(typ, val)[zdroj]

If val is empty, deletes identifier of type typ

standard_field_keys()[zdroj]

return a list of all possible keys, even if this book doesn’t have them

custom_field_keys()[zdroj]

return a list of the custom fields in this book

all_field_keys()[zdroj]

All field keys known by this instance, even if their value is None

metadata_for_field(key)[zdroj]

return metadata describing a standard or custom field.

all_non_none_fields()[zdroj]

Return a dictionary containing all non-None metadata fields, including the custom ones.

get_standard_metadata(field, make_copy)[zdroj]

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)[zdroj]

return a dict containing all the standard field metadata associated with the book.

get_all_user_metadata(make_copy)[zdroj]

return a dict containing all the custom field metadata associated with the book.

get_user_metadata(field, make_copy)[zdroj]

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.

set_all_user_metadata(metadata)[zdroj]

store custom field metadata into the object. Field is the key name not the label

set_user_metadata(field, metadata)[zdroj]

store custom field metadata for one column into the object. Field is the key name not the label

remove_stale_user_metadata(other_mi)[zdroj]

Remove user metadata keys (custom column keys) if they don’t exist in ‚other_mi‘, which must be a metadata object

template_to_attribute(other, ops)[zdroj]

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)[zdroj]

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)[zdroj]

Returns the tuple (display_name, formatted_value)

to_html()[zdroj]

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',
    '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, 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 items to associated hyperlink
    'link_maps',
    # Calculated page count, null values are None or 0. -1 is no countable
    # formats. -2 is error processing formats, -3 is DRMed.
    'pages',
))

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
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(('device_collections', '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