I18N_Arabic
[ class tree: I18N_Arabic ] [ index: I18N_Arabic ] [ all elements ]

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.  */
  64.  
  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. {
  77.     /**
  78.      * Loads initialize values
  79.      *
  80.      * @ignore
  81.      */         
  82.     public function __construct()
  83.     {
  84.     }
  85.  
  86.     /**
  87.      * This method will standardize Arabic text to follow writing standards
  88.      * (just like magazine rules)
  89.      *          
  90.      * @param string $text Arabic text you would like to standardize
  91.      *                    
  92.      * @return String Standardized version of input Arabic text
  93.      * @author Khaled Al-Sham'aa <khaled@ar-php.org>
  94.      */
  95.     public static function standard($text)
  96.     {
  97.         $patterns     array();
  98.         $replacements array();
  99.         
  100.         array_push($patterns'/\r\n/u''/([^\@])\n([^\@])/u''/\r/u');
  101.         array_push($replacements"\n@@@\n""\\1\n&&&\n\\2""\n###\n");
  102.         
  103.         /**
  104.          * النقطة، الفاصلة، الفاصلة المنقوطة،
  105.          * النقطتان، علامتي الاستفهام والتعجب،
  106.          * النقاط الثلاث المتتالية
  107.          * يترك فراغ واحد بعدها جميعا
  108.          * دون أي فراغ قبلها
  109.          */
  110.         array_push($patterns'/\s*([\.\،\؛\:\!\؟])\s*/u');
  111.         array_push($replacements'\\1 ');
  112.  
  113.         /**
  114.          * النقاط المتتالية عددها 3 فقط
  115.          * (ليست نقطتان وليست أربع أو أكثر)
  116.          */
  117.         array_push($patterns'/(\. ){2,}/u');
  118.         array_push($replacements'...');
  119.  
  120.         /**
  121.          * الأقواس ( ) [ ] { } يترك قبلها وبعدها فراغ
  122.          * وحيد، فيما لا يوجد بينها وبين ما بداخلها
  123.          * أي فراغ
  124.          */
  125.         array_push($patterns'/\s*([\(\{\[])\s*/u');
  126.         array_push($replacements' \\1');
  127.  
  128.         array_push($patterns'/\s*([\)\}\]])\s*/u');
  129.         array_push($replacements'\\1 ');
  130.  
  131.         /**
  132.          * علامات الاقتباس "..."
  133.          * يترك قبلها وبعدها فراغ
  134.          * وحيد، فيما لا يوجد بينها
  135.          * وبين ما بداخلها أي فراغ
  136.          */
  137.         array_push($patterns'/\s*\"\s*(.+)((?<!\s)\"|\s+\")\s*/u');
  138.         array_push($replacements' "\\1" ');
  139.  
  140.         /**
  141.          * علامات الإعتراض -...-
  142.          * يترك قبلها وبعدها فراغ
  143.          * وحيد، فيما لا يوجد بينها
  144.          * وبين ما بداخلها أي فراغ
  145.          */
  146.         array_push($patterns'/\s*\-\s*(.+)((?<!\s)\-|\s+\-)\s*/u');
  147.         array_push($replacements' -\\1- ');
  148.  
  149.         /**
  150.          * لا يترك فراغ بين حرف العطف الواو وبين
  151.          * الكلمة التي تليه
  152.          * إلا إن كانت تبدأ بحرف الواو
  153.          */
  154.         array_push($patterns'/\sو\s+([^و])/u');
  155.         array_push($replacements' و\\1');
  156.  
  157.         /**
  158.          * الواحدات الإنجليزية توضع
  159.          * على يمين الرقم مع ترك فراغ
  160.          */
  161.         array_push($patterns'/\s+(\w+)\s*(\d+)\s+/');
  162.         array_push($replacements' <span dir="ltr">\\2 \\1</span> ');
  163.  
  164.         array_push($patterns'/\s+(\d+)\s*(\w+)\s+/');
  165.         array_push($replacements' <span dir="ltr">\\1 \\2</span> ');
  166.  
  167.         /**
  168.          * النسبة المؤية دائما إلى يسار الرقم
  169.          * وبدون أي فراغ يفصل بينهما 40% مثلا
  170.          */
  171.         array_push($patterns'/\s+(\d+)\s*\%\s+/u');
  172.         array_push($replacements' %\\1 ');
  173.         
  174.         array_push($patterns'/\n?@@@\n?/u''/\n?&&&\n?/u''/\n?###\n?/u');
  175.         array_push($replacements"\r\n""\n""\r");
  176.  
  177.         $text preg_replace($patterns$replacements$text);
  178.  
  179.         return $text;
  180.     }
  181. }

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