AnkiIO 1.0.2
Build, validate, import, and export Anki-compatible decks from .NET
Loading...
Searching...
No Matches
AnkiNoteTypes.cs
1namespace AnkiIO;
2
30public static class AnkiNoteTypes
31{
32 private static readonly AnkiField[] BasicFields = [new("Front"), new("Back")];
33 private static readonly AnkiField[] ClozeFields = [new("Text"), new("Extra")];
34 private static readonly AnkiCardTemplate[] BasicTemplates =
35 [
36 new("Card 1", "{{Front}}", "{{FrontSide}}<hr id=\"answer\">{{Back}}"),
37 ];
38 private static readonly AnkiCardTemplate[] BasicAndReversedTemplates =
39 [
40 .. BasicTemplates,
41 new("Card 2", "{{Back}}", "{{FrontSide}}<hr id=\"answer\">{{Front}}"),
42 ];
43 private static readonly AnkiCardTemplate[] ClozeTemplates =
44 [
45 new("Cloze", "{{cloze:Text}}", "{{cloze:Text}}<br>{{Extra}}"),
46 ];
47
54 public static AnkiNoteType CreateBasic() => Create(
55 "Basic",
56 AnkiNoteTypeKind.Standard,
57 BasicFields,
58 BasicTemplates);
59
67 public static AnkiNoteType CreateBasicAndReversed() => Create(
68 "Basic (and reversed card)",
69 AnkiNoteTypeKind.Standard,
70 BasicFields,
71 BasicAndReversedTemplates);
72
80 public static AnkiNoteType CreateCloze() => Create(
81 "Cloze",
82 AnkiNoteTypeKind.Cloze,
83 ClozeFields,
84 ClozeTemplates);
85
86 internal static bool IsBasic(AnkiNoteType noteType) => Matches(
87 noteType,
88 "Basic",
89 AnkiNoteTypeKind.Standard,
90 BasicFields,
91 BasicTemplates);
92
93 internal static bool IsBasicAndReversed(AnkiNoteType noteType) => Matches(
94 noteType,
95 "Basic (and reversed card)",
96 AnkiNoteTypeKind.Standard,
97 BasicFields,
98 BasicAndReversedTemplates);
99
100 internal static bool IsCloze(AnkiNoteType noteType) => Matches(
101 noteType,
102 "Cloze",
103 AnkiNoteTypeKind.Cloze,
104 ClozeFields,
105 ClozeTemplates);
106
107 private static AnkiNoteType Create(
108 string name,
109 AnkiNoteTypeKind kind,
110 IEnumerable<AnkiField> fields,
111 IEnumerable<AnkiCardTemplate> templates)
112 {
113 var noteType = new AnkiNoteType(name, kind);
114 foreach (var field in fields)
115 {
116 noteType.AddConfiguredField(field);
117 }
118
119 foreach (var template in templates)
120 {
121 noteType.AddConfiguredTemplate(template);
122 }
123
124 return noteType;
125 }
126
127 private static bool Matches(
128 AnkiNoteType noteType,
129 string name,
130 AnkiNoteTypeKind kind,
131 IReadOnlyList<AnkiField> fields,
132 IReadOnlyList<AnkiCardTemplate> templates) =>
133 string.Equals(noteType.Name, name, StringComparison.Ordinal)
134 && noteType.Kind == kind
135 && string.Equals(noteType.Css, AnkiNoteType.DefaultCss, StringComparison.Ordinal)
136 && noteType.Fields.SequenceEqual(fields)
137 && noteType.Templates.SequenceEqual(templates);
138}
Defines one study direction by mapping note fields to a card front and back.
Configures one named input field in an AnkiNoteType.
Definition AnkiField.cs:45
Defines the reusable schema and rendering rules shared by a family of Anki notes.
Creates fresh conventional Basic, reversed, and Cloze definitions for callers that need direct contro...
static AnkiNoteType CreateCloze()
Creates a conventional Cloze definition with Text and Extra fields.
static AnkiNoteType CreateBasicAndReversed()
Creates a conventional Basic (and reversed) definition that generates two study directions.
static AnkiNoteType CreateBasic()
Creates a conventional Basic definition that generates one front-to-back card.
AnkiNoteTypeKind
Specifies how an AnkiNoteType turns one note into study cards.