slavetto / anki-cards-web-browser

Co je to?

Tento dokument vysvětluje, jak by mělo fungovat zpracování archivů apkg.

Struktura souborů .apkg

Soubory Anki .apkg jsou pouze archivy zip obsahující následující soubory:

  • collection.anki2:
  • Soubory s názvy 1,2,3,4…: Obrázky, které karty používají
  • media: Soubor json obsahující mapování mezi obrázky a jejich původními názvy (např. soubor 1 se na kartách ve skutečnosti jmenuje latex-96c15f8a1af25e7a2eec64f7c6fedafe12363352.png).

Struktura kolekce.anki2

Jedná se o skutečnou databázi, která obsahuje všechny poznámky a další užitečnéinformace, které budeme používat při generování prohlížeče. O tom, co přesně databáze obsahuje, existuje velmi podrobný návod, v tomto dokumentu si pouze popíšeme, co budeme muset z databáze vytáhnout, abychom mohli vygenerovat prohlížeč.

Získání poznámek

Poznámky jsou uloženy v tabulce notes. Sloupce, které z této tabulky potřebujeme, jsou:

  • id: Jedinečný identifikátor poznámky
  • mid: ID modelu karty (později bude popsáno, jak jej získat)
  • tags: Značky přiřazené k poznámce
  • fld: Pole poznámky. Ten je třeba vložit do modelu karet pro jejich generování, obsahuje všechna pole oddělená znakem 0x1f (31). Pořadí políje přesně takové, jaké je uvedeno v modelu poznámky.

Načtení modelů karet

Aby bylo možné generovat karty z poznámek, musíme načíst model karet. Model nám říká, kolikkaret má být vygenerováno z jedné poznámky, jaké je HTML okolí poznámky, jak mají být prezentována pole notes.fld.

Model nalezneme ve sloupci models tabulky col. Všimněte si, že tabulka col obsahuje vždy pouze jedenzáznam. Model je uložen ve formátu JSON; toto je příklad, jak vypadá JSON modelu se dvěma modely:

{ "1471435193999": { "vers": , "name": "Istruzioni Assembly", "tags": , "did": 1493040141981, "usn": 625, "req": ], ] ], "flds": , "sticky": false, "rtl": false, "ord": 0, "font": "Arial", "size": 20 }, { "name": "Descrizione", "media": , "sticky": false, "rtl": false, "ord": 1, "font": "Arial", "size": 20 }, { "name": "Architettura", "media": , "sticky": true, "rtl": false, "ord": 2, "font": "Arial", "size": 20 } ], "sortf": 0, "tmpls": , "mod": 1493150692, "latexPost": "\end{document}", "type": 0, "id": "1471435193999", "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n", "latexPre": "\documentclass{article}\n\special{papersize=3in,5in}\n\usepackage{inputenc}\n\usepackage{amssymb,amsmath}\n\pagestyle{empty}\n\setlength{\parindent}{0in}\n\begin{document}\n" }, "1471435194000": { "vers": , "name": "Base (default)", "tags": , "did": 1492955368330, "usn": 668, "req": ] ], "flds": , "sticky": false, "rtl": false, "ord": 0, "font": "Arial", "size": 20 }, { "name": "Retro", "media": , "sticky": false, "rtl": false, "ord": 1, "font": "Arial", "size": 20 } ], "sortf": 0, "tmpls": , "mod": 1494091839, "latexPost": "\end{document}", "type": 0, "id": 1471435194000, "css": ".card {\n font-family: Arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\nimg {\n vertical-align: middle;\n padding-bottom: 7px;\n padding-right: 6px;\n padding-left: 6px\n}", "latexPre": "\documentclass{article}\n\special{papersize=3in,5in}\n\usepackage{inputenc}\n\usepackage{amssymb,amsmath}\n\pagestyle{empty}\n\setlength{\parindent}{0in}\n\begin{document}\n" }}

V téže již zmíněné adrese URLje velmi pěkně popsáno, co dělají jednotlivá pole modelu. Zde budou popsána pouze ta, která potřebujeme k vytvoření prohlížeče karet.

V kořeni objektu se nachází klíč "1471435193999". Tento klíč je id daného modelu, které je uvedeno ve sloupci mid tabulky notes.

Vnitř tohoto objektu je pole s klíčem "flds". Toto pole obsahuje pole, kterákarty zadávají při vytváření poznámek. Obvykle jsou zde pouze pole „Přední“ a „Zadní“, avšak,v závislosti na modelu je možné mít více různých polí. Jak již bylo uvedeno, poznámky tyto informace uchovávají ve sloupci notes.fld; pole sloupce jsou ve stejném pořadí jako definice polí v tomto poli.

Objekt "tmpls" obsahuje šablony poznámek a poskytuje informace o struktuře HTML karet. Modely, které definují více šablon, generují více karet, pro každou šablonu jednu. Tento objekt má dvě důležitá pole:

  • "qfmt": HTML přední části karty
  • "afmt": HTML zadní části karty
  • "ord": Pozice šablony v poli "tmpls". Používá se v tabulce cards k identifikaci šablony, která kartu vygenerovala.

Tato pole mohou obsahovat {{placeholders}}, které je třeba nahradit hodnotami polí, která karty ukládají do notes.fld. Spojení mezi pozicí polea názvem pole je spojením objektů v "flds". Všimněte si, že "afmt" může obsahovat speciálnízáložku {{FrontSide}}; je to jen šikovný způsob, jak zobrazit obsah kartybez nutnosti kopírovat & vložit obsah "qfmt" při vytváření modelů karet.

Poslední pole, které nás zajímá, je "css"; obsahuje kód CSS, který musí být na kartu aplikován.

Získání informací o balíčcích

Informace o balíčcích obsažených v archivu jsou uloženy ve sloupci col.decks ve formátuJSON. Zde je ukázka JSON:

{ "1": { "desc": "", "name": "Predefinito", "extendRev": 50, "usn": 0, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1, "mod": 1494099120 }, "1493040141981": { "extendRev": 50, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1493040141981, "mod": 1494073733, "name": "Universit\u00e0 - Calcolatori::Assembly", "usn": 661, "browserCollapsed": true, "mid": 1471435194000, "desc": "" }, "1492955368330": { "extendRev": 50, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1492955368330, "mod": 1494095504, "name": "Universit\u00e0 - Calcolatori", "usn": 671, "browserCollapsed": true, "mid": 1471435194000, "desc": "" }}

Některá pole, která by měla být zaznamenána:

  • id: Jedinečné ID balíčku. Toto id se používá v tabulce cards ve sloupci did k upřesnění vazeb mezi kartami a balíčky (vysvětleno později). Všimněte si, že výchozí balíček má vždy id 1.
  • name: Název balíčku. V případě podřízených balíčků bude název ve formátu „Název rodičovského balíčku::Název podřízeného balíčku“

Získání karet

Informace o kartách jsou uloženy v tabulce cards. Sloupce, které z této tabulky potřebujeme, jsou:

  • id: jedinečný identifikátor karty
  • nid: id poznámky, která tuto kartu vygenerovala
  • did: id identifikátor balíčku, ve kterém je tato karta obsažena
  • ord: pozice šablony modelu; odpovídá poli ord šablony.

Struktura mediálního souboru

media je soubor JSON, který přiřazuje kódové názvy obrázků k jejich původním názvům. Všimněte si, že libovolné pole karty může obsahovat obrázky, ale obrázky jsou spojeny s jejich úplným názvem. během vytváření souboru .apkg anki komprimuje názvy obrázků (ve skutečnosti je pouze přejmenovává postupnými čísly), nicméně karty stále odkazují na původnínázev. Účelem souboru media je umožnit nám překládat číselné názvy v původních názvech obrázků.

Struktura souboru media je poměrně jednoduchá:

.

Napsat komentář