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¶
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¶
ceiling(value) – vrátí nejmenší celé číslo větší nebo rovné value. Vyvolá výjimku, pokud value není číslo.
divide¶
divide(x, y) – vrátí x / y. Vyvolá výjimku, pokud x nebo y není číslo. Tuto funkci lze obvykle nahradit operátorem /.
floor¶
floor(value) – vrátí největší celé číslo menší nebo rovné value. Vyvolá výjimku, pokud value není číslo.
fractional_part¶
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¶
mod(value, y) – vrátí floor zbytku po dělení value / y. Vyvolá výjimku, pokud value nebo y není číslo.
multiply¶
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¶
round(value) – vrátí celé číslo nejbližší hodnotě value. Vyvolá výjimku, pokud value není číslo.
subtract¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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 Blogsformats_path_segments(0, 0, 1, 1, '/')vrátí Help - Joe Blogs.epubformats_path_segments(1, 0, 1, 1, '/')vrátí Joe Blogs/Help - Joe Blogs.epubformats_path_segments(1, 0, 1, 0, '/')vrátí Joe Blogs/Help - Joe Blogsformats_path_segments(0, 1, 0, 0, '/')vrátí Help - (calibre_id)
formats_paths¶
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¶
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_link¶
get_link(field_name, field_value) – načte odkaz pro pole field_name s hodnotou field_value. Pokud není připojen žádný odkaz, vrátí prázdný řetězec. Příklady:
Následující vrátí odkaz připojený ke štítku
Fiction:get_link('tags', 'Fiction')
Tato šablona vytvoří seznam odkazů pro všechny štítky přidružené ke knize ve tvaru
value:link, ...:program: ans = ''; for t in $tags: l = get_link('tags', t); if l then ans = list_join(', ', ans, ',', t & ':' & get_link('tags', t), ',') fi rof; ans
Tato funkce funguje pouze v GUI a na serveru s obsahem.
get_note¶
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¶
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¶
has_note(field_name, field_value). Zkontroluje, zda má pole poznámku. Tato funkce má dvě varianty:
Pokud
field_valuenení''(prázdný řetězec), vrátí'1', pokud má hodnotafield_valuev polifield_namepoznámku, jinak''.Příklad:
has_note('tags', 'Fiction')vrátí'1', pokud má štítekFictionpřipojenou poznámku, jinak''.Pokud je
field_value'', vrátí seznam hodnot vfield_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¶
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íšepř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¶
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, pakf_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¶
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¶
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ísmenechAP :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ísmenechaP :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 PMAp :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 PMiso :datum s časem a časovým pásmem. Musí být jediným použitým formátemto_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 zafrom_numbera 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¶
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¶
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í hodnotu2d 1h 0m 20s.format_duration(176420, '[h][m][s]')vrátí hodnotu49h 0m 20s.format_duration(176420, 'Your reading time is [d][h][m][s]')vrátí hodnotuYour reading time is 2d 1h 0m 20s.format_duration(176420, '[w][d][h][m][s]')vrátí hodnotu2d 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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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 je1500.logarithmic_factor– určuje, jak rychle se šířka mění, když se počet stran pohybuje od 0 do maxima. Výchozí hodnota je2.default_width– šířka pro knihy s neplatným počtem stran.
Funkce pro URL¶
encode_for_url¶
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¶
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¶
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¶
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¶
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¶
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¶
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čtevsekund kdatem: přičtevminut kdateh: přičtevhodin kdated: přičtevdní kdatew: přičtevtýdnů kdatey: přičtevlet kdate, 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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
ifempty(value, text_if_empty) – pokud value není prázdné, vrátí toto value, jinak vrátí text_if_empty.
re¶
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¶
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¶
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¶
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¶
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¶
strlen(value) – vrátí délku řetězce value.
substr¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
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¶
capitalize(value) – vrátí value s prvním písmenem velkým a zbytkem malými písmeny.
lowercase¶
lowercase(value) – vrátí value malými písmeny.
titlecase¶
titlecase(value) – vrátí value s velkými počátečními písmeny.
uppercase¶
uppercase(value) – vrátí value velkými písmeny.
Získávání hodnot z metadat¶
booksize¶
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¶
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¶
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¶
current_library_name() – vrátí poslední část cesty k aktuální knihovně calibre.
current_library_path¶
current_library_path() – vrátí úplnou cestu k aktuální knihovně calibre.
current_virtual_library_name¶
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¶
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¶
has_cover() – vrátí 'Yes', pokud má kniha obálku, jinak prázdný řetězec.
is_marked¶
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¶
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¶
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¶
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¶
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¶
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¶
series_sort() – vrátí hodnotu řazení série.
user_categories¶
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¶
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.
- standard_field_keys()[zdroj]¶
return a list of all possible keys, even if this book doesn’t have them
- 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.
- 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
