diff options
author | Brion Vibber <brion@pobox.com> | 2010-03-31 12:48:24 -0700 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-03-31 12:48:24 -0700 |
commit | df9eb4164aec6d63869dee7bfd5cfddf6d831618 (patch) | |
tree | c078b097143772da34a6660039e79e470f86325a /extlib/Net/IDNA.php | |
parent | 89bb05311685d1bab404300e600f61deb954e18c (diff) | |
parent | 3ed88938b95804ecadc62ed3a5f61a0863e2ff78 (diff) |
Merge branch 'testing' of git@gitorious.org:statusnet/mainline into 0.9.x
Diffstat (limited to 'extlib/Net/IDNA.php')
-rw-r--r-- | extlib/Net/IDNA.php | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/extlib/Net/IDNA.php b/extlib/Net/IDNA.php new file mode 100644 index 000000000..987a37ef1 --- /dev/null +++ b/extlib/Net/IDNA.php @@ -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]; + } + // }}} +} + +?> |