"""anki_generation.py Produces anki output """ # Standard Library import random # Pip from genanki import Deck, Model, Note, Package # Local from .utility import ProcessFile, TranslationResult # from pinyin_tone_converter.pinyin_tone_converter import PinyinToneConverter # Constants CSS = """ .card { font-family: arial; font-size: 20px; text-align: center; color: black; background-color: white; } .simple { font-family: Arial; font-size: 100px; } .trad { font-family: Arial; font-size: 75px; } """ # Models PHRASE_MODEL = Model( 2076166425, "Phrase Model", fields=[ {"name": "Translated"}, {"name": "Phrase"}, {"name": "Audio"}, ], templates=[ { "name": "Card 1", "qfmt": "{{Translated}}
{{Audio}}", "afmt": '{{FrontSide}}
{{Phrase}}', }, { "name": "Card 2", "qfmt": "{{Phrase}}
{{Audio}}", "afmt": '{{FrontSide}}
{{Translated}}', }, { "name": "Card 3", "qfmt": "{{Audio}}", "afmt": '{{FrontSide}}
{{Phrase}}', }, ], css=CSS, ) HSK_MODEL = Model( 1708536519, "HSK Model", fields=[ {"name": "English"}, {"name": "Pinyin"}, {"name": "Simplified"}, {"name": "Traditional"}, {"name": "Audio"}, ], templates=[ { "name": "Card 1", "qfmt": "{{Pinyin}}
{{English}}
{{Audio}}", "afmt": ( "{{FrontSide}}
{{Simplified}}
" "
{{Traditional}}
" ), }, { "name": "Card 2", "qfmt": "
{{Simplified}}

" "{{Traditional}}
", "afmt": ( "{{FrontSide}}
{{Pinyin}}" "
{{English}}
{{Audio}}" ), }, { "name": "Card 3", "qfmt": "{{Audio}}", "afmt": ( "{{FrontSide}}
{{Pinyin}}" "
{{Simplified}}
" "
{{Traditional}}
" ), }, ], css=CSS, ) # Proccess # def output_anki_dictionary(out_file, results): # """Creates an anki file from a dictionary results""" # final_file = out_file.parent / f"{out_file.stem}.apkg" # deck_name = "::".join(out_file.relative_to(OUTPUT).parts[:-1] + (out_file.stem,)) # deck = Deck(random.randrange(1 << 30, 1 << 31), deck_name) # package = Package(deck) # audios = [] # for entry, audio in results: # note = Note( # model=HSK_MODEL, # fields=[ # "\n ".join(f"{n+1}. {m}" for n, m in enumerate(entry.meanings)), # PinyinToneConverter().convert_text(entry.pinyin), # entry.simplified, # entry.traditional, # f"[sound:{audio.name}]", # ], # ) # audios.append(audio) # deck.add_note(note) # package.media_files = audios # package.write_to_file(final_file) def output_anki_phrase(process_file: ProcessFile, results: list[TranslationResult]): """Creates an anki file from a phrases results""" final_file = process_file.output_name.with_suffix(".apkg") deck_name = "::".join( process_file.input_file.parts[:-1] + (process_file.input_fil.stem,) ) deck = Deck(random.randrange(1 << 30, 1 << 31), deck_name) package = Package(deck) audios = [] for result in results: note = Note( model=PHRASE_MODEL, fields=[ result.translated, result.line, f"[sound:{result.audio_path.name}]", ], ) deck.add_note(note) audios.append(result.audio_path) package.media_files = audios package.write_to_file(final_file)