66import arabic_reshaper
77
88
9+ def _reshaping_test (test ):
10+ for i , case in enumerate (test .cases ):
11+ def t (): test .assertEqual (case [1 ], test .reshaper .reshape (case [0 ]))
12+ if hasattr (test , 'subTest' ):
13+ with test .subTest (i = i , case = case [0 ]):
14+ t ()
15+ else :
16+ t ()
17+
18+
919class TestDefaultReshaping (unittest .TestCase ):
1020 def setUp (self ):
1121 self .reshaper = arabic_reshaper .default_reshaper
1222 self .cases = (
1323 ('السلام عليكم' , 'ﺍﻟﺴﻼﻡ ﻋﻠﻴﻜﻢ' ),
1424 ('السَلَاْمٌ عَلَيْكُمْ' , 'ﺍﻟﺴﻼﻡ ﻋﻠﻴﻜﻢ' ),
25+ ('اللغة العربية هي أكثر اللغات' , 'ﺍﻟﻠﻐﺔ ﺍﻟﻌﺮﺑﻴﺔ ﻫﻲ ﺃﻛﺜﺮ ﺍﻟﻠﻐﺎﺕ' ),
26+ ('تحدثاً ونطقاً ضمن مجموعة' , 'ﺗﺤﺪﺛﺎ ﻭﻧﻄﻘﺎ ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ' ),
27+ ('اللغات السامية' , 'ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﻣﻴﺔ' ),
28+ ('العربية لغة رسمية في' , 'ﺍﻟﻌﺮﺑﻴﺔ ﻟﻐﺔ ﺭﺳﻤﻴﺔ ﻓﻲ' ),
29+ ('كل دول الوطن العربي' , 'ﻛﻞ ﺩﻭﻝ ﺍﻟﻮﻃﻦ ﺍﻟﻌﺮﺑﻲ' ),
30+ ('إضافة إلى كونها لغة' , 'ﺇﺿﺎﻓﺔ ﺇﻟﻰ ﻛﻮﻧﻬﺎ ﻟﻐﺔ' ),
31+ ('رسمية في تشاد وإريتريا' , 'ﺭﺳﻤﻴﺔ ﻓﻲ ﺗﺸﺎﺩ ﻭﺇﺭﻳﺘﺮﻳﺎ' ),
32+ ('وإسرائيل. وهي إحدى اللغات' , 'ﻭﺇﺳﺮﺍﺋﻴﻞ. ﻭﻫﻲ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ' ),
33+ ('الرسمية الست في منظمة' , 'ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﺴﺖ ﻓﻲ ﻣﻨﻈﻤﺔ' ),
34+ ('الأمم المتحدة، ويُحتفل' , 'ﺍﻷﻣﻢ ﺍﻟﻤﺘﺤﺪﺓ، ﻭﻳﺤﺘﻔﻞ' ),
35+ ('باليوم العالمي للغة العربية' , 'ﺑﺎﻟﻴﻮﻡ ﺍﻟﻌﺎﻟﻤﻲ ﻟﻠﻐﺔ ﺍﻟﻌﺮﺑﻴﺔ' ),
36+ ('في 18 ديسمبر كذكرى اعتماد' , 'ﻓﻲ 18 ﺩﻳﺴﻤﺒﺮ ﻛﺬﻛﺮﻯ ﺍﻋﺘﻤﺎﺩ' ),
37+ ('العربية بين لغات العمل في' , 'ﺍﻟﻌﺮﺑﻴﺔ ﺑﻴﻦ ﻟﻐﺎﺕ ﺍﻟﻌﻤﻞ ﻓﻲ' ),
38+ ('الأمم المتحدة.' , 'ﺍﻷﻣﻢ ﺍﻟﻤﺘﺤﺪﺓ.' ),
1539 )
1640
1741 def test_reshaping (self ):
18- for i , case in enumerate (self .cases ):
19- if hasattr (self , 'subTest' ):
20- with self .subTest (i = i , case = case [0 ]):
21- self .assertEqual (case [1 ], self .reshaper .reshape (case [0 ]))
22- else :
23- self .assertEqual (case [1 ], self .reshaper .reshape (case [0 ]))
42+ _reshaping_test (self )
2443
2544
2645class TestReshapingWithHarakat (unittest .TestCase ):
@@ -30,15 +49,108 @@ def setUp(self):
3049 })
3150 self .cases = (
3251 ('السَلَاْمٌ عَلَيْكُمْ' , 'ﺍﻟﺴَﻼَْﻡٌ ﻋَﻠَﻴْﻜُﻢْ' ),
52+ ('اللغة العربية هي أكثر اللغات' , 'ﺍﻟﻠﻐﺔ ﺍﻟﻌﺮﺑﻴﺔ ﻫﻲ ﺃﻛﺜﺮ ﺍﻟﻠﻐﺎﺕ' ),
53+ ('تحدثاً ونطقاً ضمن مجموعة' , 'ﺗﺤﺪﺛﺎً ﻭﻧﻄﻘﺎً ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ' ),
54+ ('اللغات السامية' , 'ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﻣﻴﺔ' ),
55+ ('العربية لغة رسمية في' , 'ﺍﻟﻌﺮﺑﻴﺔ ﻟﻐﺔ ﺭﺳﻤﻴﺔ ﻓﻲ' ),
56+ ('كل دول الوطن العربي' , 'ﻛﻞ ﺩﻭﻝ ﺍﻟﻮﻃﻦ ﺍﻟﻌﺮﺑﻲ' ),
57+ ('إضافة إلى كونها لغة' , 'ﺇﺿﺎﻓﺔ ﺇﻟﻰ ﻛﻮﻧﻬﺎ ﻟﻐﺔ' ),
58+ ('رسمية في تشاد وإريتريا' , 'ﺭﺳﻤﻴﺔ ﻓﻲ ﺗﺸﺎﺩ ﻭﺇﺭﻳﺘﺮﻳﺎ' ),
59+ ('وإسرائيل. وهي إحدى اللغات' , 'ﻭﺇﺳﺮﺍﺋﻴﻞ. ﻭﻫﻲ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ' ),
60+ ('الرسمية الست في منظمة' , 'ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﺴﺖ ﻓﻲ ﻣﻨﻈﻤﺔ' ),
61+ ('الأمم المتحدة، ويُحتفل' , 'ﺍﻷﻣﻢ ﺍﻟﻤﺘﺤﺪﺓ، ﻭﻳُﺤﺘﻔﻞ' ),
62+ ('باليوم العالمي للغة العربية' , 'ﺑﺎﻟﻴﻮﻡ ﺍﻟﻌﺎﻟﻤﻲ ﻟﻠﻐﺔ ﺍﻟﻌﺮﺑﻴﺔ' ),
63+ ('في 18 ديسمبر كذكرى اعتماد' , 'ﻓﻲ 18 ﺩﻳﺴﻤﺒﺮ ﻛﺬﻛﺮﻯ ﺍﻋﺘﻤﺎﺩ' ),
64+ ('العربية بين لغات العمل في' , 'ﺍﻟﻌﺮﺑﻴﺔ ﺑﻴﻦ ﻟﻐﺎﺕ ﺍﻟﻌﻤﻞ ﻓﻲ' ),
65+ ('الأمم المتحدة.' , 'ﺍﻷﻣﻢ ﺍﻟﻤﺘﺤﺪﺓ.' ),
66+ )
67+
68+ def test_reshaping (self ):
69+ _reshaping_test (self )
70+
71+
72+ class TestReshapingWithHarakatWithoutLigatures (unittest .TestCase ):
73+ def setUp (self ):
74+ self .reshaper = arabic_reshaper .ArabicReshaper ({
75+ 'delete_harakat' : False ,
76+ 'support_ligatures' : False
77+ })
78+ self .cases = (
79+ ('السَلَاْمٌ عَلَيْكُمْ' , 'ﺍﻟﺴَﻠَﺎْﻡٌ ﻋَﻠَﻴْﻜُﻢْ' ),
80+ ('اللغة العربية هي أكثر اللغات' , 'ﺍﻟﻠﻐﺔ ﺍﻟﻌﺮﺑﻴﺔ ﻫﻲ ﺃﻛﺜﺮ ﺍﻟﻠﻐﺎﺕ' ),
81+ ('تحدثاً ونطقاً ضمن مجموعة' , 'ﺗﺤﺪﺛﺎً ﻭﻧﻄﻘﺎً ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ' ),
82+ ('اللغات السامية' , 'ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﻣﻴﺔ' ),
83+ ('العربية لغة رسمية في' , 'ﺍﻟﻌﺮﺑﻴﺔ ﻟﻐﺔ ﺭﺳﻤﻴﺔ ﻓﻲ' ),
84+ ('كل دول الوطن العربي' , 'ﻛﻞ ﺩﻭﻝ ﺍﻟﻮﻃﻦ ﺍﻟﻌﺮﺑﻲ' ),
85+ ('إضافة إلى كونها لغة' , 'ﺇﺿﺎﻓﺔ ﺇﻟﻰ ﻛﻮﻧﻬﺎ ﻟﻐﺔ' ),
86+ ('رسمية في تشاد وإريتريا' , 'ﺭﺳﻤﻴﺔ ﻓﻲ ﺗﺸﺎﺩ ﻭﺇﺭﻳﺘﺮﻳﺎ' ),
87+ ('وإسرائيل. وهي إحدى اللغات' , 'ﻭﺇﺳﺮﺍﺋﻴﻞ. ﻭﻫﻲ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ' ),
88+ ('الرسمية الست في منظمة' , 'ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﺴﺖ ﻓﻲ ﻣﻨﻈﻤﺔ' ),
89+ ('الأمم المتحدة، ويُحتفل' , 'ﺍﻟﺄﻣﻢ ﺍﻟﻤﺘﺤﺪﺓ، ﻭﻳُﺤﺘﻔﻞ' ),
90+ ('باليوم العالمي للغة العربية' , 'ﺑﺎﻟﻴﻮﻡ ﺍﻟﻌﺎﻟﻤﻲ ﻟﻠﻐﺔ ﺍﻟﻌﺮﺑﻴﺔ' ),
91+ ('في 18 ديسمبر كذكرى اعتماد' , 'ﻓﻲ 18 ﺩﻳﺴﻤﺒﺮ ﻛﺬﻛﺮﻯ ﺍﻋﺘﻤﺎﺩ' ),
92+ ('العربية بين لغات العمل في' , 'ﺍﻟﻌﺮﺑﻴﺔ ﺑﻴﻦ ﻟﻐﺎﺕ ﺍﻟﻌﻤﻞ ﻓﻲ' ),
93+ ('الأمم المتحدة.' , 'ﺍﻟﺄﻣﻢ ﺍﻟﻤﺘﺤﺪﺓ.' ),
94+ )
95+
96+ def test_reshaping (self ):
97+ _reshaping_test (self )
98+
99+
100+ class TestReshapingSomeLigatures (unittest .TestCase ):
101+ def setUp (self ):
102+ self .reshaper = arabic_reshaper .ArabicReshaper ({
103+ 'delete_tatweel' : True ,
104+ 'ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM' : True ,
105+ 'ARABIC LIGATURE JALLAJALALOUHOU' : True ,
106+ 'ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM' : True ,
107+ 'ARABIC LIGATURE ALLAH ' : True ,
108+ 'ARABIC LIGATURE AKBAR' : True ,
109+ 'ARABIC LIGATURE ALAYHE' : True ,
110+ 'ARABIC LIGATURE MOHAMMAD' : True ,
111+ 'ARABIC LIGATURE RASOUL' : True ,
112+ 'ARABIC LIGATURE SALAM' : True ,
113+ 'ARABIC LIGATURE SALLA' : True ,
114+ 'ARABIC LIGATURE WASALLAM' : True ,
115+ })
116+ self .cases = (
117+ ('إِنَّهُ مِن سُلَيْمَانَ '
118+ 'وَإِنَّهُ بِسْمِ اللّـَهِ '
119+ 'الرَّحْمَـٰنِ الرَّحِيمِ ﴿٣٠﴾ '
120+ 'أَلَّا تَعْلُوا عَلَيَّ '
121+ 'وَأْتُونِي مُسْلِمِينَ ﴿٣١﴾' ,
122+
123+ 'ﺇﻧﻪ ﻣﻦ ﺳﻠﻴﻤﺎﻥ ﻭﺇﻧﻪ ﷽ ﴿٣٠﴾ '
124+ 'ﺃﻻ ﺗﻌﻠﻮﺍ ﻋﻠﻲ ﻭﺃﺗﻮﻧﻲ ﻣﺴﻠﻤﻴﻦ ﴿٣١﴾' ),
125+
126+ ('فَذَكِّرْ إِنَّمَا أَنتَ'
127+ ' مُذَكِّرٌ ﴿٢١﴾ لَّسْتَ'
128+ ' عَلَيْهِم بِمُصَيْطِرٍ ﴿٢٢﴾'
129+ ' إِلَّا مَن تَوَلَّىٰ'
130+ ' وَكَفَرَ ﴿٢٣﴾ فَيُعَذِّبُهُ'
131+ ' اللَّـهُ الْعَذَابَ'
132+ ' الْأَكْبَرَ ﴿٢٤﴾' ,
133+
134+ 'ﻓﺬﻛﺮ ﺇﻧﻤﺎ ﺃﻧﺖ'
135+ ' ﻣﺬﻛﺮ ﴿٢١﴾ ﻟﺴﺖ'
136+ ' ﻋﻠﻴﻬﻢ ﺑﻤﺼﻴﻄﺮ ﴿٢٢﴾'
137+ ' ﺇﻻ ﻣﻦ ﺗﻮﻟﻰ'
138+ ' ﻭﻛﻔﺮ ﴿٢٣﴾ ﻓﻴﻌﺬﺑﻪ'
139+ ' ﷲ ﺍﻟﻌﺬﺍﺏ'
140+ ' ﺍﻷﻛﺒﺮ ﴿٢٤﴾' ),
141+
142+ ('محمد رسول الله صلى الله عليه وسلم' ,
143+ 'ﷴ ﷶ ﷲ ﷺ' ),
144+
145+ ('الله جل جلاله' ,
146+ 'ﷲ ﷻ' ),
147+
148+ ('محمد رسول الله عليه صلى الله وسلم' ,
149+ 'ﷴ ﷶ ﷲ ﷷ ﷹ ﷲ ﷸ' ),
33150 )
34151
35152 def test_reshaping (self ):
36- for i , case in enumerate (self .cases ):
37- if hasattr (self , 'subTest' ):
38- with self .subTest (i = i , case = case [0 ]):
39- self .assertEqual (case [1 ], self .reshaper .reshape (case [0 ]))
40- else :
41- self .assertEqual (case [1 ], self .reshaper .reshape (case [0 ]))
153+ _reshaping_test (self )
42154
43155if __name__ == '__main__' :
44156 unittest .main ()
0 commit comments