@syllst/th 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/index.d.ts +45 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +68 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/syllabi/alphabet/index.d.ts +10 -0
  6. package/dist/syllabi/alphabet/index.d.ts.map +1 -0
  7. package/dist/syllabi/alphabet/index.js +38 -0
  8. package/dist/syllabi/alphabet/index.js.map +1 -0
  9. package/dist/syllabi/dialogue/index.d.ts +10 -0
  10. package/dist/syllabi/dialogue/index.d.ts.map +1 -0
  11. package/dist/syllabi/dialogue/index.js +34 -0
  12. package/dist/syllabi/dialogue/index.js.map +1 -0
  13. package/dist/syllabi/essentials/index.d.ts +10 -0
  14. package/dist/syllabi/essentials/index.d.ts.map +1 -0
  15. package/dist/syllabi/essentials/index.js +32 -0
  16. package/dist/syllabi/essentials/index.js.map +1 -0
  17. package/dist/syllabi/food/index.d.ts +10 -0
  18. package/dist/syllabi/food/index.d.ts.map +1 -0
  19. package/dist/syllabi/food/index.js +34 -0
  20. package/dist/syllabi/food/index.js.map +1 -0
  21. package/dist/syllabi/grammar/index.d.ts +10 -0
  22. package/dist/syllabi/grammar/index.d.ts.map +1 -0
  23. package/dist/syllabi/grammar/index.js +34 -0
  24. package/dist/syllabi/grammar/index.js.map +1 -0
  25. package/dist/syllabi/numbers/index.d.ts +10 -0
  26. package/dist/syllabi/numbers/index.d.ts.map +1 -0
  27. package/dist/syllabi/numbers/index.js +31 -0
  28. package/dist/syllabi/numbers/index.js.map +1 -0
  29. package/dist/syllabi/reading/index.d.ts +10 -0
  30. package/dist/syllabi/reading/index.d.ts.map +1 -0
  31. package/dist/syllabi/reading/index.js +36 -0
  32. package/dist/syllabi/reading/index.js.map +1 -0
  33. package/dist/syllabi/travel/index.d.ts +10 -0
  34. package/dist/syllabi/travel/index.d.ts.map +1 -0
  35. package/dist/syllabi/travel/index.js +33 -0
  36. package/dist/syllabi/travel/index.js.map +1 -0
  37. package/dist/syllabi/vowels-tones/index.d.ts +10 -0
  38. package/dist/syllabi/vowels-tones/index.d.ts.map +1 -0
  39. package/dist/syllabi/vowels-tones/index.js +34 -0
  40. package/dist/syllabi/vowels-tones/index.js.map +1 -0
  41. package/package.json +85 -0
  42. package/src/syllabi/alphabet/lessons/lesson-01.mdx +142 -0
  43. package/src/syllabi/alphabet/lessons/lesson-02.mdx +186 -0
  44. package/src/syllabi/alphabet/lessons/lesson-03.mdx +140 -0
  45. package/src/syllabi/alphabet/lessons/lesson-04.mdx +202 -0
  46. package/src/syllabi/alphabet/lessons/lesson-05.mdx +186 -0
  47. package/src/syllabi/alphabet/lessons/lesson-06.mdx +217 -0
  48. package/src/syllabi/alphabet/lessons/lesson-07.mdx +219 -0
  49. package/src/syllabi/alphabet/lessons/lesson-08.mdx +210 -0
  50. package/src/syllabi/alphabet/lessons/lesson-09.mdx +204 -0
  51. package/src/syllabi/alphabet/lessons/lesson-10.mdx +216 -0
  52. package/src/syllabi/alphabet/lessons/lesson-11.mdx +243 -0
  53. package/src/syllabi/alphabet/lessons/lesson-12.mdx +260 -0
  54. package/src/syllabi/alphabet/meta.mdx +106 -0
  55. package/src/syllabi/dialogue/lessons/lesson-01.mdx +98 -0
  56. package/src/syllabi/dialogue/lessons/lesson-02.mdx +107 -0
  57. package/src/syllabi/dialogue/lessons/lesson-03.mdx +111 -0
  58. package/src/syllabi/dialogue/lessons/lesson-04.mdx +159 -0
  59. package/src/syllabi/dialogue/lessons/lesson-05.mdx +176 -0
  60. package/src/syllabi/dialogue/lessons/lesson-06.mdx +159 -0
  61. package/src/syllabi/dialogue/lessons/lesson-07.mdx +184 -0
  62. package/src/syllabi/dialogue/lessons/lesson-08.mdx +192 -0
  63. package/src/syllabi/dialogue/meta.mdx +58 -0
  64. package/src/syllabi/essentials/lessons/lesson-01.mdx +125 -0
  65. package/src/syllabi/essentials/lessons/lesson-02.mdx +191 -0
  66. package/src/syllabi/essentials/lessons/lesson-03.mdx +212 -0
  67. package/src/syllabi/essentials/lessons/lesson-04.mdx +220 -0
  68. package/src/syllabi/essentials/lessons/lesson-05.mdx +231 -0
  69. package/src/syllabi/essentials/lessons/lesson-06.mdx +260 -0
  70. package/src/syllabi/essentials/meta.mdx +99 -0
  71. package/src/syllabi/food/lessons/lesson-01.mdx +140 -0
  72. package/src/syllabi/food/lessons/lesson-02.mdx +209 -0
  73. package/src/syllabi/food/lessons/lesson-03.mdx +224 -0
  74. package/src/syllabi/food/lessons/lesson-04.mdx +217 -0
  75. package/src/syllabi/food/lessons/lesson-05.mdx +231 -0
  76. package/src/syllabi/food/lessons/lesson-06.mdx +225 -0
  77. package/src/syllabi/food/lessons/lesson-07.mdx +235 -0
  78. package/src/syllabi/food/lessons/lesson-08.mdx +274 -0
  79. package/src/syllabi/food/meta.mdx +102 -0
  80. package/src/syllabi/grammar/lessons/lesson-01.mdx +86 -0
  81. package/src/syllabi/grammar/lessons/lesson-02.mdx +105 -0
  82. package/src/syllabi/grammar/lessons/lesson-03.mdx +170 -0
  83. package/src/syllabi/grammar/lessons/lesson-04.mdx +179 -0
  84. package/src/syllabi/grammar/lessons/lesson-05.mdx +170 -0
  85. package/src/syllabi/grammar/lessons/lesson-06.mdx +191 -0
  86. package/src/syllabi/grammar/lessons/lesson-07.mdx +195 -0
  87. package/src/syllabi/grammar/lessons/lesson-08.mdx +209 -0
  88. package/src/syllabi/grammar/meta.mdx +57 -0
  89. package/src/syllabi/numbers/lessons/lesson-01.mdx +115 -0
  90. package/src/syllabi/numbers/lessons/lesson-02.mdx +186 -0
  91. package/src/syllabi/numbers/lessons/lesson-03.mdx +179 -0
  92. package/src/syllabi/numbers/lessons/lesson-04.mdx +201 -0
  93. package/src/syllabi/numbers/lessons/lesson-05.mdx +203 -0
  94. package/src/syllabi/numbers/meta.mdx +93 -0
  95. package/src/syllabi/reading/lessons/lesson-01.mdx +125 -0
  96. package/src/syllabi/reading/lessons/lesson-02.mdx +134 -0
  97. package/src/syllabi/reading/lessons/lesson-03.mdx +127 -0
  98. package/src/syllabi/reading/lessons/lesson-04.mdx +130 -0
  99. package/src/syllabi/reading/lessons/lesson-05.mdx +132 -0
  100. package/src/syllabi/reading/lessons/lesson-06.mdx +130 -0
  101. package/src/syllabi/reading/lessons/lesson-07.mdx +131 -0
  102. package/src/syllabi/reading/lessons/lesson-08.mdx +135 -0
  103. package/src/syllabi/reading/lessons/lesson-09.mdx +132 -0
  104. package/src/syllabi/reading/lessons/lesson-10.mdx +145 -0
  105. package/src/syllabi/reading/meta.mdx +46 -0
  106. package/src/syllabi/travel/lessons/lesson-01.mdx +142 -0
  107. package/src/syllabi/travel/lessons/lesson-02.mdx +156 -0
  108. package/src/syllabi/travel/lessons/lesson-03.mdx +158 -0
  109. package/src/syllabi/travel/lessons/lesson-04.mdx +165 -0
  110. package/src/syllabi/travel/lessons/lesson-05.mdx +167 -0
  111. package/src/syllabi/travel/lessons/lesson-06.mdx +177 -0
  112. package/src/syllabi/travel/lessons/lesson-07.mdx +181 -0
  113. package/src/syllabi/travel/meta.mdx +58 -0
  114. package/src/syllabi/vowels-tones/lessons/lesson-01.mdx +101 -0
  115. package/src/syllabi/vowels-tones/lessons/lesson-02.mdx +163 -0
  116. package/src/syllabi/vowels-tones/lessons/lesson-03.mdx +168 -0
  117. package/src/syllabi/vowels-tones/lessons/lesson-04.mdx +170 -0
  118. package/src/syllabi/vowels-tones/lessons/lesson-05.mdx +189 -0
  119. package/src/syllabi/vowels-tones/lessons/lesson-06.mdx +187 -0
  120. package/src/syllabi/vowels-tones/lessons/lesson-07.mdx +217 -0
  121. package/src/syllabi/vowels-tones/lessons/lesson-08.mdx +260 -0
  122. package/src/syllabi/vowels-tones/meta.mdx +89 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Thai Vowels & Tones syllabus
3
+ */
4
+ import { createContentLoader } from '@syllst/content-shared';
5
+ export const config = {
6
+ id: 'th-vowels-tones',
7
+ title: 'สระและวรรณยุกต์ (Vowels & Tones)',
8
+ description: 'Master Thai vowels and the five tones',
9
+ language: 'th',
10
+ locale: 'th-TH',
11
+ lessonCount: 8,
12
+ difficulty: 'beginner',
13
+ cefrLevel: 'A1',
14
+ icon: 'alphabet',
15
+ version: '0.1.0',
16
+ };
17
+ async function loadLessonMDX(lessonNumber) {
18
+ switch (lessonNumber) {
19
+ case 1: return import('./lessons/lesson-01.mdx?raw');
20
+ case 2: return import('./lessons/lesson-02.mdx?raw');
21
+ case 3: return import('./lessons/lesson-03.mdx?raw');
22
+ case 4: return import('./lessons/lesson-04.mdx?raw');
23
+ case 5: return import('./lessons/lesson-05.mdx?raw');
24
+ case 6: return import('./lessons/lesson-06.mdx?raw');
25
+ case 7: return import('./lessons/lesson-07.mdx?raw');
26
+ case 8: return import('./lessons/lesson-08.mdx?raw');
27
+ default: throw new Error(`Lesson ${lessonNumber} not found`);
28
+ }
29
+ }
30
+ export const loader = createContentLoader(config, loadLessonMDX);
31
+ export const loadLesson = loader.loadLesson.bind(loader);
32
+ export const loadAllLessons = loader.loadAllLessons.bind(loader);
33
+ export const getAvailableLessons = loader.getAvailableLessons.bind(loader);
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/syllabi/vowels-tones/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAA2C,MAAM,wBAAwB,CAAC;AAEtG,MAAM,CAAC,MAAM,MAAM,GAAmB;IACpC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,kCAAkC;IACzC,WAAW,EAAE,uCAAuC;IACpD,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,UAAU;IACtB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,KAAK,UAAU,aAAa,CAAC,YAAoB;IAC/C,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,YAAY,YAAY,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAkB,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@syllst/th",
3
+ "version": "0.1.0",
4
+ "description": "Thai SYLLST content - all Thai language syllabi in one package",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./alphabet": {
14
+ "types": "./dist/syllabi/alphabet/index.d.ts",
15
+ "import": "./dist/syllabi/alphabet/index.js"
16
+ },
17
+ "./vowels-tones": {
18
+ "types": "./dist/syllabi/vowels-tones/index.d.ts",
19
+ "import": "./dist/syllabi/vowels-tones/index.js"
20
+ },
21
+ "./numbers": {
22
+ "types": "./dist/syllabi/numbers/index.d.ts",
23
+ "import": "./dist/syllabi/numbers/index.js"
24
+ },
25
+ "./essentials": {
26
+ "types": "./dist/syllabi/essentials/index.d.ts",
27
+ "import": "./dist/syllabi/essentials/index.js"
28
+ },
29
+ "./food": {
30
+ "types": "./dist/syllabi/food/index.d.ts",
31
+ "import": "./dist/syllabi/food/index.js"
32
+ },
33
+ "./travel": {
34
+ "types": "./dist/syllabi/travel/index.d.ts",
35
+ "import": "./dist/syllabi/travel/index.js"
36
+ },
37
+ "./dialogue": {
38
+ "types": "./dist/syllabi/dialogue/index.d.ts",
39
+ "import": "./dist/syllabi/dialogue/index.js"
40
+ },
41
+ "./grammar": {
42
+ "types": "./dist/syllabi/grammar/index.d.ts",
43
+ "import": "./dist/syllabi/grammar/index.js"
44
+ },
45
+ "./reading": {
46
+ "types": "./dist/syllabi/reading/index.d.ts",
47
+ "import": "./dist/syllabi/reading/index.js"
48
+ }
49
+ },
50
+ "files": [
51
+ "dist",
52
+ "src/syllabi/**/*.mdx"
53
+ ],
54
+ "scripts": {
55
+ "build": "tsc",
56
+ "clean": "rm -rf dist",
57
+ "lint": "eslint src",
58
+ "test": "vitest run"
59
+ },
60
+ "dependencies": {
61
+ "@syllst/content-shared": "workspace:*"
62
+ },
63
+ "peerDependencies": {
64
+ "@syllst/core": "catalog:",
65
+ "@syllst/processor": "catalog:"
66
+ },
67
+ "publishConfig": {
68
+ "access": "public"
69
+ },
70
+ "keywords": [
71
+ "thai",
72
+ "language-learning",
73
+ "syllst",
74
+ "mdx",
75
+ "alphabet",
76
+ "vocabulary",
77
+ "grammar"
78
+ ],
79
+ "license": "MIT",
80
+ "repository": {
81
+ "type": "git",
82
+ "url": "https://github.com/fustilio/syllst-bundles",
83
+ "directory": "languages/th/th"
84
+ }
85
+ }
@@ -0,0 +1,142 @@
1
+ ---
2
+ type: lesson
3
+ id: thai-script-lesson-01
4
+ title: "บทที่ 1 — พยัญชนะกลาง I"
5
+ description: "Middle-Class Consonants Part 1: ก จ ด ต ป บ — The foundation of Thai tones"
6
+ order: 1
7
+ parentId: thai-script-alphabet
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - consonants
12
+ - middle-class
13
+ - basic-characters
14
+ metadata:
15
+ estimatedTime: 25
16
+ prerequisites: []
17
+ objectives:
18
+ - "Recognize the first 6 middle-class consonants"
19
+ - "Understand why consonant class matters for tones"
20
+ - "Learn the mnemonic words for each consonant"
21
+ - "Practice initial and final sounds"
22
+ ---
23
+
24
+ # บทที่ 1 (Lesson 1) — Middle-Class Consonants I
25
+
26
+ ## Introduction
27
+
28
+ Welcome to Thai script! In this first lesson, you'll learn 6 of the 9 **middle-class consonants** (พยัญชนะกลาง). We start here because middle-class consonants are the foundation of the Thai tone system.
29
+
30
+ ## Why Middle-Class First?
31
+
32
+ Thai has **5 tones** (mid, low, falling, high, rising), and determining the correct tone requires knowing the consonant's class. Middle-class consonants:
33
+
34
+ - Are the **simplest for tone rules** — they produce all 5 tones directly with tone marks
35
+ - Include the **most common consonants** in everyday Thai
36
+ - Provide the **baseline** for understanding how high and low classes differ
37
+
38
+ Think of middle class as "neutral" — the other classes modify from this baseline.
39
+
40
+ ## Characters
41
+
42
+ :::character-set{id="thai-middle-consonants-1" title="Middle-Class Consonants I"}
43
+
44
+ ::character{id="th-chicken" char="ก" name="ก ไก่ (gɔɔ gài)" nativeName="ก ไก่" transliteration="g/k" charType="consonant"}
45
+
46
+ ::character{id="th-plate" char="จ" name="จ จาน (jɔɔ jaan)" nativeName="จ จาน" transliteration="j/t" charType="consonant"}
47
+
48
+ ::character{id="th-child" char="ด" name="ด เด็ก (dɔɔ dèk)" nativeName="ด เด็ก" transliteration="d/t" charType="consonant"}
49
+
50
+ ::character{id="th-turtle" char="ต" name="ต เต่า (dtɔɔ dtào)" nativeName="ต เต่า" transliteration="dt/t" charType="consonant"}
51
+
52
+ ::character{id="th-fish" char="ป" name="ป ปลา (bpɔɔ bplaa)" nativeName="ป ปลา" transliteration="bp/p" charType="consonant"}
53
+
54
+ ::character{id="th-leaf" char="บ" name="บ ใบไม้ (bɔɔ baimáai)" nativeName="บ ใบไม้" transliteration="b/p" charType="consonant"}
55
+
56
+ :::
57
+
58
+ ## Sound Changes: Initial vs Final Position
59
+
60
+ One of Thai's unique features is that consonants often sound **different** at the beginning versus end of a syllable:
61
+
62
+ | Consonant | Initial Sound | Final Sound | Example |
63
+ |-----------|---------------|-------------|---------|
64
+ | ก | **g** (as in "go") | **k** (unreleased) | กา (gaa) vs อัก (àk) |
65
+ | จ | **j** (as in "jam") | **t** (unreleased) | จาน (jaan) vs มืจ (mʉ̀t) |
66
+ | ด | **d** (as in "do") | **t** (unreleased) | ดู (duu) vs วาด (wàat) |
67
+ | ต | **dt** (unaspirated) | **t** (unreleased) | ตา (dtaa) vs รัต (rát) |
68
+ | ป | **bp** (unaspirated) | **p** (unreleased) | ปา (bpaa) vs อับ (àp) |
69
+ | บ | **b** (as in "boy") | **p** (unreleased) | บาน (baan) vs รับ (ráp) |
70
+
71
+ **Key insight**: All these consonants become an unreleased stop (/t/ or /p/) when they end a syllable. This is why Thai speakers might say "maak" for "mark" — there's no equivalent of English final consonant sounds.
72
+
73
+ ## The Unaspirated Pair: ต and ป
74
+
75
+ Notice **ต** (dt) and **ป** (bp) are written with two letters in romanization. This indicates they're **unaspirated** — no puff of air after the sound. This is different from:
76
+ - English "t" and "p" (slightly aspirated)
77
+ - Thai ท and พ (heavily aspirated, low-class)
78
+
79
+ Hold your hand in front of your mouth: you should feel air for English "top" but not for Thai ตา.
80
+
81
+ ## The Mnemonic System
82
+
83
+ Each Thai consonant has a traditional **mnemonic word** starting with that consonant. When Thais spell words aloud, they say "gɔɔ gài, jɔɔ jaan..." — the mnemonic IS the letter's name. **Tap any character above to see its mnemonic!**
84
+
85
+ ## Key Points
86
+
87
+ 1. **Middle class = tone baseline**: These consonants produce a mid tone in basic syllables
88
+ 2. **Two sounds per consonant**: Initial vs final position changes pronunciation
89
+ 3. **Unaspirated consonants**: ต and ป have no puff of air (unlike English)
90
+ 4. **Mnemonics are names**: Learn them as the consonants' proper names, not just memory aids
91
+
92
+ ## Practice Recognition
93
+
94
+ Look at the shapes:
95
+ - **ก** has a "head" loop on top
96
+ - **จ** looks like a fishing hook
97
+ - **ด** and **ต** are similar — ด has a longer tail
98
+ - **ป** and **บ** are similar — ป is more "closed"
99
+
100
+ Shape similarities within pairs (ด/ต, ป/บ) are intentional — they represent related sounds.
101
+
102
+ ## Quick Quiz
103
+
104
+ :::exercise{id="quiz-01" type="matching" title="Match Consonants to Animals"}
105
+
106
+ **Question:** Match each consonant to its mnemonic animal
107
+
108
+ - ก
109
+ - ต
110
+ - ป
111
+
112
+ **Answer:**
113
+
114
+ - chicken (ไก่)
115
+ - turtle (เต่า)
116
+ - fish (ปลา)
117
+
118
+ **Explanation:** Each Thai consonant has a traditional mnemonic word. When Thais spell words, they say the consonant name with its mnemonic.
119
+
120
+ :::
121
+
122
+ :::exercise{id="recognition-01" type="fill-in-blank" title="Sound Recognition"}
123
+
124
+ **Question:** Which consonant makes each sound?
125
+
126
+ - Initial "g" sound (as in "go")
127
+ - Initial "j" sound (as in "jam")
128
+ - Initial "bp" sound (unaspirated, no puff of air)
129
+
130
+ **Answer:**
131
+
132
+ - ก (gɔɔ gài)
133
+ - จ (jɔɔ jaan)
134
+ - ป (bpɔɔ bplaa)
135
+
136
+ **Explanation:** Middle-class consonants have predictable sounds at the start of syllables.
137
+
138
+ :::
139
+
140
+ ## What's Next
141
+
142
+ In Lesson 2, you'll learn the remaining middle-class consonants (ม ย ร ล อ), which include nasals and approximants with different final-position behaviors.
@@ -0,0 +1,186 @@
1
+ ---
2
+ type: lesson
3
+ id: thai-script-lesson-02
4
+ title: "บทที่ 2 — พยัญชนะกลาง II"
5
+ description: "Middle-Class Consonants Part 2: ม ย ร ล อ — Nasals, liquids, and the silent consonant"
6
+ order: 2
7
+ parentId: thai-script-alphabet
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - consonants
12
+ - middle-class
13
+ - nasal
14
+ - approximant
15
+ - basic-characters
16
+ metadata:
17
+ estimatedTime: 25
18
+ prerequisites:
19
+ - thai-script-lesson-01
20
+ objectives:
21
+ - "Complete your knowledge of middle-class consonants"
22
+ - "Understand nasals and approximants"
23
+ - "Learn the special role of อ as a silent consonant"
24
+ - "Practice reading simple syllables"
25
+ ---
26
+
27
+ # บทที่ 2 (Lesson 2) — Middle-Class Consonants II
28
+
29
+ ## Introduction
30
+
31
+ In this lesson, you'll complete the middle-class consonants with 5 more characters. These include **nasals** (ม), **liquids** (ร ล), **approximants** (ย ว), and the unique **silent consonant** (อ).
32
+
33
+ ## Why These Are Different
34
+
35
+ The consonants in Lesson 1 were all **stops** — sounds made by completely blocking airflow then releasing. Today's consonants are different:
36
+
37
+ - **Nasals** (ม): Air flows through the nose
38
+ - **Liquids** (ร ล): Air flows around the tongue
39
+ - **Approximants** (ย): Tongue approaches but doesn't touch
40
+
41
+ This affects their behavior in final position — they don't become unreleased stops like the Lesson 1 consonants.
42
+
43
+ ## Characters
44
+
45
+ :::character-set{id="thai-middle-consonants-2" title="Middle-Class Consonants II"}
46
+
47
+ ::character{id="th-horse" char="ม" name="ม ม้า (mɔɔ máa)" nativeName="ม ม้า" transliteration="m" charType="consonant"}
48
+
49
+ ::character{id="th-ogre" char="ย" name="ย ยักษ์ (yɔɔ yák)" nativeName="ย ยักษ์" transliteration="y" charType="consonant"}
50
+
51
+ ::character{id="th-boat" char="ร" name="ร เรือ (rɔɔ rʉa)" nativeName="ร เรือ" transliteration="r/n" charType="consonant"}
52
+
53
+ ::character{id="th-monkey" char="ล" name="ล ลิง (lɔɔ ling)" nativeName="ล ลิง" transliteration="l/n" charType="consonant"}
54
+
55
+ ::character{id="th-bowl" char="อ" name="อ อ่าง (ɔɔ àang)" nativeName="อ อ่าง" transliteration="-/vowel" charType="consonant"}
56
+
57
+ :::
58
+
59
+ ## The Special Case: อ (Ɔɔ Àang)
60
+
61
+ **อ** is the most unusual Thai consonant. It has **two completely different roles**:
62
+
63
+ ### As Initial Consonant
64
+ When starting a syllable that begins with a vowel sound, อ serves as a **silent placeholder**:
65
+ - อา (aa) — the อ is silent, you just hear "aa"
66
+ - Without อ, there would be no consonant to "carry" the vowel
67
+
68
+ ### As Vowel Component
69
+ In certain vowel combinations, อ represents the sound /ɔɔ/:
70
+ - เมือง (mʉang) — the อ makes the /ɔ/ sound
71
+
72
+ This dual nature makes อ essential despite being "silent" in many words.
73
+
74
+ ## Sound Changes for Nasals and Liquids
75
+
76
+ Unlike the stop consonants from Lesson 1, these consonants keep their basic sound quality in final position:
77
+
78
+ | Consonant | Initial Sound | Final Sound | Example |
79
+ |-----------|---------------|-------------|---------|
80
+ | ม | **m** | **m** | มา (maa) / ลม (lom) |
81
+ | ย | **y** | **i** (as vowel) | ยา (yaa) / สาย (sǎai) |
82
+ | ร | **r** (rolled) | **n** | รัก (rák) / ตอร์ (dton) |
83
+ | ล | **l** | **n** | ลา (laa) / กล (gon) |
84
+
85
+ **Important**: Both ร and ล become /n/ in final position. This surprises many learners!
86
+
87
+ ## The Thai R Sound
88
+
89
+ Thai **ร** is a rolled or flapped R, similar to Spanish. In casual speech, many Thai speakers substitute **ล** for **ร** (so "ร เรือ" sounds like "ล เลือ"). This is very common but considered informal.
90
+
91
+ In careful speech:
92
+ - **ร** = alveolar trill or flap (tongue tip vibrates)
93
+ - **ล** = lateral (air flows around tongue sides)
94
+
95
+ ## Middle-Class Complete
96
+
97
+ You've now learned all 9 middle-class consonants! Here's the complete set:
98
+
99
+ | Stop Consonants | Nasals/Liquids |
100
+ |-----------------|----------------|
101
+ | ก จ ด ต ป บ | ม ย ร ล อ |
102
+
103
+ Why only 9 middle-class versus 24 low-class? Historical sound shifts moved many consonants to the low class over time. The remaining middle-class consonants are the "original" unvoiced stops plus sonorants.
104
+
105
+ ## Tone Behavior of Middle Class
106
+
107
+ With no tone mark, middle-class consonants produce:
108
+ - **Live syllable** (open or nasal ending): **Mid tone**
109
+ - **Dead syllable** (stop ending, short vowel): **Low tone**
110
+
111
+ Examples:
112
+ - กา (gaa) — live, mid tone
113
+ - กับ (gàp) — dead, low tone
114
+
115
+ This will make more sense after you learn vowels and tone marks!
116
+
117
+ ## Key Points
118
+
119
+ 1. **ม** is a nasal — air through nose, same sound initial and final
120
+ 2. **ย** becomes a vowel sound (/i/) in final position
121
+ 3. **ร and ล** both become /n/ at syllable end
122
+ 4. **อ** is the "silent" consonant for vowel-initial words
123
+ 5. **All 9 middle-class** consonants share the same tone rules
124
+
125
+ ## Practice Tip: Shape Recognition
126
+
127
+ - **ม** looks like a "3" with a tail
128
+ - **ย** has a distinctive curving shape
129
+ - **ร and ล** can be confusing — ร has the loop on top, ล doesn't
130
+ - **อ** looks like a circle with a tail
131
+
132
+ ## Practice Exercises
133
+
134
+ :::exercise{id="middle-2-final-sounds" type="matching" title="Final Position Sounds"}
135
+
136
+ **Question:** Match each consonant to its final position sound
137
+
138
+ - ร (boat)
139
+ - ล (monkey)
140
+ - ย (ogre)
141
+ - ม (horse)
142
+
143
+ **Answer:**
144
+
145
+ - ร → /n/ (becomes N in final position)
146
+ - ล → /n/ (becomes N in final position)
147
+ - ย → /i/ (becomes vowel-like sound)
148
+ - ม → /m/ (stays M in final position)
149
+
150
+ **Explanation:** Unlike stop consonants, these sonorants maintain or transform their sound. Both ร and ล become /n/ finally, which surprises many learners. ย becomes vowel-like, and ม stays the same.
151
+
152
+ :::
153
+
154
+ :::exercise{id="middle-2-special-case" type="multiple-choice" title="The Special อ Consonant"}
155
+
156
+ **Question:** What makes อ (bowl) special?
157
+
158
+ **Options:**
159
+ - It's the only vowel
160
+ - It serves as both silent consonant carrier and vowel component
161
+ - It's never used
162
+ - It's always pronounced
163
+
164
+ **Answer:** 2
165
+
166
+ **Explanation:** อ has dual functions: (1) as a silent placeholder for vowel-initial syllables (อา = "aa"), and (2) as a vowel component representing /ɔɔ/ in certain combinations. This makes it unique among Thai consonants.
167
+
168
+ :::
169
+
170
+ :::exercise{id="middle-2-complete-set" type="fill-in-blank" title="Complete Middle-Class Set"}
171
+
172
+ **Question:** How many middle-class consonants are there, and what are they?
173
+
174
+ **Answer:**
175
+
176
+ There are **9 middle-class consonants** total:
177
+ - Stop consonants: ก จ ด ต ป บ
178
+ - Nasals/Liquids: ม ย ร ล อ
179
+
180
+ **Explanation:** Middle-class is the smallest group (9 consonants) compared to high-class (11) and low-class (24). They're called "middle" because they produce mid tones in basic patterns, forming the baseline for the tone system.
181
+
182
+ :::
183
+
184
+ ## What's Next
185
+
186
+ In Lesson 3, you'll start learning **high-class consonants** — these create rising tones and are the "aspirated" (breathy) versions of sounds you already know.
@@ -0,0 +1,140 @@
1
+ ---
2
+ type: lesson
3
+ id: thai-script-lesson-03
4
+ title: "บทที่ 3 — พยัญชนะสูง I"
5
+ description: "High-Class Consonants Part 1: ข ส ห — The aspirated consonants"
6
+ order: 3
7
+ parentId: thai-script-alphabet
8
+ difficulty: beginner
9
+ cefrLevel: A1
10
+ categories:
11
+ - consonants
12
+ - high-class
13
+ - aspirated
14
+ - basic-characters
15
+ metadata:
16
+ estimatedTime: 20
17
+ prerequisites:
18
+ - thai-script-lesson-02
19
+ objectives:
20
+ - "Learn 3 common high-class consonants"
21
+ - "Understand aspiration (puff of air)"
22
+ - "Recognize the rising tone pattern"
23
+ ---
24
+
25
+ # บทที่ 3 (Lesson 3) — High-Class Consonants I
26
+
27
+ ## Feel the Difference
28
+
29
+ Put your hand in front of your mouth and say these English words:
30
+
31
+ - "**k**ite" — feel the puff of air on "k"
32
+ - "s**k**y" — notice LESS air after "s"
33
+
34
+ That puff of air is called **aspiration**.
35
+
36
+ :::exercise{id="aspiration-check" exerciseType="multiple-choice" title="Quick Check"}
37
+ Which word has MORE air on the 'k' sound?
38
+ ?options: kite, sky
39
+ ?answer: 1
40
+ :::
41
+
42
+ ## Why This Matters
43
+
44
+ Thai treats aspirated and unaspirated sounds as **completely different letters**:
45
+
46
+ | Sound | Air | Thai Letter | Like English... |
47
+ |-------|-----|-------------|-----------------|
48
+ | Unaspirated k | none | ก | s**k**y |
49
+ | Aspirated k | puff | ข | **k**ite |
50
+
51
+ You already know **ก** (from Lesson 1). Now meet its aspirated partner:
52
+
53
+ ## The Characters
54
+
55
+ :::character-set{id="thai-high-consonants-1" title="High-Class Consonants I"}
56
+
57
+ ::character{id="th-egg" char="ข" name="ข ไข่ (khɔ̌ɔ khài)" nativeName="ข ไข่" transliteration="kh/k" charType="consonant"}
58
+
59
+ ::character{id="th-tiger" char="ส" name="ส เสือ (sɔ̌ɔ sʉ̌a)" nativeName="ส เสือ" transliteration="s/t" charType="consonant"}
60
+
61
+ ::character{id="th-box" char="ห" name="ห หีบ (hɔ̌ɔ hìip)" nativeName="ห หีบ" transliteration="h/-" charType="consonant"}
62
+
63
+ :::
64
+
65
+ ## Shape Recognition
66
+
67
+ Each character has a memorable shape:
68
+
69
+ **ข** (egg) — Looks like ก with an extra loop. The extra loop = extra air!
70
+
71
+ **ส** (tiger) — Curvy S-shape, like tiger stripes.
72
+
73
+ **ห** (box) — Looks like a box. หีบ means "chest/box" — the shape matches!
74
+
75
+ :::exercise{id="shape-match" exerciseType="multiple-choice" title="Match the Shape"}
76
+ Which letter looks like ก with an extra loop on top?
77
+ ?options: ส, ข, ห
78
+ ?answer: 2
79
+ :::
80
+
81
+ :::exercise{id="shape-match-2" exerciseType="multiple-choice" title="Match the Shape"}
82
+ Which letter has an S-curve shape (like tiger stripes)?
83
+ ?options: ข, ห, ส
84
+ ?answer: 3
85
+ :::
86
+
87
+ ## Sound at Start vs End
88
+
89
+ Thai consonants sound different depending on position:
90
+
91
+ | Letter | Start of syllable | End of syllable |
92
+ |--------|------------------|-----------------|
93
+ | ข egg | **kh** (with air) | **k** (no release) |
94
+ | ส tiger | **s** | **t** (no release) |
95
+ | ห box | **h** | (not used) |
96
+
97
+ :::exercise{id="position-sound" exerciseType="multiple-choice" title="Position Check"}
98
+ At the START of a syllable, how is ข pronounced?
99
+ ?options: k (no air), kh (with air puff), s
100
+ ?answer: 2
101
+ :::
102
+
103
+ ## The Rising Tone
104
+
105
+ Here's something powerful: **consonant class determines tone**.
106
+
107
+ High-class consonants + simple vowel = **rising tone** ↗
108
+
109
+ - ข + า = **ขา** (khǎa) ↗ "leg"
110
+ - ส + ี = **สี** (sǐi) ↗ "color"
111
+ - ห + า = **หา** (hǎa) ↗ "to find"
112
+
113
+ Compare to middle-class ก (flat mid tone):
114
+ - ก + า = **กา** (gaa) → "crow"
115
+
116
+ Same vowel, different consonant class = **different tone!**
117
+
118
+ :::exercise{id="tone-pattern" exerciseType="multiple-choice" title="Tone Check"}
119
+ What tone do high-class consonants produce in simple syllables?
120
+ ?options: falling tone ↘, mid tone →, rising tone ↗
121
+ ?answer: 3
122
+ :::
123
+
124
+ ## Summary
125
+
126
+ You learned 3 high-class consonants:
127
+
128
+ | Char | Name | Sound | Remember |
129
+ |------|------|-------|----------|
130
+ | ข | egg (ไข่) | kh- | ก + loop = + air |
131
+ | ส | tiger (เสือ) | s- | S-curve shape |
132
+ | ห | box (หีบ) | h- | Looks like a box |
133
+
134
+ **Key insight:** High-class = aspirated (puff of air) + rising tone ↗
135
+
136
+ :::exercise{id="final-recognition" exerciseType="multiple-choice" title="Final Check"}
137
+ Which consonant class produces a rising tone?
138
+ ?options: low-class, middle-class, high-class
139
+ ?answer: 3
140
+ :::