phpjs
Version:
395 lines (388 loc) • 13.5 kB
JavaScript
function get_defined_constants(categorize) {
// From: http://phpjs.org/functions
// + original by: Brett Zamir (http://brett-zamir.me)
// % note 1: Could possibly substitute some others like M_PI with JavaScript's Math.PI, etc., but here
// % note 1: sticking to PHP, except for changing: NULL to null, NAN to NaN, and INF to Number.POSITIVE_INFINITY
// % note 2: TRUE, FALSE, and NULL capitalized constants (as in PHP) could work ok in some
// % note 2: implementations, but not all, so they are commented out
// % note 3: We used a PHP script to auto-convert these, so we can simply reuse it to add more below if we
// % note 3: implement more extensions needing constants, assuming we have a PHP set-up which
// % note 3: uses the extensions!
// % note 4: If you do ini_set('phpjs.get_defined_constants.setConstants', 'this') then call this function,
// % note 4: it will set the PHP constants as globals for you on the "this" object. In the namespaced version, this
// % note 4: means the "constants" will be attached directly to the $P object: e.g., $P.PREG_OFFSET_CAPTURE
// % note 4: In the non-namespaced version, this will act like the setting mentioned in note 6
// % note 4: If you do ini_set('phpjs.get_defined_constants.setConstants', 'thisExt') then call this function,
// % note 4: it will set the PHP constants for you, but will first create a namespace on your object
// % note 4: for each extension to which the "constants" will be added. For example, $P.pcre.PREG_OFFSET_CAPTURE
// % note 4: For the non-namespaced version, this will be created on window: alert(pcre.PREG_OFFSET_CAPTURE);
// % note 4: If you do ini_set('phpjs.get_defined_constants.setConstants', true) then call this function,
// % note 4: it will set the PHP constants as window globals for you, even if you are using the php.js namespaced
// % note 4: version. For example, you can just do: alert(PREG_OFFSET_CAPTURE); . Only the constants set directly
// % note 4: at the level of window globals, will actually be immutable constants.
// % note 5: Note that our functions might not have been designed yet to handle PHP-style constants if at all, as
// % note 5: some of our extensions rely simply on the constant name being passed in to the function as a
// % note 5: string to work as a flag
// - depends on: define
// * example 1: var cnsts = get_defined_constants();
// * example 1: cnsts.E_NOTICE;
// * returns 1: 8
// * example 2: var cnsts = get_defined_constants(true); // passing false will produce the same value! (in PHP as well as here)
// * example 2: cnsts.internal.E_NOTICE;
// * returns 2: 8
var ext = '',
cnst = '',
constObj = {},
flatConstObj = {},
win, thisExt = false;
constObj = {
'internal': {
'E_ERROR': 1,
'E_RECOVERABLE_ERROR': 4096,
'E_WARNING': 2,
'E_PARSE': 4,
'E_NOTICE': 8,
'E_STRICT': 2048,
'E_CORE_ERROR': 16,
'E_CORE_WARNING': 32,
'E_COMPILE_ERROR': 64,
'E_COMPILE_WARNING': 128,
'E_USER_ERROR': 256,
'E_USER_WARNING': 512,
'E_USER_NOTICE': 1024,
'E_ALL': 6143,
/* // Could work ok in some implementations, but not all, so commenting out
'TRUE' : true,
'FALSE' : false,
'NULL' : null,
*/
'ZEND_THREAD_SAFE': true,
'PHP_VERSION': '5.2.6',
'PHP_OS': 'WINNT',
'PHP_SAPI': 'apache2handler',
'DEFAULT_INCLUDE_PATH': '.;C:\\php5\\pear',
'PEAR_INSTALL_DIR': 'C:\\php5\\pear',
'PEAR_EXTENSION_DIR': 'C:\\php5',
'PHP_EXTENSION_DIR': 'C:\\php5',
'PHP_PREFIX': 'C:\\php5',
'PHP_BINDIR': 'C:\\php5',
'PHP_LIBDIR': 'C:\\php5',
'PHP_DATADIR': 'C:\\php5',
'PHP_SYSCONFDIR': 'C:\\php5',
'PHP_LOCALSTATEDIR': 'C:\\php5',
'PHP_CONFIG_FILE_PATH': 'C:\\Windows',
'PHP_CONFIG_FILE_SCAN_DIR': '',
'PHP_SHLIB_SUFFIX': 'dll',
'PHP_EOL': '\n',
'PHP_INT_MAX': 2147483647,
'PHP_INT_SIZE': 4,
'PHP_OUTPUT_HANDLER_START': 1,
'PHP_OUTPUT_HANDLER_CONT': 2,
'PHP_OUTPUT_HANDLER_END': 4,
'UPLOAD_ERR_OK': 0,
'UPLOAD_ERR_INI_SIZE': 1,
'UPLOAD_ERR_FORM_SIZE': 2,
'UPLOAD_ERR_PARTIAL': 3,
'UPLOAD_ERR_NO_FILE': 4,
'UPLOAD_ERR_NO_TMP_DIR': 6,
'UPLOAD_ERR_CANT_WRITE': 7,
'UPLOAD_ERR_EXTENSION': 8
},
'pcre': {
'PREG_PATTERN_ORDER': 1,
'PREG_SET_ORDER': 2,
'PREG_OFFSET_CAPTURE': 256,
'PREG_SPLIT_NO_EMPTY': 1,
'PREG_SPLIT_DELIM_CAPTURE': 2,
'PREG_SPLIT_OFFSET_CAPTURE': 4,
'PREG_GREP_INVERT': 1,
'PREG_NO_ERROR': 0,
'PREG_INTERNAL_ERROR': 1,
'PREG_BACKTRACK_LIMIT_ERROR': 2,
'PREG_RECURSION_LIMIT_ERROR': 3,
'PREG_BAD_UTF8_ERROR': 4,
'PCRE_VERSION': '7.6 2008-01-28'
},
'session': {
'DATE_ATOM': 'Y-m-d\\TH:i:sP',
'DATE_COOKIE': 'l, d-M-y H:i:s T',
'DATE_ISO8601': 'Y-m-d\\TH:i:sO',
'DATE_RFC822': 'D, d M y H:i:s O',
'DATE_RFC850': 'l, d-M-y H:i:s T',
'DATE_RFC1036': 'D, d M y H:i:s O',
'DATE_RFC1123': 'D, d M Y H:i:s O',
'DATE_RFC2822': 'D, d M Y H:i:s O',
'DATE_RFC3339': 'Y-m-d\\TH:i:sP',
'DATE_RSS': 'D, d M Y H:i:s O',
'DATE_W3C': 'Y-m-d\\TH:i:sP',
'SUNFUNCS_RET_TIMESTAMP': 0,
'SUNFUNCS_RET_STRING': 1,
'SUNFUNCS_RET_DOUBLE': 2
},
'standard': {
'CONNECTION_ABORTED': 1,
'CONNECTION_NORMAL': 0,
'CONNECTION_TIMEOUT': 2,
'INI_USER': 1,
'INI_PERDIR': 2,
'INI_SYSTEM': 4,
'INI_ALL': 7,
'PHP_URL_SCHEME': 0,
'PHP_URL_HOST': 1,
'PHP_URL_PORT': 2,
'PHP_URL_USER': 3,
'PHP_URL_PASS': 4,
'PHP_URL_PATH': 5,
'PHP_URL_QUERY': 6,
'PHP_URL_FRAGMENT': 7,
'M_E': 2.718281828459,
'M_LOG2E': 1.442695040889,
'M_LOG10E': 0.43429448190325,
'M_LN2': 0.69314718055995,
'M_LN10': 2.302585092994,
'M_PI': 3.1415926535898,
'M_PI_2': 1.5707963267949,
'M_PI_4': 0.78539816339745,
'M_1_PI': 0.31830988618379,
'M_2_PI': 0.63661977236758,
'M_SQRTPI': 1.7724538509055,
'M_2_SQRTPI': 1.1283791670955,
'M_LNPI': 1.1447298858494,
'M_EULER': 0.57721566490153,
'M_SQRT2': 1.4142135623731,
'M_SQRT1_2': 0.70710678118655,
'M_SQRT3': 1.7320508075689,
'INF': Number.POSITIVE_INFINITY,
'NAN': 0,
'INFO_GENERAL': 1,
'INFO_CREDITS': 2,
'INFO_CONFIGURATION': 4,
'INFO_MODULES': 8,
'INFO_ENVIRONMENT': 16,
'INFO_VARIABLES': 32,
'INFO_LICENSE': 64,
'INFO_ALL': -1,
'CREDITS_GROUP': 1,
'CREDITS_GENERAL': 2,
'CREDITS_SAPI': 4,
'CREDITS_MODULES': 8,
'CREDITS_DOCS': 16,
'CREDITS_FULLPAGE': 32,
'CREDITS_QA': 64,
'CREDITS_ALL': -1,
'HTML_SPECIALCHARS': 0,
'HTML_ENTITIES': 1,
'ENT_COMPAT': 2,
'ENT_QUOTES': 3,
'ENT_NOQUOTES': 0,
'STR_PAD_LEFT': 0,
'STR_PAD_RIGHT': 1,
'STR_PAD_BOTH': 2,
'PATHINFO_DIRNAME': 1,
'PATHINFO_BASENAME': 2,
'PATHINFO_EXTENSION': 4,
'PATHINFO_FILENAME': 8,
'CHAR_MAX': 127,
'LC_CTYPE': 2,
'LC_NUMERIC': 4,
'LC_TIME': 5,
'LC_COLLATE': 1,
'LC_MONETARY': 3,
'LC_ALL': 0,
'SEEK_SET': 0,
'SEEK_CUR': 1,
'SEEK_END': 2,
'LOCK_SH': 1,
'LOCK_EX': 2,
'LOCK_UN': 3,
'LOCK_NB': 4,
'STREAM_NOTIFY_CONNECT': 2,
'STREAM_NOTIFY_AUTH_REQUIRED': 3,
'STREAM_NOTIFY_AUTH_RESULT': 10,
'STREAM_NOTIFY_MIME_TYPE_IS': 4,
'STREAM_NOTIFY_FILE_SIZE_IS': 5,
'STREAM_NOTIFY_REDIRECTED': 6,
'STREAM_NOTIFY_PROGRESS': 7,
'STREAM_NOTIFY_FAILURE': 9,
'STREAM_NOTIFY_COMPLETED': 8,
'STREAM_NOTIFY_RESOLVE': 1,
'STREAM_NOTIFY_SEVERITY_INFO': 0,
'STREAM_NOTIFY_SEVERITY_WARN': 1,
'STREAM_NOTIFY_SEVERITY_ERR': 2,
'STREAM_FILTER_READ': 1,
'STREAM_FILTER_WRITE': 2,
'STREAM_FILTER_ALL': 3,
'STREAM_CLIENT_PERSISTENT': 1,
'STREAM_CLIENT_ASYNC_CONNECT': 2,
'STREAM_CLIENT_CONNECT': 4,
'STREAM_CRYPTO_METHOD_SSLv2_CLIENT': 0,
'STREAM_CRYPTO_METHOD_SSLv3_CLIENT': 1,
'STREAM_CRYPTO_METHOD_SSLv23_CLIENT': 2,
'STREAM_CRYPTO_METHOD_TLS_CLIENT': 3,
'STREAM_CRYPTO_METHOD_SSLv2_SERVER': 4,
'STREAM_CRYPTO_METHOD_SSLv3_SERVER': 5,
'STREAM_CRYPTO_METHOD_SSLv23_SERVER': 6,
'STREAM_CRYPTO_METHOD_TLS_SERVER': 7,
'STREAM_SHUT_RD': 0,
'STREAM_SHUT_WR': 1,
'STREAM_SHUT_RDWR': 2,
'STREAM_PF_INET': 2,
'STREAM_PF_INET6': 23,
'STREAM_PF_UNIX': 1,
'STREAM_IPPROTO_IP': 0,
'STREAM_IPPROTO_TCP': 6,
'STREAM_IPPROTO_UDP': 17,
'STREAM_IPPROTO_ICMP': 1,
'STREAM_IPPROTO_RAW': 255,
'STREAM_SOCK_STREAM': 1,
'STREAM_SOCK_DGRAM': 2,
'STREAM_SOCK_RAW': 3,
'STREAM_SOCK_SEQPACKET': 5,
'STREAM_SOCK_RDM': 4,
'STREAM_PEEK': 2,
'STREAM_OOB': 1,
'STREAM_SERVER_BIND': 4,
'STREAM_SERVER_LISTEN': 8,
'FILE_USE_INCLUDE_PATH': 1,
'FILE_IGNORE_NEW_LINES': 2,
'FILE_SKIP_EMPTY_LINES': 4,
'FILE_APPEND': 8,
'FILE_NO_DEFAULT_CONTEXT': 16,
'PSFS_PASS_ON': 2,
'PSFS_FEED_ME': 1,
'PSFS_ERR_FATAL': 0,
'PSFS_FLAG_NORMAL': 0,
'PSFS_FLAG_FLUSH_INC': 1,
'PSFS_FLAG_FLUSH_CLOSE': 2,
'CRYPT_SALT_LENGTH': 12,
'CRYPT_STD_DES': 1,
'CRYPT_EXT_DES': 0,
'CRYPT_MD5': 1,
'CRYPT_BLOWFISH': 0,
'DIRECTORY_SEPARATOR': '\\',
'PATH_SEPARATOR': ';',
'GLOB_BRACE': 128,
'GLOB_MARK': 8,
'GLOB_NOSORT': 32,
'GLOB_NOCHECK': 16,
'GLOB_NOESCAPE': 4096,
'GLOB_ERR': 4,
'GLOB_ONLYDIR': 1073741824,
'GLOB_AVAILABLE_FLAGS': 1073746108,
'LOG_EMERG': 1,
'LOG_ALERT': 1,
'LOG_CRIT': 1,
'LOG_ERR': 4,
'LOG_WARNING': 5,
'LOG_NOTICE': 6,
'LOG_INFO': 6,
'LOG_DEBUG': 6,
'LOG_KERN': 0,
'LOG_USER': 8,
'LOG_MAIL': 16,
'LOG_DAEMON': 24,
'LOG_AUTH': 32,
'LOG_SYSLOG': 40,
'LOG_LPR': 48,
'LOG_NEWS': 56,
'LOG_UUCP': 64,
'LOG_CRON': 72,
'LOG_AUTHPRIV': 80,
'LOG_PID': 1,
'LOG_CONS': 2,
'LOG_ODELAY': 4,
'LOG_NDELAY': 8,
'LOG_NOWAIT': 16,
'LOG_PERROR': 32,
'EXTR_OVERWRITE': 0,
'EXTR_SKIP': 1,
'EXTR_PREFIX_SAME': 2,
'EXTR_PREFIX_ALL': 3,
'EXTR_PREFIX_INVALID': 4,
'EXTR_PREFIX_IF_EXISTS': 5,
'EXTR_IF_EXISTS': 6,
'EXTR_REFS': 256,
'SORT_ASC': 4,
'SORT_DESC': 3,
'SORT_REGULAR': 0,
'SORT_NUMERIC': 1,
'SORT_STRING': 2,
'SORT_LOCALE_STRING': 5,
'CASE_LOWER': 0,
'CASE_UPPER': 1,
'COUNT_NORMAL': 0,
'COUNT_RECURSIVE': 1,
'ASSERT_ACTIVE': 1,
'ASSERT_CALLBACK': 2,
'ASSERT_BAIL': 3,
'ASSERT_WARNING': 4,
'ASSERT_QUIET_EVAL': 5,
'STREAM_USE_PATH': 1,
'STREAM_IGNORE_URL': 2,
'STREAM_ENFORCE_SAFE_MODE': 4,
'STREAM_REPORT_ERRORS': 8,
'STREAM_MUST_SEEK': 16,
'STREAM_URL_STAT_LINK': 1,
'STREAM_URL_STAT_QUIET': 2,
'STREAM_MKDIR_RECURSIVE': 1,
'STREAM_IS_URL': 1,
'IMAGETYPE_GIF': 1,
'IMAGETYPE_JPEG': 2,
'IMAGETYPE_PNG': 3,
'IMAGETYPE_SWF': 4,
'IMAGETYPE_PSD': 5,
'IMAGETYPE_BMP': 6,
'IMAGETYPE_TIFF_II': 7,
'IMAGETYPE_TIFF_MM': 8,
'IMAGETYPE_JPC': 9,
'IMAGETYPE_JP2': 10,
'IMAGETYPE_JPX': 11,
'IMAGETYPE_JB2': 12,
'IMAGETYPE_SWC': 13,
'IMAGETYPE_IFF': 14,
'IMAGETYPE_WBMP': 15,
'IMAGETYPE_JPEG2000': 9,
'IMAGETYPE_XBM': 16
}
};
if (this.php_js && this.php_js.ini && this.php_js.ini['phpjs.get_defined_constants.setConstants'] && this.php_js.ini['phpjs.get_defined_constants.setConstants'].local_value) {
// Allow us to set a configuration to let this function set global constants
if (this.php_js.ini['phpjs.get_defined_constants.setConstants'].local_value === 'this') {
win = this;
} else if (this.php_js.ini['phpjs.get_defined_constants.setConstants'].local_value === 'thisExt') {
win = this;
thisExt = true;
} else {
win = this.window;
}
for (ext in constObj) {
if (thisExt) { // Allows namespacing constants (e.g,. this.pcre.PREG_OFFSET_CAPTURE)
for (cnst in constObj[ext]) {
if (!win[ext]) {
win[ext] = {};
}
// These will not be real constants!
win[ext][cnst] = constObj[ext][cnst];
}
} else {
for (cnst in constObj[ext]) {
if (this === this.window) { // Take advantage of fact, in this case we can make real constants
this.define(cnst, constObj[ext][cnst]);
} else {
// These will not be real constants!
win[cnst] = constObj[ext][cnst];
}
}
}
}
}
if (typeof categorize !== 'undefined') { // PHP will return if any argument is set, even false
return constObj;
}
for (ext in constObj) {
for (cnst in constObj[ext]) {
flatConstObj[cnst] = constObj[ext][cnst];
}
}
return flatConstObj;
}