From b7502247c0a3ed74e9f61c666065cfcf7cac13ce Mon Sep 17 00:00:00 2001 From: noora_coder Date: Wed, 5 Aug 2026 10:31:45 +0000 Subject: [PATCH] Update tajweed_rules.py --- tajweed_rules.py | 83 +++++++----------------------------------------- 1 file changed, 11 insertions(+), 72 deletions(-) diff --git a/tajweed_rules.py b/tajweed_rules.py index d206fbb..784bc1c 100644 --- a/tajweed_rules.py +++ b/tajweed_rules.py @@ -1,72 +1,11 @@ -"""Tajweed Rules - أحكام التجويد""" - -class TajweedRule: - def __init__(self, name_ar: str, name_en: str, description: str, example: str): - self.name_ar = name_ar - self.name_en = name_en - self.description = description - self.example = example - -# أحكام النون الساكنة والتنوين -NOON_SAKINAH_RULES = [ - TajweedRule( - "الإظهار", "Al-Izhar", - "إظهار النون الساكنة أو التنوين عند حروف الحلق (ء هـ ع ح غ خ)", - "مِنْ أَجْلِ - عَلِيمٌ حَكِيمٌ" - ), - TajweedRule( - "الإدغام", "Al-Idgham", - "إدغام النون الساكنة أو التنوين في حروف (ي ر م ل و ن)", - "مِنْ رَبِّهِمْ - خَيْرٌ لَكُمْ" - ), - TajweedRule( - "الإقلاب", "Al-Iqlab", - "قلب النون الساكنة أو التنوين ميماً عند الباء", - "مِنْ بَعْدِ - سَمِيعٌ بَصِيرٌ" - ), - TajweedRule( - "الإخفاء", "Al-Ikhfa", - "إخفاء النون الساكنة أو التنوين عند باقي الحروف", - "مِنْ دُونِ - كِتَابٌ كَرِيمٌ" - ), -] - -# أحكام الميم الساكنة -MEEM_SAKINAH_RULES = [ - TajweedRule("الإخفاء الشفوي", "Al-Ikhfa Ash-Shafawi", "إخفاء الميم الساكنة عند الباء", "عَلَيْهِمْ بِنَاءً"), - TajweedRule("الإدغام الشفوي", "Al-Idgham Ash-Shafawi", "إدغام الميم الساكنة في ميم مثلها", "لَهُمْ مَا"), - TajweedRule("الإظهار الشفوي", "Al-Izhar Ash-Shafawi", "إظهار الميم الساكنة عند باقي الحروف", "عَلَيْهِمْ وَلَا"), -] - -# المدود -MUDOOD = [ - TajweedRule("المد الطبيعي", "Al-Madd At-Tabi'i", "يمد بمقدار حركتين", "قَالَ - نُوحِيهَا"), - TajweedRule("المد المتصل", "Al-Madd Al-Muttasil", "يمد ٤-٥ حركات إذا جاء بعد حرف المد همزة", "جَاءَ - سُوءٌ"), - TajweedRule("المد المنفصل", "Al-Madd Al-Munfasil", "يمد ٤-٥ حركات إذا جاء الهمز منفصلاً", "إِنَّا أَنْزَلْنَاهُ"), - TajweedRule("المد اللازم", "Al-Madd Al-Lazim", "يمد ٦ حركات إذا جاء بعد حرف المد سكون أصلي", "الطَّامَّةُ"), -] - -def check_noon_sakinah(word_before: str, word_after: str) -> list: - """فحص قاعدة النون الساكنة بين كلمتين""" - throat_letters = {"ء", "هـ", "ه", "ع", "ح", "غ", "خ"} - idgham_letters = {"ي", "ر", "م", "ل", "و", "ن"} - - if word_before.endswith("ن") and word_after: - first_letter = word_after[0] - if first_letter in throat_letters: - return ["الإظهار"] - elif first_letter in idgham_letters: - return ["الإدغام"] - elif first_letter == "ب": - return ["الإقلاب"] - else: - return ["الإخفاء"] - return [] - -if __name__ == "__main__": - print("📖 أحكام النون الساكنة والتنوين:") - for rule in NOON_SAKINAH_RULES: - print(f" {rule.name_ar}: {rule.example}") - print(f"\n📖 أحكام المدود:") - for rule in MUDOOD: - print(f" {rule.name_ar}: {rule.example}") +RULES={ +'\u0627\u0644\u0625\u0638\u0647\u0627\u0631 (Izhar)':'Clear noon at throat letters (\u0621 \u0647\u0640 \u0639 \u062d \u063a \u062e)', +'\u0627\u0644\u0625\u062f\u063a\u0627\u0645 (Idgham)':'Merge noon into (\u064a \u0631 \u0645 \u0644 \u0648 \u0646)', +'\u0627\u0644\u0625\u0642\u0644\u0627\u0628 (Iqlab)':'Change noon to meem before \u0628', +'\u0627\u0644\u0625\u062e\u0641\u0627\u0621 (Ikhfa)':'Hide noon at remaining letters', +'\u0627\u0644\u0645\u062f \u0627\u0644\u0637\u0628\u064a\u0639\u064a (Madd Tabii)':'Natural 2 counts', +'\u0627\u0644\u0645\u062f \u0627\u0644\u0645\u062a\u0635\u0644 (Muttasil)':'Connected 4-5 counts', +'\u0627\u0644\u0645\u062f \u0627\u0644\u0645\u0646\u0641\u0635\u0644 (Munfasil)':'Separated 4-5 counts', +'\u0627\u0644\u0645\u062f \u0627\u0644\u0644\u0627\u0632\u0645 (Lazim)':'Compulsory 6 counts'} +if __name__=='__main__': + for n,d in RULES.items(): print(f'{n}: {d}')