UNPKG

antlr4

Version:

JavaScript runtime for ANTLR4

65 lines (63 loc) 2 kB
/* Copyright (c) 2012-2022 The ANTLR Project Contributors. All rights reserved. * Use is of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ /*! https://mths.be/codepointat v0.2.0 by @mathias */ if (!String.prototype.codePointAt) { (function() { 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` var defineProperty = (function() { // IE 8 only supports `Object.defineProperty` on DOM elements let result; try { const object = {}; const $defineProperty = Object.defineProperty; result = $defineProperty(object, object, object) && $defineProperty; } catch(error) { /* eslint no-empty: [ "off" ] */ } return result; }()); const codePointAt = function(position) { if (this == null) { throw TypeError(); } const string = String(this); const size = string.length; // `ToInteger` let index = position ? Number(position) : 0; if (index !== index) { // better `isNaN` index = 0; } // Account for out-of-bounds indices: if (index < 0 || index >= size) { return undefined; } // Get the first code unit const first = string.charCodeAt(index); let second; if ( // check if it’s the start of a surrogate pair first >= 0xD800 && first <= 0xDBFF && // high surrogate size > index + 1 // there is a next code unit ) { second = string.charCodeAt(index + 1); if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; } } return first; }; if (defineProperty) { defineProperty(String.prototype, 'codePointAt', { 'value': codePointAt, 'configurable': true, 'writable': true }); } else { String.prototype.codePointAt = codePointAt; } }()); } const CodePointAt = String.prototype.codePointAt; export default CodePointAt;