diff options
| author | John MacFarlane <jgm@berkeley.edu> | 2014-10-18 16:16:49 -0700 | 
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2014-10-18 16:39:33 -0700 | 
| commit | fb143fbc1705bb4d59b5d4ebbb5454866cf1b76c (patch) | |
| tree | 1becd79cad3a3554197b2b66b5bdcd0b7b49952f /js/lib/from-code-point.js | |
| parent | 3bd95fb5113d5e805556a124a3a4e84c43882adb (diff) | |
Use browserify to make js code more modular.
* Moved js library code to `js/lib`.
* `js/stmd.js` is now generated from these files using browserify.
* Factored out `html5-entities.js` and `from-code-point.js` from main
  js parsing code (which is now `index.js`).
* Moved `js/markdown` to `js/bin`.
Diffstat (limited to 'js/lib/from-code-point.js')
| -rw-r--r-- | js/lib/from-code-point.js | 65 | 
1 files changed, 65 insertions, 0 deletions
diff --git a/js/lib/from-code-point.js b/js/lib/from-code-point.js new file mode 100644 index 0000000..bf1dd99 --- /dev/null +++ b/js/lib/from-code-point.js @@ -0,0 +1,65 @@ +// polyfill for fromCodePoint: +// https://github.com/mathiasbynens/String.fromCodePoint +/*! http://mths.be/fromcodepoint v0.2.1 by @mathias */ +if (!String.fromCodePoint) { +    (function() { +        var defineProperty = (function() { +            // IE 8 only supports `Object.defineProperty` on DOM elements +            try { +                var object = {}; +                var $defineProperty = Object.defineProperty; +                var result = $defineProperty(object, object, object) && $defineProperty; +            } catch(error) {} +            return result; +        }()); +        var stringFromCharCode = String.fromCharCode; +        var floor = Math.floor; +        var fromCodePoint = function(_) { +            var MAX_SIZE = 0x4000; +            var codeUnits = []; +            var highSurrogate; +            var lowSurrogate; +            var index = -1; +            var length = arguments.length; +            if (!length) { +                return ''; +            } +            var result = ''; +            while (++index < length) { +                var codePoint = Number(arguments[index]); +                if ( +                    !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` +                        codePoint < 0 || // not a valid Unicode code point +                        codePoint > 0x10FFFF || // not a valid Unicode code point +                        floor(codePoint) != codePoint // not an integer +                ) { +                    return String.fromCharCode(0xFFFD); +                } +                if (codePoint <= 0xFFFF) { // BMP code point +                    codeUnits.push(codePoint); +                } else { // Astral code point; split in surrogate halves +                    // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae +                    codePoint -= 0x10000; +                    highSurrogate = (codePoint >> 10) + 0xD800; +                    lowSurrogate = (codePoint % 0x400) + 0xDC00; +                    codeUnits.push(highSurrogate, lowSurrogate); +                } +                if (index + 1 == length || codeUnits.length > MAX_SIZE) { +                    result += stringFromCharCode.apply(null, codeUnits); +                    codeUnits.length = 0; +                } +            } +            return result; +        }; +        if (defineProperty) { +            defineProperty(String, 'fromCodePoint', { +                'value': fromCodePoint, +                'configurable': true, +                'writable': true +            }); +        } else { +            String.fromCodePoint = fromCodePoint; +        } +    }()); +} +  | 
