123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- 'use strict';
- function _class(obj) { return Object.prototype.toString.call(obj); }
- function isString(obj) { return _class(obj) === '[object String]'; }
- var _hasOwnProperty = Object.prototype.hasOwnProperty;
- function has(object, key) {
- return _hasOwnProperty.call(object, key);
- }
- function assign(obj /*from1, from2, from3, ...*/) {
- var sources = Array.prototype.slice.call(arguments, 1);
- sources.forEach(function (source) {
- if (!source) { return; }
- if (typeof source !== 'object') {
- throw new TypeError(source + 'must be object');
- }
- Object.keys(source).forEach(function (key) {
- obj[key] = source[key];
- });
- });
- return obj;
- }
- function arrayReplaceAt(src, pos, newElements) {
- return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));
- }
- function isValidEntityCode(c) {
-
-
- if (c >= 0xD800 && c <= 0xDFFF) { return false; }
-
- if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }
- if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }
-
- if (c >= 0x00 && c <= 0x08) { return false; }
- if (c === 0x0B) { return false; }
- if (c >= 0x0E && c <= 0x1F) { return false; }
- if (c >= 0x7F && c <= 0x9F) { return false; }
-
- if (c > 0x10FFFF) { return false; }
- return true;
- }
- function fromCodePoint(c) {
-
- if (c > 0xffff) {
- c -= 0x10000;
- var surrogate1 = 0xd800 + (c >> 10),
- surrogate2 = 0xdc00 + (c & 0x3ff);
- return String.fromCharCode(surrogate1, surrogate2);
- }
- return String.fromCharCode(c);
- }
- var UNESCAPE_MD_RE = /\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g;
- var ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;
- var UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');
- var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;
- var entities = require('./entities');
- function replaceEntityPattern(match, name) {
- var code = 0;
- if (has(entities, name)) {
- return entities[name];
- }
- if (name.charCodeAt(0) === 0x23 && DIGITAL_ENTITY_TEST_RE.test(name)) {
- code = name[1].toLowerCase() === 'x' ?
- parseInt(name.slice(2), 16)
- :
- parseInt(name.slice(1), 10);
- if (isValidEntityCode(code)) {
- return fromCodePoint(code);
- }
- }
- return match;
- }
- function unescapeMd(str) {
- if (str.indexOf('\\') < 0) { return str; }
- return str.replace(UNESCAPE_MD_RE, '$1');
- }
- function unescapeAll(str) {
- if (str.indexOf('\\') < 0 && str.indexOf('&') < 0) { return str; }
- return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {
- if (escaped) { return escaped; }
- return replaceEntityPattern(match, entity);
- });
- }
- var HTML_ESCAPE_TEST_RE = /[&<>"]/;
- var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g;
- var HTML_REPLACEMENTS = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"'
- };
- function replaceUnsafeChar(ch) {
- return HTML_REPLACEMENTS[ch];
- }
- function escapeHtml(str) {
- if (HTML_ESCAPE_TEST_RE.test(str)) {
- return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);
- }
- return str;
- }
- var REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g;
- function escapeRE(str) {
- return str.replace(REGEXP_ESCAPE_RE, '\\$&');
- }
- function isSpace(code) {
- switch (code) {
- case 0x09:
- case 0x20:
- return true;
- }
- return false;
- }
- function isWhiteSpace(code) {
- if (code >= 0x2000 && code <= 0x200A) { return true; }
- switch (code) {
- case 0x09:
- case 0x0A:
- case 0x0B:
- case 0x0C:
- case 0x0D:
- case 0x20:
- case 0xA0:
- case 0x1680:
- case 0x202F:
- case 0x205F:
- case 0x3000:
- return true;
- }
- return false;
- }
- var UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');
- function isPunctChar(ch) {
- return UNICODE_PUNCT_RE.test(ch);
- }
- function isMdAsciiPunct(ch) {
- switch (ch) {
- case 0x21:
- case 0x22:
- case 0x23:
- case 0x24:
- case 0x25:
- case 0x26:
- case 0x27:
- case 0x28:
- case 0x29:
- case 0x2A:
- case 0x2B:
- case 0x2C:
- case 0x2D:
- case 0x2E:
- case 0x2F:
- case 0x3A:
- case 0x3B:
- case 0x3C:
- case 0x3D:
- case 0x3E:
- case 0x3F:
- case 0x40:
- case 0x5B:
- case 0x5C:
- case 0x5D:
- case 0x5E:
- case 0x5F:
- case 0x60:
- case 0x7B:
- case 0x7C:
- case 0x7D:
- case 0x7E:
- return true;
- default:
- return false;
- }
- }
- function normalizeReference(str) {
-
-
-
- return str.trim().replace(/\s+/g, ' ').toUpperCase();
- }
- exports.lib = {};
- exports.lib.mdurl = require('mdurl');
- exports.lib.ucmicro = require('uc.micro');
- exports.assign = assign;
- exports.isString = isString;
- exports.has = has;
- exports.unescapeMd = unescapeMd;
- exports.unescapeAll = unescapeAll;
- exports.isValidEntityCode = isValidEntityCode;
- exports.fromCodePoint = fromCodePoint;
- exports.escapeHtml = escapeHtml;
- exports.arrayReplaceAt = arrayReplaceAt;
- exports.isSpace = isSpace;
- exports.isWhiteSpace = isWhiteSpace;
- exports.isMdAsciiPunct = isMdAsciiPunct;
- exports.isPunctChar = isPunctChar;
- exports.escapeRE = escapeRE;
- exports.normalizeReference = normalizeReference;
|