/**
 * @return scalar[]
 */
function userAgent()
{
    static $engines = ['ie' => LIBSTD_ENV_USER_AGENT_ENGINE_MSIE, 'gecko' => LIBSTD_ENV_USER_AGENT_ENGINE_GECKO, 'webkit' => LIBSTD_ENV_USER_AGENT_ENGINE_WEBKIT];
    static $browsers = ['ie' => LIBSTD_ENV_USER_AGENT_BROWSER_MSIE, 'chrome' => LIBSTD_ENV_USER_AGENT_BROWSER_CHROME, 'firefox' => LIBSTD_ENV_USER_AGENT_BROWSER_FIREFOX, 'safari' => LIBSTD_ENV_USER_AGENT_BROWSER_SAFARI];
    if (false === libstd_isset('useragent', 'env')) {
        if (false === function_exists('get_browser')) {
            $info = false;
        } else {
            $info = get_browser(null, true);
        }
        $userAgent = [];
        if (false === $info) {
            $userAgent = ['engine' => LIBSTD_ENV_USER_AGENT_ENGINE_UNKNOWN, 'engine_version' => 0, 'browser' => LIBSTD_ENV_USER_AGENT_BROWSER_UNKNOWN, 'browser_version' => 0, 'mobile' => false];
        } else {
            if (isset($info['browser'])) {
                $browserName = strtolower($info['browser']);
                if (isset($browsers[$browserName])) {
                    $userAgent['browser'] = $browsers[$browserName];
                } else {
                    $userAgent['browser'] = LIBSTD_ENV_USER_AGENT_BROWSER_UNKNOWN;
                }
            } else {
                $userAgent['browser'] = LIBSTD_ENV_USER_AGENT_BROWSER_UNKNOWN;
            }
            if (isset($info['renderingengine_name'])) {
                $engineName = strtolower($info['renderingengine_name']);
                if (isset($engines[$engineName])) {
                    $userAgent['engine'] = $engines[$engineName];
                } else {
                    $userAgent['engine'] = LIBSTD_ENV_USER_AGENT_ENGINE_UNKNOWN;
                }
            } else {
                $userAgent['engine'] = LIBSTD_ENV_USER_AGENT_ENGINE_UNKNOWN;
            }
            if (isset($info['majorver'])) {
                $userAgent['browser_version'] = (int) $info['majorver'];
            } else {
                $userAgent['browser_version'] = 0;
            }
            if (isset($info['renderingengine_version'])) {
                $userAgent['engine_version'] = (int) $info['renderingengine_version'];
            } else {
                $userAgent['engine_version'] = 0;
            }
            $userAgent['mobile'] = isset($info['ismobiledevice']) && (bool) $info['ismobiledevice'];
        }
        libstd_set('useragent', $userAgent);
        return $userAgent;
    }
    return libstd_get('useragent', 'env');
}
<?php

namespace js;

/**
 * LIBSTD
 *
 * @package net.evalcode.libstd.php
 * @subpackage js
 *
 * @author evalcode.net
 */
// PROPERTIES
libstd_set('libstd', 'runtime/js/libstd.js', 'js');
//--------------------------------------------------------------------------
// ACCESSORS
/**
 * @param string $string_
 *
 * @return string
 */
function escape($string_)
{
    static $match = ["/\\\\/", "/\n/", "/\r/", "/\"/", "/\\'/", "/&/", "/</", "/>/"];
    static $replace = ["\\\\\\\\", "\\n", "\\r", "\\\"", "\\'", "\\x26", "\\x3C", "\\x3E"];
    return str_replace($match, $replace, $string_);
}
// libstd.js API
/**
 * @return string
 */