I18N_Arabic

# Source for file Standard.php

Documentation is available at Standard.php

1. <?php
2. /**
3. * ----------------------------------------------------------------------
4. *
5. * Copyright (c) 2006-2016 Khaled Al-Sham'aa.
6. *
7. * http://www.ar-php.org
8. *
9. * PHP Version 5
10. *
11. * ----------------------------------------------------------------------
12. *
13. * LICENSE
14. *
15. * This program is open source product; you can redistribute it and/or
16. * modify it under the terms of the GNU Lesser General Public License (LGPL)
17. * as published by the Free Software Foundation; either version 3
18. * of the License, or (at your option) any later version.
19. *
20. * This program is distributed in the hope that it will be useful,
21. * but WITHOUT ANY WARRANTY; without even the implied warranty of
22. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23. * GNU Lesser General Public License for more details.
24. *
25. * You should have received a copy of the GNU Lesser General Public License
26. * along with this program. If not, see <http://www.gnu.org/licenses/lgpl.txt>.
27. *
28. * ----------------------------------------------------------------------
29. *
30. * Class Name: Arabic Text ArStandard Class
31. *
32. * Filename: Standard.php
33. *
34. * Original Author(s): Khaled Al-Sham'aa <khaled@ar-php.org>
35. *
36. * Purpose: Standardize Arabic text
37. *
38. * ----------------------------------------------------------------------
39. *
40. * Arabic Text Standardize Class
41. *
42. * PHP class to standardize Arabic text just like rules followed in magazines
43. * and newspapers like spaces before and after punctuations, brackets and
44. * units etc ...
45. *
46. * Example:
47. * <code>
48. * include('./I18N/Arabic.php');
49. * $obj = new I18N_Arabic('Standard');
50. *
51. * $str = $obj->standard($content);
52. *
53. * echo $str;
54. * </code>
55. *
56. * @category I18N
57. * @package I18N_Arabic
58. * @author Khaled Al-Sham'aa <khaled@ar-php.org>
59. * @copyright 2006-2016 Khaled Al-Sham'aa
60. *
61. * @license LGPL <http://www.gnu.org/licenses/lgpl.txt>
62. * @link http://www.ar-php.org
63. */
65. /**
66. * This PHP class standardize Arabic text
67. *
68. * @category I18N
69. * @package I18N_Arabic
70. * @author Khaled Al-Sham'aa <khaled@ar-php.org>
71. * @copyright 2006-2016 Khaled Al-Sham'aa
72. *
73. * @license LGPL <http://www.gnu.org/licenses/lgpl.txt>
74. * @link http://www.ar-php.org
75. */
76. class I18N_Arabic_Standard
77. {
78. /**
79. * Loads initialize values
80. *
81. * @ignore
82. */
83. public function __construct()
84. {
85. }
87. /**
88. * This method will standardize Arabic text to follow writing standards
89. * (just like magazine rules)
90. *
91. * @param string $text Arabic text you would like to standardize
92. *
93. * @return String Standardized version of input Arabic text
94. * @author Khaled Al-Sham'aa <khaled@ar-php.org>
95. */
96. public static function standard($text)
97. {
98. $patterns = array();
99. $replacements = array();
101. array_push($patterns, '/\r\n/u', '/([^\@])\n([^\@])/u', '/\r/u');
102. array_push($replacements, "\n@@@\n", "\\1\n&&&\n\\2", "\n###\n");
104. /**
105. * النقطة، الفاصلة، الفاصلة المنقوطة،
106. * النقطتان، علامتي الاستفهام والتعجب،
107. * النقاط الثلاث المتتالية
108. * يترك فراغ واحد بعدها جميعا
109. * دون أي فراغ قبلها
110. */
111. array_push($patterns, '/\s*([\.\،\؛\:\!\؟])\s*/u');
112. array_push($replacements, '\\1 ');
114. /**
115. * النقاط المتتالية عددها 3 فقط
116. * (ليست نقطتان وليست أربع أو أكثر)
117. */
118. array_push($patterns, '/(\. ){2,}/u');
119. array_push($replacements, '...');
121. /**
122. * الأقواس ( ) [ ] { } يترك قبلها وبعدها فراغ
123. * وحيد، فيما لا يوجد بينها وبين ما بداخلها
124. * أي فراغ
125. */
126. array_push($patterns, '/\s*([\(\{\[])\s*/u');
127. array_push($replacements, ' \\1');
129. array_push($patterns, '/\s*([\)\}\]])\s*/u');
130. array_push($replacements, '\\1 ');
132. /**
133. * علامات الاقتباس "..."
134. * يترك قبلها وبعدها فراغ
135. * وحيد، فيما لا يوجد بينها
136. * وبين ما بداخلها أي فراغ
137. */
138. array_push($patterns, '/\s*\"\s*(.+)((?<!\s)\"|\s+\")\s*/u');
139. array_push($replacements, ' "\\1" ');
141. /**
142. * علامات الإعتراض -...-
143. * يترك قبلها وبعدها فراغ
144. * وحيد، فيما لا يوجد بينها
145. * وبين ما بداخلها أي فراغ
146. */
147. array_push($patterns, '/\s*\-\s*(.+)((?<!\s)\-|\s+\-)\s*/u');
148. array_push($replacements, ' -\\1- ');
150. /**
151. * لا يترك فراغ بين حرف العطف الواو وبين
152. * الكلمة التي تليه
153. * إلا إن كانت تبدأ بحرف الواو
154. */
155. array_push($patterns, '/\sو\s+([^و])/u');
156. array_push($replacements, ' و\\1');
158. /**
159. * الواحدات الإنجليزية توضع
160. * على يمين الرقم مع ترك فراغ
161. */
162. array_push($patterns, '/\s+(\w+)\s*(\d+)\s+/');
163. array_push($replacements, ' <span dir="ltr">\\2 \\1</span> ');
165. array_push($patterns, '/\s+(\d+)\s*(\w+)\s+/');
166. array_push($replacements, ' <span dir="ltr">\\1 \\2</span> ');
168. /**
169. * النسبة المؤية دائما إلى يسار الرقم
170. * وبدون أي فراغ يفصل بينهما 40% مثلا
171. */
172. array_push($patterns, '/\s+(\d+)\s*\%\s+/u');
173. array_push($replacements, ' %\\1 ');
175. array_push($patterns, '/\n?@@@\n?/u', '/\n?&&&\n?/u', '/\n?###\n?/u');
176. array_push($replacements, "\r\n", "\n", "\r");
178. $text = preg_replace($patterns, $replacements, $text);
180. return $text;
181. }
182. }

Documentation generated on Fri, 01 Jan 2016 10:26:25 +0200 by phpDocumentor 1.4.0