# anki sentence mining template this is an anki card template for sentence mining. it has fields for a foreign sentence, foreign word reading, translated word, translated sentence and audio. it has built-in parsers for adding markdown-like styling, furigana that is visible on either both sides or only on the back side, spoilers, definition context hints, and word type indicators. it supports a vertical and horizontal layout, desktop and mobile, as well as light and dark themes. > animations are now working in desktop Anki >=2.1.62 ## example ### input |Field|Value| |-|-| |Complete sentence|`*ハンパなく*[鍛](きた)えてやるから[覚悟](かくご)するゴロ!`| |Target word reading|`半端ない、ハンパない【はん・ぱ・ない】[4] (uk)`| |Target word translation|`[い-adj] extreme, impressive, staggering {of height}`| |Complete sentence translation|`I'm going to train you like crazy, so be prepared!`| |Tags|`ゼルダの伝説 ブレス・オブ・ザ・ワイルド`| ### output |![](../assets/card-front.png)|![](../assets/card-back-hidden.png)|![](../assets/card-back-visible.png)| |-|-|-| |front|back|clicked sentence, hover tags, and hover reading| > Having a lot of information on a single card is generally discouraged, so the > sentence translation, tags and alternate writings are hidden by default and > can be shown when hovered/clicked. ## set-up i don't know how to create a teplate deck (if that's even a thing), so these are instructions to apply to an empty deck. 1. run `make` to generate files (or download from [github releases](https://github.com/lonkaars/refold-tools/releases)) 2. Under Tools > Manage note types > (note type here) > Fields, make sure the following fields exist (might be case-sensitive): | |name|description| |-|----|-----------| |1|Complete sentence|Complete sentence with furigana and target word in bold| |2|Target word reading|Dictionary reading of word (with word type)| |3|Target word translation|(In context) translation of target word| |4|Complete sentence translation|Complete sentence translation| |5|Audio|Audio field (regular `[sound:file.mp3]` or `noaudio`/empty for no audio)| 3. In the 'Browse' view, click on Cards... (you might need to create a temporary card in a deck) and paste the contents of front-template.html and back-template.html in the front template and back template of the card type. 4. You can add any custom styles you want in the Styling tab, but I recommend you remove the default CSS. 5. Profit This card template is also compatible with AnkiDroid, but you need to add `.night_mode { }` to the Styling tab for this to work. For some reason AnkiDroid checks if the card has dark mode 'support' by checking if the Styling tab CSS contains the literal string `.night_mode`. [The documentation](https://docs.ankiweb.net/templates/styling.html#night-mode) suggests that the night mode CSS class is called `nightMode` instead of `night_mode`, but `night_mode` works fine on desktop too, so is used in this card template. ## syntax parsing behavior is controlled using html classes. if two parsers check for the same character, they likely cannot be used simultaneously. here are the default classes for this template: |card field|classes| |-|-| |sentence|[`parse`](#parse) [`parse-furigana`](#parse-furigana) [`parse-format`](#parse-format) [`foreign`](#foreign)| |target word reading|[`parse`](#parse) [`parse-format`](#parse-format) [`parse-reading`](#parse-reading) [`parse-indicators`](#parse-indicators) [`parse-script`](#parse-script) [`foreign`](#foreign)| |target word translation|[`parse`](#parse) [`parse-format`](#parse-format) [`parse-definitions`](#parse-definitions) [`parse-indicators`](#parse-indicators) [`parse-script`](#parse-script) [`native`](#native)| |sentence translation|[`parse`](#parse) [`parse-format`](#parse-format) [`native`](#native) [`spoiler`](#spoiler) [`parse-script`](#parse-script) [`hidden`](#hidden)| |tags|[`parse`](#parse) [`parse-tags`](#parse-tags)| ### parse enables parsing for element. if a parser has a character sensitivity list, a backslash can be used to insert the literal character instead. ### parse-format parse bold and italic style, and convert `\n` and `\t` into newline and tab characters. examples: |input|output| |-|-| |`*bold*`|<b>bold</b>| |`_italic_`|<i>italic</i>| |`\t`|(literal tab character)| |`\n`|html `<br>`| sensitive to the following characters: `*_` ### parse-furigana parse furigana between square or curly brackets immediately followed by reading between parenthesis. examples: |input|output| |-|-| |`[漢字](かんじ)`|<ruby>漢字<rt>かんじ</rt></ruby> (furigana visible on back side only)| |`{漢字}(かんじ)`|<ruby>漢字<rt>かんじ</rt></ruby> (furigana visible on both sides)| sensitive to the following characters: `[](){}` ### parse-definitions parse list of latin definitions separated by commas, or japanese definitions separated by japanese full stop, and convert text between curly brackets to subtile text. commas/full stops do not start a new definition inside subtile text and parenthesis, and are inserted normally. example: |input|output| |-|-| |`word {subtile, or is it} (this is, a single item)\, and still is here, but not here`|<ul><li>word <i style="font-size: 70%">subtile, or is it</i> (this is, a single item), and still is here</li><li>but not here</li></ul>| |`単語定義1。定義2。`|<ul><li>単語定義1。</li><li>定義2。</li></ul>| in desktop horizontal, desktop vertical, and mobile horizontal layouts, definitions are displayed on a single line, separated by a comma. in the vertical mobile layout, items are separated by a short bar, and displayed in a vertical list. sensitive to the following characters: `{}(),。` ### parse-indicators parse indicators between square brackets. indicator "stamp" can be added by suffixing the stamp with a dash character. examples: |input|output| |-|-| |`[adj]`|![](../assets/indicator-default.png)| |`[な-adj]`|![](../assets/indicator-stamp.png)| |`[な\-adj]`|![](../assets/indicator-nostamp.png)| sensitive to the following characters: `[]-` ### parse-reading parse reading field. start of input is tagged with class `kanji`, everything between lenticular brackets is tagged with class `reading`, note can be added with regular parenthesis (for marking if word is usually written as kanji), pitch accent index can be added using square brackets. if a word is commonly written in multiple ways, they can be separated by a japanese comma. example (+1 marker expands to other readings when hovered/tapped): |input|output| |-|-| |`半端ない、ハンパない【はん・ぱ・ない】[4] (uk)`|![](../assets/reading-all.png)| sensitive to the following characters: `【】()・、` (and line start) ### parse-script parse text into `span` elements with class `script-japanese` or `script-latin` when a script switch is detected. used for forcing non-italic fonts for japanese text ### parse-tags used on tags element only. separates tags by space. ### foreign mark element as having foreign (japanese) text by default (slightly larger font size for lcd's) ### native mark element as having native (latin) text by default (default font size) ### spoiler enables spoiler behavior for element (requires [`parse`](#parse) class to work) ### hidden set element with [`spoiler`](#spoiler) class to be hidden by default ### visible set element with [`spoiler`](#spoiler) class to be visible by default