دخول حروف الجر على الأسماء برمجيا
في التغيرات النحوية والصرفية
بسم الله الرحمن الرحيم
خلال عملي في برنامج المكتبة الإسلامية للأندرويد أردت أن أظهر في معلومات الكتاب ترشيحات لكتب أخرى لنفس المؤلف فأردت أن أظهر عبارة “كتب أخرى لفلان”.
الآن حتى تظهر مثل هذه العبارة نحويا بشكل صحيح نحتاج إلى مراعاة دخول لام الجر على الأسماء، فكتبت دالة برمجية صغيرة للمساعدة على ذلك.
شرح الموضوع
دخول لام الجر على الأسماء يستلزم تغييرات نحوية (في آخر الكلمة) وتغيرات صرفية (في بنية الكلمة).
التغيرات النحوية
ظاهرٌ أن لام الاسم الواقع بعد لام الجر يجر بها ولأن أسماء المؤلفين عندنا أغلبها غير مشكل، فسنراعي من الأسماء ما يعرب بالحروف لا ما يعرب بالحركات.
والذي راعيته هو كلمة “أبو” فقط لأنها ترد كثيرًا في كنى المؤلفين.
التغيرات الصرفية
لدخول لام الجر على الأسماء بعض الأحكام الصرفية.
قال الشيخ عبد السلام هارون :
- تُنْقَصُ أَلِفُ (أَلْ) إِذَا دَخَلَ عَلَيْهَا اللّاَمُ، نَحْوُ: إِنَّهُ لَلْحَقُّ، لَلْعَمَلُ الصَّالِحُ أَبْقَى، يا لَلرِّجَالِ، لِلَّذِي، لِلَّذَينَ.
- تُحْذَفُ (أَلْ) إِذَا وَقَعَتْ بَعْدَ لاَمٍ وَكَانَ بَعْدَهَا لاَمٌ نَحْوُ: أَصْغَيْتُ لِلَّحْنِ الْجَمِيلِ، لَلَّحنُ الْجَمِيلُ غِذَاءٌ لِلرُّوحِ.
أمثلة
- أبو الوفاء ابن عقيل → لأبي الوفاء بن عقيل
- الرامهرمزي → للرامهرمزي
- اللالكائي → للالكائي
الكود
public static String prepareForPrefixingLam(String string) {
if (startsWithDefiniteArticle(string)) {
if (string.startsWith("ل", 2)) {
return string.substring(2);
} else {
return string.substring(1);
}
} else if (string.startsWith("أبو") || string.startsWith("ابو")) {
return string.replaceFirst("و", "ي");
} else {
return string;
}
}
public static boolean startsWithDefiniteArticle(String string) {
return string.startsWith("ال");
}
