-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStandard.php
102 lines (86 loc) · 3.49 KB
/
Standard.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
namespace ArabyPHP\Standard;
class Standard
{
/**
* This method will standardize Arabic text to follow writing standards
* (just like magazine rules).
*
* @param string $text Arabic text you would like to standardize
*
* @return string Standardized version of input Arabic text
*
*/
public function standard($text)
{
$patterns = [];
$replacements = [];
array_push($patterns, '/\r\n/u', '/([^\@])\n([^\@])/u', '/\r/u');
array_push($replacements, "\n@@@\n", "\\1\n&&&\n\\2", "\n###\n");
/*
* النقطة، الفاصلة، الفاصلة المنقوطة،
* النقطتان، علامتي الاستفهام والتعجب،
* النقاط الثلاث المتتالية
* يترك فراغ واحد بعدها جميعا
* دون أي فراغ قبلها
*/
array_push($patterns, '/\s*([\.\،\؛\:\!\؟])\s*/u');
array_push($replacements, '\\1 ');
/*
* النقاط المتتالية عددها 3 فقط
* (ليست نقطتان وليست أربع أو أكثر)
*/
array_push($patterns, '/(\. ){2,}/u');
array_push($replacements, '...');
/*
* الأقواس ( ) [ ] { } يترك قبلها وبعدها فراغ
* وحيد، فيما لا يوجد بينها وبين ما بداخلها
* أي فراغ
*/
array_push($patterns, '/\s*([\(\{\[])\s*/u');
array_push($replacements, ' \\1');
array_push($patterns, '/\s*([\)\}\]])\s*/u');
array_push($replacements, '\\1 ');
/*
* علامات الاقتباس "..."
* يترك قبلها وبعدها فراغ
* وحيد، فيما لا يوجد بينها
* وبين ما بداخلها أي فراغ
*/
array_push($patterns, '/\s*\"\s*(.+)((?<!\s)\"|\s+\")\s*/u');
array_push($replacements, ' "\\1" ');
/*
* علامات الإعتراض -...-
* يترك قبلها وبعدها فراغ
* وحيد، فيما لا يوجد بينها
* وبين ما بداخلها أي فراغ
*/
array_push($patterns, '/\s*\-\s*(.+)((?<!\s)\-|\s+\-)\s*/u');
array_push($replacements, ' -\\1- ');
/*
* لا يترك فراغ بين حرف العطف الواو وبين
* الكلمة التي تليه
* إلا إن كانت تبدأ بحرف الواو
*/
array_push($patterns, '/\sو\s+([^و])/u');
array_push($replacements, ' و\\1');
/*
* الواحدات الإنجليزية توضع
* على يمين الرقم مع ترك فراغ
*/
array_push($patterns, '/\s+(\w+)\s*(\d+)\s+/');
array_push($replacements, ' <span dir="ltr">\\2 \\1</span> ');
array_push($patterns, '/\s+(\d+)\s*(\w+)\s+/');
array_push($replacements, ' <span dir="ltr">\\1 \\2</span> ');
/*
* النسبة المؤية دائما إلى يسار الرقم
* وبدون أي فراغ يفصل بينهما 40% مثلا
*/
array_push($patterns, '/\s+(\d+)\s*\%\s+/u');
array_push($replacements, ' %\\1 ');
array_push($patterns, '/\n?@@@\n?/u', '/\n?&&&\n?/u', '/\n?###\n?/u');
array_push($replacements, "\r\n", "\n", "\r");
$text = preg_replace($patterns, $replacements, $text);
return $text;
}
}