123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- "use strict";
- /**
- * Copyright (C) 2016-2019 Michael Kourlas
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.isUndefined = exports.fixName = exports.validateName = exports.validateSingleChar = exports.fixChar = exports.validateChar = void 0;
- /**
- * Returns true if the specified string only contains characters permitted by
- * the XML specification.
- */
- function validateChar(str) {
- for (var i = 0; i < str.length; i++) {
- var firstChar = str.charCodeAt(i);
- if (firstChar === 0x9 || firstChar === 0xA || firstChar === 0xD
- || (firstChar >= 0x20 && firstChar <= 0xD7FF)
- || (firstChar >= 0xE000 && firstChar <= 0xFFFD)) {
- continue;
- }
- if (i + 1 === str.length) {
- return false;
- }
- // UTF-16 surrogate characters
- var secondChar = str.charCodeAt(i + 1);
- if ((firstChar >= 0xD800 && firstChar <= 0xDBFF)
- && (secondChar >= 0xDC00 && secondChar <= 0xDFFF)) {
- i++;
- continue;
- }
- return false;
- }
- return true;
- }
- exports.validateChar = validateChar;
- /**
- * Returns a version of the specified string that only contains characters
- * permitted by the XML specification, with invalid characters replaced
- * by the replacement character U+FFFD.
- */
- function fixChar(str) {
- var newStr = "";
- for (var i = 0; i < str.length; i++) {
- var firstChar = str.charCodeAt(i);
- if (firstChar === 0x9 || firstChar === 0xA || firstChar === 0xD
- || (firstChar >= 0x20 && firstChar <= 0xD7FF)
- || (firstChar >= 0xE000 && firstChar <= 0xFFFD)) {
- newStr += str[i];
- continue;
- }
- if (i + 1 === str.length) {
- newStr += "\uFFFD";
- return newStr;
- }
- // UTF-16 surrogate characters
- var secondChar = str.charCodeAt(i + 1);
- if ((firstChar >= 0xD800 && firstChar <= 0xDBFF)
- && (secondChar >= 0xDC00 && secondChar <= 0xDFFF)) {
- newStr += str[i] + str[i + 1];
- i++;
- continue;
- }
- newStr += "\uFFFD";
- }
- return newStr;
- }
- exports.fixChar = fixChar;
- /**
- * Returns true if the specified string only contains a single character, and
- * that this character is permitted by the XML specification.
- */
- function validateSingleChar(str) {
- if (str.length === 0) {
- return false;
- }
- var firstChar = str.charCodeAt(0);
- if (str.length === 1) {
- return (firstChar === 0x9 || firstChar === 0xA || firstChar === 0xD
- || (firstChar >= 0x20 && firstChar <= 0xD7FF)
- || (firstChar >= 0xE000 && firstChar <= 0xFFFD));
- }
- if (str.length !== 2) {
- return false;
- }
- // UTF-16 surrogate characters
- var secondChar = str.charCodeAt(1);
- return ((firstChar >= 0xD800 && firstChar <= 0xDBFF)
- && (secondChar >= 0xDC00 && secondChar <= 0xDFFF));
- }
- exports.validateSingleChar = validateSingleChar;
- /**
- * Returns true if the specified string only contains characters permitted by
- * the XML specification for names.
- */
- function validateName(str) {
- if (str.length === 0) {
- return false;
- }
- var initialFirstChar = str.charCodeAt(0);
- var initialFirstCharMatch = (initialFirstChar === 0x3A
- || initialFirstChar === 0x5F
- || (initialFirstChar >= 0x41 && initialFirstChar <= 0x5A)
- || (initialFirstChar >= 0x61 && initialFirstChar <= 0x7A)
- || (initialFirstChar >= 0xC0 && initialFirstChar <= 0xD6)
- || (initialFirstChar >= 0xD8 && initialFirstChar <= 0xF6)
- || (initialFirstChar >= 0XF8 && initialFirstChar <= 0X2FF)
- || (initialFirstChar >= 0x370 && initialFirstChar <= 0x37D)
- || (initialFirstChar >= 0x37F && initialFirstChar <= 0X1FFF)
- || (initialFirstChar >= 0x200C && initialFirstChar <= 0x200D)
- || (initialFirstChar >= 0x2070 && initialFirstChar <= 0x218F)
- || (initialFirstChar >= 0x2C00 && initialFirstChar <= 0x2FEF)
- || (initialFirstChar >= 0x3001 && initialFirstChar <= 0xD7FF)
- || (initialFirstChar >= 0xF900 && initialFirstChar <= 0xFDCF)
- || (initialFirstChar >= 0xFDF0 && initialFirstChar <= 0xFFFD));
- if (str.length === 1) {
- return initialFirstCharMatch;
- }
- // UTF-16 surrogate characters
- var initialSecondChar = str.charCodeAt(1);
- var initialSecondCharMatch = ((initialFirstChar >= 0xD800 && initialFirstChar <= 0xDB7F)
- && (initialSecondChar >= 0xDC00 && initialSecondChar <= 0xDFFF));
- if (!initialFirstCharMatch && !initialSecondCharMatch) {
- return false;
- }
- var start = initialSecondCharMatch ? 2 : 1;
- for (var i = start; i < str.length; i++) {
- var firstChar = str.charCodeAt(i);
- if (firstChar === 0x3A
- || firstChar === 0x5F
- || firstChar === 0x2D
- || firstChar === 0x2E
- || firstChar === 0xB7
- || (firstChar >= 0x30 && firstChar <= 0x39)
- || (firstChar >= 0x41 && firstChar <= 0x5A)
- || (firstChar >= 0x61 && firstChar <= 0x7A)
- || (firstChar >= 0xC0 && firstChar <= 0xD6)
- || (firstChar >= 0xD8 && firstChar <= 0xF6)
- || (firstChar >= 0XF8 && firstChar <= 0X2FF)
- || (firstChar >= 0x300 && firstChar <= 0x36F)
- || (firstChar >= 0x370 && firstChar <= 0x37D)
- || (firstChar >= 0x37F && firstChar <= 0X1FFF)
- || (firstChar >= 0x200C && firstChar <= 0x200D)
- || (firstChar >= 0x203F && firstChar <= 0x2040)
- || (firstChar >= 0x2070 && firstChar <= 0x218F)
- || (firstChar >= 0x2C00 && firstChar <= 0x2FEF)
- || (firstChar >= 0x3001 && firstChar <= 0xD7FF)
- || (firstChar >= 0xF900 && firstChar <= 0xFDCF)
- || (firstChar >= 0xFDF0 && firstChar <= 0xFFFD)) {
- continue;
- }
- if (i + 1 === str.length) {
- return false;
- }
- // UTF-16 surrogate characters
- var secondChar = str.charCodeAt(i + 1);
- if ((firstChar >= 0xD800 && firstChar <= 0xDB7F)
- && (secondChar >= 0xDC00 && secondChar <= 0xDFFF)) {
- i++;
- continue;
- }
- return false;
- }
- return true;
- }
- exports.validateName = validateName;
- /**
- * Returns a version of the specified string that only contains characters
- * permitted by the XML specification for names, with invalid characters
- * replaced by the replacement character U+FFFD.
- */
- function fixName(str) {
- var newStr = "";
- if (str.length === 0) {
- return newStr;
- }
- var initialFirstChar = str.charCodeAt(0);
- var initialFirstCharMatch = (initialFirstChar === 0x3A
- || initialFirstChar === 0x5F
- || (initialFirstChar >= 0x41 && initialFirstChar <= 0x5A)
- || (initialFirstChar >= 0x61 && initialFirstChar <= 0x7A)
- || (initialFirstChar >= 0xC0 && initialFirstChar <= 0xD6)
- || (initialFirstChar >= 0xD8 && initialFirstChar <= 0xF6)
- || (initialFirstChar >= 0XF8 && initialFirstChar <= 0X2FF)
- || (initialFirstChar >= 0x370 && initialFirstChar <= 0x37D)
- || (initialFirstChar >= 0x37F && initialFirstChar <= 0X1FFF)
- || (initialFirstChar >= 0x200C && initialFirstChar <= 0x200D)
- || (initialFirstChar >= 0x2070 && initialFirstChar <= 0x218F)
- || (initialFirstChar >= 0x2C00 && initialFirstChar <= 0x2FEF)
- || (initialFirstChar >= 0x3001 && initialFirstChar <= 0xD7FF)
- || (initialFirstChar >= 0xF900 && initialFirstChar <= 0xFDCF)
- || (initialFirstChar >= 0xFDF0 && initialFirstChar <= 0xFFFD));
- if (str.length === 1) {
- if (initialFirstCharMatch) {
- newStr = str[0];
- }
- else {
- newStr = "\uFFFD";
- }
- return newStr;
- }
- // UTF-16 surrogate characters
- var initialSecondChar = str.charCodeAt(1);
- var initialSecondCharMatch = ((initialFirstChar >= 0xD800 && initialFirstChar <= 0xDB7F)
- && (initialSecondChar >= 0xDC00 && initialSecondChar <= 0xDFFF));
- if (initialSecondCharMatch) {
- newStr = str[0] + str[1];
- }
- else if (initialFirstCharMatch) {
- newStr = str[0];
- }
- else {
- newStr = "\uFFFD";
- }
- var start = initialSecondCharMatch ? 2 : 1;
- for (var i = start; i < str.length; i++) {
- var firstChar = str.charCodeAt(i);
- if (firstChar === 0x3A
- || firstChar === 0x5F
- || firstChar === 0x2D
- || firstChar === 0x2E
- || firstChar === 0xB7
- || (firstChar >= 0x30 && firstChar <= 0x39)
- || (firstChar >= 0x41 && firstChar <= 0x5A)
- || (firstChar >= 0x61 && firstChar <= 0x7A)
- || (firstChar >= 0xC0 && firstChar <= 0xD6)
- || (firstChar >= 0xD8 && firstChar <= 0xF6)
- || (firstChar >= 0XF8 && firstChar <= 0X2FF)
- || (firstChar >= 0x300 && firstChar <= 0x36F)
- || (firstChar >= 0x370 && firstChar <= 0x37D)
- || (firstChar >= 0x37F && firstChar <= 0X1FFF)
- || (firstChar >= 0x200C && firstChar <= 0x200D)
- || (firstChar >= 0x203F && firstChar <= 0x2040)
- || (firstChar >= 0x2070 && firstChar <= 0x218F)
- || (firstChar >= 0x2C00 && firstChar <= 0x2FEF)
- || (firstChar >= 0x3001 && firstChar <= 0xD7FF)
- || (firstChar >= 0xF900 && firstChar <= 0xFDCF)
- || (firstChar >= 0xFDF0 && firstChar <= 0xFFFD)) {
- newStr += str[i];
- continue;
- }
- if (i + 1 === str.length) {
- newStr += "\uFFFD";
- return newStr;
- }
- // UTF-16 surrogate characters
- var secondChar = str.charCodeAt(i + 1);
- if ((firstChar >= 0xD800 && firstChar <= 0xDB7F)
- && (secondChar >= 0xDC00 && secondChar <= 0xDFFF)) {
- newStr += str[i] + str[i + 1];
- i++;
- continue;
- }
- newStr += "\uFFFD";
- }
- return newStr;
- }
- exports.fixName = fixName;
- /**
- * Returns true if the specified value is undefined.
- */
- function isUndefined(val) {
- return Object.prototype.toString.call(val) === "[object Undefined]";
- }
- exports.isUndefined = isUndefined;
|