]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - extlib/Net/IDNA.php
Ticket #1281: JID validation now more or less follows spec instead of calling e-mail...
[quix0rs-gnu-social.git] / extlib / Net / IDNA.php
diff --git a/extlib/Net/IDNA.php b/extlib/Net/IDNA.php
new file mode 100644 (file)
index 0000000..987a37e
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+
+// {{{ license
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
+//
+// +----------------------------------------------------------------------+
+// | This library is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU Lesser General Public License as       |
+// | published by the Free Software Foundation; either version 2.1 of the |
+// | License, or (at your option) any later version.                      |
+// |                                                                      |
+// | This library is distributed in the hope that it will be useful, but  |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of           |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |
+// | Lesser General Public License for more details.                      |
+// |                                                                      |
+// | You should have received a copy of the GNU Lesser General Public     |
+// | License along with this library; if not, write to the Free Software  |
+// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 |
+// | USA.                                                                 |
+// +----------------------------------------------------------------------+
+//
+
+// }}}
+
+
+/**
+ * Encode/decode Internationalized Domain Names.
+ * Factory class to get correct implementation either for php4 or php5.
+ *
+ * @author  Markus Nix <mnix@docuverse.de>
+ * @author  Matthias Sommerfeld <mso@phlylabs.de>
+ * @package Net
+ * @version $Id: IDNA.php 284681 2009-07-24 04:24:27Z clockwerx $
+ */
+
+class Net_IDNA
+{
+    // {{{ factory
+    /**
+     * Attempts to return a concrete IDNA instance for either php4 or php5.
+     *
+     * @param  array  $params   Set of paramaters
+     * @return object IDNA      The newly created concrete Log instance, or an
+     *                          false on an error.
+     * @access public
+     */
+    function getInstance($params = array())
+    {
+        $version   = explode( '.', phpversion() );
+        $handler   = ((int)$version[0] > 4) ? 'php5' : 'php4';
+        $class     = 'Net_IDNA_' . $handler;
+        $classfile = 'Net/IDNA/' . $handler . '.php';
+
+        /*
+         * Attempt to include our version of the named class, but don't treat
+         * a failure as fatal.  The caller may have already included their own
+         * version of the named class.
+         */
+        @include_once $classfile;
+
+        /* If the class exists, return a new instance of it. */
+        if (class_exists($class)) {
+            return new $class($params);
+        }
+
+        return false;
+    }
+    // }}}
+
+    // {{{ singleton
+    /**
+     * Attempts to return a concrete IDNA instance for either php4 or php5,
+     * only creating a new instance if no IDNA instance with the same
+     * parameters currently exists.
+     *
+     * @param  array  $params   Set of paramaters
+     * @return object IDNA      The newly created concrete Log instance, or an
+     *                          false on an error.
+     * @access public
+     */
+    function singleton($params = array())
+    {
+        static $instances;
+        if (!isset($instances)) {
+            $instances = array();
+        }
+
+        $signature = serialize($params);
+        if (!isset($instances[$signature])) {
+            $instances[$signature] = Net_IDNA::getInstance($params);
+        }
+
+        return $instances[$signature];
+    }
+    // }}}
+}
+
+?>