diff --git a/.gitignore b/.gitignore index 8a2bd54..e2bcad9 100644 --- a/.gitignore +++ b/.gitignore @@ -183,6 +183,12 @@ Thumbs.db # Backup files *.bak +*.backup + +# Test/temporary lessons files (only data/lessons.json is tracked) +/lessons.json +/meine_lektionen.json +/test_*.json # Editor directories and files .vscode/ diff --git a/CLAUDE.md b/CLAUDE.md index f2509ae..a72b57e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -77,6 +77,47 @@ Debug endpoint for checking lesson loading and configuration: curl http://localhost:5000/debug ``` +### Creating Lessons from TXT Files + +The project includes a CLI tool to convert TXT files into lessons.json format: + +```bash +# Convert TXT files (order matters!) +python3 convert_txt_files_to_lessons_json.py 01.1_*.txt 01.2_*.txt 01.3_*.txt + +# With custom output file +python3 convert_txt_files_to_lessons_json.py -o data/lessons.json *.txt + +# Show help +python3 convert_txt_files_to_lessons_json.py --help +``` + +**TXT File Format:** +``` +Titel: 01.1 Erarbeitung der Grundstellung +Untertitel: Optional subtitle (ignored) +Anweisung: Task/instruction for the user + +ffff jjjj ffff jjjj +# Comments starting with # are ignored +... +``` + +**Filename Format:** `XX.Y_Description.txt` (e.g., `01.1_Grundstellung.txt`) +- Number becomes `lesson` as string (e.g., `01.1` → `"1.1"`) +- Parameter order determines JSON order +- Supports both decimal (1.1) and integer (2) lesson numbers + +**Output Format:** +```json +{ + "lesson": "1.1", + "title": "01.1 Erarbeitung der Grundstellung", + "text": "The practice text...", + "task": "Instruction for the user" +} +``` + ## Architecture Overview ### Request Flow diff --git a/README.md b/README.md index 26e9eb1..c070bec 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ http://localhost:5000 typewriter/ ├── app.py # Flask-Hauptanwendung ├── models.py # SQLAlchemy Datenbankmodelle +├── convert_txt_files_to_lessons_json.py # Tool: TXT → lessons.json ├── test_app.py # Unit-Tests (18 Tests) ├── test_metronome_velocity.py # Metronom-Tests (22 Tests) ├── requirements.txt # Python-Dependencies @@ -284,6 +285,37 @@ Der Pre-commit Hook führt automatisch alle Tests vor jedem Commit aus und block ## 🔧 Entwicklung +### Lektionen aus TXT-Dateien erstellen + +Das Projekt enthält ein Kommandozeilen-Tool zum Konvertieren von TXT-Dateien in das lessons.json Format: + +```bash +# Konvertiere TXT-Dateien zu lessons.json +python3 convert_txt_files_to_lessons_json.py 01.1_*.txt 01.2_*.txt 01.3_*.txt + +# Mit custom Output-Datei +python3 convert_txt_files_to_lessons_json.py -o data/lessons.json *.txt + +# Hilfe anzeigen +python3 convert_txt_files_to_lessons_json.py --help +``` + +**TXT-Datei Format:** +``` +Titel: 01.1 Erarbeitung der Grundstellung +Untertitel: Die erste Lektion (optional, wird ignoriert) +Anweisung: Sprechen Sie laut und deutlich jeden Buchstaben mit. + +ffff jjjj ffff jjjj ffff jjjj +ffjj ffjj ffjj ffjj ffjj ffjj +... +``` + +**Dateinamen-Format:** `XX.Y_Beschreibung.txt` (z.B. `01.1_Grundstellung.txt`) +- Die Nummer wird zur `lesson` (z.B. `01.1` → `"1.1"`) +- Die Reihenfolge der Parameter bestimmt die Reihenfolge in der JSON-Datei +- Kommentarzeilen (beginnend mit `#`) werden ignoriert + ### Datenbank-Migrationen Das Projekt verwendet Alembic für Datenbank-Schema-Änderungen: diff --git a/convert_txt_files_to_lessons_json.py b/convert_txt_files_to_lessons_json.py new file mode 100755 index 0000000..2a4c462 --- /dev/null +++ b/convert_txt_files_to_lessons_json.py @@ -0,0 +1,305 @@ +#!/usr/bin/env python3 +""" +Konvertiert TXT-Dateien in eine lessons.json Datei. + +Format der TXT-Dateien: + Titel: + Untertitel: (wird übersprungen) + Anweisung: + + + +Dateinamen-Format: XX.Y_Beschreibung.txt + - XX.Y wird zur lesson-Nummer (z.B. 01.1 -> "1.1") + - Bei Ganzzahlen ohne Dezimalpunkt (z.B. 02_Test.txt -> "2") + +Ausgabe-Format (lessons.json): + [ + { + "lesson": "1.1", + "title": "01.1 Erarbeitung der Grundstellung", + "text": "Der Übungstext...", + "task": "Anweisung für den User" + }, + ... + ] +""" + +import re +import json +import sys +import argparse +from pathlib import Path +from typing import List, Dict, Any + + +def extract_lesson_number(filename: str) -> str: + """ + Extrahiert die Lektionsnummer aus dem Dateinamen als String. + + Args: + filename: Name der Datei (z.B. "01.1_Test.txt") + + Returns: + Lektionsnummer als String (z.B. "1.1" oder "2") + """ + match = re.match(r'^(\d+(?:\.\d+)?)_', filename) + if match: + # Konvertiere zu float und zurück zu string um führende Nullen zu entfernen + num = float(match.group(1)) + # Wenn es eine Ganzzahl ist, gib sie ohne Dezimalpunkt zurück + if num == int(num): + return str(int(num)) + return str(num) + return "0" + + +def parse_txt_file(filepath: Path) -> Dict[str, Any]: + """ + Parst eine einzelne TXT-Datei und extrahiert alle relevanten Informationen. + + Args: + filepath: Pfad zur TXT-Datei + + Returns: + Dictionary mit lesson, title, text und task + + Raises: + FileNotFoundError: Wenn die Datei nicht existiert + UnicodeDecodeError: Wenn die Datei nicht UTF-8 encoded ist + """ + with open(filepath, 'r', encoding='utf-8') as f: + lines = f.readlines() + + title = '' + task = '' + text_lines = [] + i = 0 + + # Titelzeile extrahieren + if i < len(lines) and lines[i].startswith('Titel: '): + title = lines[i].replace('Titel: ', '').strip() + i += 1 + + # Untertitelzeile überspringen + if i < len(lines) and lines[i].startswith('Untertitel: '): + i += 1 + + # Anweisungszeile extrahieren + if i < len(lines) and lines[i].startswith('Anweisung: '): + task = lines[i].replace('Anweisung: ', '').strip() + i += 1 + + # Rest der Datei verarbeiten (ab hier ist der eigentliche Text) + while i < len(lines): + line = lines[i] + # Kommentarzeilen überspringen + if line.startswith('#'): + i += 1 + continue + text_lines.append(line.rstrip('\n')) + i += 1 + + # Text zusammenfügen + text = '\n'.join(text_lines).strip() + lesson_number = extract_lesson_number(filepath.name) + + return { + "lesson": lesson_number, + "title": title, + "text": text, + "task": task + } + + +def validate_file(filepath: str) -> Path: + """ + Validiert eine Datei und gibt ein Path-Objekt zurück. + + Args: + filepath: Pfad zur Datei als String + + Returns: + Path-Objekt + + Raises: + FileNotFoundError: Wenn die Datei nicht existiert + ValueError: Wenn der Pfad kein File ist oder falsches Format hat + """ + path = Path(filepath) + + if not path.exists(): + raise FileNotFoundError(f"Datei nicht gefunden: {filepath}") + + if not path.is_file(): + raise ValueError(f"Pfad ist keine Datei: {filepath}") + + if not path.suffix == '.txt': + raise ValueError(f"Datei muss .txt Extension haben: {filepath}") + + # Prüfe Dateinamen-Format (XX.Y_Name.txt oder XX_Name.txt) + pattern = re.compile(r'^[0-9]+(?:\.[0-9]+)?_.+\.txt$') + if not pattern.match(path.name): + raise ValueError( + f"Ungültiges Dateinamen-Format: {path.name}\n" + f"Erwartet: XX.Y_Beschreibung.txt (z.B. 01.1_Lektion.txt)" + ) + + return path + + +def convert_files_to_json(input_files: List[str], output_file: str) -> None: + """ + Konvertiert eine Liste von TXT-Dateien in eine JSON-Datei. + + Args: + input_files: Liste von Dateipfaden + output_file: Pfad zur Ausgabedatei + + Raises: + FileNotFoundError: Wenn eine Eingabedatei nicht existiert + ValueError: Wenn eine Datei ungültig ist + """ + # Validiere alle Dateien zuerst + validated_files = [] + for filepath in input_files: + try: + path = validate_file(filepath) + validated_files.append(path) + except (FileNotFoundError, ValueError) as e: + print(f"✗ FEHLER: {e}", file=sys.stderr) + sys.exit(1) + + # Wenn alle Dateien valide sind, starte Konvertierung + print(f"Konvertiere {len(validated_files)} Datei(en) zu {output_file}...") + print() + + for path in validated_files: + print(f"✓ {path.name}") + + print() + + # Parse alle Dateien in der angegebenen Reihenfolge + lessons = [] + for txt_file in validated_files: + try: + lesson_data = parse_txt_file(txt_file) + lessons.append(lesson_data) + print(f" Lektion {lesson_data['lesson']}: {lesson_data['title']}") + except Exception as e: + print(f"✗ FEHLER beim Parsen von {txt_file.name}: {e}", file=sys.stderr) + sys.exit(1) + + # JSON schreiben + output_path = Path(output_file) + try: + with open(output_path, 'w', encoding='utf-8') as f: + json.dump(lessons, f, ensure_ascii=False, indent=2) + + print() + print(f"✓ {len(lessons)} Lektionen erfolgreich konvertiert") + print(f"✓ Ausgabedatei: {output_path.absolute()}") + except Exception as e: + print(f"✗ FEHLER beim Schreiben der Ausgabedatei: {e}", file=sys.stderr) + sys.exit(1) + + +def create_parser() -> argparse.ArgumentParser: + """Erstellt den ArgumentParser mit allen Optionen.""" + + parser = argparse.ArgumentParser( + prog='convert_txt_files_to_lessons_json.py', + description=''' +Konvertiert TXT-Dateien in eine lessons.json Datei für den Typewriter Trainer. + +Die Reihenfolge der angegebenen Dateien bestimmt die Reihenfolge in der +Ausgabedatei. Dies erlaubt flexible Sortierung unabhängig von den +Lektionsnummern in den Dateinamen. + ''', + epilog=''' +EINGABE-FORMAT (TXT-Dateien): + Dateiname: XX.Y_Beschreibung.txt (z.B. 01.1_Grundstellung.txt) + + Inhalt: + Titel: + Untertitel: (wird ignoriert) + Anweisung: + + + + # Zeilen, die mit '#' beginnen (Kommentare), werden ignoriert + +AUSGABE-FORMAT (lessons.json): + [ + { + "lesson": "1.1", + "title": "01.1 Erarbeitung der Grundstellung", + "text": "Der Übungstext...", + "task": "Anweisung für den User" + }, + ... + ] + +BEISPIELE: + # Einfache Konvertierung + python3 convert_txt_files_to_lessons_json.py 01.1_Lektion.txt 01.2_Lektion.txt + + # Mit benutzerdefinierter Ausgabedatei + python3 convert_txt_files_to_lessons_json.py -o meine_lektionen.json *.txt + + # Bestimmte Reihenfolge + python3 convert_txt_files_to_lessons_json.py 01.1_*.txt 01.2_*.txt 02.1_*.txt + ''', + formatter_class=argparse.RawDescriptionHelpFormatter, + add_help=False # Wir fügen custom help hinzu + ) + + # Custom Help-Optionen + parser.add_argument( + '-h', '--help', '-?', + action='help', + help='Zeigt diese Hilfe an und beendet das Programm' + ) + + # Output-Option + parser.add_argument( + '-o', '--output', + metavar='FILE', + default='lessons.json', + help='Ausgabedatei (default: lessons.json)' + ) + + # Input-Dateien (positional, mindestens eine erforderlich) + parser.add_argument( + 'files', + metavar='FILE', + nargs='+', + help='TXT-Dateien zum Konvertieren (Format: XX.Y_Name.txt)' + ) + + return parser + + +def main(): + """Hauptfunktion des Programms.""" + parser = create_parser() + + # Wenn keine Argumente übergeben wurden, zeige Hilfe + if len(sys.argv) == 1: + parser.print_help() + sys.exit(1) + + args = parser.parse_args() + + try: + convert_files_to_json(args.files, args.output) + except KeyboardInterrupt: + print("\n\n✗ Abgebrochen durch Benutzer", file=sys.stderr) + sys.exit(130) + except Exception as e: + print(f"\n✗ Unerwarteter Fehler: {e}", file=sys.stderr) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/data/lessons.json b/data/lessons.json index 82273ce..8111b5e 100644 --- a/data/lessons.json +++ b/data/lessons.json @@ -1,217 +1,260 @@ [ { - "lesson": 1.1, + "lesson": "1.1", "title": "01.1 Erarbeitung der Grundstellung", - "text": "ffff jjjj ffff jjjj ffff jjjj ffff jjjj ffff jjjj ffff jjjj\nffjj ffjj ffjj ffjj ffjj ffjj fjfj fjfj fjfj fjfj fjfj fjfj\n\ndddd kkkk dddd kkkk dddd kkkk dddd kkkk dddd kkkk dddd kkkk\nddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk\n\nssss llll ssss llll ssss llll ssss llll ssss llll ssss llll\nssll ssll ssll ssll ssll ssll slsl slsl slsl slsl slsl slsl\n\naaaa öööö aaaa öööö aaaa öööö aaaa öööö aaaa öööö aaaa öööö\naaöö aaöö aaöö aaöö aaöö aaöö aöaö aöaö aöaö aöaö aöaö aöaö\n\nasdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö\nfdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj\n\nafa aja afa aja ada aka ada aka asa ala asa ala aöa aöa asd\nöjö öfö öjö öfö ökö ödö ökö ödö ölö ösö ölö ösö öal ösk ölk\n\nöl ja öl ja öl ja öl öd da öd da öd da sö la sö la sö la sö\nlö aj lö aj lö aj lö dö ad dö ad dö ad ös al ös al ös al ös" + "text": "ffff jjjj ffff jjjj ffff jjjj ffff jjjj ffff jjjj ffff jjjj\nffjj ffjj ffjj ffjj ffjj ffjj fjfj fjfj fjfj fjfj fjfj fjfj\n\ndddd kkkk dddd kkkk dddd kkkk dddd kkkk dddd kkkk dddd kkkk\nddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk ddkk\n\nssss llll ssss llll ssss llll ssss llll ssss llll ssss llll\nssll ssll ssll ssll ssll ssll slsl slsl slsl slsl slsl slsl\n\naaaa öööö aaaa öööö aaaa öööö aaaa öööö aaaa öööö aaaa öööö\naaöö aaöö aaöö aaöö aaöö aaöö aöaö aöaö aöaö aöaö aöaö aöaö\n\nasdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö\nfdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj\n\nafa aja afa aja ada aka ada aka asa ala asa ala aöa aöa asd\nöjö öfö öjö öfö ökö ödö ökö ödö ölö ösö ölö ösö öal ösk ölk\n\nöl ja öl ja öl ja öl öd da öd da öd da sö la sö la sö la sö\nlö aj lö aj lö aj lö dö ad dö ad dö ad ös al ös al ös al ös", + "task": "Diese Lektion mindestens 5 mal fehlerfrei abschließen!" }, { - "lesson": 1.2, + "lesson": "1.2", "title": "01.2 Festigung durch Wortübungen", - "text": "all als all als all als all als all als all als all als all\ndas las das las das las das las das las das las das las das\n\ndas das das las las las als als als das las als das las als\nlas las las als als als das das das als las das als das las\n\nda all das las da all das las da all das da all das als las\nda all das las da all das las da all das da all das als las\n\nja lös das ja lös das ja lös das ja lös das ja lös da ja da\nja lös das ja lös das ja lös das ja lös das ja lös da ja da\n\nda ja öd fad da ja öd fad da ja öd fad da ja öd fad das las\nda ja öd fad da ja öd fad da ja öd fad da ja öd fad das las\n\nda ja öd da ja öd das lös fad das lös fad da ja öd da ja da\ndas las lös das las lös als das fad als das fad da öl da ja" + "text": "all als all als all als all als all als all als all als all\ndas las das las das las das las das las das las das las das\n\ndas das das las las las als als als das las als das las als\nlas las las als als als das das das als las das als das las\n\nda all das las da all das las da all das da all das als las\nda all das las da all das las da all das da all das als las\n\nja lös das ja lös das ja lös das ja lös das ja lös da ja da\nja lös das ja lös das ja lös das ja lös das ja lös da ja da\n\nda ja öd fad da ja öd fad da ja öd fad da ja öd fad das las\nda ja öd fad da ja öd fad da ja öd fad da ja öd fad das las\n\nda ja öd da ja öd das lös fad das lös fad da ja öd da ja da\ndas las lös das las lös als das fad als das fad da öl da ja", + "task": "Übe die Wörter, bis du sie ohne Hinschauen tippen kannst." }, { - "lesson": 1.3, + "lesson": "1.3", "title": "01.3 Schreibsicherheit durch Griffübungen", - "text": "asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö\njklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf\n\nölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa\nfdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj\n\nasdfjklö asdfjklö asdfjklö asdfjklö asdfjklö asdfjklö asdfj\njklöasdf jklöasdf jklöasdf jklöasdf jklöasdf jklöasdf jklöa\n\njfkdlsöa jfkdlsöa jfkdlsöa jfkdlsöa jfkdlsöa jfkdlsöa jfkdl\nöalskdjf öalskdjf öalskdjf öalskdjf öalskdjf öalskdjf öalsk\n\nafa aja ada aka asa ala aöa afa aja ada aka asa ala aöa afa\nöjö öfö ölö ösö ökö ödö öjö öfö ölö ösö ökö ödö öja öfa öka\n\naöaöjö ajaöfö adaölö akaösö asaökö alaödö aöaöjö afaöfö aöj\nöföafa öjöaöa ödöala ököasa ösöaka ölöada öföaja aöfjaö kfj\n\nsla sal sad sla sal sad sla sla sal sad sla sal sad sla sll\nals las das als las das als las das als las das als las das\n\nsad söl aj sad lla ad aj lö sad söl aj sad lla ad aj lö aja\ndas lös ja das all da ja öl das lös ja das all da ja öl das" + "text": "asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö\njklö asdf jklö asdf jklö asdf jklö asdf jklö asdf jklö asdf\n\nölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa\nfdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj fdsa ölkj\n\nasdfjklö asdfjklö asdfjklö asdfjklö asdfjklö asdfjklö asdfj\njklöasdf jklöasdf jklöasdf jklöasdf jklöasdf jklöasdf jklöa\n\njfkdlsöa jfkdlsöa jfkdlsöa jfkdlsöa jfkdlsöa jfkdlsöa jfkdl\nöalskdjf öalskdjf öalskdjf öalskdjf öalskdjf öalskdjf öalsk\n\nafa aja ada aka asa ala aöa afa aja ada aka asa ala aöa afa\nöjö öfö ölö ösö ökö ödö öjö öfö ölö ösö ökö ödö öja öfa öka\n\naöaöjö ajaöfö adaölö akaösö asaökö alaödö aöaöjö afaöfö aöj\nöföafa öjöaöa ödöala ököasa ösöaka ölöada öföaja aöfjaö kfj\n\nsla sal sad sla sal sad sla sla sal sad sla sal sad sla sll\nals las das als las das als las das als las das als las das\n\nsad söl aj sad lla ad aj lö sad söl aj sad lla ad aj lö aja\ndas lös ja das all da ja öl das lös ja das all da ja öl das", + "task": "Konzentriere dich auf gleichmäßiges Tempo." }, { - "lesson": 1.4, + "lesson": "1.4", "title": "01.4 Lernkontrolle durch Wortübungen", - "text": "ja das las ja das lös ja das las ja das lös ja das las da j\nja das las ja das lös ja das las ja das lös ja das las ja a\n\ndas lös ja all das lös ja all das lös ja all das lös da das\ndas lös ja all das lös ja all das lös ja all das lös da all\n\nja das fad ja das fad ja das fad ja das fad ja das fad da s\nja das fad ja das fad ja das fad ja das fad ja das fad ja f\n\ndas las als all lös fad öd öl da ja das las als all ja da s\ndas las als all lös fad öd öl da ja das las als all ja da l" + "text": "ja das las ja das lös ja das las ja das lös ja das las da j\nja das las ja das lös ja das las ja das lös ja das las ja a\n\ndas lös ja all das lös ja all das lös ja all das lös da das\ndas lös ja all das lös ja all das lös ja all das lös da all\n\nja das fad ja das fad ja das fad ja das fad ja das fad da s\nja das fad ja das fad ja das fad ja das fad ja das fad ja f\n\ndas las als all lös fad öd öl da ja das las als all ja da s\ndas las als all lös fad öd öl da ja das las als all ja da l", + "task": "dummy" }, { - "lesson": 2.1, + "lesson": "2.1", "title": "02.1 Erarbeitung der Griffe e und i", - "text": "dede kiki dede kiki dede kiki dede kiki dede kiki dede kiki\ndeki kide deki kide deki kide deki kide deki kide deki kide\n\ndedf kikj deds kikl deda kikö dedf kikj deds kikl deda kikö\ndidf kekj dids kekl dida kekö didf kekj dids kekl dida kekö\n\ndeed kiik deed kiik deed kiik deed kiik deed kiik deed kiik\ndedi kike dedi kike dedi kike dedi kike dedi kike dedi kike\n\ndedkik dedkik dedkik dedkik dedkik dedkik dedkik dedkik ded\njedfik jedfik jedfik jedfik jedfik jedfik jedfik jedfik dfi\n\nella esöl esel edal lede ellaf ella esöl esel edal lede ell\nalle löse lese lade edel falle alle löse lese lade edel all\n\nesöl sella edal sella esel sella edö sella elde lla sad lla\nlöse alles lade alles lese alles öde alles edle all das all" + "text": "dede kiki dede kiki dede kiki dede kiki dede kiki dede kiki\ndeki kide deki kide deki kide deki kide deki kide deki kide\n\ndedf kikj deds kikl deda kikö dedf kikj deds kikl deda kikö\ndidf kekj dids kekl dida kekö didf kekj dids kekl dida kekö\n\ndeed kiik deed kiik deed kiik deed kiik deed kiik deed kiik\ndedi kike dedi kike dedi kike dedi kike dedi kike dedi kike\n\ndedkik dedkik dedkik dedkik dedkik dedkik dedkik dedkik ded\njedfik jedfik jedfik jedfik jedfik jedfik jedfik jedfik dfi\n\nella esöl esel edal lede ellaf ella esöl esel edal lede ell\nalle löse lese lade edel falle alle löse lese lade edel all\n\nesöl sella edal sella esel sella edö sella elde lla sad lla\nlöse alles lade alles lese alles öde alles edle all das all", + "task": "dummy" }, { - "lesson": 2.2, + "lesson": "2.2", "title": "02.2 Festigung durch Wortübungen", - "text": "lies dies leise dies sei leise lies dies leise dieses leide\nlies dies leise dies sei leise lies dies leise dieses leide\n\neile leise dieses alles sie lese dieses alles leise sei die\neile leise dieses alles sie lese dieses alles leise sei die\n\nfade öde löse alle falle lasse fade öde löse alle falle sie\nfade öde löse alle falle lasse fade öde löse alle falle sie\n\ndies sei lila fasse das alles löse dies alles dieses sei da\nalles eile jedes lies leise alles eile jedes lies leise all\n\nsei edel das sei edel diese sei edel dieses sei edel sei da\nseid leise dies sei ideal sie lief leise sie fiel leise die" + "text": "lies dies leise dies sei leise lies dies leise dieses leide\nlies dies leise dies sei leise lies dies leise dieses leide\n\neile leise dieses alles sie lese dieses alles leise sei die\neile leise dieses alles sie lese dieses alles leise sei die\n\nfade öde löse alle falle lasse fade öde löse alle falle sie\nfade öde löse alle falle lasse fade öde löse alle falle sie\n\ndies sei lila fasse das alles löse dies alles dieses sei da\nalles eile jedes lies leise alles eile jedes lies leise all\n\nsei edel das sei edel diese sei edel dieses sei edel sei da\nseid leise dies sei ideal sie lief leise sie fiel leise die", + "task": "dummy" }, { - "lesson": 2.3, + "lesson": "2.3", "title": "Schreibsicherheit durch Griffübungen", - "text": "fdsajklö fdsajklö fdsajklö fdsajklö fdsajklö fdsajklö fdsaj\nölkjasdf ölkjasdf ölkjasdf ölkjasdf ölkjasdf ölkjasdf ölkja\n\nasdedfölkikj asdedfölkikj asdedfölkikj asdedfölkikj asdedfö\njkikölfdedsa jkikölfdedsa jkikölfdedsa jkikölfdedsa jkikölf\n\nadedf ökikj adedf ökikj adedf ökikj adedf ökikj adedf ökikj\njaded fökik jaded fökik jaded fökik jaded fökik jaded fökik\n\njiklö fedsa jiklö fedsa jiklö fedsa jiklö fedsa jiklö fedsa\nölijk asefd ölijk asefd ölijk asefd ölijk asefd ölijk asefd" + "text": "fdsajklö fdsajklö fdsajklö fdsajklö fdsajklö fdsajklö fdsaj\nölkjasdf ölkjasdf ölkjasdf ölkjasdf ölkjasdf ölkjasdf ölkja\n\nasdedfölkikj asdedfölkikj asdedfölkikj asdedfölkikj asdedfö\njkikölfdedsa jkikölfdedsa jkikölfdedsa jkikölfdedsa jkikölf\n\nadedf ökikj adedf ökikj adedf ökikj adedf ökikj adedf ökikj\njaded fökik jaded fökik jaded fökik jaded fökik jaded fökik\n\njiklö fedsa jiklö fedsa jiklö fedsa jiklö fedsa jiklö fedsa\nölijk asefd ölijk asefd ölijk asefd ölijk asefd ölijk asefd", + "task": "dummy" }, { - "lesson": 2.4, + "lesson": "2.4", "title": "02.4 Lernkontrolle durch Wortübungen", - "text": "seid seid esiel sella ellaf esiel seseid edö alil lede dies\nlies dies leise alles falle leise dieses öde lila edel seid\n\nelie esiel seseid sella eis esel seseid sella esiel eis ies\neile leise dieses alles sie lese dieses alles leise sie sei\n\nedeis ellaf ella esöl edö edaf essal ellaf ella esöl edö ed\nsiede falle alle löse öde fade lasse falle alle löse öde fa\n\nseid dies eile seid dies eile seid dies eile seid dieses ei\nseid dies eile seid dies eile seid dies eile seid dieses ei\n\nes sei dies alles leise es sei dies alles leise es sei dies\nes sei dies alles leise es sei dies alles leise es sei dies\n\nfiel feil fidele feil fiel lief fiel feil fidele feile fiel\nfiel feil fidele feil fiel lief fiel feil fidele feile fiel\n\nsei sie sei die eid die eid alle alles alle alles diese die\nsei sie sei die eid die eid alle alles alle alles diese die\n\nfiel fiel fiel feil feil feil fiel fiel fiel feil feil feil\nlief lief lief eile eile eile lief lief lief eile eile eile" + "text": "seid seid esiel sella ellaf esiel seseid edö alil lede dies\nlies dies leise alles falle leise dieses öde lila edel seid\n\nelie esiel seseid sella eis esel seseid sella esiel eis ies\neile leise dieses alles sie lese dieses alles leise sie sei\n\nedeis ellaf ella esöl edö edaf essal ellaf ella esöl edö ed\nsiede falle alle löse öde fade lasse falle alle löse öde fa\n\nseid dies eile seid dies eile seid dies eile seid dieses ei\nseid dies eile seid dies eile seid dies eile seid dieses ei\n\nes sei dies alles leise es sei dies alles leise es sei dies\nes sei dies alles leise es sei dies alles leise es sei dies\n\nfiel feil fidele feil fiel lief fiel feil fidele feile fiel\nfiel feil fidele feil fiel lief fiel feil fidele feile fiel\n\nsei sie sei die eid die eid alle alles alle alles diese die\nsei sie sei die eid die eid alle alles alle alles diese die\n\nfiel fiel fiel feil feil feil fiel fiel fiel feil feil feil\nlief lief lief eile eile eile lief lief lief eile eile eile", + "task": "dummy" }, { - "lesson": 3.1, + "lesson": "3.1", "title": "03.1 Erarbeitung der beiden Umschalter", - "text": "öÖö öÖö aAa aAa lLl lLl sSs sSs kKk kKk dDd dDd jJj jJj fFf F\nöÖö öÖö aAa aAa lLl lLl sSs sSs kKk kKk dDd dDd jJj jJj fFf F\n\nJa Ja Fö Fö Ka Ka Dö Dö La La Sö Sö Öa Öa Aö Aö Ja Fö Ka Dö L\nJa Ja Fö Fö Ka Ka Dö Dö La La Sö Sö Öa Öa Aö Aö Ja Fö Ka Dö L\n\nöJ aJ aF öF öK aK aD öD öL aL aS öS öA aÖ sA lÖ kA dÖ jA fÖ a\nöJ aJ aF öF öK aK aD öD öL aL aS öS öA aÖ sA lÖ kA dÖ jA fÖ a\n\nJaf Föj Jad Fök Jas Föl Jaa Föö Jaö Föa Jal Fös Jak Föd Ja Fö\nJaf Föj Jad Fök Jas Föl Jaa Föö Jaö Föa Jal Fös Jak Föd Ja Fö\n\nöF aJ döF kaJ söF laJ aöF öaJ ööF aaJ löF saJ köF daJ jöF faJ\nöF aJ döF kaJ söF laJ aöF öaJ ööF aaJ löF saJ köF daJ jöF faJ" + "text": "öÖö öÖö aAa aAa lLl lLl sSs sSs kKk kKk dDd dDd jJj jJj fFf F\nöÖö öÖö aAa aAa lLl lLl sSs sSs kKk kKk dDd dDd jJj jJj fFf F\n\nJa Ja Fö Fö Ka Ka Dö Dö La La Sö Sö Öa Öa Aö Aö Ja Fö Ka Dö L\nJa Ja Fö Fö Ka Ka Dö Dö La La Sö Sö Öa Öa Aö Aö Ja Fö Ka Dö L\n\nöJ aJ aF öF öK aK aD öD öL aL aS öS öA aÖ sA lÖ kA dÖ jA fÖ a\nöJ aJ aF öF öK aK aD öD öL aL aS öS öA aÖ sA lÖ kA dÖ jA fÖ a\n\nJaf Föj Jad Fök Jas Föl Jaa Föö Jaö Föa Jal Fös Jak Föd Ja Fö\nJaf Föj Jad Fök Jas Föl Jaa Föö Jaö Föa Jal Fös Jak Föd Ja Fö\n\nöF aJ döF kaJ söF laJ aöF öaJ ööF aaJ löF saJ köF daJ jöF faJ\nöF aJ döF kaJ söF laJ aöF öaJ ööF aaJ löF saJ köF daJ jöF faJ", + "task": "dummy" }, { - "lesson": 3.2, + "lesson": "3.2", "title": "03.2 Festigung durch Wortübungen", - "text": "Aal Aal Aal Aas Aas Aas Aal Aas Aal Aas Aal Aas Aal Aas Aal A\nAal Aal Aal Aas Aas Aas Aal Aas Aal Aas Aal Aas Aal Aas Aal A\n\nÖle Öle Öle Öde Öde Öde Öle Öde Öle Öde Öle Öde Öle Öde Öle Ö\nÖle Öle Öle Öde Öde Öde Öle Öde Öle Öde Öle Öde Öle Öde Öle Ö\n\nEile Seide Seile Eile Seide Seile Eile Seide Seile Eile Seide\nEile Seide Seile Eile Seide Seile Eile Seide Seile Eile Seide\n\ndie Seide die Eile die Seide die Eile die Seide die Eile Aale\ndie Seide die Eile die Seide die Eile die Seide die Eile Aale\n\ndie Öle die Aale die Öle die Aale die Öle die Aale die Öle Öl\ndie Öle die Aale die Öle die Aale die Öle die Aale die Öle Öl" + "text": "Aal Aal Aal Aas Aas Aas Aal Aas Aal Aas Aal Aas Aal Aas Aal A\nAal Aal Aal Aas Aas Aas Aal Aas Aal Aas Aal Aas Aal Aas Aal A\n\nÖle Öle Öle Öde Öde Öde Öle Öde Öle Öde Öle Öde Öle Öde Öle Ö\nÖle Öle Öle Öde Öde Öde Öle Öde Öle Öde Öle Öde Öle Öde Öle Ö\n\nEile Seide Seile Eile Seide Seile Eile Seide Seile Eile Seide\nEile Seide Seile Eile Seide Seile Eile Seide Seile Eile Seide\n\ndie Seide die Eile die Seide die Eile die Seide die Eile Aale\ndie Seide die Eile die Seide die Eile die Seide die Eile Aale\n\ndie Öle die Aale die Öle die Aale die Öle die Aale die Öle Öl\ndie Öle die Aale die Öle die Aale die Öle die Aale die Öle Öl", + "task": "dummy" }, { - "lesson": 3.3, + "lesson": "3.3", "title": "03.3 Schreibsicherheit durch Wortgruppen", - "text": "diese Seide alle Keile des Eides diese Löffel diese Seele\ndiese Seide alle Keile des Eides diese Löffel diese Seele\n\ndiese fidele Liesel dieses ideale Lied Liesa lies das leise\ndiese fidele Liesel dieses ideale Lied Liesa lies das leise\n\ndie Seide dieses Kleides diese Seide des Kleides ideales Ei\ndie Seide dieses Kleides diese Seide des Kleides ideales Ei\n\ndiese ideale Kasse dieses ideale Kleid diese Diele das Eis\ndiese ideale Kasse dieses ideale Kleid diese Diele das Eis\n\ndiese leise Kasse diese Eisdiele diese Eislöffel die Seele\ndiese leise Kasse diese Eisdiele diese Eislöffel die Seele" + "text": "diese Seide alle Keile des Eides diese Löffel diese Seele\ndiese Seide alle Keile des Eides diese Löffel diese Seele\n\ndiese fidele Liesel dieses ideale Lied Liesa lies das leise\ndiese fidele Liesel dieses ideale Lied Liesa lies das leise\n\ndie Seide dieses Kleides diese Seide des Kleides ideales Ei\ndie Seide dieses Kleides diese Seide des Kleides ideales Ei\n\ndiese ideale Kasse dieses ideale Kleid diese Diele das Eis\ndiese ideale Kasse dieses ideale Kleid diese Diele das Eis\n\ndiese leise Kasse diese Eisdiele diese Eislöffel die Seele\ndiese leise Kasse diese Eisdiele diese Eislöffel die Seele", + "task": "dummy" }, { - "lesson": 3.4, + "lesson": "3.4", "title": "03.4 Lernkontrolle durch Satzübungen", - "text": "Fasse die Seide dieses Kleides Fasse diese Seide des Kleides\nFasse die Seide dieses Kleides Fasse diese Seide des Kleides\n\nLiesel löse leise diese Kaffeelöffel Ja alles ideale Löffel\nLiesel löse leise diese Kaffeelöffel Ja alles ideale Löffel\n\nLiesel lies leise dieses Lied Dieses Lied lies leise Liesel\nLiesel lies leise dieses Lied Dieses Lied lies leise Liesel\n\nLiesel fasse diese Eislöffel Ja Liesel fasse alle Eislöffel\nLiesel fasse diese Eislöffel Ja Liesel fasse alle Eislöffel" + "text": "Fasse die Seide dieses Kleides Fasse diese Seide des Kleides\nFasse die Seide dieses Kleides Fasse diese Seide des Kleides\n\nLiesel löse leise diese Kaffeelöffel Ja alles ideale Löffel\nLiesel löse leise diese Kaffeelöffel Ja alles ideale Löffel\n\nLiesel lies leise dieses Lied Dieses Lied lies leise Liesel\nLiesel lies leise dieses Lied Dieses Lied lies leise Liesel\n\nLiesel fasse diese Eislöffel Ja Liesel fasse alle Eislöffel\nLiesel fasse diese Eislöffel Ja Liesel fasse alle Eislöffel", + "task": "dummy" }, { - "lesson": 4.1, + "lesson": "4.1", "title": "04.1 Erarbeitung der Griffe g und h", - "text": "asdfgfölkjhj asdfgfölkjhj asdfgfölkjhj asdfgfölkjh asdfgfölkj\nölkjhjasdfgf ölkjhjasdfgf ölkjhjasdfgf ölkjhjasdfg ölkjhasdfg\n\nfgf jhj gfd hjk gfs hjl gfa hjö fgf jhj gfd hjk gfs hjl gfa h\nöhj agf öhk agd öhl ags öhj agf öhk agd öhl ags öhj agf öhk g\n\nhHj gGf hHj gGf Hjh Gfg Hjh gFg Hkl Gds Hlö Gsa Hil Ges HH GG\nHeg Geh Hag Gih Hie Gei Hei Gie Hid Gid Hel Gel Hal Göl Halle" + "text": "asdfgfölkjhj asdfgfölkjhj asdfgfölkjhj asdfgfölkjh asdfgfölkj\nölkjhjasdfgf ölkjhjasdfgf ölkjhjasdfgf ölkjhjasdfg ölkjhasdfg\n\nfgf jhj gfd hjk gfs hjl gfa hjö fgf jhj gfd hjk gfs hjl gfa h\nöhj agf öhk agd öhl ags öhj agf öhk agd öhl ags öhj agf öhk g\n\nhHj gGf hHj gGf Hjh Gfg Hjh gFg Hkl Gds Hlö Gsa Hil Ges HH GG\nHeg Geh Hag Gih Hie Gei Hei Gie Hid Gid Hel Gel Hal Göl Halle", + "task": "dummy" }, { - "lesson": 4.2, + "lesson": "4.2", "title": "04.2 Festigung durch Wortübungen", - "text": "Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd J\nLage Lage Lage Lage Lage Lage Lage Lage Lage Lage Lage Lage L\n\nJagd Lage Jagd Lage Jagd Lage Jagd Lage Jagd Lage Jagd Lage J\nSage Lage Jagd Sage Lage Jagd Sage Lage Jagd Sage Lage Jagd S\n\nhalf Haag sage Sieg sehe Glas gehe Gala sieh Sieg lies Affe H\nsage Agfa half Jagd hege Haff lies Hall gehe Hase sehe Hefe S" + "text": "Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd Jagd J\nLage Lage Lage Lage Lage Lage Lage Lage Lage Lage Lage Lage L\n\nJagd Lage Jagd Lage Jagd Lage Jagd Lage Jagd Lage Jagd Lage J\nSage Lage Jagd Sage Lage Jagd Sage Lage Jagd Sage Lage Jagd S\n\nhalf Haag sage Sieg sehe Glas gehe Gala sieh Sieg lies Affe H\nsage Agfa half Jagd hege Haff lies Hall gehe Hase sehe Hefe S", + "task": "dummy" }, { - "lesson": 4.3, + "lesson": "4.3", "title": "04.3 Festigung durch Wendungen", - "text": "das Jagdglas die Lage des Jagdglases die Lage dieses Glases\ndas Jagdglas die Lage des Jagdglases die Lage dieses Glases\n\ndie eisige See die eilige Hilfe die öde Höhle die Eisdiele\ndie eisige See die eilige Hilfe die öde Höhle die Eisdiele\n\ndie Lage des Haffes hege diese Aale diese heilige Halle Öl\ndie Lage des Haffes hege diese Aale diese heilige Halle Öl" + "text": "das Jagdglas die Lage des Jagdglases die Lage dieses Glases\ndas Jagdglas die Lage des Jagdglases die Lage dieses Glases\n\ndie eisige See die eilige Hilfe die öde Höhle die Eisdiele\ndie eisige See die eilige Hilfe die öde Höhle die Eisdiele\n\ndie Lage des Haffes hege diese Aale diese heilige Halle Öl\ndie Lage des Haffes hege diese Aale diese heilige Halle Öl", + "task": "dummy" }, { - "lesson": 4.4, + "lesson": "4.4", "title": "04.4 Lernkontrolle durch Satzübungen", - "text": "Aha da lag ja das Jagdglas Gisela sah die eisige öde Höhle\nAha da lag ja das Jagdglas Gisela sah die eisige öde Höhle\n\nAls Adelheid diese eisige See sah da half sie eilig Gisela\nAls Adelheid diese eisige See sah da half sie eilig Gisela" + "text": "Aha da lag ja das Jagdglas Gisela sah die eisige öde Höhle\nAha da lag ja das Jagdglas Gisela sah die eisige öde Höhle\n\nAls Adelheid diese eisige See sah da half sie eilig Gisela\nAls Adelheid diese eisige See sah da half sie eilig Gisela", + "task": "dummy" }, { - "lesson": 4.5, + "lesson": "4.5", "title": "04.5 Sicherheit durch Griffwiederholung = Fingergymnastik", - "text": "jhiikihh jhiikihh jhiikihh jhiikihh jhiikihh jhiikihh jhiikik\nfgeedegg fgeedegg fgeedegg fgeedegg fgeedegg fgeedegg fgeedeg\n\nöikk aedd öikk aedd öikk aedd öikk aedd öikk aedd öikk aedd ö\nlikk sedd likk sedd likk sedd likk sedd likk sedd likk sedd l\n\nkikk dedd kikk dedd kikk dedd kikk dedd kikk dedd kikk dedd k\njikk fedd jikk fedd jikk fedd jikk fedd jikk fedd jikk fedd j\n\naikö öeda aikö öeda aikö öeda aikö öeda aikö öeda aikö öeda a\nsikö leda sikö leda sikö leda sikö leda sikö leda sikö leda s\n\ndikö keda dikö keda dikö keda dikö keda dikö keda dikö keda d\nfikö jeda fikö jeda fikö jeda fikö jeda fikö jeda fikö jeda f\n\nöikklikkkikkjikkaikösiködiköfikö aeddsedddeddfeddöedaledakeda\nehesegalesahekieh ehesegalesahekie ehesegalesahekie ehesegale\n\nsadeleidellehhaseiSffaHsadegaL elhöHedöseidflahseeföHeidegalK\nellaHegiliehsessaHsedelaAeseid giliealesiGeisflahadhaseeSella" + "text": "jhiikihh jhiikihh jhiikihh jhiikihh jhiikihh jhiikihh jhiikik\nfgeedegg fgeedegg fgeedegg fgeedegg fgeedegg fgeedegg fgeedeg\n\nöikk aedd öikk aedd öikk aedd öikk aedd öikk aedd öikk aedd ö\nlikk sedd likk sedd likk sedd likk sedd likk sedd likk sedd l\n\nkikk dedd kikk dedd kikk dedd kikk dedd kikk dedd kikk dedd k\njikk fedd jikk fedd jikk fedd jikk fedd jikk fedd jikk fedd j\n\naikö öeda aikö öeda aikö öeda aikö öeda aikö öeda aikö öeda a\nsikö leda sikö leda sikö leda sikö leda sikö leda sikö leda s\n\ndikö keda dikö keda dikö keda dikö keda dikö keda dikö keda d\nfikö jeda fikö jeda fikö jeda fikö jeda fikö jeda fikö jeda f\n\nöikklikkkikkjikkaikösiködiköfikö aeddsedddeddfeddöedaledakeda\nehesegalesahekieh ehesegalesahekie ehesegalesahekie ehesegale\n\nsadeleidellehhaseiSffaHsadegaL elhöHedöseidflahseeföHeidegalK\nellaHegiliehsessaHsedelaAeseid giliealesiGeisflahadhaseeSella", + "task": "dummy" }, { - "lesson": 4.6, + "lesson": "4.6", "title": "04.06 Lernkontrolle durch Wortübungen", - "text": "alle See sah das half sie Gisela eilige diese Aale des Hasses\nKlage die Höfe es half diese öde Höhle Lage dies Haff Sie sah\n\nsehe Halle sage Heike helle Höfe öde Höhle die Heide die Haie\nsehe Halle sage Heike helle Höfe öde Höhle die Heide die Haie\n\ngedeihe Klage heikel Heilige fehle Felge eilig Lage lege Igel\ngedeihe Klage heikel Heilige fehle Felge eilig Lage lege Igel" + "text": "alle See sah das half sie Gisela eilige diese Aale des Hasses\nKlage die Höfe es half diese öde Höhle Lage dies Haff Sie sah\n\nsehe Halle sage Heike helle Höfe öde Höhle die Heide die Haie\nsehe Halle sage Heike helle Höfe öde Höhle die Heide die Haie\n\ngedeihe Klage heikel Heilige fehle Felge eilig Lage lege Igel\ngedeihe Klage heikel Heilige fehle Felge eilig Lage lege Igel", + "task": "dummy" }, { - "lesson": 5.1, + "lesson": "5.1", "title": "Einschreibübung", - "text": "asedsa ölkilö asedsa ölkilö asedsa ölkilö asedsa ölkilö kikik\nasedsa ölkilö asedsa ölkilö asedsa ölkilö asedsa ölkilö kikik\n\nAsEdSa ÖlKiLö AsEdSa ÖlKiLö AsEdSa ÖlKiLö AsEdSa ÖlKiLö AsEdS\nJkIkLö FdEdSa JkIkLö FdEdSa JkIkLö FdEdSa JkIkLö FdEdSa JkIkL\n\nsage siege liege geige lasse diese jedes alles da sie lieh es\nsage siege liege geige lasse diese jedes alles da sie lieh es" + "text": "asedsa ölkilö asedsa ölkilö asedsa ölkilö asedsa ölkilö kikik\nasedsa ölkilö asedsa ölkilö asedsa ölkilö asedsa ölkilö kikik\n\nAsEdSa ÖlKiLö AsEdSa ÖlKiLö AsEdSa ÖlKiLö AsEdSa ÖlKiLö AsEdS\nJkIkLö FdEdSa JkIkLö FdEdSa JkIkLö FdEdSa JkIkLö FdEdSa JkIkL\n\nsage siege liege geige lasse diese jedes alles da sie lieh es\nsage siege liege geige lasse diese jedes alles da sie lieh es", + "task": "dummy" }, { - "lesson": 5.2, + "lesson": "5.2", "title": "05.2 Erarbeitung der Griffe c, Komma und Semikolon", - "text": "dedcd kik,k dedcd kik,k dedcd kik,k dedcd kik,k dedcd kik,k c\nfdcdf jk,kj fdcdf jk,kj fdcdf jk,kj fdcdf jk,kj fdcdf jk,kj ,\n\njk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcas\njk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcas\n\nach, ich, dich, sich, schlage, Celle, Chef, Dach, Fach, Sache\nach, ich, dich, sich, schlage, Celle, Chef, Dach, Fach, Sache\n\nlache, lege, leise, leihe, Leiche, Lacke, Jacke, Hacke, Hecke\nlache, lege, leise, leihe, Leiche, Lacke, Jacke, Hacke, Hecke" + "text": "dedcd kik,k dedcd kik,k dedcd kik,k dedcd kik,k dedcd kik,k c\nfdcdf jk,kj fdcdf jk,kj fdcdf jk,kj fdcdf jk,kj fdcdf jk,kj ,\n\njk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcas\njk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcasdf jk;ölkj fdcas\n\nach, ich, dich, sich, schlage, Celle, Chef, Dach, Fach, Sache\nach, ich, dich, sich, schlage, Celle, Chef, Dach, Fach, Sache\n\nlache, lege, leise, leihe, Leiche, Lacke, Jacke, Hacke, Hecke\nlache, lege, leise, leihe, Leiche, Lacke, Jacke, Hacke, Hecke", + "task": "dummy" }, { - "lesson": 5.3, + "lesson": "5.3", "title": "05.3 Festigung durch Wendungen", - "text": "lache leise, diese Sache, dieses Fach, dieses Dach, die Cella\nlache leise, diese Sache, dieses Fach, dieses Dach, die Cella\n\ndie Fische, ach alle, lese diese Sache leise, dieses Cedille;\ndie Fische, ach alle, lese diese Sache leise, dieses Cedille;\n\nlöse das Dach, leihe die Sache, lache Chef, ach diese Deiche;\nlöse das Dach, leihe die Sache, lache Chef, ach diese Deiche;\n\ndie Eiche, die Leiche, die Fische, die Fischlaiche, Schleife;\ndie Eiche, die Leiche, die Fische, die Fischlaiche, Schleife;" + "text": "lache leise, diese Sache, dieses Fach, dieses Dach, die Cella\nlache leise, diese Sache, dieses Fach, dieses Dach, die Cella\n\ndie Fische, ach alle, lese diese Sache leise, dieses Cedille;\ndie Fische, ach alle, lese diese Sache leise, dieses Cedille;\n\nlöse das Dach, leihe die Sache, lache Chef, ach diese Deiche;\nlöse das Dach, leihe die Sache, lache Chef, ach diese Deiche;\n\ndie Eiche, die Leiche, die Fische, die Fischlaiche, Schleife;\ndie Eiche, die Leiche, die Fische, die Fischlaiche, Schleife;", + "task": "dummy" }, { - "lesson": 5.4, + "lesson": "5.4", "title": "05.4 Konzentrationstraining durch Griffübungen", - "text": "asdcdef jk,kilö asdcef jk,ilö asecf ji,lö fedcsa ölik,j ec i,\nasdcdef jk,kilö asdcef jk,ilö asecf ji,lö fedcsa ölik,j ec i,\n\nasdfedc jklöik, asdfced jklö,ki fedc öik, fesa ölij fcsa öl,j\nasdfedc jklöik, asdfced jklö,ki fedc öik, fesa ölij fcsa öl,j" + "text": "asdcdef jk,kilö asdcef jk,ilö asecf ji,lö fedcsa ölik,j ec i,\nasdcdef jk,kilö asdcef jk,ilö asecf ji,lö fedcsa ölik,j ec i,\n\nasdfedc jklöik, asdfced jklö,ki fedc öik, fesa ölij fcsa öl,j\nasdfedc jklöik, asdfced jklö,ki fedc öik, fesa ölij fcsa öl,j", + "task": "dummy" }, { - "lesson": 5.5, + "lesson": "5.5", "title": "05.5 Festigung durch Wortübungen", - "text": "Öle Aale Liesel Sessel Klasse Diesel Jaffa Fliege Hilfe Galle\nÖle Aale Liesel Sessel Klasse Diesel Jaffa Fliege Hilfe Galle\n\ndie Öle, die Aale, die Liesel, die Sessel, die Klasse, Diesel\ndie Fliege, die Hilfe, die Galle, die Geige, die Liege, Jaffa\n\ndie Eiche, die Deiche, die Asche, die Fische, die Deichsel da\ndiese Eiche, diese Deiche, diese Asche, diese Fische, Cedille\n\ndie Eidechse, die Gleiche, die Leiche, diese Hechelei, Kachel\nja die Eidechse, ja die Gleiche, ja die Leiche, ja die Kachel" + "text": "Öle Aale Liesel Sessel Klasse Diesel Jaffa Fliege Hilfe Galle\nÖle Aale Liesel Sessel Klasse Diesel Jaffa Fliege Hilfe Galle\n\ndie Öle, die Aale, die Liesel, die Sessel, die Klasse, Diesel\ndie Fliege, die Hilfe, die Galle, die Geige, die Liege, Jaffa\n\ndie Eiche, die Deiche, die Asche, die Fische, die Deichsel da\ndiese Eiche, diese Deiche, diese Asche, diese Fische, Cedille\n\ndie Eidechse, die Gleiche, die Leiche, diese Hechelei, Kachel\nja die Eidechse, ja die Gleiche, ja die Leiche, ja die Kachel", + "task": "dummy" }, { - "lesson": 5.6, + "lesson": "5.6", "title": "05.6 Lernkontrolle durch Satzübungen", - "text": "Liesel sage es Helga, ich sage das Lied leise; ach Liese half\neilig; Adelheid, dich sah ich eilig; ach Liesel ich leihe dir\nSchleife; die Klasse lese leise das Lied, siehe die Eidechse;\n\nDas Jagdglas lag ja da; als Heidi diese Eidechse sah, da lief\nsie; ja, als Adelheid die eisige See sah, da half sie Liesel;\n\nIch sah die helle Diele, ich sah die Heide, ich sah die Höfe;\nAch, jede sah das Dach; ja, dieses Dach; siehe die Heidehöfe;" + "text": "Liesel sage es Helga, ich sage das Lied leise; ach Liese half\neilig; Adelheid, dich sah ich eilig; ach Liesel ich leihe dir\nSchleife; die Klasse lese leise das Lied, siehe die Eidechse;\n\nDas Jagdglas lag ja da; als Heidi diese Eidechse sah, da lief\nsie; ja, als Adelheid die eisige See sah, da half sie Liesel;\n\nIch sah die helle Diele, ich sah die Heide, ich sah die Höfe;\nAch, jede sah das Dach; ja, dieses Dach; siehe die Heidehöfe;", + "task": "dummy" }, { - "lesson": 6.1, + "lesson": "6.1", "title": "05.7 Einschreibübung", - "text": "asdfjklö asdefölkij asdfjklö asdefölkij asdfjklö asdefölkikj\nölkjasdf ölk,kasdcd ölkjasdf ölk,kasdcd ölkjasdf ölk,kasdcdf\n\nedcsafik,löj edcsafik,löj edcsafik,öj edcsafik,öj edcsafik,öj\njöl,kifascde jöl,kifascde jöl,kifascde jöl,kifascde jöl,kifas\nErarbeitung der Griffe r und u\n\nasdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj frfju\nfrfjuj frfjuj frdesa jukilö frdesa frfjuj frfjuj frdesa jukil\n\nfrfded jujkik frfdcd jujk,k frfded jujkik frfdcd jujk,k rfded\nujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,k\n\nfra juö frs jul frd juk örl aus örk aud örj auf fru jur fr ju\nruj urf fua jrö dua krö sua lrö kuj drf luj srf öuj arf rf uj" + "text": "asdfjklö asdefölkij asdfjklö asdefölkij asdfjklö asdefölkikj\nölkjasdf ölk,kasdcd ölkjasdf ölk,kasdcd ölkjasdf ölk,kasdcdf\n\nedcsafik,löj edcsafik,löj edcsafik,öj edcsafik,öj edcsafik,öj\njöl,kifascde jöl,kifascde jöl,kifascde jöl,kifascde jöl,kifas\nErarbeitung der Griffe r und u\n\nasdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj frfju\nfrfjuj frfjuj frdesa jukilö frdesa frfjuj frfjuj frdesa jukil\n\nfrfded jujkik frfdcd jujk,k frfded jujkik frfdcd jujk,k rfded\nujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,k\n\nfra juö frs jul frd juk örl aus örk aud örj auf fru jur fr ju\nruj urf fua jrö dua krö sua lrö kuj drf luj srf öuj arf rf uj", + "task": "dummy" }, { - "lesson": 6.2, + "lesson": "6.2", "title": "06.2 Erarbeitung der Griffe r und u", - "text": "asdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj frfju\nfrfjuj frfjuj frdesa jukilö frdesa frfjuj frfjuj frdesa jukil\n\nfrfded jujkik frfdcd jujk,k frfded jujkik frfdcd jujk,k rfded\nujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,k\n\nfra juö frs jul frd juk örl aus örk aud örj auf fru jur fr ju\nruj urf fua jrö dua krö sua lrö kuj drf luj srf öuj arf rf uj" + "text": "asdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj asdfrf ölkjuj frfju\nfrfjuj frfjuj frdesa jukilö frdesa frfjuj frfjuj frdesa jukil\n\nfrfded jujkik frfdcd jujk,k frfded jujkik frfdcd jujk,k rfded\nujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,ki rfdcde ujk,k\n\nfra juö frs jul frd juk örl aus örk aud örj auf fru jur fr ju\nruj urf fua jrö dua krö sua lrö kuj drf luj srf öuj arf rf uj", + "task": "dummy" }, { - "lesson": 6.3, + "lesson": "6.3", "title": "06.3 Festigung durch Wortübungen", - "text": "frage, frage, frage, laufe, laufe, laufe, frage, laufe, rauf,\nfrage, raufe, frage, kaufe, frage, raufe, frage, kaufe, rief,\n\neure, drei, klar, eure, drei, klar, eure, drei, klar, eure, d\nrede, sehr, hier, rede, sehr, hier, rede, sehr, hier, rede, s\n\nsehr eilige, alles ruhig, jeder laufe, gerade hier, gehe aus,\nsehr ruhige, alles eilig, jeder kaufe, gerade alle, geradeaus\n\ndie Frage, die Freude, die Ruhe, der Karl, die Karla, Kuckuck\ndie Frage, die Freude, die Ruhe, der Karl, die Karla, Kuckuck\n\ndie Kugelfische, der Hilferuf, der Kuckucksruf, die Ruhelage,\ndie Kugelfische, der Hilferuf, der Kuckucksruf, die Ruhelage," + "text": "frage, frage, frage, laufe, laufe, laufe, frage, laufe, rauf,\nfrage, raufe, frage, kaufe, frage, raufe, frage, kaufe, rief,\n\neure, drei, klar, eure, drei, klar, eure, drei, klar, eure, d\nrede, sehr, hier, rede, sehr, hier, rede, sehr, hier, rede, s\n\nsehr eilige, alles ruhig, jeder laufe, gerade hier, gehe aus,\nsehr ruhige, alles eilig, jeder kaufe, gerade alle, geradeaus\n\ndie Frage, die Freude, die Ruhe, der Karl, die Karla, Kuckuck\ndie Frage, die Freude, die Ruhe, der Karl, die Karla, Kuckuck\n\ndie Kugelfische, der Hilferuf, der Kuckucksruf, die Ruhelage,\ndie Kugelfische, der Hilferuf, der Kuckucksruf, die Ruhelage,", + "task": "dummy" }, { - "lesson": 6.4, + "lesson": "6.4", "title": "06.4 Lernkontrolle durch Geläufigkeitssätze", - "text": "Sage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\n\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;" + "text": "Sage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\nSage Adelheid, hier höre jeder diese Kuckucksrufe sehr leise;\n\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;\nKarla sage sehr leise, dieser Löffel gehöre sicherlich Adele;", + "task": "dummy" }, { - "lesson": 6.5, + "lesson": "6.5", "title": "06.5 Schreibsicherheit durch Griffübungen = Fingergymnastik", - "text": "frfr juju frfr juju frfr juju frfr juju frfr juju frfr juju r\nfruj jurf fruj jurf fruj jurf fruj jurf fruj jurf fruj jurf u\n\nfra juö fra juö fra juö fra juö fra juö fra juö fra juö fra r\nraf uöj raf uöj raf uöj raf uöj raf uöj raf uöj raf uöj raf u\n\nrsf ulj rsf ulj rsf ulj rsf ulj rsf ulj rsf ulj rsf ulj rsf r\nrdf ukj rdf ukj rdf ukj rdf ukj rdf ukj rdf ukj rdf ukj rdf u\n\nörf auj örf auj örf auj örf auj örf auj örf auj örf auj örf r\nöre aui öre aui öre aui öre aui öre aui öre aui öre aui öre u\n\nref uij ref uij ref uij ref uij ref uij ref uij ref uij ref e\naer öiu aer öiu aer öiu aer öiu aer öiu aer öiu aer öiu aer i\n\nasderfd ölkiujk asderfd ölkiujk asderfd ölkiujk asderfd ölkiu\ndfredas kjuiklö dfredas kjuiklö dfredas kjuiklö dfredas uiklö" + "text": "frfr juju frfr juju frfr juju frfr juju frfr juju frfr juju r\nfruj jurf fruj jurf fruj jurf fruj jurf fruj jurf fruj jurf u\n\nfra juö fra juö fra juö fra juö fra juö fra juö fra juö fra r\nraf uöj raf uöj raf uöj raf uöj raf uöj raf uöj raf uöj raf u\n\nrsf ulj rsf ulj rsf ulj rsf ulj rsf ulj rsf ulj rsf ulj rsf r\nrdf ukj rdf ukj rdf ukj rdf ukj rdf ukj rdf ukj rdf ukj rdf u\n\nörf auj örf auj örf auj örf auj örf auj örf auj örf auj örf r\nöre aui öre aui öre aui öre aui öre aui öre aui öre aui öre u\n\nref uij ref uij ref uij ref uij ref uij ref uij ref uij ref e\naer öiu aer öiu aer öiu aer öiu aer öiu aer öiu aer öiu aer i\n\nasderfd ölkiujk asderfd ölkiujk asderfd ölkiujk asderfd ölkiu\ndfredas kjuiklö dfredas kjuiklö dfredas kjuiklö dfredas uiklö", + "task": "dummy" }, { - "lesson": 6.6, + "lesson": "6.6", "title": "06.6 Festigung durch Wortübungen", - "text": "Hirse Haus Rede Reeder Reederei Dur Kur Uhr Ruhr Kuli Ulli Öl\nHirse Haus Rede Reeder Reederei Dur Kur Uhr Ruhr Kuli Ulli Öl\n\nJura Frau Erde Ilse Juli Frage Iller Erdöl Jahr Friede Julius\nJura Frau Erde Ilse Juli Frage Iller Erdöl Jahr Friede Julius" + "text": "Hirse Haus Rede Reeder Reederei Dur Kur Uhr Ruhr Kuli Ulli Öl\nHirse Haus Rede Reeder Reederei Dur Kur Uhr Ruhr Kuli Ulli Öl\n\nJura Frau Erde Ilse Juli Frage Iller Erdöl Jahr Friede Julius\nJura Frau Erde Ilse Juli Frage Iller Erdöl Jahr Friede Julius", + "task": "dummy" }, { - "lesson": 6.7, + "lesson": "6.7", "title": "06.7 Lernkontrolle durch Wendungen", - "text": "auf dieser Reise, das Ufer der Saale, raufe die Haare, das Ei\nauf dieser Reise, das Ufer der Saale, raufe die Haare, das Ei\n\nrufe Julius her, rufe Frau Krause, Adelheid lege alles darauf\nsei ruhig Ilse, sieh da Ulli, auch Karla sah die Fischerei da" + "text": "auf dieser Reise, das Ufer der Saale, raufe die Haare, das Ei\nauf dieser Reise, das Ufer der Saale, raufe die Haare, das Ei\n\nrufe Julius her, rufe Frau Krause, Adelheid lege alles darauf\nsei ruhig Ilse, sieh da Ulli, auch Karla sah die Fischerei da", + "task": "dummy" }, { - "lesson": 7.1, + "lesson": "7.1", "title": "07.1 Erarbeitung der Griffe v und m", - "text": "asdfvf ölkjmj asdfvf ölkjmj asdfvf ölkjmj asdfvf ölkjmj asdfv\nfvfdsa jmjklö fvfdsa jmjklö fvfdsa jmjklö fvfdsa jmjklö fvfds\n\nfvfrfvf jmjujmj fvfrfvf jmjujmj fvfrfvf jmjujmj fvfrfvf jujmj\nfrfvfrd jujmjuk frfvfrs jujmjul frfvfra jujmjuö frvfrvf jumjö\n\nfvfredsa jmjuiklö fvfredsa jmjuiklö fvfredsa jmjuiklö fvfreds\nfvfredca jmjuik,ö fvfredca jmjuik,ö fvfredca jmjuik,ö fvfredc\n\nver mir vie mie vei mei ver mir vie mie vei mei ver mir vie m\nmer vir mie vie mei vei mer vir mie vie mei vei mer vir mie v" + "text": "asdfvf ölkjmj asdfvf ölkjmj asdfvf ölkjmj asdfvf ölkjmj asdfv\nfvfdsa jmjklö fvfdsa jmjklö fvfdsa jmjklö fvfdsa jmjklö fvfds\n\nfvfrfvf jmjujmj fvfrfvf jmjujmj fvfrfvf jmjujmj fvfrfvf jujmj\nfrfvfrd jujmjuk frfvfrs jujmjul frfvfra jujmjuö frvfrvf jumjö\n\nfvfredsa jmjuiklö fvfredsa jmjuiklö fvfredsa jmjuiklö fvfreds\nfvfredca jmjuik,ö fvfredca jmjuik,ö fvfredca jmjuik,ö fvfredc\n\nver mir vie mie vei mei ver mir vie mie vei mei ver mir vie m\nmer vir mie vie mei vei mer vir mie vie mei vei mer vir mie v", + "task": "dummy" }, { - "lesson": 7.2, + "lesson": "7.2", "title": "07.2 Festigung durch Wortübungen", - "text": "viel mehr verlese mehrfach vielfach mache vermache mische das\nviele vieles vieler vielem mehr mehre mehrere mehreres vieler\n\nvermehre verlasse verkaufe vermache verlese verliere verkaufe\nvergehe vermerke vermische vermelde vergesse verlaufe verlese\n\nvermiese, vermahle, vermale, versehe, vergehe, verlege, viele\nvermerke, vergesse, verlaufe, versuche, vermerke, vermöge es,\n\nVieh, Meer, Vers, Mimik, Villa, Muskel, Vier, Mieder, Villach\nVermerk, Mega, Vikar, Mischer, Verruf, Mull, Virus, Maulesel." + "text": "viel mehr verlese mehrfach vielfach mache vermache mische das\nviele vieles vieler vielem mehr mehre mehrere mehreres vieler\n\nvermehre verlasse verkaufe vermache verlese verliere verkaufe\nvergehe vermerke vermische vermelde vergesse verlaufe verlese\n\nvermiese, vermahle, vermale, versehe, vergehe, verlege, viele\nvermerke, vergesse, verlaufe, versuche, vermerke, vermöge es,\n\nVieh, Meer, Vers, Mimik, Villa, Muskel, Vier, Mieder, Villach\nVermerk, Mega, Vikar, Mischer, Verruf, Mull, Virus, Maulesel.", + "task": "dummy" }, { - "lesson": 7.3, + "lesson": "7.3", "title": "07.3 Festigung durch Wendungen", - "text": "sehr viel Vieh, auf dem Meer, merke viele Verse, diese Villa,\nder kluge Vermerk, vermerke ihre Versuche, das Villacher Vieh\n\nalle die Vermerke, der aufmerksame Mischer, der fremde Vikar,\nmehrere Filme, immer mehr Verkehr, immer viele Versuchsfilme,\n\nimmer die Maare, immer die Meere, auf dem Mars, mehrere Male,\nverkaufe im Mai, verkaufe die Vase, vermische das viele Mehl," + "text": "sehr viel Vieh, auf dem Meer, merke viele Verse, diese Villa,\nder kluge Vermerk, vermerke ihre Versuche, das Villacher Vieh\n\nalle die Vermerke, der aufmerksame Mischer, der fremde Vikar,\nmehrere Filme, immer mehr Verkehr, immer viele Versuchsfilme,\n\nimmer die Maare, immer die Meere, auf dem Mars, mehrere Male,\nverkaufe im Mai, verkaufe die Vase, vermische das viele Mehl,", + "task": "dummy" }, { - "lesson": 7.4, + "lesson": "7.4", "title": "07.4 Schreibsicherheit durch Griffübungen = Fingergymnastik", - "text": "rfvdsa ujmklö rfvdsa ujmklö rfvdsa ujmklö rfvdsa ujmklö rfvds\nedcrfv ik,ujm edcrfv ik,ujm edcrfv ik,ujm edcrfv ik,ujm edcrf\n\nfjruvmdkeic, fjruvmdkeic, fjruvmdkeic, fjruvmdkeic, fjruvmdke\n,kiujmcderfv ,kiujmcderfv ,kiujmcderfv ,kiujmcderfv ,kiujmcde\n\nfjvmdkc,eidk fjvmdkc,eidk fjvmdkc,eidk fjvmdkc,eidk fjvmdkcei\nkdie,ckdmvjf kdie,ckdmvjf kdie,ckdmvjf kdie,ckdmvjf ieckdmvjf" + "text": "rfvdsa ujmklö rfvdsa ujmklö rfvdsa ujmklö rfvdsa ujmklö rfvds\nedcrfv ik,ujm edcrfv ik,ujm edcrfv ik,ujm edcrfv ik,ujm edcrf\n\nfjruvmdkeic, fjruvmdkeic, fjruvmdkeic, fjruvmdkeic, fjruvmdke\n,kiujmcderfv ,kiujmcderfv ,kiujmcderfv ,kiujmcderfv ,kiujmcde\n\nfjvmdkc,eidk fjvmdkc,eidk fjvmdkc,eidk fjvmdkc,eidk fjvmdkcei\nkdie,ckdmvjf kdie,ckdmvjf kdie,ckdmvjf kdie,ckdmvjf ieckdmvjf", + "task": "dummy" }, { - "lesson": 7.5, + "lesson": "7.5", "title": "07.5 Festigung durch Wendungen", - "text": "viele Lacke, jede Jacke, diese Hecke, dieser Fleck, ja Flachs\ndiese Lacke, diese Hacke, jede Decke, der Flachs, die Fackel,\n\ndieser Vermerk, decke das Dach, recke die Decke, dieser Mars,\nversuche die Lachse, die Meereslage, mehrere Maler, die Eiche" + "text": "viele Lacke, jede Jacke, diese Hecke, dieser Fleck, ja Flachs\ndiese Lacke, diese Hacke, jede Decke, der Flachs, die Fackel,\n\ndieser Vermerk, decke das Dach, recke die Decke, dieser Mars,\nversuche die Lachse, die Meereslage, mehrere Maler, die Eiche", + "task": "dummy" }, { - "lesson": 7.6, + "lesson": "7.6", "title": "07.6 Lernkontrolle durch Satzübungen", - "text": "Adelheid vermerke dir die Reihe der Versuche der Marschierer;\nAdele versuche die Lachse; Friedel sieh diese Messer im Sack;\n\nAdam vermerke es, ich vergesse diese Sache sicherlich gleich;\nFriedel ich verleihe im Juli die Decke, die ich dir vermache;\n\nDie Kauffrau verkaufe im Juli frische Meeresfische aus Kiel;\nIm Kaufhaus Meier kaufe ich immer mehrere frische Seefische;\n\nSage Helga, die Filme aus dem Kaufhaus kaufe ich sicher auch;\nLege die Filme auf die Jacke, dieses merke ich mir sicherlich" + "text": "Adelheid vermerke dir die Reihe der Versuche der Marschierer;\nAdele versuche die Lachse; Friedel sieh diese Messer im Sack;\n\nAdam vermerke es, ich vergesse diese Sache sicherlich gleich;\nFriedel ich verleihe im Juli die Decke, die ich dir vermache;\n\nDie Kauffrau verkaufe im Juli frische Meeresfische aus Kiel;\nIm Kaufhaus Meier kaufe ich immer mehrere frische Seefische;\n\nSage Helga, die Filme aus dem Kaufhaus kaufe ich sicher auch;\nLege die Filme auf die Jacke, dieses merke ich mir sicherlich", + "task": "dummy" }, { - "lesson": 8.1, + "lesson": "8.1", "title": "08.1 Erarbeitung der Griffe t und z", - "text": "jzjö ftfa jzjö ftfa jzjö ftfa jzjö ftfa jzjö ftfa jzjö ftfa z\njhzj fgtf jhzj fgtf jhzj fgtf jhzj fgtf jhzj fgtf jhzj fgtf t\n\nfrtgf juzhj frtgf juzhj frtgf juzhj frtgf juzhj frtgf juzhj z\njhzuj fgtrf jhzuj fgtrf jhzuj fgtrf jhzuj fgtrf jhzuj fgtrf t\n\njuzfrt juzfrt juzfrt juzfrt juzfrt juzfrt juzfrt juzfrt juzfr\ntrfzuj trfzuj trfzuj trfzuj trfzuj trfzuj trfzuj trfzuj trfzu\n\nfjrutz fjrutz fjrutz fjrutz fjrutz fjrutz fjrutz fjrutz fjrut\ntzurjf tzurjf tzurjf tzurjf tzurjf tzurjf tzurjf tzurjf tzurj\n\nzer ter zer ter zer ter zer ter zer ter zer ter zer ter zer t\nzur tur zur tur zur tur zur tur zur tur zur tur zur tur zur z" + "text": "jzjö ftfa jzjö ftfa jzjö ftfa jzjö ftfa jzjö ftfa jzjö ftfa z\njhzj fgtf jhzj fgtf jhzj fgtf jhzj fgtf jhzj fgtf jhzj fgtf t\n\nfrtgf juzhj frtgf juzhj frtgf juzhj frtgf juzhj frtgf juzhj z\njhzuj fgtrf jhzuj fgtrf jhzuj fgtrf jhzuj fgtrf jhzuj fgtrf t\n\njuzfrt juzfrt juzfrt juzfrt juzfrt juzfrt juzfrt juzfrt juzfr\ntrfzuj trfzuj trfzuj trfzuj trfzuj trfzuj trfzuj trfzuj trfzu\n\nfjrutz fjrutz fjrutz fjrutz fjrutz fjrutz fjrutz fjrutz fjrut\ntzurjf tzurjf tzurjf tzurjf tzurjf tzurjf tzurjf tzurjf tzurj\n\nzer ter zer ter zer ter zer ter zer ter zer ter zer ter zer t\nzur tur zur tur zur tur zur tur zur tur zur tur zur tur zur z", + "task": "dummy" }, { - "lesson": 8.2, + "lesson": "8.2", "title": "08.02 Festigung durch Wortübungen", - "text": "trage trete treffe trat tretet geht guter ziehe zage letztere\ntrage trete treffe trat tretet geht guter ziehe zage letztere\n\nzerfalle zertrete zermale zergehe zergliedere zerstreue zerre\nzerfalle zertrete zermale zergehe zergliedere zerstreue zerre\n\nZerrerei, zeige, Zeiger, zerfalle, Zerfall, ziehe es, Zieher,\nZerrerei, zeige, Zeiger, zerfalle, Zerfall, ziehe es, Zieher,\n\nZiege, Ziegel, Ziegelei, Ziegeldach, Ziegelstreicher, Ziegel,\nZiel, Zielkamera, Zielkauf, Zielgerade, diese Zielsicherheit,\n\nzugemauert, zugeheftet, zugemutet, zumeist, zugleich, zuletzt\nZuzug, Zugtier, Zugverkehr, Zulieferer, Zurichterei, Zurichter" + "text": "trage trete treffe trat tretet geht guter ziehe zage letztere\ntrage trete treffe trat tretet geht guter ziehe zage letztere\n\nzerfalle zertrete zermale zergehe zergliedere zerstreue zerre\nzerfalle zertrete zermale zergehe zergliedere zerstreue zerre\n\nZerrerei, zeige, Zeiger, zerfalle, Zerfall, ziehe es, Zieher,\nZerrerei, zeige, Zeiger, zerfalle, Zerfall, ziehe es, Zieher,\n\nZiege, Ziegel, Ziegelei, Ziegeldach, Ziegelstreicher, Ziegel,\nZiel, Zielkamera, Zielkauf, Zielgerade, diese Zielsicherheit,\n\nzugemauert, zugeheftet, zugemutet, zumeist, zugleich, zuletzt\nZuzug, Zugtier, Zugverkehr, Zulieferer, Zurichterei, Zurichter", + "task": "dummy" }, { - "lesson": 8.3, + "lesson": "8.3", "title": "08.3 Festigung durch Wendungen", - "text": "zertrete die Ziegel, zerhacke die Ziegel, zerstreue das Zeug,\nzeige die Zulage, zeige die Zielkamera, zeige diese Ziegelei,\n\nviel Verkehr, viel Zugverkehr, viele Zulieferer, der Zielkauf\njetzt zur Schau gestellt, richtet die Zeit, seit kurzer Zeit," + "text": "zertrete die Ziegel, zerhacke die Ziegel, zerstreue das Zeug,\nzeige die Zulage, zeige die Zielkamera, zeige diese Ziegelei,\n\nviel Verkehr, viel Zugverkehr, viele Zulieferer, der Zielkauf\njetzt zur Schau gestellt, richtet die Zeit, seit kurzer Zeit,", + "task": "dummy" }, { - "lesson": 8.4, + "lesson": "8.4", "title": "08.4 Schreibsicherheit durch Griffübungen", - "text": "jzjklö ftfdsa jzjklö ftfdsa jzjklö ftfdsa jzjklö ftfdsa jzftö\nölkjzj asdftf ölkjzj asdftf ölkjzj asdftf ölkjzj asdftf ötfzj\n\nfgtfdsa jhzjklö fgtfdsa jhzjklö fgtfdsa jhzjklö fgtfdsa fjztu\nasdftgf ölkjzhj asdftgf ölkjzhj asdftgf ölkjzhj asdftgf öaztl\n\nfjghtzdkeirutzghfj fjghtzdkeirutzghfj fjghtzdkeirutzghfj fjgh\nöasldkfjrueidkslaö öasldkfjrueidkslaö öasldkfjrueidkslaö öasl" + "text": "jzjklö ftfdsa jzjklö ftfdsa jzjklö ftfdsa jzjklö ftfdsa jzftö\nölkjzj asdftf ölkjzj asdftf ölkjzj asdftf ölkjzj asdftf ötfzj\n\nfgtfdsa jhzjklö fgtfdsa jhzjklö fgtfdsa jhzjklö fgtfdsa fjztu\nasdftgf ölkjzhj asdftgf ölkjzhj asdftgf ölkjzhj asdftgf öaztl\n\nfjghtzdkeirutzghfj fjghtzdkeirutzghfj fjghtzdkeirutzghfj fjgh\nöasldkfjrueidkslaö öasldkfjrueidkslaö öasldkfjrueidkslaö öasl", + "task": "dummy" }, { - "lesson": 8.5, + "lesson": "8.5", "title": "08.5 Lernkontrolle durch Satzübungen", - "text": "Kurt Zeiger macht heute die Fahrt mit Zacharias zur Adria mit\nZacharias Ziegeler eilte mit dem Zug immer heiter um die Erde\n\nDie Zufahrt zur Garage ist gut gestreut, dieses ist immer gut\nJetzt herrschte fast eisige Stille, darum rettete er das Tier\n\nKurt Zart hört leise dem Leser zu, ja er ist sehr aufmerksam;\nGerd Zielazeck ist der gute Stegreifdichter, der immer lacht;\n\nJeder hat aufmerksam die Ersatzteile aus Edelstahl gesichtet;\nHerr Fritz Zart macht jetzt diese mutige Aussage zur Tatzeit;\n\nDer Arzt machte zur Zeit viele Versuche, das ist sehr richtig\nFrau Kraus geht mit ihrer Katze zum Tierarzt, das ist richtig\n\nJulius Ziegler geht als starker Sieger direkt auf das Ziel zu\nStatt der Tiere aus dem Zirkus zeigt Karla die Katze Mizemaus\n\nDieser Zufahrtssteg ist seit heute mit Stahlgitter zugemacht;\nDie Zufahrt zur Garage der Reiter ist sehr dauerhaft verlegt;" + "text": "Kurt Zeiger macht heute die Fahrt mit Zacharias zur Adria mit\nZacharias Ziegeler eilte mit dem Zug immer heiter um die Erde\n\nDie Zufahrt zur Garage ist gut gestreut, dieses ist immer gut\nJetzt herrschte fast eisige Stille, darum rettete er das Tier\n\nKurt Zart hört leise dem Leser zu, ja er ist sehr aufmerksam;\nGerd Zielazeck ist der gute Stegreifdichter, der immer lacht;\n\nJeder hat aufmerksam die Ersatzteile aus Edelstahl gesichtet;\nHerr Fritz Zart macht jetzt diese mutige Aussage zur Tatzeit;\n\nDer Arzt machte zur Zeit viele Versuche, das ist sehr richtig\nFrau Kraus geht mit ihrer Katze zum Tierarzt, das ist richtig\n\nJulius Ziegler geht als starker Sieger direkt auf das Ziel zu\nStatt der Tiere aus dem Zirkus zeigt Karla die Katze Mizemaus\n\nDieser Zufahrtssteg ist seit heute mit Stahlgitter zugemacht;\nDie Zufahrt zur Garage der Reiter ist sehr dauerhaft verlegt;", + "task": "dummy" }, { - "lesson": 100, + "lesson": "100", "title": "Test", - "text": "asdf\njklö\nasdf\njklö\nasdf\njklö\nasdf\njklö\nasdf\njklö" + "text": "asdf\njklö\nasdf\njklö\nasdf\njklö\nasdf\njklö\nasdf\njklö", + "task": "dummy" } -] +] \ No newline at end of file diff --git a/services/lesson_service.py b/services/lesson_service.py index e0b19dc..5ebe8ee 100644 --- a/services/lesson_service.py +++ b/services/lesson_service.py @@ -146,5 +146,6 @@ class LessonService: 'index': index, 'text': lesson.get('text', ''), 'title': self.get_lesson_title(index), + 'task': lesson.get('task', ''), 'total': len(self.lessons) } diff --git a/services/training_service.py b/services/training_service.py index d122cbb..9b9d131 100644 --- a/services/training_service.py +++ b/services/training_service.py @@ -79,6 +79,7 @@ class TrainingService: 'is_paused': progress_data['is_paused'], 'lessons': self.lesson_service.get_all_lessons(), 'current_lesson_title': lesson_info['title'], + 'current_lesson_task': lesson_info['task'], 'current_lesson_index': current_lesson_index, 'metronome_enabled': user_settings_dict['metronome_enabled'], 'metronome_bpm': user_settings_dict['metronome_bpm'], @@ -232,6 +233,7 @@ class TrainingService: 'index': new_index, 'total': lesson_info['total'], 'title': lesson_info['title'], + 'task': lesson_info['task'], 'current_position': progress_data['current_position'], 'last_text': progress_data['last_text'], 'total_elapsed_time': progress_data['total_elapsed_time'], diff --git a/static/js/main.js b/static/js/main.js index 44249fa..432ce7e 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -565,6 +565,7 @@ class TypewriterApp { this.textDisplayManager.resetScroll(); this.uiManager.updateLessonTitle(data.title); + this.uiManager.updateLessonTask(data.task); this.uiManager.updateLessonHighlight(data.index); this.uiManager.showPlay(); @@ -601,6 +602,7 @@ class TypewriterApp { this.textDisplayManager.resetScroll(); this.uiManager.updateLessonTitle(data.title); + this.uiManager.updateLessonTask(data.task); this.uiManager.updateLessonHighlight(lessonIndex); this.uiManager.showPlay(); diff --git a/static/js/ui.js b/static/js/ui.js index 6633d8a..33a6014 100644 --- a/static/js/ui.js +++ b/static/js/ui.js @@ -143,6 +143,23 @@ export class UIManager { } } + /** + * Update lesson task in UI + * @param {string} task - Lesson task + */ + updateLessonTask(task) { + const taskElement = document.getElementById('lesson-task'); + if (taskElement) { + if (task && task !== 'dummy') { + taskElement.textContent = task; + taskElement.style.display = 'block'; + } else { + taskElement.textContent = ''; + taskElement.style.display = 'none'; + } + } + } + /** * Update lesson highlight in sidebar * @param {number} lessonIndex - Index of current lesson diff --git a/templates/index.html b/templates/index.html index a0922cc..ce749a9 100644 --- a/templates/index.html +++ b/templates/index.html @@ -93,6 +93,11 @@ tabindex="0"> +
+ {%- if current_lesson_task and current_lesson_task != 'dummy' -%} + {{- current_lesson_task -}} + {%- endif -%} +