Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/JavaScript/FunctionProvider.php
<?php

/**
* @package   s9e\TextFormatter
* @copyright Copyright (c) 2010-2021 The s9e authors
* @license   http://www.opensource.org/licenses/mit-license.php The MIT License
*/
namespace s9e\TextFormatter\Configurator\JavaScript;

use
InvalidArgumentException;

class
FunctionProvider
{
   
/**
    * @param array Function name as keys, JavaScript source as values
    */
   
public static $cache = [
       
'addslashes' => 'function(str)
{
    return str.replace(/["\'\\\\]/g, \'\\\\$&\').replace(/\\u0000/g, \'\\\\0\');
}'
,
       
'dechex' => 'function(str)
{
    return parseInt(str).toString(16);
}'
,
       
'intval' => 'function(str)
{
    return parseInt(str) || 0;
}'
,
       
'ltrim' => 'function(str)
{
    return str.replace(/^[ \\n\\r\\t\\0\\x0B]+/g, \'\');
}'
,
       
'mb_strtolower' => 'function(str)
{
    return str.toLowerCase();
}'
,
       
'mb_strtoupper' => 'function(str)
{
    return str.toUpperCase();
}'
,
       
'mt_rand' => 'function(min, max)
{
    return (min + Math.floor(Math.random() * (max + 1 - min)));
}'
,
       
'rawurlencode' => 'function(str)
{
    return encodeURIComponent(str).replace(
        /[!\'()*]/g,
        /**
        * @param {string} c
        */
        function(c)
        {
            return \'%\' + c.charCodeAt(0).toString(16).toUpperCase();
        }
    );
}'
,
       
'rtrim' => 'function(str)
{
    return str.replace(/[ \\n\\r\\t\\0\\x0B]+$/g, \'\');
}'
,
       
'str_rot13' => 'function(str)
{
    return str.replace(
        /[a-z]/gi,
        function(c)
        {
            return String.fromCharCode(c.charCodeAt(0) + ((c.toLowerCase() < \'n\') ? 13 : -13));
        }
    );
}'
,
       
'stripslashes' => 'function(str)
{
    // NOTE: this will not correctly transform \\0 into a NULL byte. I consider this a feature
    //       rather than a bug. There\'s no reason to use NULL bytes in a text.
    return str.replace(/\\\\([\\s\\S]?)/g, \'\\\\1\');
}'
,
       
'strrev' => 'function(str)
{
    return str.split(\'\').reverse().join(\'\');
}'
,
       
'strtolower' => 'function(str)
{
    return str.toLowerCase();
}'
,
       
'strtotime' => 'function(str)
{
    return Date.parse(str) / 1000;
}'
,
       
'strtoupper' => 'function(str)
{
    return str.toUpperCase();
}'
,
       
'trim' => 'function(str)
{
    return str.replace(/^[ \\n\\r\\t\\0\\x0B]+/g, \'\').replace(/[ \\n\\r\\t\\0\\x0B]+$/g, \'\');
}'
,
       
'ucfirst' => 'function(str)
{
    return str[0].toUpperCase() + str.substring(1);
}'
,
       
'ucwords' => 'function(str)
{
    return str.replace(
        /(?:^|\\s)[a-z]/g,
        function(m)
        {
            return m.toUpperCase()
        }
    );
}'
,
       
'urldecode' => 'function(str)
{
    return decodeURIComponent("" + str);
}'
,
       
'urlencode' => 'function(str)
{
    return encodeURIComponent(str);
}'
   
];

   
/**
    * Return a function's source from the cache or the filesystem
    *
    * @param  string $funcName Function's name
    * @return string           Function's source
    */
   
public static function get($funcName)
    {
        if (isset(
self::$cache[$funcName]))
        {
            return
self::$cache[$funcName];
        }
        if (
preg_match('(^[a-z_0-9]+$)D', $funcName))
        {
           
$filepath = __DIR__ . '/functions/' . $funcName . '.js';
            if (
file_exists($filepath))
            {
                return
file_get_contents($filepath);
            }
        }
        throw new
InvalidArgumentException("Unknown function '" . $funcName . "'");
    }
}