Spaces:
Sleeping
Sleeping
Update content_pack.py
Browse files- content_pack.py +641 -14
content_pack.py
CHANGED
|
@@ -362,6 +362,19 @@ def get_adjectives(pack: dict = None) -> list:
|
|
| 362 |
# ---------------------------------------------------------------------------
|
| 363 |
|
| 364 |
LESSON_CONTENT = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 365 |
"topic_marker": {
|
| 366 |
"explanation": {
|
| 367 |
"title": "Topic Markers 은/는",
|
|
@@ -372,6 +385,105 @@ LESSON_CONTENT = {
|
|
| 372 |
),
|
| 373 |
"pattern": "N (Consonant) + 은 / N (Vowel) + 는",
|
| 374 |
"notes": "The topic marker tells the listener what the sentence is about.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 375 |
},
|
| 376 |
"example_sentences": [
|
| 377 |
{
|
|
@@ -411,6 +523,75 @@ LESSON_CONTENT = {
|
|
| 411 |
),
|
| 412 |
"pattern": "N (Consonant) + 이에요 / N (Vowel) + 예요",
|
| 413 |
"notes": "이에요/예요 is the polite present tense of the copula (to be).",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 414 |
},
|
| 415 |
"example_sentences": [
|
| 416 |
{
|
|
@@ -450,13 +631,83 @@ LESSON_CONTENT = {
|
|
| 450 |
),
|
| 451 |
"pattern": "N (Consonant) + 이 아니에요 / N (Vowel/ㄹ) + 가 아니에요",
|
| 452 |
"notes": "이/가 is the subject marker. 아니에요 means 'is not'.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 453 |
},
|
| 454 |
"example_sentences": [
|
| 455 |
{
|
| 456 |
"positive": {"korean": "이것은 물이에요.", "english": "This is water."},
|
| 457 |
"negative": {"korean": "이것은 물이 아니에요.", "english": "This is not water."},
|
| 458 |
"focus_word": "물이 아니에요",
|
| 459 |
-
"rule_shown": "물 (consonant ending ㄹ) →
|
| 460 |
},
|
| 461 |
{
|
| 462 |
"positive": {"korean": "저는 학생이에요.", "english": "I am a student."},
|
|
@@ -489,6 +740,82 @@ LESSON_CONTENT = {
|
|
| 489 |
),
|
| 490 |
"pattern": "V-stem + 는다고/ㄴ다고 | Adj + 다고 | V(past) + 었/았다고",
|
| 491 |
"notes": "했어요 (said) or 해요 (says) follows 다고 in most sentences.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 492 |
},
|
| 493 |
"example_sentences": [
|
| 494 |
{
|
|
@@ -516,11 +843,84 @@ LESSON_CONTENT = {
|
|
| 516 |
"title": "Indirect Quotation — Commands",
|
| 517 |
"body": (
|
| 518 |
"(으)라고 is used to report commands or requests. "
|
| 519 |
-
"지 말라고 is used to report negative commands
|
| 520 |
-
"달라고 reports requests (please give/do for me).
|
| 521 |
),
|
| 522 |
"pattern": "V-stem + (으)라고 | V + 지 말라고 | 달라고 / 주라고",
|
| 523 |
"notes": "The subject marker after the speaker is 이/가.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 524 |
},
|
| 525 |
"example_sentences": [
|
| 526 |
{
|
|
@@ -549,11 +949,80 @@ LESSON_CONTENT = {
|
|
| 549 |
"body": (
|
| 550 |
"냐고 is used to report questions. "
|
| 551 |
"Attach to verb/adjective stems. "
|
| 552 |
-
"If the stem ends in ㄹ, drop ㄹ before adding 냐고.
|
| 553 |
-
"물었어요 (asked) or 물어봤어요 typically follows."
|
| 554 |
),
|
| 555 |
"pattern": "V/Adj-stem + 냐고 (drop ㄹ from ㄹ-irregular stems)",
|
| 556 |
"notes": "냐고 replaces the question ending 아요/어요/이에요.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 557 |
},
|
| 558 |
"example_sentences": [
|
| 559 |
{
|
|
@@ -586,6 +1055,71 @@ LESSON_CONTENT = {
|
|
| 586 |
),
|
| 587 |
"pattern": "V-stem + 자고 했어요/해요",
|
| 588 |
"notes": "자 is the plain form suggestion ending. 자고 = quoting that suggestion.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 589 |
},
|
| 590 |
"example_sentences": [
|
| 591 |
{
|
|
@@ -618,13 +1152,86 @@ LESSON_CONTENT = {
|
|
| 618 |
),
|
| 619 |
"pattern": "V-stem + (으)ㄹ 걸 그랬다 | V + 지 말 걸 그랬다",
|
| 620 |
"notes": "그랬다 can be softened to 그랬어 in casual speech.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 621 |
},
|
| 622 |
"example_sentences": [
|
| 623 |
{
|
| 624 |
"positive": {"korean": "수업에 갔어요.", "english": "I went to class."},
|
| 625 |
"negative": {"korean": "수업에 갈 걸 그랬어요.", "english": "I should have gone to class."},
|
| 626 |
"focus_word": "갈 걸 그랬어요",
|
| 627 |
-
"rule_shown": "가다 → 가 + ㄹ 걸 그
|
| 628 |
},
|
| 629 |
{
|
| 630 |
"positive": {"korean": "그 음식을 먹었어요.", "english": "I ate that food."},
|
|
@@ -642,24 +1249,44 @@ LESSON_CONTENT = {
|
|
| 642 |
}
|
| 643 |
|
| 644 |
|
| 645 |
-
def get_lesson_content(grammar_rule: str) -> dict:
|
| 646 |
-
"""Return full lesson content for a grammar rule (all 6 frames)."""
|
| 647 |
-
return LESSON_CONTENT.get(grammar_rule, {})
|
| 648 |
|
| 649 |
|
| 650 |
def get_explanation(grammar_rule: str) -> dict:
|
| 651 |
-
"""
|
| 652 |
-
|
| 653 |
-
|
| 654 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 655 |
return {
|
|
|
|
| 656 |
"grammar_rule": grammar_rule,
|
| 657 |
"title": expl.get("title", rule.get("name", grammar_rule)),
|
| 658 |
-
"body": expl.get("body",
|
| 659 |
"pattern": expl.get("pattern", ""),
|
| 660 |
"notes": expl.get("notes", ""),
|
| 661 |
"difficulty": rule.get("difficulty", 1),
|
| 662 |
"lesson": rule.get("lesson", ""),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 663 |
}
|
| 664 |
|
| 665 |
|
|
|
|
| 362 |
# ---------------------------------------------------------------------------
|
| 363 |
|
| 364 |
LESSON_CONTENT = {
|
| 365 |
+
|
| 366 |
+
# -----------------------------------------------------------------------
|
| 367 |
+
# topic_marker + copula are taught together as Grammar 1.1
|
| 368 |
+
# The slides array drives the 6-slide breakdown per team lead's spec.
|
| 369 |
+
# Slide types:
|
| 370 |
+
# intro — formula display only (formula, sub_formula)
|
| 371 |
+
# body — explanation paragraph (text, highlight)
|
| 372 |
+
# diagram — labelled formula (formula_parts[])
|
| 373 |
+
# rules — conjugation rule box (sections[{label, rules[]}])
|
| 374 |
+
# examples — annotated examples (items[{korean, english, annotations[]}])
|
| 375 |
+
# practice — choose-correct MCQ (question, items[{korean, choices, answer}])
|
| 376 |
+
# -----------------------------------------------------------------------
|
| 377 |
+
|
| 378 |
"topic_marker": {
|
| 379 |
"explanation": {
|
| 380 |
"title": "Topic Markers 은/는",
|
|
|
|
| 385 |
),
|
| 386 |
"pattern": "N (Consonant) + 은 / N (Vowel) + 는",
|
| 387 |
"notes": "The topic marker tells the listener what the sentence is about.",
|
| 388 |
+
"slides": [
|
| 389 |
+
{
|
| 390 |
+
"index": 0,
|
| 391 |
+
"type": "intro",
|
| 392 |
+
"title": "Grammar 1.1",
|
| 393 |
+
"formula": "N1 은/는 N2 이에요/예요.",
|
| 394 |
+
"formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 395 |
+
"sub_formula": "N1 = N2",
|
| 396 |
+
"sub_formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"index": 1,
|
| 400 |
+
"type": "body",
|
| 401 |
+
"title": "N1 은/는 N2 이에요/예요. N1=N2",
|
| 402 |
+
"text": (
|
| 403 |
+
"The equational expression, where two nouns are involved, is the "
|
| 404 |
+
"most basic sentence structure in Korean. The first noun is followed "
|
| 405 |
+
"by a topic marker –은/는 and the second noun is followed by the "
|
| 406 |
+
"copular –이에요/예요. The topic marker –은/는 indicates that the "
|
| 407 |
+
"preceding noun is the topic of the sentence."
|
| 408 |
+
),
|
| 409 |
+
"highlight": "most basic sentence structure",
|
| 410 |
+
"highlight_color": "#E8292A",
|
| 411 |
+
},
|
| 412 |
+
{
|
| 413 |
+
"index": 2,
|
| 414 |
+
"type": "diagram",
|
| 415 |
+
"title": "Noun 1 = Noun 2",
|
| 416 |
+
"formula": "N1 은/는 N2 이에요/예요.",
|
| 417 |
+
"formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 418 |
+
"formula_parts": [
|
| 419 |
+
{"label": "Topic", "color": "#F5A623", "points_to": "N1"},
|
| 420 |
+
{"label": "Topic marker", "color": "#333333", "points_to": "은/는"},
|
| 421 |
+
{"label": "Explanation", "color": "#E8824A", "points_to": "N2"},
|
| 422 |
+
{"label": "to be", "color": "#333333", "points_to": "이에요/예요"},
|
| 423 |
+
],
|
| 424 |
+
},
|
| 425 |
+
{
|
| 426 |
+
"index": 3,
|
| 427 |
+
"type": "rules",
|
| 428 |
+
"title": "N1 은/는 N2 이에요/예요. N1=N2",
|
| 429 |
+
"sections": [
|
| 430 |
+
{
|
| 431 |
+
"label": "Topic Marker",
|
| 432 |
+
"rules": [
|
| 433 |
+
"Vowel-ending noun + 는",
|
| 434 |
+
"Consonant-ending noun + 은",
|
| 435 |
+
],
|
| 436 |
+
},
|
| 437 |
+
{
|
| 438 |
+
"label": "Copular",
|
| 439 |
+
"rules": [
|
| 440 |
+
"Vowel-ending noun + 예요",
|
| 441 |
+
"Consonant-ending noun + 이에요",
|
| 442 |
+
],
|
| 443 |
+
},
|
| 444 |
+
],
|
| 445 |
+
},
|
| 446 |
+
{
|
| 447 |
+
"index": 4,
|
| 448 |
+
"type": "examples",
|
| 449 |
+
"title": "N1 은/는 N2 이에요/예요. N1=N2",
|
| 450 |
+
"items": [
|
| 451 |
+
{
|
| 452 |
+
"korean": "저는 캐나다 사람이에요.",
|
| 453 |
+
"english": "I am Canadian.",
|
| 454 |
+
"annotations": [
|
| 455 |
+
{"syllable": "저", "marker": "는", "ending_type": "V", "color": "#4CAF50"},
|
| 456 |
+
],
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"korean": "저스틴은 캐나다 사람이에요.",
|
| 460 |
+
"english": "Justin is Canadian.",
|
| 461 |
+
"annotations": [
|
| 462 |
+
{"syllable": "저스틴", "marker": "은", "ending_type": "C", "color": "#4CAF50"},
|
| 463 |
+
],
|
| 464 |
+
},
|
| 465 |
+
],
|
| 466 |
+
},
|
| 467 |
+
{
|
| 468 |
+
"index": 5,
|
| 469 |
+
"type": "practice",
|
| 470 |
+
"title": "Which one is the correct ending?",
|
| 471 |
+
"items": [
|
| 472 |
+
{
|
| 473 |
+
"korean": "저는 민호",
|
| 474 |
+
"choices": ["이에요", "예요"],
|
| 475 |
+
"answer": "예요",
|
| 476 |
+
"hint": "민호 ends with a vowel → 예요",
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"korean": "선생님",
|
| 480 |
+
"choices": ["이에요", "예요"],
|
| 481 |
+
"answer": "이에요",
|
| 482 |
+
"hint": "선생님 ends with consonant ㅁ → 이에요",
|
| 483 |
+
},
|
| 484 |
+
],
|
| 485 |
+
},
|
| 486 |
+
],
|
| 487 |
},
|
| 488 |
"example_sentences": [
|
| 489 |
{
|
|
|
|
| 523 |
),
|
| 524 |
"pattern": "N (Consonant) + 이에요 / N (Vowel) + 예요",
|
| 525 |
"notes": "이에요/예요 is the polite present tense of the copula (to be).",
|
| 526 |
+
"slides": [
|
| 527 |
+
{
|
| 528 |
+
"index": 0, "type": "intro",
|
| 529 |
+
"title": "Grammar 1.1 — Copula",
|
| 530 |
+
"formula": "N1 은/는 N2 이에요/예요.",
|
| 531 |
+
"formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 532 |
+
"sub_formula": "N1 = N2",
|
| 533 |
+
"sub_formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 534 |
+
},
|
| 535 |
+
{
|
| 536 |
+
"index": 1, "type": "body",
|
| 537 |
+
"title": "이에요/예요 — The Copula",
|
| 538 |
+
"text": (
|
| 539 |
+
"이에요/예요 is the polite present tense 'to be' verb (copula). "
|
| 540 |
+
"It follows the second noun to complete the equational sentence N1 is N2. "
|
| 541 |
+
"이에요 is used after nouns ending in a consonant. "
|
| 542 |
+
"예요 is used after nouns ending in a vowel."
|
| 543 |
+
),
|
| 544 |
+
"highlight": "most polite and common form",
|
| 545 |
+
"highlight_color": "#E8292A",
|
| 546 |
+
},
|
| 547 |
+
{
|
| 548 |
+
"index": 2, "type": "diagram",
|
| 549 |
+
"title": "N2 이에요/예요",
|
| 550 |
+
"formula": "N1 은/는 N2 이에요/예요.",
|
| 551 |
+
"formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 552 |
+
"formula_parts": [
|
| 553 |
+
{"label": "Topic", "color": "#F5A623", "points_to": "N1"},
|
| 554 |
+
{"label": "Topic marker","color": "#333333", "points_to": "은/는"},
|
| 555 |
+
{"label": "Noun 2", "color": "#E8824A", "points_to": "N2"},
|
| 556 |
+
{"label": "to be", "color": "#333333", "points_to": "이에요/예요"},
|
| 557 |
+
],
|
| 558 |
+
},
|
| 559 |
+
{
|
| 560 |
+
"index": 3, "type": "rules",
|
| 561 |
+
"title": "Copula Conjugation",
|
| 562 |
+
"sections": [
|
| 563 |
+
{
|
| 564 |
+
"label": "Copular",
|
| 565 |
+
"rules": [
|
| 566 |
+
"Vowel-ending noun + 예요",
|
| 567 |
+
"Consonant-ending noun + 이에요",
|
| 568 |
+
],
|
| 569 |
+
},
|
| 570 |
+
],
|
| 571 |
+
},
|
| 572 |
+
{
|
| 573 |
+
"index": 4, "type": "examples",
|
| 574 |
+
"title": "이에요/예요 Examples",
|
| 575 |
+
"items": [
|
| 576 |
+
{
|
| 577 |
+
"korean": "저는 학생이에요.", "english": "I am a student.",
|
| 578 |
+
"annotations": [{"syllable": "학생", "marker": "이에요", "ending_type": "C", "color": "#4CAF50"}],
|
| 579 |
+
},
|
| 580 |
+
{
|
| 581 |
+
"korean": "제 이름은 민수예요.", "english": "My name is Minsu.",
|
| 582 |
+
"annotations": [{"syllable": "민수", "marker": "예요", "ending_type": "V", "color": "#4CAF50"}],
|
| 583 |
+
},
|
| 584 |
+
],
|
| 585 |
+
},
|
| 586 |
+
{
|
| 587 |
+
"index": 5, "type": "practice",
|
| 588 |
+
"title": "Which one is the correct ending?",
|
| 589 |
+
"items": [
|
| 590 |
+
{"korean": "저는 민호", "choices": ["이에요", "예요"], "answer": "예요", "hint": "민호 ends with a vowel → 예요"},
|
| 591 |
+
{"korean": "선생님", "choices": ["이에요", "예요"], "answer": "이에요", "hint": "선생님 ends with consonant ㅁ → 이에요"},
|
| 592 |
+
],
|
| 593 |
+
},
|
| 594 |
+
],
|
| 595 |
},
|
| 596 |
"example_sentences": [
|
| 597 |
{
|
|
|
|
| 631 |
),
|
| 632 |
"pattern": "N (Consonant) + 이 아니에요 / N (Vowel/ㄹ) + 가 아니에요",
|
| 633 |
"notes": "이/가 is the subject marker. 아니에요 means 'is not'.",
|
| 634 |
+
"slides": [
|
| 635 |
+
{
|
| 636 |
+
"index": 0, "type": "intro",
|
| 637 |
+
"title": "Negative Copula",
|
| 638 |
+
"formula": "N1 은/는 N2 이/가 아니에요.",
|
| 639 |
+
"formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 640 |
+
"sub_formula": "N1 ≠ N2",
|
| 641 |
+
"sub_formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 642 |
+
},
|
| 643 |
+
{
|
| 644 |
+
"index": 1, "type": "body",
|
| 645 |
+
"title": "이/가 아니에요 — Negative",
|
| 646 |
+
"text": (
|
| 647 |
+
"To say 'N1 is NOT N2', replace 이에요/예요 with 이/가 아니에요. "
|
| 648 |
+
"이/가 is the subject marker attached to N2. "
|
| 649 |
+
"아니에요 means 'is not'. "
|
| 650 |
+
"Use 이 아니에요 after consonant-ending nouns, 가 아니에요 after vowels or ㄹ."
|
| 651 |
+
),
|
| 652 |
+
"highlight": "NOT",
|
| 653 |
+
"highlight_color": "#E8292A",
|
| 654 |
+
},
|
| 655 |
+
{
|
| 656 |
+
"index": 2, "type": "diagram",
|
| 657 |
+
"title": "N2 이/가 아니에요",
|
| 658 |
+
"formula": "N1 은/는 N2 이/가 아니에요.",
|
| 659 |
+
"formula_colors": {"N1": "#F5A623", "N2": "#E8824A"},
|
| 660 |
+
"formula_parts": [
|
| 661 |
+
{"label": "Topic", "color": "#F5A623", "points_to": "N1"},
|
| 662 |
+
{"label": "Topic marker", "color": "#333333", "points_to": "은/는"},
|
| 663 |
+
{"label": "Noun 2", "color": "#E8824A", "points_to": "N2"},
|
| 664 |
+
{"label": "subject marker","color": "#333333", "points_to": "이/가"},
|
| 665 |
+
{"label": "is not", "color": "#E8292A", "points_to": "아니에요"},
|
| 666 |
+
],
|
| 667 |
+
},
|
| 668 |
+
{
|
| 669 |
+
"index": 3, "type": "rules",
|
| 670 |
+
"title": "Negative Copula Conjugation",
|
| 671 |
+
"sections": [
|
| 672 |
+
{
|
| 673 |
+
"label": "Subject marker on N2",
|
| 674 |
+
"rules": [
|
| 675 |
+
"Vowel-ending or ㄹ-ending noun + 가 아니에요",
|
| 676 |
+
"Consonant-ending noun + 이 아니에요",
|
| 677 |
+
],
|
| 678 |
+
},
|
| 679 |
+
],
|
| 680 |
+
},
|
| 681 |
+
{
|
| 682 |
+
"index": 4, "type": "examples",
|
| 683 |
+
"title": "이/가 아니에요 Examples",
|
| 684 |
+
"items": [
|
| 685 |
+
{
|
| 686 |
+
"korean": "이것은 물이 아니에요.", "english": "This is not water.",
|
| 687 |
+
"annotations": [{"syllable": "물", "marker": "이 아니에요", "ending_type": "C(ㄹ→이)", "color": "#E8292A"}],
|
| 688 |
+
},
|
| 689 |
+
{
|
| 690 |
+
"korean": "이분은 의사가 아니에요.", "english": "This person is not a doctor.",
|
| 691 |
+
"annotations": [{"syllable": "의사", "marker": "가 아니에요", "ending_type": "V", "color": "#E8292A"}],
|
| 692 |
+
},
|
| 693 |
+
],
|
| 694 |
+
},
|
| 695 |
+
{
|
| 696 |
+
"index": 5, "type": "practice",
|
| 697 |
+
"title": "Choose the correct negative ending.",
|
| 698 |
+
"items": [
|
| 699 |
+
{"korean": "물", "choices": ["이 아니에요", "가 아니에요"], "answer": "이 아니에요", "hint": "물 ends in ㄹ (consonant) → 이 아니에요"},
|
| 700 |
+
{"korean": "의사", "choices": ["이 아니에요", "가 아니에요"], "answer": "가 아니에요", "hint": "의사 ends in vowel → 가 아니에요"},
|
| 701 |
+
],
|
| 702 |
+
},
|
| 703 |
+
],
|
| 704 |
},
|
| 705 |
"example_sentences": [
|
| 706 |
{
|
| 707 |
"positive": {"korean": "이것은 물이에요.", "english": "This is water."},
|
| 708 |
"negative": {"korean": "이것은 물이 아니에요.", "english": "This is not water."},
|
| 709 |
"focus_word": "물이 아니에요",
|
| 710 |
+
"rule_shown": "물 (consonant ending ㄹ) → 이 아니에요",
|
| 711 |
},
|
| 712 |
{
|
| 713 |
"positive": {"korean": "저는 학생이에요.", "english": "I am a student."},
|
|
|
|
| 740 |
),
|
| 741 |
"pattern": "V-stem + 는다고/ㄴ다고 | Adj + 다고 | V(past) + 었/았다고",
|
| 742 |
"notes": "했어요 (said) or 해요 (says) follows 다고 in most sentences.",
|
| 743 |
+
"slides": [
|
| 744 |
+
{
|
| 745 |
+
"index": 0, "type": "intro",
|
| 746 |
+
"title": "Indirect Quotation — Statements",
|
| 747 |
+
"formula": "[Speaker]이/가 [sentence]다고 했어요.",
|
| 748 |
+
"formula_colors": {},
|
| 749 |
+
"sub_formula": "'...' → ...다고 했어요",
|
| 750 |
+
"sub_formula_colors": {},
|
| 751 |
+
},
|
| 752 |
+
{
|
| 753 |
+
"index": 1, "type": "body",
|
| 754 |
+
"title": "Reporting What Someone Said",
|
| 755 |
+
"text": (
|
| 756 |
+
"Use 다고 했어요 to report statements someone made. "
|
| 757 |
+
"The direct speech quote is transformed: drop 요 from polite endings "
|
| 758 |
+
"and attach 다고. Action verbs use 는다고, adjectives use 다고 directly, "
|
| 759 |
+
"past tense uses 었/았다고."
|
| 760 |
+
),
|
| 761 |
+
"highlight": "report statements",
|
| 762 |
+
"highlight_color": "#E8292A",
|
| 763 |
+
},
|
| 764 |
+
{
|
| 765 |
+
"index": 2, "type": "diagram",
|
| 766 |
+
"title": "Structure of 다고",
|
| 767 |
+
"formula": "[Speaker] [sentence-stem]다고 했어요.",
|
| 768 |
+
"formula_colors": {},
|
| 769 |
+
"formula_parts": [
|
| 770 |
+
{"label": "Speaker + 이/가", "color": "#F5A623", "points_to": "Speaker"},
|
| 771 |
+
{"label": "verb/adj stem", "color": "#E8824A", "points_to": "sentence-stem"},
|
| 772 |
+
{"label": "quotation marker","color": "#333333", "points_to": "다고"},
|
| 773 |
+
{"label": "said", "color": "#333333", "points_to": "했어요"},
|
| 774 |
+
],
|
| 775 |
+
},
|
| 776 |
+
{
|
| 777 |
+
"index": 3, "type": "rules",
|
| 778 |
+
"title": "다고 Conjugation Rules",
|
| 779 |
+
"sections": [
|
| 780 |
+
{
|
| 781 |
+
"label": "Action verb (present)",
|
| 782 |
+
"rules": ["V-stem (consonant) + 는다고", "V-stem (vowel/ㄹ) + ㄴ다고"],
|
| 783 |
+
},
|
| 784 |
+
{
|
| 785 |
+
"label": "Adjective / 이다",
|
| 786 |
+
"rules": ["Adj-stem + 다고", "N + 이다 → 이라고"],
|
| 787 |
+
},
|
| 788 |
+
{
|
| 789 |
+
"label": "Past tense",
|
| 790 |
+
"rules": ["V/Adj past stem + 었/았다고"],
|
| 791 |
+
},
|
| 792 |
+
],
|
| 793 |
+
},
|
| 794 |
+
{
|
| 795 |
+
"index": 4, "type": "examples",
|
| 796 |
+
"title": "다고 Examples",
|
| 797 |
+
"items": [
|
| 798 |
+
{
|
| 799 |
+
"korean": "민수는 등록금이 너무 비싸다고 했어요.",
|
| 800 |
+
"english": "Minsu said that the tuition is too expensive.",
|
| 801 |
+
"annotations": [{"syllable": "비싸다", "marker": "다고", "ending_type": "Adj", "color": "#4CAF50"}],
|
| 802 |
+
},
|
| 803 |
+
{
|
| 804 |
+
"korean": "친구가 공부한다고 했어요.",
|
| 805 |
+
"english": "My friend said that they study.",
|
| 806 |
+
"annotations": [{"syllable": "공부하", "marker": "ㄴ다고", "ending_type": "V(vowel)", "color": "#4CAF50"}],
|
| 807 |
+
},
|
| 808 |
+
],
|
| 809 |
+
},
|
| 810 |
+
{
|
| 811 |
+
"index": 5, "type": "practice",
|
| 812 |
+
"title": "Choose the correct 다고 form.",
|
| 813 |
+
"items": [
|
| 814 |
+
{"korean": "비싸요 → 비싸___", "choices": ["다고", "는다고", "았다고"], "answer": "다고", "hint": "비싸다 is an adjective → 다고"},
|
| 815 |
+
{"korean": "먹어요 → 먹___", "choices": ["다고", "는다고", "ㄴ다고"], "answer": "는다고", "hint": "먹다 is an action verb (consonant stem) → 는다고"},
|
| 816 |
+
],
|
| 817 |
+
},
|
| 818 |
+
],
|
| 819 |
},
|
| 820 |
"example_sentences": [
|
| 821 |
{
|
|
|
|
| 843 |
"title": "Indirect Quotation — Commands",
|
| 844 |
"body": (
|
| 845 |
"(으)라고 is used to report commands or requests. "
|
| 846 |
+
"지 말라고 is used to report negative commands. "
|
| 847 |
+
"달라고 reports requests (please give/do for me)."
|
| 848 |
),
|
| 849 |
"pattern": "V-stem + (으)라고 | V + 지 말라고 | 달라고 / 주라고",
|
| 850 |
"notes": "The subject marker after the speaker is 이/가.",
|
| 851 |
+
"slides": [
|
| 852 |
+
{
|
| 853 |
+
"index": 0, "type": "intro",
|
| 854 |
+
"title": "Indirect Quotation — Commands",
|
| 855 |
+
"formula": "[Speaker]이/가 [V](으)라고 했어요.",
|
| 856 |
+
"formula_colors": {},
|
| 857 |
+
"sub_formula": "'Do X!' → X(으)라고 했어요",
|
| 858 |
+
"sub_formula_colors": {},
|
| 859 |
+
},
|
| 860 |
+
{
|
| 861 |
+
"index": 1, "type": "body",
|
| 862 |
+
"title": "Reporting Commands",
|
| 863 |
+
"text": (
|
| 864 |
+
"Use (으)라고 했어요 to report commands. "
|
| 865 |
+
"If the command was negative ('Don't do X'), use 지 말라고 했어요. "
|
| 866 |
+
"If reporting a request ('Please give me X'), use 달라고 했어요."
|
| 867 |
+
),
|
| 868 |
+
"highlight": "commands and requests",
|
| 869 |
+
"highlight_color": "#E8292A",
|
| 870 |
+
},
|
| 871 |
+
{
|
| 872 |
+
"index": 2, "type": "diagram",
|
| 873 |
+
"title": "(으)라고 Structure",
|
| 874 |
+
"formula": "[Speaker]이/가 [V](으)라고 했어요.",
|
| 875 |
+
"formula_colors": {},
|
| 876 |
+
"formula_parts": [
|
| 877 |
+
{"label": "Speaker + 이/가", "color": "#F5A623", "points_to": "Speaker"},
|
| 878 |
+
{"label": "verb stem", "color": "#E8824A", "points_to": "V"},
|
| 879 |
+
{"label": "command marker", "color": "#333333", "points_to": "(으)라고"},
|
| 880 |
+
{"label": "said/told", "color": "#333333", "points_to": "했어요"},
|
| 881 |
+
],
|
| 882 |
+
},
|
| 883 |
+
{
|
| 884 |
+
"index": 3, "type": "rules",
|
| 885 |
+
"title": "(으)라고 Conjugation Rules",
|
| 886 |
+
"sections": [
|
| 887 |
+
{
|
| 888 |
+
"label": "Positive command",
|
| 889 |
+
"rules": ["V-stem (vowel) + 라고", "V-stem (consonant) + 으라고"],
|
| 890 |
+
},
|
| 891 |
+
{
|
| 892 |
+
"label": "Negative command",
|
| 893 |
+
"rules": ["V + 지 말라고"],
|
| 894 |
+
},
|
| 895 |
+
{
|
| 896 |
+
"label": "Request",
|
| 897 |
+
"rules": ["달라고 (give me)", "주라고 (do for me)"],
|
| 898 |
+
},
|
| 899 |
+
],
|
| 900 |
+
},
|
| 901 |
+
{
|
| 902 |
+
"index": 4, "type": "examples",
|
| 903 |
+
"title": "(으)라고 Examples",
|
| 904 |
+
"items": [
|
| 905 |
+
{
|
| 906 |
+
"korean": "선생님이 조용히 하라고 했어요.", "english": "The teacher told us to be quiet.",
|
| 907 |
+
"annotations": [{"syllable": "하", "marker": "라고", "ending_type": "V", "color": "#4CAF50"}],
|
| 908 |
+
},
|
| 909 |
+
{
|
| 910 |
+
"korean": "엄마가 뛰지 말라고 했어요.", "english": "Mom told us not to run.",
|
| 911 |
+
"annotations": [{"syllable": "뛰", "marker": "지 말라고", "ending_type": "Neg", "color": "#E8292A"}],
|
| 912 |
+
},
|
| 913 |
+
],
|
| 914 |
+
},
|
| 915 |
+
{
|
| 916 |
+
"index": 5, "type": "practice",
|
| 917 |
+
"title": "Choose the correct command form.",
|
| 918 |
+
"items": [
|
| 919 |
+
{"korean": "가다 (go) → positive command", "choices": ["가라고", "가지 말라고", "달라고"], "answer": "가라고", "hint": "가다: vowel stem → 라고"},
|
| 920 |
+
{"korean": "먹다 (eat) → negative command", "choices": ["먹으라고", "먹지 말라고", "달라고"], "answer": "먹지 말라고", "hint": "Negative command → 지 말라고"},
|
| 921 |
+
],
|
| 922 |
+
},
|
| 923 |
+
],
|
| 924 |
},
|
| 925 |
"example_sentences": [
|
| 926 |
{
|
|
|
|
| 949 |
"body": (
|
| 950 |
"냐고 is used to report questions. "
|
| 951 |
"Attach to verb/adjective stems. "
|
| 952 |
+
"If the stem ends in ㄹ, drop ㄹ before adding 냐고."
|
|
|
|
| 953 |
),
|
| 954 |
"pattern": "V/Adj-stem + 냐고 (drop ㄹ from ㄹ-irregular stems)",
|
| 955 |
"notes": "냐고 replaces the question ending 아요/어요/이에요.",
|
| 956 |
+
"slides": [
|
| 957 |
+
{
|
| 958 |
+
"index": 0, "type": "intro",
|
| 959 |
+
"title": "Indirect Quotation — Questions",
|
| 960 |
+
"formula": "[Speaker]이/가 [V/Adj]냐고 물었어요.",
|
| 961 |
+
"formula_colors": {},
|
| 962 |
+
"sub_formula": "'Is X?' → X냐고 물었어요",
|
| 963 |
+
"sub_formula_colors": {},
|
| 964 |
+
},
|
| 965 |
+
{
|
| 966 |
+
"index": 1, "type": "body",
|
| 967 |
+
"title": "Reporting Questions",
|
| 968 |
+
"text": (
|
| 969 |
+
"Use 냐고 물었어요 to report yes/no or wh-questions. "
|
| 970 |
+
"Drop the polite ending (아요/어요) and attach 냐고. "
|
| 971 |
+
"For ㄹ-stem verbs, drop ㄹ before adding 냐고. "
|
| 972 |
+
"물었어요 means 'asked'."
|
| 973 |
+
),
|
| 974 |
+
"highlight": "Drop ㄹ before 냐고",
|
| 975 |
+
"highlight_color": "#E8292A",
|
| 976 |
+
},
|
| 977 |
+
{
|
| 978 |
+
"index": 2, "type": "diagram",
|
| 979 |
+
"title": "냐고 Structure",
|
| 980 |
+
"formula": "[Speaker] [stem]냐고 물었어요.",
|
| 981 |
+
"formula_colors": {},
|
| 982 |
+
"formula_parts": [
|
| 983 |
+
{"label": "Speaker + 이/가", "color": "#F5A623", "points_to": "Speaker"},
|
| 984 |
+
{"label": "verb/adj stem", "color": "#E8824A", "points_to": "stem"},
|
| 985 |
+
{"label": "question marker", "color": "#333333", "points_to": "냐고"},
|
| 986 |
+
{"label": "asked", "color": "#333333", "points_to": "물었어요"},
|
| 987 |
+
],
|
| 988 |
+
},
|
| 989 |
+
{
|
| 990 |
+
"index": 3, "type": "rules",
|
| 991 |
+
"title": "냐고 Rules",
|
| 992 |
+
"sections": [
|
| 993 |
+
{
|
| 994 |
+
"label": "Standard",
|
| 995 |
+
"rules": ["V/Adj stem + 냐고", "쉬다 → 쉬냐고", "가다 → 가냐고"],
|
| 996 |
+
},
|
| 997 |
+
{
|
| 998 |
+
"label": "ㄹ-stem (drop ㄹ)",
|
| 999 |
+
"rules": ["알다 → 아냐고", "살다 → 사냐고"],
|
| 1000 |
+
},
|
| 1001 |
+
],
|
| 1002 |
+
},
|
| 1003 |
+
{
|
| 1004 |
+
"index": 4, "type": "examples",
|
| 1005 |
+
"title": "냐고 Examples",
|
| 1006 |
+
"items": [
|
| 1007 |
+
{
|
| 1008 |
+
"korean": "지혜는 지금 쉬냐고 물었어요.", "english": "Jihye asked if I am resting now.",
|
| 1009 |
+
"annotations": [{"syllable": "쉬", "marker": "냐고", "ending_type": "V", "color": "#4CAF50"}],
|
| 1010 |
+
},
|
| 1011 |
+
{
|
| 1012 |
+
"korean": "친구가 어디 가냐고 물었어요.", "english": "My friend asked where I was going.",
|
| 1013 |
+
"annotations": [{"syllable": "가", "marker": "냐고", "ending_type": "V", "color": "#4CAF50"}],
|
| 1014 |
+
},
|
| 1015 |
+
],
|
| 1016 |
+
},
|
| 1017 |
+
{
|
| 1018 |
+
"index": 5, "type": "practice",
|
| 1019 |
+
"title": "Choose the correct 냐고 form.",
|
| 1020 |
+
"items": [
|
| 1021 |
+
{"korean": "쉬다 → 쉬___", "choices": ["냐고", "으냐고", "았냐고"], "answer": "냐고", "hint": "쉬다 vowel stem → 쉬냐고"},
|
| 1022 |
+
{"korean": "알다 (ㄹ-stem) → ___냐고", "choices": ["알", "아", "알으"], "answer": "아", "hint": "ㄹ-stem: drop ㄹ → 아냐고"},
|
| 1023 |
+
],
|
| 1024 |
+
},
|
| 1025 |
+
],
|
| 1026 |
},
|
| 1027 |
"example_sentences": [
|
| 1028 |
{
|
|
|
|
| 1055 |
),
|
| 1056 |
"pattern": "V-stem + 자고 했어요/해요",
|
| 1057 |
"notes": "자 is the plain form suggestion ending. 자고 = quoting that suggestion.",
|
| 1058 |
+
"slides": [
|
| 1059 |
+
{
|
| 1060 |
+
"index": 0, "type": "intro",
|
| 1061 |
+
"title": "Indirect Quotation — Suggestions",
|
| 1062 |
+
"formula": "[Speaker]이/가 [V]자고 했어요.",
|
| 1063 |
+
"formula_colors": {},
|
| 1064 |
+
"sub_formula": "'Let's X!' → X자고 했어요",
|
| 1065 |
+
"sub_formula_colors": {},
|
| 1066 |
+
},
|
| 1067 |
+
{
|
| 1068 |
+
"index": 1, "type": "body",
|
| 1069 |
+
"title": "Reporting Suggestions",
|
| 1070 |
+
"text": (
|
| 1071 |
+
"자 is the plain-form suggestion ending meaning 'let's'. "
|
| 1072 |
+
"To report a suggestion in indirect speech, attach 자고 to the verb stem. "
|
| 1073 |
+
"자고 했어요 means 'suggested that we...'"
|
| 1074 |
+
),
|
| 1075 |
+
"highlight": "let's",
|
| 1076 |
+
"highlight_color": "#E8292A",
|
| 1077 |
+
},
|
| 1078 |
+
{
|
| 1079 |
+
"index": 2, "type": "diagram",
|
| 1080 |
+
"title": "자고 Structure",
|
| 1081 |
+
"formula": "[Speaker] [V-stem]자고 했어요.",
|
| 1082 |
+
"formula_colors": {},
|
| 1083 |
+
"formula_parts": [
|
| 1084 |
+
{"label": "Speaker + 이/가", "color": "#F5A623", "points_to": "Speaker"},
|
| 1085 |
+
{"label": "verb stem", "color": "#E8824A", "points_to": "V-stem"},
|
| 1086 |
+
{"label": "suggestion marker","color": "#333333", "points_to": "자고"},
|
| 1087 |
+
{"label": "said/suggested", "color": "#333333", "points_to": "했어요"},
|
| 1088 |
+
],
|
| 1089 |
+
},
|
| 1090 |
+
{
|
| 1091 |
+
"index": 3, "type": "rules",
|
| 1092 |
+
"title": "자고 Rule",
|
| 1093 |
+
"sections": [
|
| 1094 |
+
{
|
| 1095 |
+
"label": "Suggestion (all verbs)",
|
| 1096 |
+
"rules": ["V-stem + 자고 했어요", "가다 → 가자고 했어요", "먹다 → 먹자고 했어요"],
|
| 1097 |
+
},
|
| 1098 |
+
],
|
| 1099 |
+
},
|
| 1100 |
+
{
|
| 1101 |
+
"index": 4, "type": "examples",
|
| 1102 |
+
"title": "자고 Examples",
|
| 1103 |
+
"items": [
|
| 1104 |
+
{
|
| 1105 |
+
"korean": "친구가 같이 밥 먹자고 했어요.", "english": "My friend suggested eating together.",
|
| 1106 |
+
"annotations": [{"syllable": "먹", "marker": "자고", "ending_type": "V", "color": "#4CAF50"}],
|
| 1107 |
+
},
|
| 1108 |
+
{
|
| 1109 |
+
"korean": "예나는 일찍 집에 가자고 했어요.", "english": "Yena suggested going home early.",
|
| 1110 |
+
"annotations": [{"syllable": "가", "marker": "자고", "ending_type": "V", "color": "#4CAF50"}],
|
| 1111 |
+
},
|
| 1112 |
+
],
|
| 1113 |
+
},
|
| 1114 |
+
{
|
| 1115 |
+
"index": 5, "type": "practice",
|
| 1116 |
+
"title": "Choose the correct 자고 form.",
|
| 1117 |
+
"items": [
|
| 1118 |
+
{"korean": "가다 → 가___", "choices": ["자고", "라고", "냐고"], "answer": "자고", "hint": "Suggestion → V-stem + 자고"},
|
| 1119 |
+
{"korean": "공부하다 → 공부하___", "choices": ["자고", "라고", "다고"], "answer": "자고", "hint": "Suggestion → V-stem + 자고"},
|
| 1120 |
+
],
|
| 1121 |
+
},
|
| 1122 |
+
],
|
| 1123 |
},
|
| 1124 |
"example_sentences": [
|
| 1125 |
{
|
|
|
|
| 1152 |
),
|
| 1153 |
"pattern": "V-stem + (으)ㄹ 걸 그랬다 | V + 지 말 걸 그랬다",
|
| 1154 |
"notes": "그랬다 can be softened to 그랬어 in casual speech.",
|
| 1155 |
+
"slides": [
|
| 1156 |
+
{
|
| 1157 |
+
"index": 0, "type": "intro",
|
| 1158 |
+
"title": "Expressing Regret",
|
| 1159 |
+
"formula": "V + (으)ㄹ 걸 그랬다",
|
| 1160 |
+
"formula_colors": {},
|
| 1161 |
+
"sub_formula": "I should have done X / I shouldn't have done X",
|
| 1162 |
+
"sub_formula_colors": {},
|
| 1163 |
+
},
|
| 1164 |
+
{
|
| 1165 |
+
"index": 1, "type": "body",
|
| 1166 |
+
"title": "(으)ㄹ 걸 그랬다 — Regret",
|
| 1167 |
+
"text": (
|
| 1168 |
+
"(으)ㄹ 걸 그랬다 expresses regret that you did NOT do something. "
|
| 1169 |
+
"It means 'I should have done X'. "
|
| 1170 |
+
"지 말 걸 그랬다 expresses regret that you DID something — 'I shouldn't have done X'. "
|
| 1171 |
+
"Both refer to completed past situations."
|
| 1172 |
+
),
|
| 1173 |
+
"highlight": "completed past regret",
|
| 1174 |
+
"highlight_color": "#E8292A",
|
| 1175 |
+
},
|
| 1176 |
+
{
|
| 1177 |
+
"index": 2, "type": "diagram",
|
| 1178 |
+
"title": "(으)ㄹ 걸 그랬다 Structure",
|
| 1179 |
+
"formula": "V-stem + (으)ㄹ 걸 그랬다.",
|
| 1180 |
+
"formula_colors": {},
|
| 1181 |
+
"formula_parts": [
|
| 1182 |
+
{"label": "verb stem", "color": "#F5A623", "points_to": "V-stem"},
|
| 1183 |
+
{"label": "future modifier", "color": "#E8824A", "points_to": "(으)ㄹ"},
|
| 1184 |
+
{"label": "regret particle", "color": "#333333", "points_to": "걸"},
|
| 1185 |
+
{"label": "was so / did so","color": "#333333", "points_to": "그랬다"},
|
| 1186 |
+
],
|
| 1187 |
+
},
|
| 1188 |
+
{
|
| 1189 |
+
"index": 3, "type": "rules",
|
| 1190 |
+
"title": "(으)ㄹ 걸 그랬다 Rules",
|
| 1191 |
+
"sections": [
|
| 1192 |
+
{
|
| 1193 |
+
"label": "Should have (positive regret)",
|
| 1194 |
+
"rules": [
|
| 1195 |
+
"V-stem (consonant) + 을 걸 그랬다",
|
| 1196 |
+
"V-stem (vowel/ㄹ) + ㄹ 걸 그랬다",
|
| 1197 |
+
],
|
| 1198 |
+
},
|
| 1199 |
+
{
|
| 1200 |
+
"label": "Shouldn't have (negative regret)",
|
| 1201 |
+
"rules": ["V + 지 말 걸 그랬다"],
|
| 1202 |
+
},
|
| 1203 |
+
],
|
| 1204 |
+
},
|
| 1205 |
+
{
|
| 1206 |
+
"index": 4, "type": "examples",
|
| 1207 |
+
"title": "(으)ㄹ 걸 그랬다 Examples",
|
| 1208 |
+
"items": [
|
| 1209 |
+
{
|
| 1210 |
+
"korean": "수업에 갈 걸 그랬어요.", "english": "I should have gone to class.",
|
| 1211 |
+
"annotations": [{"syllable": "가", "marker": "ㄹ 걸 그랬어요", "ending_type": "V(vowel)", "color": "#4CAF50"}],
|
| 1212 |
+
},
|
| 1213 |
+
{
|
| 1214 |
+
"korean": "그 음식을 먹지 말 걸 그랬어요.", "english": "I shouldn't have eaten that food.",
|
| 1215 |
+
"annotations": [{"syllable": "먹", "marker": "지 말 걸 그랬어요", "ending_type": "Neg", "color": "#E8292A"}],
|
| 1216 |
+
},
|
| 1217 |
+
],
|
| 1218 |
+
},
|
| 1219 |
+
{
|
| 1220 |
+
"index": 5, "type": "practice",
|
| 1221 |
+
"title": "Choose the correct regret form.",
|
| 1222 |
+
"items": [
|
| 1223 |
+
{"korean": "자다 (sleep) → should have slept", "choices": ["잘 걸 그랬다", "자지 말 걸 그랬다", "잘 거예요"], "answer": "잘 걸 그랬다", "hint": "자다 vowel stem: ㄹ 걸 그랬다 → 잘 걸 그랬다"},
|
| 1224 |
+
{"korean": "먹다 (eat) → shouldn't have eaten", "choices": ["먹을 걸 그랬다", "먹지 말 걸 그랬다", "먹을 거예요"], "answer": "먹지 말 걸 그랬다", "hint": "Negative regret → 지 말 걸 그랬다"},
|
| 1225 |
+
],
|
| 1226 |
+
},
|
| 1227 |
+
],
|
| 1228 |
},
|
| 1229 |
"example_sentences": [
|
| 1230 |
{
|
| 1231 |
"positive": {"korean": "수업에 갔어요.", "english": "I went to class."},
|
| 1232 |
"negative": {"korean": "수업에 갈 걸 그랬어요.", "english": "I should have gone to class."},
|
| 1233 |
"focus_word": "갈 걸 그랬어요",
|
| 1234 |
+
"rule_shown": "가다 → 가 + ㄹ 걸 그랐어요",
|
| 1235 |
},
|
| 1236 |
{
|
| 1237 |
"positive": {"korean": "그 음식을 먹었어요.", "english": "I ate that food."},
|
|
|
|
| 1249 |
}
|
| 1250 |
|
| 1251 |
|
|
|
|
|
|
|
|
|
|
| 1252 |
|
| 1253 |
|
| 1254 |
def get_explanation(grammar_rule: str) -> dict:
|
| 1255 |
+
"""
|
| 1256 |
+
Return lesson explanation data for a grammar rule.
|
| 1257 |
+
|
| 1258 |
+
Backwards compatible: all original flat fields (title, body, pattern,
|
| 1259 |
+
notes, difficulty, lesson) are preserved.
|
| 1260 |
+
|
| 1261 |
+
New field: slides[] — array of 6 structured slide objects for the
|
| 1262 |
+
multi-slide lesson breakdown per team lead spec.
|
| 1263 |
+
|
| 1264 |
+
Slide types:
|
| 1265 |
+
intro — formula + sub_formula display
|
| 1266 |
+
body — explanation paragraph with optional highlight
|
| 1267 |
+
diagram — labelled formula parts with arrows
|
| 1268 |
+
rules — conjugation rule box (sections with label + rules[])
|
| 1269 |
+
examples — annotated example sentences
|
| 1270 |
+
practice — choose-the-correct-ending MCQ
|
| 1271 |
+
"""
|
| 1272 |
+
lc = LESSON_CONTENT.get(grammar_rule, {})
|
| 1273 |
+
rule = GRAMMAR_RULES.get(grammar_rule, {})
|
| 1274 |
+
expl = lc.get("explanation", {})
|
| 1275 |
return {
|
| 1276 |
+
# ── Original fields (unchanged) ──────────────────────────────────
|
| 1277 |
"grammar_rule": grammar_rule,
|
| 1278 |
"title": expl.get("title", rule.get("name", grammar_rule)),
|
| 1279 |
+
"body": expl.get("body", rule.get("description", "")),
|
| 1280 |
"pattern": expl.get("pattern", ""),
|
| 1281 |
"notes": expl.get("notes", ""),
|
| 1282 |
"difficulty": rule.get("difficulty", 1),
|
| 1283 |
"lesson": rule.get("lesson", ""),
|
| 1284 |
+
# ── New field ────────────────────────────────────────────────────
|
| 1285 |
+
# slides: list of 6 dicts, each with "index" (0-5) and "type".
|
| 1286 |
+
# Unity should step through slides[0] → slides[5] in sequence.
|
| 1287 |
+
# If slides is empty, fall back to displaying title + body + pattern.
|
| 1288 |
+
"slides": expl.get("slides", []),
|
| 1289 |
+
"slide_count": len(expl.get("slides", [])),
|
| 1290 |
}
|
| 1291 |
|
| 1292 |
|