@newview/tools 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools.esm.js +1 -1
- package/dist/tools.esm.js.map +1 -1
- package/package.json +4 -3
- package/readme.md +3 -0
- package/tsconfig.json +2 -2
- package/types/index.d.ts +3 -0
- package/types/supcan/SupcanReport.d.ts +1077 -0
- package/types/supcan/reportModel.d.ts +80 -0
- package/types/supcan/supcan/dev/nstd.d.ts +26 -0
- package/types/supcan/supcan/dynaload-jQuery.d.ts +26 -0
- package/types/supcan/supcan/dynaload.d.ts +13 -0
- package/types/supcan/supcan/dynaloadNG.d.ts +26 -0
- package/types/supcan/supcan/echarts/chart/bar.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/chord.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/eventRiver.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/force.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/funnel.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/gauge.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/heatmap.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/k.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/line.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/map.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/pie.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/radar.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/scatter.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/tree.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/treemap.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/venn.d.ts +0 -0
- package/types/supcan/supcan/echarts/chart/wordCloud.d.ts +0 -0
- package/types/supcan/supcan/echarts/echarts.d.ts +3 -0
- package/types/supcan/supcan/echarts/theme/blue.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/dark.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/default.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/gray.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/green.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/helianthus.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/infographic.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/macarons.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/macarons2.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/mint.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/red.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/roma.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/sakura.d.ts +0 -0
- package/types/supcan/supcan/echarts/theme/shine.d.ts +0 -0
- package/types/supcan/supcan/format_freeform/nstd.d.ts +26 -0
- package/types/supcan/supcan/format_treelist/nstd.d.ts +26 -0
- package/types/supcan/validatorHelper.d.ts +281 -0
package/dist/tools.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.esm.js","sources":["../src/Helper/DateHelper.ts","../src/Helper/StringHelper.ts","../src/Helper/ArrayHelper.ts","../src/Utilities.ts"],"sourcesContent":["import moment, { unitOfTime } from 'moment';\r\n\r\nexport class DateHelper {\r\n\r\n /**\r\n * 增加时间\r\n * @param date 日期\r\n * @param value 值\r\n * @param unit years: 年 quarters: 季度 months: 月 weeks: 周 days: 天 hours: 小时 minutes: 分钟 seconds: 秒 milliseconds: 毫秒\r\n */\r\n add(date: Date, value: number, unit: \"years\" | \"quarters\" | \"months\" | \"weeks\" | \"days\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\"): Date {\r\n return moment(date).add(value, unit).toDate();\r\n }\r\n\r\n /**\r\n * 减去时间\r\n * @param date 日期\r\n * @param value 值\r\n * @param unit years: 年 quarters: 季度 months: 月 weeks: 周 days: 天 hours: 小时 minutes: 分钟 seconds: 秒 milliseconds: 毫秒\r\n */\r\n subtract(date: Date, value: number, unit: \"years\" | \"quarters\" | \"months\" | \"weeks\" | \"days\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\"): Date {\r\n return moment(date).subtract(value, unit).toDate();\r\n }\r\n\r\n /**\r\n * 通过将原始的 Date 设置为时间单位的开头来对其进行更改。\r\n * @param date 日期\r\n * @param unitOfTime \r\n * year: 年 (设置为今年一月1日上午 12:00)\r\n * month: 月 (设置为本月1日上午 12:00)\r\n * quarter: 季度 (设置为当前季度的开始,即每月的第一天上午 12:00)\r\n * week: 周 (设置为本周的第一天上午 12:00)\r\n * isoWeek: 周 (根据 ISO 8601 设置为本周的第一天上午 12:00)\r\n * day: 天 (设置为今天上午 12:00)\r\n * date: 天 (设置为今天上午 12:00)\r\n * hour: 小时 (设置为当前时间,但是 0 分钟、0 秒钟、0 毫秒)\r\n * minute: 分钟 (设置为当前时间,但是 0 秒钟、0 毫秒)\r\n * second: 秒 (设置为当前时间,但是 0 毫秒)\r\n */\r\n startOf(date: Date, unitOfTime: 'year' | 'month' | 'quarter' | 'week' | 'isoWeek' | 'day' | 'date' | 'hour' | 'minute' | 'second'): Date {\r\n return moment(date).startOf(unitOfTime).toDate();\r\n }\r\n\r\n /**\r\n * 通过将原始的 Date 设置为时间单位的结尾来对其进行更改。\r\n * @param date 日期\r\n * @param unitOfTime \r\n * year: 年\r\n * month: 月\r\n * quarter: 季度\r\n * week: 周\r\n * isoWeek: 周\r\n * day: 天\r\n * date: 天\r\n * hour: 小时\r\n * minute: 分钟\r\n * second: 秒\r\n */\r\n endOf(date: Date, unitOfTime: 'year' | 'month' | 'quarter' | 'week' | 'isoWeek' | 'day' | 'date' | 'hour' | 'minute' | 'second'): Date {\r\n return moment(date).endOf(unitOfTime).toDate();\r\n }\r\n\r\n /**\r\n * 格式化时间\r\n * @param date 日期\r\n * @param format \r\n * 年份 | YY | 70 71 ... 29 30\r\n * YYYY | 1970 1971 ... 2029 2030\r\n * Y | 1970 1971 ... 9999 +10000 +10001\r\n * 注意:对于 9999 年以后的日期,这符合 ISO 8601 标准。\r\n * 月份\t | M | 1 2 ... 11 12\r\n * Mo | 1st 2nd ... 11th 12th\r\n * MM | 01 02 ... 11 12\r\n * MMM | Jan Feb ... Nov Dec\r\n * MMMM |\tJanuary February ... November December\r\n * 月份的日期 | D | 1 2 ... 30 31\r\n * Do | 1st 2nd ... 30th 31st\r\n * DD | 01 02 ... 30 31\r\n * 小时 | H | 0 1 ... 22 23\r\n * HH | 00 01 ... 22 23\r\n * h | 1 2 ... 11 12\r\n * hh | 01 02 ... 11 12\r\n * k | 1 2 ... 23 24\r\n * kk | 01 02 ... 23 24\r\n * 分钟 | m | 0 1 ... 58 59\r\n * mm | 00 01 ... 58 59\r\n * 秒钟 | s | 0 1 ... 58 59\r\n * ss | 00 01 ... 58 59\r\n * 小数秒钟 | S | 0 1 ... 8 9\r\n * SS | 00 01 ... 98 99\r\n * SSS | 000 001 ... 998 999\r\n * SSSS | ... SSSSSSSSS\t000[0..] 001[0..] ... 998[0..] 999[0..]\r\n * ------------------------------------------------------------------------------------- \r\n * 周年 | gg | 70 71 ... 29 30\r\n * gggg | 1970 1971 ... 2029 2030\r\n * 周年(ISO) | GG | 70 71 ... 29 30\r\n * GGGG | 1970 1971 ... 2029 2030 \r\n * 季度 | Q | 1 2 3 4\r\n * Qo | 1st 2nd 3rd 4th\r\n * 年份的日期 | DDD | 1 2 ... 364 365\r\n * DDDo | 1st 2nd ... 364th 365th\r\n * DDDD | 001 002 ... 364 365\r\n * 星期几 | d | 0 1 ... 5 6\r\n * do | 0th 1st ... 5th 6th\r\n * dd | Su Mo ... Fr Sa\r\n * ddd | Sun Mon ... Fri Sat\r\n * dddd | Sunday Monday ... Friday Saturday\r\n * 星期几(语言环境) | e | 0 1 ... 5 6\r\n * 星期几(ISO) | E | 1 2 ... 6 7\r\n * 年份的星期 | w | 1 2 ... 52 53\r\n * wo | 1st 2nd ... 52nd 53rd\r\n * ww | 01 02 ... 52 53\r\n * 年份的星期(ISO) | W | 1 2 ... 52 53\r\n * Wo | 1st 2nd ... 52nd 53rd\r\n * WW | 01 02 ... 52 53\r\n * 子午线 | A | AM PM\r\n * a | am pm\r\n * 时区 | z or zz | EST CST ... MST PST\r\n * 注意:从 1.6.0 版本开始,z/zz 格式的令牌已从普通的 moment 对象中弃用。 在此处了解更多信息。 但是,如果将特定时区与 moment-timezone 插件一起使用,它们会起作用。\r\n * Z | -07:00 -06:00 ... +06:00 +07:00\r\n * ZZ | -0700 -0600 ... +0600 +0700\r\n * Unix 时间戳 | X | 1360013296\r\n * Unix 毫秒时间戳 | x | 1360013296123\r\n */\r\n format(date: Date, format: string = \"YYYY-MM-DD HH:mm:ss\"): string {\r\n return moment(date).format(format);\r\n }\r\n\r\n /**\r\n * 获取另一个度量单位中的差异\r\n * @param date 日期\r\n * @param b 对比的时间\r\n * @param unitOfTime 默认为毫秒\r\n * year: 年\r\n * month: 月\r\n * quarter: 季度\r\n * week: 周\r\n * isoWeek: 周\r\n * day: 天\r\n * date: 天\r\n * hour: 小时\r\n * minute: 分钟\r\n * second: 秒 \r\n * @param precise 是否允许小数\r\n */\r\n diff(date: Date, b: Date | string, unitOfTime?: unitOfTime.Diff, precise?: boolean): number {\r\n return moment(date).diff(b, unitOfTime, precise);\r\n }\r\n\r\n /**\r\n * 获取当前是周几\r\n * 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六\r\n * @param date 日期\r\n */\r\n getWeekDay(date: Date): string {\r\n const weeks = new Array(\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\");\r\n return weeks[moment(date).weekday()];\r\n }\r\n}\r\n\r\nexport const dateHelper: DateHelper = new DateHelper();","import { utilities } from \"../Utilities\";\r\nimport moment, { Moment } from 'moment';\r\nimport CryptoJs from 'crypto-js'\r\n\r\nconst base64EncodeChars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\nconst base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57,\r\n 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6,\r\n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\r\n 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\r\n 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,\r\n -1, -1);\r\n\r\nexport class StringHelper {\r\n /**\r\n * 加密 Base64\r\n * @param str 字符串\r\n */\r\n encodeToBase64(str: string): string {\r\n if (utilities.isNull(str))\r\n return \"\";\r\n let out, i, len;\r\n let c1, c2, c3;\r\n len = str.length;\r\n i = 0;\r\n out = \"\";\r\n while (i < len) {\r\n c1 = str.charCodeAt(i++) & 0xff;\r\n if (i == len) {\r\n out += base64EncodeChars.charAt(c1 >> 2);\r\n out += base64EncodeChars.charAt((c1 & 0x3) << 4);\r\n out += \"==\";\r\n break\r\n }\r\n c2 = str.charCodeAt(i++);\r\n if (i == len) {\r\n out += base64EncodeChars.charAt(c1 >> 2);\r\n out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));\r\n out += base64EncodeChars.charAt((c2 & 0xF) << 2);\r\n out += \"=\";\r\n break\r\n }\r\n c3 = str.charCodeAt(i++);\r\n out += base64EncodeChars.charAt(c1 >> 2);\r\n out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));\r\n out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));\r\n out += base64EncodeChars.charAt(c3 & 0x3F)\r\n }\r\n return out\r\n }\r\n\r\n /**\r\n * 解密 Base64\r\n * @param str 字符串\r\n */\r\n decodeBase64(str: string): string {\r\n if (utilities.isNull(str))\r\n return \"\";\r\n let c1, c2, c3, c4;\r\n let i, len, out;\r\n len = str.length;\r\n i = 0;\r\n out = \"\";\r\n while (i < len) {\r\n do {\r\n c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]\r\n } while (i < len && c1 == -1);\r\n if (c1 == -1) break;\r\n do {\r\n c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]\r\n } while (i < len && c2 == -1);\r\n if (c2 == -1)\r\n break;\r\n out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));\r\n do {\r\n c3 = str.charCodeAt(i++) & 0xff;\r\n if (c3 == 61) return out;\r\n c3 = base64DecodeChars[c3]\r\n } while (i < len && c3 == -1);\r\n if (c3 == -1) break;\r\n out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));\r\n do {\r\n c4 = str.charCodeAt(i++) & 0xff;\r\n if (c4 == 61) return out;\r\n c4 = base64DecodeChars[c4]\r\n } while (i < len && c4 == -1);\r\n if (c4 == -1) break;\r\n out += String.fromCharCode(((c3 & 0x03) << 6) | c4)\r\n }\r\n return out\r\n }\r\n\r\n /**\r\n * UTF-16 转 UTF-8\r\n * @param str 字符串\r\n */\r\n utf16To8(str: string): string {\r\n let out, i, len, c;\r\n out = \"\";\r\n len = str.length;\r\n for (i = 0; i < len; i++) {\r\n c = str.charCodeAt(i);\r\n if ((c >= 0x0001) && (c <= 0x007F)) {\r\n out += str.charAt(i);\r\n } else if (c > 0x07FF) {\r\n out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));\r\n out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));\r\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));\r\n } else {\r\n out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));\r\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));\r\n }\r\n }\r\n return out;\r\n }\r\n\r\n /**\r\n * UTF-8 转 UTF-16\r\n * @param str 字符串\r\n */\r\n utf8To16(str: string): string {\r\n let out, i, len, c;\r\n let char2, char3;\r\n\r\n out = \"\";\r\n len = str.length;\r\n i = 0;\r\n while (i < len) {\r\n c = str.charCodeAt(i++);\r\n switch (c >> 4) {\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n // 0xxxxxxx\r\n out += str.charAt(i - 1);\r\n break;\r\n case 12:\r\n case 13:\r\n // 110x xxxx 10xx xxxx\r\n char2 = str.charCodeAt(i++);\r\n out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));\r\n break;\r\n case 14:\r\n // 1110 xxxx 10xx xxxx 10xx xxxx\r\n char2 = str.charCodeAt(i++);\r\n char3 = str.charCodeAt(i++);\r\n out += String.fromCharCode(((c & 0x0F) << 12) |\r\n ((char2 & 0x3F) << 6) |\r\n ((char3 & 0x3F) << 0));\r\n break;\r\n }\r\n }\r\n\r\n return out;\r\n }\r\n\r\n /**\r\n * 转换为日期\r\n * @param str 字符串\r\n */\r\n toDate(str: string): Date {\r\n return moment(str.toString()).toDate();\r\n }\r\n\r\n /**\r\n * 转换为Moment\r\n * @param str 字符串\r\n */\r\n toMoment(str: string): Moment {\r\n return moment(str.toString())\r\n }\r\n\r\n /**\r\n * 金额转换为大写\r\n * @param str 字符串\r\n */\r\n convertCurrency(str: string): string {\r\n // 汉字的数字\r\n const cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');\r\n // 基本单位\r\n const cnIntRadice = new Array('', '拾', '佰', '仟');\r\n // 对应整数部分扩展单位\r\n const cnIntUnits = new Array('', '万', '亿', '兆');\r\n // 对应小数部分单位\r\n const cnDecUnits = new Array('角', '分', '毫', '厘');\r\n // 整数金额时后面跟的字符\r\n const cnInteger = '整';\r\n // 整型完以后的单位\r\n const cnIntLast = '元';\r\n // 最大处理的数字\r\n const maxNum = 999999999999999.9999;\r\n // 金额整数部分\r\n let integerNum;\r\n // 金额小数部分\r\n let decimalNum;\r\n // 输出的中文金额字符串\r\n let chineseStr = '';\r\n // 分离金额后用的数组,预定义\r\n let parts;\r\n\r\n if (str == '') {\r\n return '';\r\n }\r\n\r\n let money = parseFloat(str.toString());\r\n if (money == 0) {\r\n chineseStr = cnNums[0] + cnIntLast + cnInteger;\r\n return chineseStr;\r\n }\r\n\r\n if (money >= maxNum) {\r\n // 超出最大处理数字\r\n return '';\r\n }\r\n\r\n // 转换为字符串\r\n if (str.indexOf('.') == -1) {\r\n integerNum = str;\r\n decimalNum = '';\r\n } else {\r\n parts = str.split('.');\r\n integerNum = parts[0];\r\n decimalNum = parts[1].substring(0, 4);\r\n }\r\n\r\n // 获取整型部分转换\r\n if (parseInt(integerNum.toString(), 10) > 0) {\r\n let zeroCount = 0;\r\n let IntLen = integerNum.length;\r\n for (let i = 0; i < IntLen; i++) {\r\n let n = integerNum.substring(i, 1);\r\n let p = IntLen - i - 1;\r\n let q = p / 4;\r\n let m = p % 4;\r\n if (n == '0') {\r\n zeroCount++;\r\n } else {\r\n if (zeroCount > 0) {\r\n chineseStr += cnNums[0];\r\n }\r\n //归零\r\n zeroCount = 0;\r\n chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];\r\n }\r\n if (m == 0 && zeroCount < 4) {\r\n chineseStr += cnIntUnits[q];\r\n }\r\n }\r\n chineseStr += cnIntLast;\r\n }\r\n\r\n // 小数部分\r\n if (decimalNum != '') {\r\n let decLen = decimalNum.length;\r\n for (let i = 0; i < decLen; i++) {\r\n let n = decimalNum.substring(i, 1);\r\n if (n != '0') {\r\n chineseStr += cnNums[Number(n)] + cnDecUnits[i];\r\n }\r\n }\r\n }\r\n\r\n if (chineseStr == '') {\r\n chineseStr += cnNums[0] + cnIntLast + cnInteger;\r\n } else if (decimalNum == '') {\r\n chineseStr += cnInteger;\r\n }\r\n\r\n return chineseStr;\r\n }\r\n\r\n /**\r\n * 隐藏身份证号\r\n * @param str 字符串\r\n */\r\n hiddenIDCardNum(str: string): string {\r\n return str.replace(/(.{4}).*(.{4})/, '$1**********$2')\r\n }\r\n\r\n /**\r\n * 隐藏电话号码\r\n * @param str 字符串\r\n */\r\n hiddenTelNum(str: string): string {\r\n return str.replace(/(.{4}).*(.{4})/, '$1**********$2')\r\n }\r\n\r\n /**\r\n * 左补位\r\n * @param str 字符串\r\n * @param count \r\n * @param pad \r\n */\r\n leftPad(str: string, count: number, pad: string = \"0\"): string {\r\n let nlen = str.length;\r\n let str1 = '';\r\n let i = 0;\r\n do {\r\n str1 += pad\r\n ++i;\r\n } while (i < (count - nlen))\r\n str1 += str;\r\n return str1;\r\n }\r\n\r\n /**\r\n * 加密 AES\r\n * @param str 字符串\r\n * @param key \r\n */\r\n encryptAES(str: string, key: string): string {\r\n let encKey = CryptoJs.enc.Utf8.parse(key);\r\n let srcs = CryptoJs.enc.Utf8.parse(str.toString());\r\n let encrypted = CryptoJs.AES.encrypt(srcs, encKey, {\r\n mode: CryptoJs.mode.ECB,\r\n padding: CryptoJs.pad.Pkcs7\r\n });\r\n return encrypted.toString();\r\n }\r\n\r\n /**\r\n * 解密 AES\r\n * @param str 字符串\r\n * @param key \r\n */\r\n decryptAES(str: string, key: string): string {\r\n let encKey = CryptoJs.enc.Utf8.parse(key);\r\n let decrypt = CryptoJs.AES.decrypt(str.toString(), encKey, {\r\n mode: CryptoJs.mode.ECB,\r\n padding: CryptoJs.pad.Pkcs7\r\n });\r\n return CryptoJs.enc.Utf8.stringify(decrypt).toString();\r\n }\r\n}\r\n\r\nexport const stringHelper: StringHelper = new StringHelper();","import { utilities } from \"../Utilities\";\r\n\r\n\r\nexport class ArrayHelper {\r\n\r\n /**\r\n * IView treeSelect辅助方法\r\n * 根据选择的值,返回title显示\r\n * @param data treeSelect 数据格式\r\n * @param val 所选值的字符串数组\r\n */\r\n public getTreeSelectTitleBaseOnVals(data: any[], val: string[], array?: string[]) {\r\n if (utilities.isNull(array)) {\r\n array = []\r\n }\r\n data.forEach(option => {\r\n if (!utilities.isNull(option.value)) {\r\n if (val.includes(option.value)) {\r\n array!.push(option.title)\r\n }\r\n }\r\n if (utilities.isNull(option.children) || option.children!.length === 0) {\r\n return\r\n } else {\r\n this.getTreeSelectTitleBaseOnVals(option.children!, val, array)\r\n return\r\n }\r\n })\r\n return array!\r\n }\r\n\r\n\r\n\r\n\r\n /**\r\n * 将数组转为IView下拉框数据\r\n * @param source 源数据\r\n * @param text text对应字段\r\n * @param value value对应字段\r\n * @returns \r\n */\r\n public parseIViewOptions(source: any[], text: string, value: string): any[] {\r\n return source.map(e => {\r\n return {\r\n text: e[text],\r\n value: e[value]\r\n }\r\n })\r\n }\r\n\r\n}","import { Guid } from 'guid-typescript';\r\nimport { fromJS } from \"immutable\";\r\nimport moment, { Moment } from 'moment';\r\nimport { DateHelper } from \"./Helper/DateHelper\";\r\nimport { StringHelper } from \"./Helper/StringHelper\";\r\nimport { ArrayHelper } from \"./Helper/ArrayHelper\"\r\n\r\ntype ScaleValueInput = number | string | undefined | null;\r\n\r\nexport class Utilities {\r\n public dateHelper: DateHelper = new DateHelper();\r\n public stringHelper: StringHelper = new StringHelper();\r\n public arrayHelper: ArrayHelper = new ArrayHelper();\r\n\r\n /**\r\n * 验证是否为null\r\n * @param obj \r\n * @returns \r\n */\r\n isNull = (obj: any) => {\r\n if (obj === '' || obj === null || obj === undefined || obj === 'undefined' || obj === 'null') {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * 获取值,如果为空返回默认值\r\n * @param value \r\n * @param defaultValue \r\n * @returns \r\n */\r\n getValueNotNull = (value: any, defaultValue: any) => {\r\n if (this.isNull(value)) {\r\n return defaultValue;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * 生成唯一编码\r\n * @param prefix \r\n * @returns \r\n */\r\n getUniqueCode = (prefix: string = \"\") => {\r\n let guidStr = Guid.create().toString().replace(/\\-/g, '');\r\n guidStr = prefix + guidStr.substring(prefix.length);\r\n return guidStr;\r\n }\r\n \r\n /**\r\n * 生成编号\r\n * @param count 当前条数\r\n * @param text 前缀 (例:cx20240124001 中的cx)\r\n * @returns \r\n */\r\n getSerialNumber(count:number,text?:string){\r\n count = (count == 0 ? 1 : count + 1) + 100;\r\n return text + this.getCurrentDate(\"yyyyMMDD\") + (\"F\" + count).replace(\"F1\", \"0\");\r\n }\r\n\r\n /**\r\n * 获取当前时间\r\n * @param format \r\n * @returns \r\n */\r\n getCurrentDate = (format = \"YYYY-MM-DD HH:mm:ss\") => {\r\n const dateTime = new Date();\r\n return this.dateHelper.format(dateTime, format);\r\n }\r\n\r\n /**\r\n * 日期格式化\r\n * @param date 日期\r\n * @param format 格式\r\n * @returns \r\n */\r\n format = (date: Date | string, format = \"YYYY-MM-DD HH:mm:ss\") => {\r\n return this.getMoment(date).format(format);\r\n }\r\n\r\n /**\r\n * 解析Api接口返回数据\r\n * @param apiResult \r\n * @param defaultValue \r\n * @returns \r\n */\r\n parseApiResult = (apiResult: any, defaultValue: any = null) => {\r\n if (this.isNull(apiResult)) {\r\n return null;\r\n }\r\n\r\n if (apiResult.code === 200 && (apiResult.issucess || (apiResult.msg == '请求成功' || apiResult.msg == '承载数据为空'))) {\r\n return this.isNull(apiResult.result) ? apiResult.data : apiResult.result;\r\n } else {\r\n return defaultValue\r\n }\r\n }\r\n\r\n /**\r\n * 对象深复制\r\n * @param obj \r\n * @returns \r\n */\r\n deepCopy = (obj: any): any => {\r\n return fromJS(obj).toJS();\r\n }\r\n\r\n /**\r\n * 里程桩号转数字\r\n * @param milestone \r\n * @returns \r\n */\r\n getMilestone = (milestone: string): number => {\r\n try {\r\n let s_arr = milestone.split('+');\r\n let s_Klm = s_arr[0].match(/\\d+(.\\d+)?/g);\r\n let s_LM = s_arr[1];\r\n let sm = (Number(s_Klm) * 1000 + Number(s_LM));\r\n return sm;\r\n } catch {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * 获取 Moment\r\n * @param date \r\n * @returns \r\n */\r\n getMoment = (date: any): Moment => {\r\n return moment(date);\r\n }\r\n\r\n\r\n \r\n /**\r\n * 函数防抖,防止函数多次触发\r\n * @param fn 实际需要执行的函数\r\n * @param timerout 限制时间\r\n * @descript 连续点击,只会触发一次\r\n */\r\n private static debounceTimer:any = null;\r\n debounce = (fn:Function, timerout:number = 300)=> {\r\n return function(...args:any[]) {\r\n if (Utilities.debounceTimer) {\r\n clearTimeout(Utilities.debounceTimer)\r\n }\r\n return new Promise((resolve)=>{\r\n Utilities.debounceTimer = setTimeout(async ()=>{\r\n resolve(await fn(...args))\r\n }, timerout);\r\n })\r\n \r\n }\r\n }\r\n\r\n /**\r\n * 计算缩放后的值,适配 1920px 和 2560px 设计稿\r\n * @param $value 输入值(数字、带单位的字符串,如 '100px'/'2rem')\r\n * @param largeBreakpoint 大屏断点(默认 2000px)\r\n * @param largeDesignWidth 大屏设计稿宽度(默认 2560px)\r\n * @returns 缩放后的值(数字或带单位的字符串)\r\n */\r\n adaptDesignSize = ( $value: ScaleValueInput, largeBreakpoint: number = 2000, largeDesignWidth: number = 2560 ): number | string => {\r\n const screenWidth = window.innerWidth;\r\n const scaleFactor = screenWidth >= largeBreakpoint ? largeDesignWidth / 1920 : 1;\r\n\r\n // 处理 undefined/null\r\n if ($value == null) return 0;\r\n\r\n // 处理数字\r\n if (typeof $value === 'number') {\r\n return $value * scaleFactor;\r\n }\r\n\r\n // 处理字符串(如 '100px'/'2rem')\r\n if (typeof $value === 'string') {\r\n const unitMatch = $value.match(/[a-z]+/i); // 匹配单位(px/rem/em)\r\n const unit = unitMatch ? unitMatch[0] : '';\r\n const numericValue = parseFloat($value);\r\n\r\n if (!isNaN(numericValue) && unit) {\r\n return `${numericValue * scaleFactor}${unit}`;\r\n }\r\n }\r\n\r\n // 其他情况(如非法字符串)原样返回\r\n return $value;\r\n }\r\n\r\n}\r\n\r\nexport const utilities: Utilities = new Utilities();\r\n"],"names":["DateHelper","_proto","prototype","add","date","value","unit","moment","toDate","subtract","startOf","unitOfTime","endOf","format","diff","b","precise","getWeekDay","Array","weekday","base64EncodeChars","base64DecodeChars","StringHelper","encodeToBase64","str","utilities","isNull","out","i","len","c1","c2","c3","length","charCodeAt","charAt","decodeBase64","c4","String","fromCharCode","utf16To8","c","utf8To16","char2","char3","toString","toMoment","convertCurrency","integerNum","decimalNum","parts","cnNums","cnIntRadice","cnIntUnits","cnDecUnits","chineseStr","money","parseFloat","indexOf","split","substring","parseInt","zeroCount","IntLen","n","p","q","m","decLen","Number","hiddenIDCardNum","replace","hiddenTelNum","leftPad","count","pad","nlen","str1","encryptAES","key","encKey","CryptoJs","enc","Utf8","parse","srcs","AES","encrypt","mode","ECB","padding","Pkcs7","decryptAES","decrypt","stringify","ArrayHelper","getTreeSelectTitleBaseOnVals","data","val","array","_this","forEach","option","includes","push","title","children","parseIViewOptions","source","text","map","e","Utilities","dateHelper","this","stringHelper","arrayHelper","obj","getValueNotNull","defaultValue","getUniqueCode","prefix","Guid","create","getCurrentDate","dateTime","Date","getMoment","parseApiResult","apiResult","code","issucess","msg","result","deepCopy","fromJS","toJS","getMilestone","milestone","s_arr","s_Klm","match","s_LM","_unused","debounce","fn","timerout","_arguments","arguments","debounceTimer","clearTimeout","Promise","resolve","setTimeout","apply","slice","call","then","_fn","reject","adaptDesignSize","$value","largeBreakpoint","largeDesignWidth","scaleFactor","window","innerWidth","unitMatch","numericValue","isNaN","getSerialNumber"],"mappings":"yHAEA,IAAaA,eAAUA,WAAAA,SAAAA,IAAAC,CAAAA,IAAAA,EAAAD,EAAAE,UA2JlB,OA3JkBD,EAQnBE,IAAA,SAAIC,EAAYC,EAAeC,GAC3B,OAAOC,EAAOH,GAAMD,IAAIE,EAAOC,GAAME,QACzC,EAACP,EAQDQ,SAAA,SAASL,EAAYC,EAAeC,GAChC,OAAOC,EAAOH,GAAMK,SAASJ,EAAOC,GAAME,QAC9C,EAACP,EAiBDS,QAAA,SAAQN,EAAYO,GAChB,OAAOJ,EAAOH,GAAMM,QAAQC,GAAYH,QAC5C,EAACP,EAiBDW,MAAA,SAAMR,EAAYO,GACd,OAAOJ,EAAOH,GAAMQ,MAAMD,GAAYH,QAC1C,EAACP,EAgEDY,OAAA,SAAOT,EAAYS,GACf,YADe,IAAAA,IAAAA,EAAiB,uBACzBN,EAAOH,GAAMS,OAAOA,EAC/B,EAACZ,EAmBDa,KAAA,SAAKV,EAAYW,EAAkBJ,EAA8BK,GAC7D,OAAOT,EAAOH,GAAMU,KAAKC,EAAGJ,EAAYK,EAC5C,EAACf,EAODgB,WAAA,SAAWb,GAEP,OADc,IAAIc,MAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACrDX,EAAOH,GAAMe,UAC9B,EAACnB,CAAA,CA3JkBA,GCEjBoB,EAAoB,mEACpBC,EAAoB,IAAIH,OAAO,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpE,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC9D,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACjE,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GACpE,GAAI,GAEII,eAAYA,WAAAA,SAAAA,IAAArB,CAAAA,IAAAA,EAAAqB,EAAApB,UAoUpB,OApUoBD,EAKrBsB,eAAA,SAAeC,GACX,GAAIC,EAAUC,OAAOF,GACjB,MAAO,GACX,IAAIG,EAAKC,EAAGC,EACRC,EAAIC,EAAIC,EAIZ,IAHAH,EAAML,EAAIS,OACVL,EAAI,EACJD,EAAM,GACCC,EAAIC,GAAK,CAEZ,GADAC,EAA2B,IAAtBN,EAAIU,WAAWN,KAChBA,GAAKC,EAAK,CACVF,GAAOP,EAAkBe,OAAOL,GAAM,GACtCH,GAAOP,EAAkBe,QAAa,EAALL,IAAa,GAC9CH,GAAO,KACP,KACH,CAED,GADAI,EAAKP,EAAIU,WAAWN,KAChBA,GAAKC,EAAK,CACVF,GAAOP,EAAkBe,OAAOL,GAAM,GACtCH,GAAOP,EAAkBe,QAAc,EAALL,IAAa,GAAY,IAALC,IAAc,GACpEJ,GAAOP,EAAkBe,QAAa,GAALJ,IAAa,GAC9CJ,GAAO,IACP,KACH,CACDK,EAAKR,EAAIU,WAAWN,KACpBD,GAAOP,EAAkBe,OAAOL,GAAM,GACtCH,GAAOP,EAAkBe,QAAc,EAALL,IAAa,GAAY,IAALC,IAAc,GACpEJ,GAAOP,EAAkBe,QAAc,GAALJ,IAAa,GAAY,IAALC,IAAc,GACpEL,GAAOP,EAAkBe,OAAY,GAALH,EACnC,CACD,OAAOL,CACX,EAAC1B,EAMDmC,aAAA,SAAaZ,GACT,GAAIC,EAAUC,OAAOF,GACjB,MAAO,GACX,IAAIM,EAAIC,EAAIC,EAAIK,EACZT,EAAGC,EAAKF,EAIZ,IAHAE,EAAML,EAAIS,OACVL,EAAI,EACJD,EAAM,GACCC,EAAIC,GAAK,CACZ,GACIC,EAAKT,EAAwC,IAAtBG,EAAIU,WAAWN,YACjCA,EAAIC,IAAc,GAAPC,GACpB,IAAW,GAAPA,EAAU,MACd,GACIC,EAAKV,EAAwC,IAAtBG,EAAIU,WAAWN,YACjCA,EAAIC,IAAc,GAAPE,GACpB,IAAW,GAAPA,EACA,MACJJ,GAAOW,OAAOC,aAAcT,GAAM,GAAY,GAALC,IAAc,GACvD,EAAG,CAEC,GAAU,KADVC,EAA2B,IAAtBR,EAAIU,WAAWN,MACN,OAAOD,EACrBK,EAAKX,EAAkBW,SAClBJ,EAAIC,IAAc,GAAPG,GACpB,IAAW,GAAPA,EAAU,MACdL,GAAOW,OAAOC,cAAoB,GAALR,IAAa,GAAY,GAALC,IAAc,GAC/D,EAAG,CAEC,GAAU,KADVK,EAA2B,IAAtBb,EAAIU,WAAWN,MACN,OAAOD,EACrBU,EAAKhB,EAAkBgB,SAClBT,EAAIC,IAAc,GAAPQ,GACpB,IAAW,GAAPA,EAAU,MACdV,GAAOW,OAAOC,cAAoB,EAALP,IAAc,EAAKK,EACnD,CACD,OAAOV,CACX,EAAC1B,EAMDuC,SAAA,SAAShB,GACL,IAAIG,EAAKC,EAAGC,EAAKY,EAGjB,IAFAd,EAAM,GACNE,EAAML,EAAIS,OACLL,EAAI,EAAGA,EAAIC,EAAKD,KACjBa,EAAIjB,EAAIU,WAAWN,KACT,GAAYa,GAAK,IACvBd,GAAOH,EAAIW,OAAOP,GACXa,EAAI,MACXd,GAAOW,OAAOC,aAAa,IAASE,GAAK,GAAM,IAC/Cd,GAAOW,OAAOC,aAAa,IAASE,GAAK,EAAK,IAC9Cd,GAAOW,OAAOC,aAAa,IAAmB,GAAVE,KAEpCd,GAAOW,OAAOC,aAAa,IAASE,GAAK,EAAK,IAC9Cd,GAAOW,OAAOC,aAAa,IAAmB,GAAVE,IAG5C,OAAOd,CACX,EAAC1B,EAMDyC,SAAA,SAASlB,GACL,IAAIG,EAAKC,EAAGC,EAAKY,EACbE,EAAOC,EAKX,IAHAjB,EAAM,GACNE,EAAML,EAAIS,OACVL,EAAI,EACGA,EAAIC,GAEP,QADAY,EAAIjB,EAAIU,WAAWN,OACN,GACT,KAAM,EACN,KAAK,EACL,KAAM,EACN,KAAK,EACL,KAAM,EACN,KAAK,EACL,KAAM,EACN,KAAK,EAEDD,GAAOH,EAAIW,OAAOP,EAAI,GACtB,MACJ,QACA,KAAO,GAEHe,EAAQnB,EAAIU,WAAWN,KACvBD,GAAOW,OAAOC,cAAmB,GAAJE,IAAa,EAAc,GAARE,GAChD,MACJ,KAAO,GAEHA,EAAQnB,EAAIU,WAAWN,KACvBgB,EAAQpB,EAAIU,WAAWN,KACvBD,GAAOW,OAAOC,cAAmB,GAAJE,IAAa,IAC5B,GAARE,IAAiB,EACT,GAARC,GAKlB,OAAOjB,CACX,EAAC1B,EAMDO,OAAA,SAAOgB,GACH,OAAOjB,EAAOiB,EAAIqB,YAAYrC,QAClC,EAACP,EAMD6C,SAAA,SAAStB,GACL,OAAOjB,EAAOiB,EAAIqB,WACtB,EAAC5C,EAMD8C,gBAAA,SAAgBvB,GAEZ,IAcIwB,EAEAC,EAIAC,EApBEC,EAAS,IAAIjC,MAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAEhEkC,EAAc,IAAIlC,MAAM,GAAI,IAAK,IAAK,KAEtCmC,EAAa,IAAInC,MAAM,GAAI,IAAK,IAAK,KAErCoC,EAAa,IAAIpC,MAAM,IAAK,IAAK,IAAK,KAYxCqC,EAAa,GAIjB,GAAW,IAAP/B,EACA,MAAO,GAGX,IAAIgC,EAAQC,WAAWjC,EAAIqB,YAC3B,GAAa,GAATW,EAEA,OADaL,EAAO,GAAPA,KAIjB,GAAIK,GApBW,KAsBX,MAAO,GAcX,IAVyB,GAArBhC,EAAIkC,QAAQ,MACZV,EAAaxB,EACbyB,EAAa,KAGbD,GADAE,EAAQ1B,EAAImC,MAAM,MACC,GACnBV,EAAaC,EAAM,GAAGU,UAAU,EAAG,IAInCC,SAASb,EAAWH,WAAY,IAAM,EAAG,CAGzC,IAFA,IAAIiB,EAAY,EACZC,EAASf,EAAWf,OACfL,EAAI,EAAGA,EAAImC,EAAQnC,IAAK,CAC7B,IAAIoC,EAAIhB,EAAWY,UAAUhC,EAAG,GAC5BqC,EAAIF,EAASnC,EAAI,EACjBsC,EAAID,EAAI,EACRE,EAAIF,EAAI,EACH,KAALD,EACAF,KAEIA,EAAY,IACZP,GAAcJ,EAAO,IAGzBW,EAAY,EACZP,GAAcJ,EAAOU,SAASG,IAAMZ,EAAYe,IAE3C,GAALA,GAAUL,EAAY,IACtBP,GAAcF,EAAWa,GAEhC,CACDX,GA5Dc,GA6DjB,CAGD,GAAkB,IAAdN,EAEA,IADA,IAAImB,EAASnB,EAAWhB,OACfL,EAAI,EAAGA,EAAIwC,EAAQxC,IAAK,CAC7B,IAAIoC,EAAIf,EAAWW,UAAUhC,EAAG,GACvB,KAALoC,IACAT,GAAcJ,EAAOkB,OAAOL,IAAMV,EAAW1B,GAEpD,CASL,MANkB,IAAd2B,EACAA,GAAcJ,EAAO,GAAPA,KACO,IAAdF,IACPM,GA/Ec,KAkFXA,CACX,EAACtD,EAMDqE,gBAAA,SAAgB9C,GACZ,OAAOA,EAAI+C,QAAQ,iBAAkB,iBACzC,EAACtE,EAMDuE,aAAA,SAAahD,GACT,OAAOA,EAAI+C,QAAQ,iBAAkB,iBACzC,EAACtE,EAQDwE,QAAA,SAAQjD,EAAakD,EAAeC,QAAAA,IAAAA,IAAAA,EAAc,KAC9C,IAAIC,EAAOpD,EAAIS,OACX4C,EAAO,GACPjD,EAAI,EACR,GACIiD,GAAQF,IACN/C,QACGA,EAAK8C,EAAQE,GAEtB,OADAC,EAAQrD,CAEZ,EAACvB,EAOD6E,WAAA,SAAWtD,EAAauD,GACpB,IAAIC,EAASC,EAASC,IAAIC,KAAKC,MAAML,GACjCM,EAAOJ,EAASC,IAAIC,KAAKC,MAAM5D,EAAIqB,YAKvC,OAJgBoC,EAASK,IAAIC,QAAQF,EAAML,EAAQ,CAC/CQ,KAAMP,EAASO,KAAKC,IACpBC,QAAST,EAASN,IAAIgB,QAET9C,UACrB,EAAC5C,EAOD2F,WAAA,SAAWpE,EAAauD,GACpB,IAAIC,EAASC,EAASC,IAAIC,KAAKC,MAAML,GACjCc,EAAUZ,EAASK,IAAIO,QAAQrE,EAAIqB,WAAYmC,EAAQ,CACvDQ,KAAMP,EAASO,KAAKC,IACpBC,QAAST,EAASN,IAAIgB,QAE1B,OAAOV,EAASC,IAAIC,KAAKW,UAAUD,GAAShD,UAChD,EAACvB,CAAA,CApUoBA,GCXZyE,eAAWA,WAAAA,SAAAA,IAAA9F,CAAAA,IAAAA,EAAA8F,EAAA7F,iBAAAD,EAQb+F,6BAAA,SAA6BC,EAAaC,EAAeC,GAAgBC,IAAAA,OAiB5E,OAhBI3E,EAAUC,OAAOyE,KACjBA,EAAQ,IAEZF,EAAKI,QAAQ,SAAAC,GAMT,OALK7E,EAAUC,OAAO4E,EAAOjG,QACrB6F,EAAIK,SAASD,EAAOjG,QACpB8F,EAAOK,KAAKF,EAAOG,OAGvBhF,EAAUC,OAAO4E,EAAOI,WAAyC,IAA5BJ,EAAOI,SAAUzE,YACtD,OAEAmE,EAAKJ,6BAA6BM,EAAOI,SAAWR,EAAKC,EAGjE,GACOA,CACX,EAAClG,EAYM0G,kBAAA,SAAkBC,EAAeC,EAAcxG,GAClD,OAAOuG,EAAOE,IAAI,SAAAC,GACd,MAAO,CACHF,KAAME,EAAEF,GACRxG,MAAO0G,EAAE1G,GAEjB,EACJ,EAAC0F,CAAA,CA7CmBA,GCMXiB,mCAASA,IAAA,IAAAZ,EACXa,KAAAA,KAAAA,WAAyB,IAAIjH,EAAYkH,KACzCC,aAA6B,IAAI7F,EAAc4F,KAC/CE,YAA2B,IAAIrB,OAOtCrE,OAAS,SAAC2F,GACN,MAAY,KAARA,SAAcA,GAA6C,cAARA,GAA+B,SAARA,CAIlF,EAACH,KAQDI,gBAAkB,SAACjH,EAAYkH,GAC3B,OAAInB,EAAK1E,OAAOrB,GACLkH,EAGJlH,CACX,OAOAmH,cAAgB,SAACC,GAGb,gBAHaA,IAAAA,EAAiB,IAEpBA,EADIC,EAAKC,SAAS9E,WAAW0B,QAAQ,MAAO,IAC3BX,UAAU6D,EAAOxF,OAEhD,EAkBA2F,KAAAA,eAAiB,SAAC/G,QAAAA,IAAAA,IAAAA,EAAS,uBACvB,IAAMgH,EAAW,IAAIC,KACrB,OAAO1B,EAAKa,WAAWpG,OAAOgH,EAAUhH,EAC5C,EAACqG,KAQDrG,OAAS,SAACT,EAAqBS,GAC3B,YAD2BA,IAAAA,IAAAA,EAAS,uBAC7BuF,EAAK2B,UAAU3H,GAAMS,OAAOA,EACvC,EAQAmH,KAAAA,eAAiB,SAACC,EAAgBV,GAC9B,YADkD,IAApBA,IAAAA,EAAoB,MAC9CnB,EAAK1E,OAAOuG,QAIO,MAAnBA,EAAUC,OAAiBD,EAAUE,UAA8B,QAAjBF,EAAUG,KAAkC,UAAjBH,EAAUG,IAGhFb,EAFAnB,EAAK1E,OAAOuG,EAAUI,QAAUJ,EAAUhC,KAAOgC,EAAUI,MAI1E,EAOAC,KAAAA,SAAW,SAACjB,GACR,OAAOkB,EAAOlB,GAAKmB,MACvB,EAACtB,KAODuB,aAAe,SAACC,GACZ,IACI,IAAIC,EAAQD,EAAU/E,MAAM,KACxBiF,EAAQD,EAAM,GAAGE,MAAM,eACvBC,EAAOH,EAAM,GAEjB,OAD0B,IAAhBtE,OAAOuE,GAAgBvE,OAAOyE,EAE3C,CAAC,MAAAC,GACE,QACH,CACL,EAOAhB,KAAAA,UAAY,SAAC3H,GACT,OAAOG,EAAOH,EAClB,EAWA4I,KAAAA,SAAW,SAACC,EAAaC,GACrB,gBADqBA,IAAAA,EAAkB,gBACTC,IAAAA,EAAAC,UAI1B,OAHIpC,EAAUqC,eACVC,aAAatC,EAAUqC,eAEhB,IAAAE,QAAQ,SAACC,GAChBxC,EAAUqC,cAAgBI,0BAAqBF,OAAAA,QAAAC,QAC7BP,EAAES,WAAAC,EAAAA,GAAAA,MAAAC,KAAAT,KAASU,cAAAC,GAAzBN,EAAOM,EAAmB,EAC9B,CAAC,MAAA/C,UAAAwC,QAAAQ,OAAAhD,EAAEmC,CAAAA,EAAAA,EACP,EAEJ,CACJ,EAAChC,KASD8C,gBAAkB,SAAEC,EAAyBC,EAAgCC,YAAhCD,IAAAA,EAA0B,cAAMC,IAAAA,EAA2B,MACpG,IACMC,EADcC,OAAOC,YACQJ,EAAkBC,EAAmB,KAAO,EAG/E,GAAc,MAAVF,EAAgB,SAGpB,GAAsB,iBAAXA,EACP,OAAOA,EAASG,EAIpB,GAAsB,iBAAXH,EAAqB,CAC5B,IAAMM,EAAYN,EAAOpB,MAAM,WACzBvI,EAAOiK,EAAYA,EAAU,GAAK,GAClCC,EAAe/G,WAAWwG,GAEhC,IAAKQ,MAAMD,IAAiBlK,EAC5B,SAAUkK,EAAeJ,EAAc9J,CAE1C,CAGD,OAAO2J,CACX,CAAC,QAAAjD,EAAA9G,UArIDwK,gBAAA,SAAgBhG,EAAamC,GAEzB,OADAnC,GAAkB,GAATA,EAAa,EAAIA,EAAQ,GAAK,IAChCmC,EAAOK,KAAKU,eAAe,aAAe,IAAMlD,GAAOH,QAAQ,KAAM,IAC9E,EAACyC,CAAA,IAnDMA,EAsIKqC,cAAoB,KAmDzB,IAAA5H,EAAuB,IAAIuF"}
|
|
1
|
+
{"version":3,"file":"tools.esm.js","sources":["../src/Helper/DateHelper.ts","../src/Helper/StringHelper.ts","../src/Helper/ArrayHelper.ts","../src/Utilities.ts","../src/supcan/supcan/dynaload.js","../src/supcan/reportModel.ts","../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/conventions.js","../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom.js","../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/entities.js","../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/sax.js","../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom-parser.js","../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/index.js","../../../../node_modules/.pnpm/x2js@3.4.4/node_modules/x2js/x2js.js","../src/supcan/SupcanReport.ts"],"sourcesContent":["import moment, { unitOfTime } from 'moment';\r\n\r\nexport class DateHelper {\r\n\r\n /**\r\n * 增加时间\r\n * @param date 日期\r\n * @param value 值\r\n * @param unit years: 年 quarters: 季度 months: 月 weeks: 周 days: 天 hours: 小时 minutes: 分钟 seconds: 秒 milliseconds: 毫秒\r\n */\r\n add(date: Date, value: number, unit: \"years\" | \"quarters\" | \"months\" | \"weeks\" | \"days\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\"): Date {\r\n return moment(date).add(value, unit).toDate();\r\n }\r\n\r\n /**\r\n * 减去时间\r\n * @param date 日期\r\n * @param value 值\r\n * @param unit years: 年 quarters: 季度 months: 月 weeks: 周 days: 天 hours: 小时 minutes: 分钟 seconds: 秒 milliseconds: 毫秒\r\n */\r\n subtract(date: Date, value: number, unit: \"years\" | \"quarters\" | \"months\" | \"weeks\" | \"days\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\"): Date {\r\n return moment(date).subtract(value, unit).toDate();\r\n }\r\n\r\n /**\r\n * 通过将原始的 Date 设置为时间单位的开头来对其进行更改。\r\n * @param date 日期\r\n * @param unitOfTime \r\n * year: 年 (设置为今年一月1日上午 12:00)\r\n * month: 月 (设置为本月1日上午 12:00)\r\n * quarter: 季度 (设置为当前季度的开始,即每月的第一天上午 12:00)\r\n * week: 周 (设置为本周的第一天上午 12:00)\r\n * isoWeek: 周 (根据 ISO 8601 设置为本周的第一天上午 12:00)\r\n * day: 天 (设置为今天上午 12:00)\r\n * date: 天 (设置为今天上午 12:00)\r\n * hour: 小时 (设置为当前时间,但是 0 分钟、0 秒钟、0 毫秒)\r\n * minute: 分钟 (设置为当前时间,但是 0 秒钟、0 毫秒)\r\n * second: 秒 (设置为当前时间,但是 0 毫秒)\r\n */\r\n startOf(date: Date, unitOfTime: 'year' | 'month' | 'quarter' | 'week' | 'isoWeek' | 'day' | 'date' | 'hour' | 'minute' | 'second'): Date {\r\n return moment(date).startOf(unitOfTime).toDate();\r\n }\r\n\r\n /**\r\n * 通过将原始的 Date 设置为时间单位的结尾来对其进行更改。\r\n * @param date 日期\r\n * @param unitOfTime \r\n * year: 年\r\n * month: 月\r\n * quarter: 季度\r\n * week: 周\r\n * isoWeek: 周\r\n * day: 天\r\n * date: 天\r\n * hour: 小时\r\n * minute: 分钟\r\n * second: 秒\r\n */\r\n endOf(date: Date, unitOfTime: 'year' | 'month' | 'quarter' | 'week' | 'isoWeek' | 'day' | 'date' | 'hour' | 'minute' | 'second'): Date {\r\n return moment(date).endOf(unitOfTime).toDate();\r\n }\r\n\r\n /**\r\n * 格式化时间\r\n * @param date 日期\r\n * @param format \r\n * 年份 | YY | 70 71 ... 29 30\r\n * YYYY | 1970 1971 ... 2029 2030\r\n * Y | 1970 1971 ... 9999 +10000 +10001\r\n * 注意:对于 9999 年以后的日期,这符合 ISO 8601 标准。\r\n * 月份\t | M | 1 2 ... 11 12\r\n * Mo | 1st 2nd ... 11th 12th\r\n * MM | 01 02 ... 11 12\r\n * MMM | Jan Feb ... Nov Dec\r\n * MMMM |\tJanuary February ... November December\r\n * 月份的日期 | D | 1 2 ... 30 31\r\n * Do | 1st 2nd ... 30th 31st\r\n * DD | 01 02 ... 30 31\r\n * 小时 | H | 0 1 ... 22 23\r\n * HH | 00 01 ... 22 23\r\n * h | 1 2 ... 11 12\r\n * hh | 01 02 ... 11 12\r\n * k | 1 2 ... 23 24\r\n * kk | 01 02 ... 23 24\r\n * 分钟 | m | 0 1 ... 58 59\r\n * mm | 00 01 ... 58 59\r\n * 秒钟 | s | 0 1 ... 58 59\r\n * ss | 00 01 ... 58 59\r\n * 小数秒钟 | S | 0 1 ... 8 9\r\n * SS | 00 01 ... 98 99\r\n * SSS | 000 001 ... 998 999\r\n * SSSS | ... SSSSSSSSS\t000[0..] 001[0..] ... 998[0..] 999[0..]\r\n * ------------------------------------------------------------------------------------- \r\n * 周年 | gg | 70 71 ... 29 30\r\n * gggg | 1970 1971 ... 2029 2030\r\n * 周年(ISO) | GG | 70 71 ... 29 30\r\n * GGGG | 1970 1971 ... 2029 2030 \r\n * 季度 | Q | 1 2 3 4\r\n * Qo | 1st 2nd 3rd 4th\r\n * 年份的日期 | DDD | 1 2 ... 364 365\r\n * DDDo | 1st 2nd ... 364th 365th\r\n * DDDD | 001 002 ... 364 365\r\n * 星期几 | d | 0 1 ... 5 6\r\n * do | 0th 1st ... 5th 6th\r\n * dd | Su Mo ... Fr Sa\r\n * ddd | Sun Mon ... Fri Sat\r\n * dddd | Sunday Monday ... Friday Saturday\r\n * 星期几(语言环境) | e | 0 1 ... 5 6\r\n * 星期几(ISO) | E | 1 2 ... 6 7\r\n * 年份的星期 | w | 1 2 ... 52 53\r\n * wo | 1st 2nd ... 52nd 53rd\r\n * ww | 01 02 ... 52 53\r\n * 年份的星期(ISO) | W | 1 2 ... 52 53\r\n * Wo | 1st 2nd ... 52nd 53rd\r\n * WW | 01 02 ... 52 53\r\n * 子午线 | A | AM PM\r\n * a | am pm\r\n * 时区 | z or zz | EST CST ... MST PST\r\n * 注意:从 1.6.0 版本开始,z/zz 格式的令牌已从普通的 moment 对象中弃用。 在此处了解更多信息。 但是,如果将特定时区与 moment-timezone 插件一起使用,它们会起作用。\r\n * Z | -07:00 -06:00 ... +06:00 +07:00\r\n * ZZ | -0700 -0600 ... +0600 +0700\r\n * Unix 时间戳 | X | 1360013296\r\n * Unix 毫秒时间戳 | x | 1360013296123\r\n */\r\n format(date: Date, format: string = \"YYYY-MM-DD HH:mm:ss\"): string {\r\n return moment(date).format(format);\r\n }\r\n\r\n /**\r\n * 获取另一个度量单位中的差异\r\n * @param date 日期\r\n * @param b 对比的时间\r\n * @param unitOfTime 默认为毫秒\r\n * year: 年\r\n * month: 月\r\n * quarter: 季度\r\n * week: 周\r\n * isoWeek: 周\r\n * day: 天\r\n * date: 天\r\n * hour: 小时\r\n * minute: 分钟\r\n * second: 秒 \r\n * @param precise 是否允许小数\r\n */\r\n diff(date: Date, b: Date | string, unitOfTime?: unitOfTime.Diff, precise?: boolean): number {\r\n return moment(date).diff(b, unitOfTime, precise);\r\n }\r\n\r\n /**\r\n * 获取当前是周几\r\n * 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六\r\n * @param date 日期\r\n */\r\n getWeekDay(date: Date): string {\r\n const weeks = new Array(\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\");\r\n return weeks[moment(date).weekday()];\r\n }\r\n}\r\n\r\nexport const dateHelper: DateHelper = new DateHelper();","import { utilities } from \"../Utilities\";\r\nimport moment, { Moment } from 'moment';\r\nimport CryptoJs from 'crypto-js'\r\n\r\nconst base64EncodeChars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\nconst base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57,\r\n 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6,\r\n 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\r\n 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\r\n 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,\r\n -1, -1);\r\n\r\nexport class StringHelper {\r\n /**\r\n * 加密 Base64\r\n * @param str 字符串\r\n */\r\n encodeToBase64(str: string): string {\r\n if (utilities.isNull(str))\r\n return \"\";\r\n let out, i, len;\r\n let c1, c2, c3;\r\n len = str.length;\r\n i = 0;\r\n out = \"\";\r\n while (i < len) {\r\n c1 = str.charCodeAt(i++) & 0xff;\r\n if (i == len) {\r\n out += base64EncodeChars.charAt(c1 >> 2);\r\n out += base64EncodeChars.charAt((c1 & 0x3) << 4);\r\n out += \"==\";\r\n break\r\n }\r\n c2 = str.charCodeAt(i++);\r\n if (i == len) {\r\n out += base64EncodeChars.charAt(c1 >> 2);\r\n out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));\r\n out += base64EncodeChars.charAt((c2 & 0xF) << 2);\r\n out += \"=\";\r\n break\r\n }\r\n c3 = str.charCodeAt(i++);\r\n out += base64EncodeChars.charAt(c1 >> 2);\r\n out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));\r\n out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));\r\n out += base64EncodeChars.charAt(c3 & 0x3F)\r\n }\r\n return out\r\n }\r\n\r\n /**\r\n * 解密 Base64\r\n * @param str 字符串\r\n */\r\n decodeBase64(str: string): string {\r\n if (utilities.isNull(str))\r\n return \"\";\r\n let c1, c2, c3, c4;\r\n let i, len, out;\r\n len = str.length;\r\n i = 0;\r\n out = \"\";\r\n while (i < len) {\r\n do {\r\n c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]\r\n } while (i < len && c1 == -1);\r\n if (c1 == -1) break;\r\n do {\r\n c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]\r\n } while (i < len && c2 == -1);\r\n if (c2 == -1)\r\n break;\r\n out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));\r\n do {\r\n c3 = str.charCodeAt(i++) & 0xff;\r\n if (c3 == 61) return out;\r\n c3 = base64DecodeChars[c3]\r\n } while (i < len && c3 == -1);\r\n if (c3 == -1) break;\r\n out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));\r\n do {\r\n c4 = str.charCodeAt(i++) & 0xff;\r\n if (c4 == 61) return out;\r\n c4 = base64DecodeChars[c4]\r\n } while (i < len && c4 == -1);\r\n if (c4 == -1) break;\r\n out += String.fromCharCode(((c3 & 0x03) << 6) | c4)\r\n }\r\n return out\r\n }\r\n\r\n /**\r\n * UTF-16 转 UTF-8\r\n * @param str 字符串\r\n */\r\n utf16To8(str: string): string {\r\n let out, i, len, c;\r\n out = \"\";\r\n len = str.length;\r\n for (i = 0; i < len; i++) {\r\n c = str.charCodeAt(i);\r\n if ((c >= 0x0001) && (c <= 0x007F)) {\r\n out += str.charAt(i);\r\n } else if (c > 0x07FF) {\r\n out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));\r\n out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));\r\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));\r\n } else {\r\n out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));\r\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));\r\n }\r\n }\r\n return out;\r\n }\r\n\r\n /**\r\n * UTF-8 转 UTF-16\r\n * @param str 字符串\r\n */\r\n utf8To16(str: string): string {\r\n let out, i, len, c;\r\n let char2, char3;\r\n\r\n out = \"\";\r\n len = str.length;\r\n i = 0;\r\n while (i < len) {\r\n c = str.charCodeAt(i++);\r\n switch (c >> 4) {\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n // 0xxxxxxx\r\n out += str.charAt(i - 1);\r\n break;\r\n case 12:\r\n case 13:\r\n // 110x xxxx 10xx xxxx\r\n char2 = str.charCodeAt(i++);\r\n out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));\r\n break;\r\n case 14:\r\n // 1110 xxxx 10xx xxxx 10xx xxxx\r\n char2 = str.charCodeAt(i++);\r\n char3 = str.charCodeAt(i++);\r\n out += String.fromCharCode(((c & 0x0F) << 12) |\r\n ((char2 & 0x3F) << 6) |\r\n ((char3 & 0x3F) << 0));\r\n break;\r\n }\r\n }\r\n\r\n return out;\r\n }\r\n\r\n /**\r\n * 转换为日期\r\n * @param str 字符串\r\n */\r\n toDate(str: string): Date {\r\n return moment(str.toString()).toDate();\r\n }\r\n\r\n /**\r\n * 转换为Moment\r\n * @param str 字符串\r\n */\r\n toMoment(str: string): Moment {\r\n return moment(str.toString())\r\n }\r\n\r\n /**\r\n * 金额转换为大写\r\n * @param str 字符串\r\n */\r\n convertCurrency(str: string): string {\r\n // 汉字的数字\r\n const cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');\r\n // 基本单位\r\n const cnIntRadice = new Array('', '拾', '佰', '仟');\r\n // 对应整数部分扩展单位\r\n const cnIntUnits = new Array('', '万', '亿', '兆');\r\n // 对应小数部分单位\r\n const cnDecUnits = new Array('角', '分', '毫', '厘');\r\n // 整数金额时后面跟的字符\r\n const cnInteger = '整';\r\n // 整型完以后的单位\r\n const cnIntLast = '元';\r\n // 最大处理的数字\r\n const maxNum = 999999999999999.9999;\r\n // 金额整数部分\r\n let integerNum;\r\n // 金额小数部分\r\n let decimalNum;\r\n // 输出的中文金额字符串\r\n let chineseStr = '';\r\n // 分离金额后用的数组,预定义\r\n let parts;\r\n\r\n if (str == '') {\r\n return '';\r\n }\r\n\r\n let money = parseFloat(str.toString());\r\n if (money == 0) {\r\n chineseStr = cnNums[0] + cnIntLast + cnInteger;\r\n return chineseStr;\r\n }\r\n\r\n if (money >= maxNum) {\r\n // 超出最大处理数字\r\n return '';\r\n }\r\n\r\n // 转换为字符串\r\n if (str.indexOf('.') == -1) {\r\n integerNum = str;\r\n decimalNum = '';\r\n } else {\r\n parts = str.split('.');\r\n integerNum = parts[0];\r\n decimalNum = parts[1].substring(0, 4);\r\n }\r\n\r\n // 获取整型部分转换\r\n if (parseInt(integerNum.toString(), 10) > 0) {\r\n let zeroCount = 0;\r\n let IntLen = integerNum.length;\r\n for (let i = 0; i < IntLen; i++) {\r\n let n = integerNum.substring(i, 1);\r\n let p = IntLen - i - 1;\r\n let q = p / 4;\r\n let m = p % 4;\r\n if (n == '0') {\r\n zeroCount++;\r\n } else {\r\n if (zeroCount > 0) {\r\n chineseStr += cnNums[0];\r\n }\r\n //归零\r\n zeroCount = 0;\r\n chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];\r\n }\r\n if (m == 0 && zeroCount < 4) {\r\n chineseStr += cnIntUnits[q];\r\n }\r\n }\r\n chineseStr += cnIntLast;\r\n }\r\n\r\n // 小数部分\r\n if (decimalNum != '') {\r\n let decLen = decimalNum.length;\r\n for (let i = 0; i < decLen; i++) {\r\n let n = decimalNum.substring(i, 1);\r\n if (n != '0') {\r\n chineseStr += cnNums[Number(n)] + cnDecUnits[i];\r\n }\r\n }\r\n }\r\n\r\n if (chineseStr == '') {\r\n chineseStr += cnNums[0] + cnIntLast + cnInteger;\r\n } else if (decimalNum == '') {\r\n chineseStr += cnInteger;\r\n }\r\n\r\n return chineseStr;\r\n }\r\n\r\n /**\r\n * 隐藏身份证号\r\n * @param str 字符串\r\n */\r\n hiddenIDCardNum(str: string): string {\r\n return str.replace(/(.{4}).*(.{4})/, '$1**********$2')\r\n }\r\n\r\n /**\r\n * 隐藏电话号码\r\n * @param str 字符串\r\n */\r\n hiddenTelNum(str: string): string {\r\n return str.replace(/(.{4}).*(.{4})/, '$1**********$2')\r\n }\r\n\r\n /**\r\n * 左补位\r\n * @param str 字符串\r\n * @param count \r\n * @param pad \r\n */\r\n leftPad(str: string, count: number, pad: string = \"0\"): string {\r\n let nlen = str.length;\r\n let str1 = '';\r\n let i = 0;\r\n do {\r\n str1 += pad\r\n ++i;\r\n } while (i < (count - nlen))\r\n str1 += str;\r\n return str1;\r\n }\r\n\r\n /**\r\n * 加密 AES\r\n * @param str 字符串\r\n * @param key \r\n */\r\n encryptAES(str: string, key: string): string {\r\n try { \r\n let encKey = CryptoJs.enc.Utf8.parse(key);\r\n let srcs = CryptoJs.enc.Utf8.parse(str.toString());\r\n let encrypted = CryptoJs.AES.encrypt(srcs, encKey, {\r\n mode: CryptoJs.mode.ECB,\r\n padding: CryptoJs.pad.Pkcs7\r\n });\r\n return encrypted.toString();\r\n } catch (error) {\r\n return str\r\n }\r\n }\r\n\r\n /**\r\n * 解密 AES\r\n * @param str 字符串\r\n * @param key \r\n */\r\n decryptAES(str: string, key: string): string {\r\n try {\r\n let encKey = CryptoJs.enc.Utf8.parse(key);\r\n let decrypt = CryptoJs.AES.decrypt(str.toString(), encKey, {\r\n mode: CryptoJs.mode.ECB,\r\n padding: CryptoJs.pad.Pkcs7\r\n });\r\n return CryptoJs.enc.Utf8.stringify(decrypt).toString(); \r\n } catch (error) {\r\n return \"\"\r\n }\r\n }\r\n}\r\n\r\nexport const stringHelper: StringHelper = new StringHelper();","import { utilities } from \"../Utilities\";\r\n\r\n\r\nexport class ArrayHelper {\r\n\r\n /**\r\n * IView treeSelect辅助方法\r\n * 根据选择的值,返回title显示\r\n * @param data treeSelect 数据格式\r\n * @param val 所选值的字符串数组\r\n */\r\n public getTreeSelectTitleBaseOnVals(data: any[], val: string[], array?: string[]) {\r\n if (utilities.isNull(array)) {\r\n array = []\r\n }\r\n data.forEach(option => {\r\n if (!utilities.isNull(option.value)) {\r\n if (val.includes(option.value)) {\r\n array!.push(option.title)\r\n }\r\n }\r\n if (utilities.isNull(option.children) || option.children!.length === 0) {\r\n return\r\n } else {\r\n this.getTreeSelectTitleBaseOnVals(option.children!, val, array)\r\n return\r\n }\r\n })\r\n return array!\r\n }\r\n\r\n\r\n\r\n\r\n /**\r\n * 将数组转为IView下拉框数据\r\n * @param source 源数据\r\n * @param text text对应字段\r\n * @param value value对应字段\r\n * @returns \r\n */\r\n public parseIViewOptions(source: any[], text: string, value: string): any[] {\r\n return source.map(e => {\r\n return {\r\n text: e[text],\r\n value: e[value]\r\n }\r\n })\r\n }\r\n\r\n}","import { Guid } from 'guid-typescript';\r\nimport { fromJS } from \"immutable\";\r\nimport moment, { Moment } from 'moment';\r\nimport { DateHelper } from \"./Helper/DateHelper\";\r\nimport { StringHelper } from \"./Helper/StringHelper\";\r\nimport { ArrayHelper } from \"./Helper/ArrayHelper\"\r\n\r\ntype ScaleValueInput = number | string | undefined | null;\r\n\r\nexport class Utilities {\r\n public dateHelper: DateHelper = new DateHelper();\r\n public stringHelper: StringHelper = new StringHelper();\r\n public arrayHelper: ArrayHelper = new ArrayHelper();\r\n\r\n /**\r\n * 验证是否为null\r\n * @param obj \r\n * @returns \r\n */\r\n isNull = (obj: any) => {\r\n if (obj === '' || obj === null || obj === undefined || obj === 'undefined' || obj === 'null') {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * 获取值,如果为空返回默认值\r\n * @param value \r\n * @param defaultValue \r\n * @returns \r\n */\r\n getValueNotNull = (value: any, defaultValue: any) => {\r\n if (this.isNull(value)) {\r\n return defaultValue;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * 生成唯一编码\r\n * @param prefix \r\n * @returns \r\n */\r\n getUniqueCode = (prefix: string = \"\") => {\r\n let guidStr = Guid.create().toString().replace(/\\-/g, '');\r\n guidStr = prefix + guidStr.substring(prefix.length);\r\n return guidStr;\r\n }\r\n \r\n /**\r\n * 生成编号\r\n * @param count 当前条数\r\n * @param text 前缀 (例:cx20240124001 中的cx)\r\n * @returns \r\n */\r\n getSerialNumber(count:number,text?:string){\r\n count = (count == 0 ? 1 : count + 1) + 100;\r\n return text + this.getCurrentDate(\"yyyyMMDD\") + (\"F\" + count).replace(\"F1\", \"0\");\r\n }\r\n\r\n /**\r\n * 获取当前时间\r\n * @param format \r\n * @returns \r\n */\r\n getCurrentDate = (format = \"YYYY-MM-DD HH:mm:ss\") => {\r\n const dateTime = new Date();\r\n return this.dateHelper.format(dateTime, format);\r\n }\r\n\r\n /**\r\n * 日期格式化\r\n * @param date 日期\r\n * @param format 格式\r\n * @returns \r\n */\r\n format = (date: Date | string, format = \"YYYY-MM-DD HH:mm:ss\") => {\r\n return this.getMoment(date).format(format);\r\n }\r\n\r\n /**\r\n * 解析Api接口返回数据\r\n * @param apiResult \r\n * @param defaultValue \r\n * @returns \r\n */\r\n parseApiResult = (apiResult: any, defaultValue: any = null) => {\r\n if (this.isNull(apiResult)) {\r\n return null;\r\n }\r\n\r\n if (apiResult.code === 200 && (apiResult.issucess || (apiResult.msg == '请求成功' || apiResult.msg == '承载数据为空'))) {\r\n return this.isNull(apiResult.result) ? apiResult.data : apiResult.result;\r\n } else {\r\n return defaultValue\r\n }\r\n }\r\n\r\n /**\r\n * 对象深复制\r\n * @param obj \r\n * @returns \r\n */\r\n deepCopy = (obj: any): any => {\r\n return fromJS(obj).toJS();\r\n }\r\n\r\n /**\r\n * 里程桩号转数字\r\n * @param milestone \r\n * @returns \r\n */\r\n getMilestone = (milestone: string): number => {\r\n try {\r\n let s_arr = milestone.split('+');\r\n let s_Klm = s_arr[0].match(/\\d+(.\\d+)?/g);\r\n let s_LM = s_arr[1];\r\n let sm = (Number(s_Klm) * 1000 + Number(s_LM));\r\n return sm;\r\n } catch {\r\n return 0;\r\n }\r\n }\r\n\r\n /**\r\n * 获取 Moment\r\n * @param date \r\n * @returns \r\n */\r\n getMoment = (date: any): Moment => {\r\n return moment(date);\r\n }\r\n\r\n\r\n \r\n /**\r\n * 函数防抖,防止函数多次触发\r\n * @param fn 实际需要执行的函数\r\n * @param timerout 限制时间\r\n * @descript 连续点击,只会触发一次\r\n */\r\n private static debounceTimer:any = null;\r\n debounce = (fn:Function, timerout:number = 300)=> {\r\n return function(...args:any[]) {\r\n if (Utilities.debounceTimer) {\r\n clearTimeout(Utilities.debounceTimer)\r\n }\r\n return new Promise((resolve)=>{\r\n Utilities.debounceTimer = setTimeout(async ()=>{\r\n resolve(await fn(...args))\r\n }, timerout);\r\n })\r\n \r\n }\r\n }\r\n\r\n /**\r\n * 计算缩放后的值,适配 1920px 和 2560px 设计稿\r\n * @param $value 输入值(数字、带单位的字符串,如 '100px'/'2rem')\r\n * @param largeBreakpoint 大屏断点(默认 2000px)\r\n * @param largeDesignWidth 大屏设计稿宽度(默认 2560px)\r\n * @returns 缩放后的值(数字或带单位的字符串)\r\n */\r\n adaptDesignSize = ( $value: ScaleValueInput, largeBreakpoint: number = 2000, largeDesignWidth: number = 2560 ): number | string => {\r\n const screenWidth = window.innerWidth;\r\n const scaleFactor = screenWidth >= largeBreakpoint ? largeDesignWidth / 1920 : 1;\r\n\r\n // 处理 undefined/null\r\n if ($value == null) return 0;\r\n\r\n // 处理数字\r\n if (typeof $value === 'number') {\r\n return $value * scaleFactor;\r\n }\r\n\r\n // 处理字符串(如 '100px'/'2rem')\r\n if (typeof $value === 'string') {\r\n const unitMatch = $value.match(/[a-z]+/i); // 匹配单位(px/rem/em)\r\n const unit = unitMatch ? unitMatch[0] : '';\r\n const numericValue = parseFloat($value);\r\n\r\n if (!isNaN(numericValue) && unit) {\r\n return `${numericValue * scaleFactor}${unit}`;\r\n }\r\n }\r\n\r\n // 其他情况(如非法字符串)原样返回\r\n return $value;\r\n }\r\n\r\n}\r\n\r\nexport const utilities: Utilities = new Utilities();\r\n","//区分浏览器:Firefox / Chrome(34 or later) / IE(X86/X64) / 国产浏览器...\r\nfunction NewBrowserObj() {\r\n var obj = new Object();\r\n obj.npapi = false; //是否已安装 npapi\r\n obj.ppapi = false; //是否已安装 ppapi\r\n obj.chrome_install_apitype = \"\"; //如果Chrome插件未安装, 允许安装的类型 (npapi, ppapi)\r\n obj.version = 0;\r\n var sver = \"\";\r\n var agnt = navigator.userAgent.toLowerCase();\r\n if (agnt.indexOf(\"edge\") > 0) //edge浏览器\r\n obj.type = \"edge\";\r\n else if (agnt.indexOf(\"msie\") > 0 || agnt.indexOf(\"trident\") > 0) { //ie浏览器\r\n obj.type = \"ie\";\r\n var off = agnt.indexOf(\"msie\");\r\n if (off >= 0) sver = agnt.substring(off + 4);\r\n }\r\n else { //chrome 或 firefox 浏览器\r\n if (navigator.mimeTypes[\"application/supcan-plugin\"]) obj.npapi = true; //npapi已经安装\r\n if (navigator.mimeTypes[\"application/x-ppapi-supcan\"]) obj.ppapi = true; //ppapi已经安装\r\n if (agnt.indexOf(\"chrome\") > 0) {\r\n obj.type = \"chrome\";\r\n var off = agnt.indexOf(\"chrome/\");\r\n if (off >= 0) sver = agnt.substring(off + 7);\r\n }\r\n else\r\n obj.type = \"firefox\";\r\n }\r\n\r\n if (sver != \"\") {\r\n var off = sver.indexOf(\".\");\r\n if (off > 0) obj.version = parseInt(sver.substr(0, off));\r\n }\r\n\r\n if (obj.type == \"chrome\") {\r\n if (obj.npapi == false && obj.ppapi == false) { //未安装插件\r\n if (obj.version < 35 || navigator.mimeTypes.length > 15) //老版本的 Chrome、或国产浏览器\r\n obj.chrome_install_apitype = \"npapi\";\r\n else\r\n obj.chrome_install_apitype = \"ppapi\";\r\n }\r\n else if (obj.npapi && obj.ppapi) { //2 种都安装了, 为了兼容, 35版前仍使用 npapi (ppapi也是支持的)\r\n if (obj.version < 35)\r\n obj.ppapi = false;\r\n else\r\n obj.npapi = false;\r\n }\r\n }\r\n\r\n obj.is64 = (agnt.indexOf(\"win64\") >= 0 || agnt.indexOf(\"x64\") >= 0) ? true : false;\r\n if (obj.is64 == false && obj.type == \"chrome\") {\r\n var s = navigator.appVersion.toLowerCase();\r\n if (s.indexOf(\"win64\") >= 0 || s.indexOf(\"x64\") >= 0) obj.is64 = true;\r\n }\r\n return obj;\r\n}\r\n\r\n//浏览器对象(全局对象)\r\nexport var $B = NewBrowserObj();\r\n\r\n// //让 ppapi 语法兼容 npapi:为 <object> 添加 func( ) 函数\r\n// if($B.ppapi) {\r\n// Object.prototype.func = function(funcname, para) {\r\n// return this.postMessageAndAwaitResponse([funcname, para + \"\"]);\r\n// }\r\n// }\r\nexport function ffunc(af, funcname, para) {\r\n try {\r\n if ($B.ppapi)\r\n return af.postMessageAndAwaitResponse([funcname, para]);\r\n else\r\n return af.func(funcname, para);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n\r\n//private:\r\nfunction bldStr(ctlType, id, para, height) {\r\n var ctlver = '1.0.122.0';\r\n\r\n //取得组件包的绝对路径(假设和dynaload.js部署在同一个目录)\r\n var host = window.location.host;\r\n var SupcanPath = \"\";\r\n var arrScript = document.getElementsByTagName(\"script\");\r\n for (var i = 0; i < arrScript.length; i++) {\r\n var src = arrScript[i].src;\r\n var index = src.indexOf('dynaload.js');\r\n if (index >= 0) {\r\n SupcanPath = src.substring(0, index);\r\n if (SupcanPath.charAt(0) == '/') {\r\n src = location.href;\r\n index = src.indexOf('//');\r\n if (index != -1) {\r\n index = src.indexOf('/', index + 2);\r\n if (index != -1) src = src.substring(0, index);\r\n SupcanPath = src + SupcanPath;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (SupcanPath == \"\") {\r\n SupcanPath = 'http://' + host + '/static/supcan/';\r\n }\r\n var typeid;\r\n if ($B.type == \"ie\") {\r\n if ($B.is64)\r\n typeid = 'CLASSID=\"clsid:11249C26-4BCD-4A74-B4D9-068936D77EFE\" Codebase=\"' + SupcanPath + 'supcan2.x64.cab#Version=1,0,0,3\"';\r\n else\r\n typeid = 'CLASSID=\"clsid:619F1AC0-2644-40D3-9EB1-22F81C5FE097\" Codebase=\"' + SupcanPath + 'supcan2.cab#Version=1,0,0,3\"';\r\n }\r\n else {\r\n if ($B.npapi) typeid = 'type=\"application/supcan-plugin\"';\r\n if ($B.ppapi) typeid = 'type=\"application/x-ppapi-supcan\"';\r\n if ($B.type == \"firefox\") typeid += ' Codebase=\"' + SupcanPath + 'supcan.xpi\"';\r\n }\r\n\r\n //组件包URL\r\n var zipurl = SupcanPath + ($B.is64 ? \"BCV1.x64.bin\" : \"BCV1.bin\");\r\n if (ctlType == \"LuxForm\")\r\n zipurl += \",\" + SupcanPath + ($B.is64 ? \"LuxForm.x64.bin\" : \"LuxForm.bin\");\r\n else if (ctlType.indexOf(\"BCV4\") >= 0)\r\n zipurl += \",\" + SupcanPath + ($B.is64 ? \"BCV4.x64.bin\" : \"BCV4.bin\");\r\n\r\n //End\r\n var str = '<Object id=' + id + ' Width=100% height=' + height + ' ' + typeid + '>';\r\n str += '<param Name=\"CtlName\" Value=\"' + ctlType + '\">';\r\n str += '<param Name=\"CtlVersion\" Value=\"' + ctlver + '\">';\r\n str += '<param Name=\"ZipUrl\" Value=\"' + zipurl + '\">';\r\n str += '<param Name=\"id\" Value=\"' + id + '\">';\r\n str += '<param Name=\"Cookie\" Value=\"' + document.cookie + '\">';\r\n str += '<param Name=\"CtlPara\" Value=\"' + para + '\">';\r\n if ($B.ppapi) str += '<param Name=\"core\" Value=\"pure\"><param name=\"wmode\" value=\"transparent\"><param Name=\"Locate\" value=\"' + window.location.href + '\">';\r\n str += '</Object>';\r\n console.log(zipurl);\r\n return str;\r\n}\r\n\r\nfunction addScript(funcStr) {\r\n var fullCode = funcStr;\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n try {\r\n script.appendChild(document.createTextNode(fullCode));\r\n } catch (ex) {\r\n script.text = fullCode;\r\n }\r\n document.body.appendChild(script);\r\n}\r\n\r\n//public:\r\nexport function insertTreeList(id, para) { document.write(bldStr(\"BCV1.TreeList\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\nexport function insertEdit(id, para) { document.write(bldStr(\"BCV1.Edit\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\nexport function insertReport(id, para) { document.write(\"LuxForm\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\") }\r\nexport function insertTree(id, para) { document.write(bldStr(\"BCV1.Tree\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\nexport function insertFreeForm(id, para) { document.write(bldStr(\"BCV1.FreeForm\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\nexport function insertChart(id, para) { document.write(bldStr(\"BCV1.Chart\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\nexport function insertUpload(id, para) { document.write(bldStr(\"BCV1.Upload\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\nexport function insertFormDesigner(id, para) { document.write(bldStr(\"BCV4.FormDesigner\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\nexport function insertEchart(id, para) { document.write(bldStr(\"BCV1.Echart\", id, para, (arguments.length > 2) ? arguments[2] : \"100%\")) }\r\n\r\n//必需的函数(控件会反向调用,用途:切换焦点)\r\nexport function focusIE(obj_or_id) {\r\n if ($B.type != \"ie\") {\r\n document.activeElement.blur();\r\n return;\r\n }\r\n try {\r\n if (typeof (obj_or_id) == 'object') {\r\n if (document.activeElement != obj_or_id) obj_or_id.focus();\r\n }\r\n else {\r\n if (document.activeElement.id == obj_or_id) return;\r\n var o = document.getElementById(obj_or_id);\r\n if (o != null) o.focus();\r\n }\r\n }\r\n catch (e) {\r\n }\r\n}\r\nexport function insertReportToContainer(containerId, reportId, para) {\r\n var supcanStr = bldStr(\"LuxForm\", reportId, para, (arguments.length > 3) ? arguments[3] : \"100%\");\r\n document.getElementById(containerId).innerHTML = supcanStr;\r\n if (supcanStr != '') {\r\n if ($B.ppapi) { //为 ppapi 添加事件侦听函数, 在其中直接调用 OnReady、OnEvent, 达到语法和 npapi 兼容的目的\r\n var funcStr = 'document.getElementById(\"' + reportId + '\").addEventListener(\"message\", handleMessage' + reportId + ', false);\\n';\r\n funcStr += 'function handleMessage' + reportId + '(message) {\\n if(message.data.name==\"OnReady\") OnReady(\"' + reportId + '\");\\n else if(message.data.name==\"OnEvent\") OnEvent(\"' + reportId + '\", message.data.event, message.data.p1, message.data.p2, message.data.p3, message.data.p4); \\n }';\r\n addScript(funcStr);\r\n }\r\n }\r\n};\r\n","export class TagModel {\r\n public bindname?: string; // 绑定名称\r\n public bindtype?: string; // 绑定类型 item table head foot NullValue LabelType\r\n public tableId?: number; // Table Id\r\n public indexnum?: number; // 指标编号\r\n public looptype?: number; // 循环类型 0 横向 1 纵向 2 先横后纵 3 先纵后横\r\n public xcount?: number; // 横向循环次数\r\n public xstep?: number; // 横向步长\r\n public ycount?: number; //纵向次数\r\n public ystep?: number; //纵向步长\r\n public tcount?: number; //跳跃次数\r\n public tstep?: number; //跳跃步长\r\n public row?: number; // 模板行\r\n public col?: number; //模板列\r\n public sheetindex?: number; //模板索引\r\n public ispage?: boolean; //是否分页\r\n public isChart?: boolean;\r\n public tag: string = ''; // 存储额外信息\r\n public isOtherTag?: boolean; // 是否为其他Tag\r\n public otherTagType?: string; // 其他Tag类型\r\n public bindTargetId?:string;\r\n}\r\n\r\n// tagGroup分组 里面设置的对象值\r\nexport class TagGroupModel {\r\n public items?: TagModel[];//单值\r\n public head?: TagModel[];//对象\r\n public foot?: TagModel[];//对象\r\n public tables?: TagModel[];//列表\r\n public pager?: TagModel[];\r\n}\r\n\r\nexport class SheetTag {\r\n /** 之前的索引页 用户和数据做关联 */\r\n public orgindex?: number;\r\n /** 当前“表单类型”的报告总页数 */\r\n public totalpage?: number;\r\n /** 当前页 */\r\n public currentpage?: number;\r\n /** 索引 */\r\n public index?: number;\r\n /** 表单类型 0=检测报告;1=检测记录;2=检测报告封面;3=检测报告声明;4=检测委托单 */\r\n public type: number = 0;\r\n public typenames: string[] = ['检测报告', '检测记录', '检测报告封面', '检测报告声明', '检测委托单', '检测汇总报告'];\r\n /** 存储额外信息 */\r\n public tag?: string;\r\n /** 在试验报表中的sheet页位置(在报告打印中会用到) */\r\n public trialSheetIndex?: number;\r\n /** 试验Id */\r\n public trialId?: number;\r\n /** 任务Id */\r\n public taskId?: number;\r\n /** 报表模板排序号 */\r\n public sortindex?:number;\r\n}\r\n\r\nexport interface reportExportOption {\r\n /** 每个sheet页的数据行开始索引 */\r\n dataRowStartIndex?: number,\r\n /** 每个sheet页的表尾有多少行 */\r\n footerRowCount?: number,\r\n /** sheet页合并方式(0=直接导出(默认);1=仅保留第一页的表头和表尾,其他sheet页只取数据;2=sheet页直接合并,不做任何处理) */\r\n mergeType?: number,\r\n /** 导出的文件名(不含后缀) */\r\n name?: string,\r\n}\r\n\r\n/** 统计报表动态生成配置项 */\r\nexport interface statisticsReportConfig{\r\n 报表标题?:string,\r\n 单位名称?:string,\r\n 汇总时间?:string,\r\n /** 纸的方向, (true=纵表;false=横表) */\r\n Oriantation:boolean, //纸的方向, (true=纵表;false=横表);\r\n /** 总行数,需要算上多出来的一行 */\r\n TotalRow?:number, //总行数,需要算上多出来的一行\r\n /** 数据开始行行号,从0开始 */\r\n StartRowIndex?:number, //数据开始行行号,从0开始\r\n /** 每页数据行数 */\r\n PageSize?:number, //每页行数\r\n /** 表头列 */\r\n Headers:any[], //表头列,与datas李的字段一样\r\n /** 数据 */\r\n Datas:any[],\r\n}\r\n","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array<T> | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array<T> | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick<ObjectConstructor, 'freeze'> = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly<T>}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record<string, boolean | undefined>} current\n * @param {string} element\n * @returns {Record<string, boolean | undefined>}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR \t= ExceptionCode.INVALID_STATE_ERR \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR \t= ExceptionCode.SYNTAX_ERR \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR \t= ExceptionCode.NAMESPACE_ERR \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR \t= ExceptionCode.INVALID_ACCESS_ERR \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index unsigned long\n\t * Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i<this.length;i++){\n\t\t\tserializeToString(this[i],buf,isHTML,nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * @private\n\t * @param {function (Node):boolean} predicate\n\t * @returns {Node[]}\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * @private\n\t * @param {Node} item\n\t * @returns {number}\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\n\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i] || null;\n}\n\n_extends(LiveNodeList,NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used\n * to represent collections of nodes that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI, qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n // Introduced in DOM Level 2:\n hasAttributes:function(){\n \treturn this.attributes.length>0;\n },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n lookupPrefix:function(namespaceURI){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n lookupNamespaceURI:function(prefix){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n \t\t\t\treturn map[prefix] ;\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n isDefaultNamespace:function(namespaceURI){\n \tvar prefix = this.lookupPrefix(namespaceURI);\n \treturn prefix == null;\n }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '<' ||\n c == '>' && '>' ||\n c == '&' && '&' ||\n c == '\"' && '"' ||\n '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n }while(node=node.nextSibling)\n }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName : '#document',\n\tnodeType : DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype : null,\n\tdocumentElement : null,\n\t_inc : 1,\n\n\tinsertBefore : function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild : function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\t// add namespaces for attributes\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\tvisibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });\n\t\t\t}else if(attr.nodeName == 'xmlns'){\n\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t}\n\t\t}\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = attr.prefix||'';\n\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t\t}\n\t\t\tserializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t}\n\n\t\t// add namespace for current node\n\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\tvar prefix = node.prefix||'';\n\t\t\tvar uri = node.namespaceURI;\n\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t}\n\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',prefixedNodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&` and `<` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" > \", and must, for compatibility,\n\t\t * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC ', pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push(' ', sysid);\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i<len;i++){\n\t\t\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\n\t\t//}\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t//case ENTITY_REFERENCE_NODE:\n\t//case PROCESSING_INSTRUCTION_NODE:\n\t////case TEXT_NODE:\n\t//case CDATA_SECTION_NODE:\n\t//case COMMENT_NODE:\n\t//\tdeep = false;\n\t//\tbreak;\n\t//case DOCUMENT_NODE:\n\t//case DOCUMENT_TYPE_NODE:\n\t//cannot be imported.\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\t//can not hit in level3\n\t//default:throw e;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor (var n in node) {\n\t\tif (Object.prototype.hasOwnProperty.call(node, n)) {\n\t\t\tvar v = node[n];\n\t\t\tif (typeof v != \"object\") {\n\t\t\t\tif (v != node2[n]) {\n\t\t\t\t\tnode2[n] = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = data;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tfunction getTextContent(node){\n\t\t\tswitch(node.nodeType){\n\t\t\tcase ELEMENT_NODE:\n\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tvar buf = [];\n\t\t\t\tnode = node.firstChild;\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\t\t\t\treturn buf.join('');\n\t\t\tdefault:\n\t\t\t\treturn node.nodeValue;\n\t\t\t}\n\t\t}\n\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\n//if(typeof require == 'function'){\n\texports.DocumentType = DocumentType;\n\texports.DOMException = DOMException;\n\texports.DOMImplementation = DOMImplementation;\n\texports.Element = Element;\n\texports.Node = Node;\n\texports.NodeList = NodeList;\n\texports.XMLSerializer = XMLSerializer;\n//}\n","'use strict';\n\nvar freeze = require('./conventions').freeze;\n\n/**\n * The entities that are predefined in every XML document.\n *\n * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1\n * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia\n */\nexports.XML_ENTITIES = freeze({\n\tamp: '&',\n\tapos: \"'\",\n\tgt: '>',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el<el />\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s</)){\n\t \t\ttagName = tagName.replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\n\t \t\tend = tagStart+1+tagName.length;\n\t\t\t\t}\n\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\tvar endMatch = config.tagName == tagName;\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\n\t\t if(endIgnoreCaseMach){\n\t\t \tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\t\t\tif(localNSMap){\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!endMatch){\n\t\t \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case\n\t\t\t\t\t}\n\t\t }else{\n\t\t \tparseStack.push(config)\n\t\t }\n\n\t\t\t\tend++;\n\t\t\t\tbreak;\n\t\t\t\t// end elment\n\t\t\tcase '?':// <?...?>\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\t\t\t\t//elStartEnd\n\t\t\t\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\n\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(locator && len){\n\t\t\t\t\tvar locator2 = copyLocator(locator,{});\n\t\t\t\t\t//try{//attribute position fixed\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.locator = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator2\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator;\n\t\t\t\t}else{\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (NAMESPACE.isHTML(el.uri) && !el.closed) {\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t} else {\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}\n\t\t}catch(e){\n\t\t\tif (e instanceof ParseError) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\terrorHandler.error('element parse error: '+e)\n\t\t\tend = -1;\n\t\t}\n\t\tif(end>start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('</'+tagName+'>')\n\t\tif(pos<elStartEnd){//忘记闭合\n\t\t\tpos = source.lastIndexOf('</'+tagName)\n\t\t}\n\t\tcloseMap[tagName] =pos\n\t}\n\treturn pos<elStartEnd;\n\t//}\n}\n\nfunction _copy (source, target) {\n\tfor (var n in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\t//append comment source.substring(4,end)//<!--\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\t//error\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA()\n\t\t\treturn end+3;\n\t\t}\n\t\t//<!DOCTYPE\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = false;\n\t\t\tvar sysid = false;\n\t\t\tif(len>3){\n\t\t\t\tif(/^public$/i.test(matchs[2][0])){\n\t\t\t\t\tpubid = matchs[3][0];\n\t\t\t\t\tsysid = len>4 && matchs[4][0];\n\t\t\t\t}else if(/^system$/i.test(matchs[2][0])){\n\t\t\t\t\tsysid = matchs[3][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name, pubid, sysid);\n\t\t\tdomBuilder.endDTD();\n\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction ElementAttributes(){\n\tthis.attributeNames = {}\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\taddValue:function(qName, value, offset) {\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetLocator:function(i){return this[i].locator},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n//\t,getIndex:function(uri, localName)){\n//\t\tif(localName){\n//\n//\t\t}else{\n//\t\t\tvar qName = uri\n//\t\t}\n//\t},\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n//\tgetType:function(uri,localName){}\n//\tgetType:function(i){},\n}\n\n\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nexports.XMLReader = XMLReader;\nexports.ParseError = ParseError;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record<string, string>} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax = new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n \tif (this.locator) {\n \tthis.doc.documentURI = this.locator.systemId;\n \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t var el = doc.createElementNS(namespaceURI, qName||localName);\n\t var len = attrs.length;\n\t appendElement(this, el);\n\t this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t for (var i = 0 ; i < len; i++) {\n\t var namespaceURI = attrs.getURI(i);\n\t var value = attrs.getValue(i);\n\t var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t var ins = this.doc.createProcessingInstruction(target, data);\n\t this.locator && position(this.locator,ins)\n\t appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t if(this.locator = locator){// && !('lineNumber' in locator)){\n\t \tlocator.lineNumber = 0;\n\t }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t var comm = this.doc.createComment(chars);\n\t this.locator && position(this.locator,comm)\n\t appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t //used in characters() methods\n\t this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t if (impl && impl.createDocumentType) {\n\t var dt = impl.createDocumentType(name, publicId, systemId);\n\t this.locator && position(this.locator,dt)\n\t appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n if (!hander.currentElement) {\n hander.doc.appendChild(node);\n } else {\n hander.currentElement.appendChild(node);\n }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","/*\r\n\tCopyright 2015 Axinom\r\n\tCopyright 2011-2013 Abdulla Abdurakhmanov\r\n\tOriginal sources are available at https://code.google.com/p/x2js/\r\n\r\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\r\n\tyou may not use this file except in compliance with the License.\r\n\tYou may obtain a copy of the License at\r\n\r\n\thttp://www.apache.org/licenses/LICENSE-2.0\r\n\r\n\tUnless required by applicable law or agreed to in writing, software\r\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\r\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\tSee the License for the specific language governing permissions and\r\n\tlimitations under the License.\r\n*/\r\n\r\n/*\r\n\tSupported export methods:\r\n\t* AMD\r\n\t* <script> (window.X2JS)\r\n\t* Node.js\r\n\r\n\tLimitations:\r\n\t* Attribute namespace prefixes are not parsed as such.\r\n\t* Overall the serialization/deserializaton code is \"best effort\" and not foolproof.\r\n*/\r\n\r\n// Module definition pattern used is returnExports from https://github.com/umdjs/umd\r\n(function (root, factory) {\r\n\t\"use strict\";\r\n\r\n\t/* global define */\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine([], factory);\r\n\t} else if (typeof module === 'object' && module.exports) {\r\n\t\t// Node. Does not work with strict CommonJS, but only CommonJS-like\r\n\t\t// environments that support module.exports, like Node.\r\n\t\tmodule.exports = factory(require(\"@xmldom/xmldom\").DOMParser);\r\n\t} else {\r\n\t\t// Browser globals (root is window)\r\n\t\troot.X2JS = factory();\r\n\t}\r\n})(this, function (CustomDOMParser) {\r\n\t\"use strict\";\r\n\r\n\t// We return a constructor that can be used to make X2JS instances.\r\n\treturn function X2JS(config) {\r\n\t\tvar VERSION = \"3.4.4\";\r\n\r\n\t\tconfig = config || {};\r\n\r\n\t\tfunction initConfigDefaults() {\r\n\t\t\t// If set to \"property\" then <element>_asArray will be created\r\n\t\t\t// to allow you to access any element as an array (even if there is only one of it).\r\n\t\t\tconfig.arrayAccessForm = config.arrayAccessForm || \"none\";\r\n\r\n\t\t\t// If \"text\" then <empty></empty> will be transformed to \"\".\r\n\t\t\t// If \"object\" then <empty></empty> will be transformed to {}.\r\n\t\t\tconfig.emptyNodeForm = config.emptyNodeForm || \"text\";\r\n\r\n\t\t\t// Function that will be called for each elements, if the function returns true, the element will be skipped\r\n\t\t\t// function(name, value) { return true; };\r\n\t\t\tconfig.jsAttributeFilter = config.jsAttributeFilter;\r\n\r\n\t\t\t// Function that will be called for each elements, the element value will be replaced by the returned value\r\n\t\t\t// function(name, value) { return parseFloat(value); };\r\n\t\t\tconfig.jsAttributeConverter = config.jsAttributeConverter;\r\n\r\n\t\t\t// Allows attribute values to be converted on the fly during parsing to objects.\r\n\t\t\t// \t\"test\": function(name, value) { return true; }\r\n\t\t\t//\t\"convert\": function(name, value) { return parseFloat(value); };\r\n\t\t\t// convert() will be called for every attribute where test() returns true\r\n\t\t\t// and the return value from convert() will replace the original value of the attribute.\r\n\t\t\tconfig.attributeConverters = config.attributeConverters || [];\r\n\r\n\t\t\t// Any elements that match the paths here will have their text parsed\r\n\t\t\t// as an XML datetime value (2011-11-12T13:00:00-07:00 style).\r\n\t\t\t// The path can be a plain string (parent.child1.child2),\r\n\t\t\t// a regex (/.*\\.child2/) or function(elementPath).\r\n\t\t\tconfig.datetimeAccessFormPaths = config.datetimeAccessFormPaths || [];\r\n\r\n\t\t\t// Any elements that match the paths listed here will be stored in JavaScript objects\r\n\t\t\t// as arrays even if there is only one of them. The path can be a plain string\r\n\t\t\t// (parent.child1.child2), a regex (/.*\\.child2/) or function(elementName, elementPath).\r\n\t\t\tconfig.arrayAccessFormPaths = config.arrayAccessFormPaths || [];\r\n\r\n // xmldom constructor arguments\r\n // @see https://github.com/jindw/xmldom#api-reference\r\n\t\t\tconfig.xmldomOptions = config.xmldomOptions || {};\r\n\r\n\t\t\t// If true, a toString function is generated to print nodes containing text or cdata.\r\n\t\t\t// Useful if you want to accept both plain text and CData as equivalent inputs.\r\n\t\t\tif (config.enableToStringFunc === undefined) {\r\n\t\t\t\tconfig.enableToStringFunc = true;\r\n\t\t\t}\r\n\r\n\t\t\t// If true, empty text tags are ignored for elements with child nodes.\r\n\t\t\tif (config.skipEmptyTextNodesForObj === undefined) {\r\n\t\t\t\tconfig.skipEmptyTextNodesForObj = true;\r\n\t\t\t}\r\n\r\n\t\t\t// If true, whitespace is trimmed from text nodes.\r\n\t\t\tif (config.stripWhitespaces === undefined) {\r\n\t\t\t\tconfig.stripWhitespaces = true;\r\n\t\t\t}\r\n\r\n\t\t\t// If true, double quotes are used in generated XML.\r\n\t\t\tif (config.useDoubleQuotes === undefined) {\r\n\t\t\t\tconfig.useDoubleQuotes = true;\r\n\t\t\t}\r\n\r\n\t\t\t// If true, the root element of the XML document is ignored when converting to objects.\r\n\t\t\t// The result will directly have the root element's children as its own properties.\r\n\t\t\tif (config.ignoreRoot === undefined) {\r\n\t\t\t\tconfig.ignoreRoot = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Whether XML characters in text are escaped when reading/writing XML.\r\n\t\t\tif (config.escapeMode === undefined) {\r\n\t\t\t\tconfig.escapeMode = true;\r\n\t\t\t}\r\n\r\n\t\t\t// Prefix to use for properties that are created to represent XML attributes.\r\n\t\t\tif (config.attributePrefix === undefined) {\r\n\t\t\t\tconfig.attributePrefix = \"_\";\r\n\t\t\t}\r\n\r\n\t\t\t// If true, empty elements will created as self closing elements (<element />)\r\n\t\t\t// If false, empty elements will be created with start and end tags (<element></element>)\r\n\t\t\tif (config.selfClosingElements === undefined) {\r\n\t\t\t\tconfig.selfClosingElements = true;\r\n\t\t\t}\r\n\r\n\t\t\t// If this property defined as false and an XML element has CData node ONLY, it will be converted to text without additional property \"__cdata\"\r\n\t\t\tif (config.keepCData === undefined) {\r\n\t\t\t\tconfig.keepCData = false;\r\n\t\t\t}\r\n\r\n\t\t\t// If this property defined as true, use { __text: 'abc' } over 'abc'\r\n\t\t\tif (config.keepText === undefined) {\r\n\t\t\t\tconfig.keepText = false;\r\n\t\t\t}\r\n\r\n\t\t\t// If true, will output dates in UTC\r\n\t\t\tif (config.jsDateUTC === undefined) {\r\n\t\t\t\tconfig.jsDateUTC = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction initRequiredPolyfills() {\r\n\t\t\tfunction pad(number) {\r\n\t\t\t\tvar r = String(number);\r\n\t\t\t\tif (r.length === 1) {\r\n\t\t\t\t\tr = '0' + r;\r\n\t\t\t\t}\r\n\t\t\t\treturn r;\r\n\t\t\t}\r\n\t\t\t// Hello IE8-\r\n\t\t\tif (typeof String.prototype.trim !== 'function') {\r\n\t\t\t\tString.prototype.trim = function trim() {\r\n\t\t\t\t\treturn this.replace(/^\\s+|^\\n+|(\\s|\\n)+$/g, '');\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tif (typeof Date.prototype.toISOString !== 'function') {\r\n\t\t\t\t// Implementation from http://stackoverflow.com/questions/2573521/how-do-i-output-an-iso-8601-formatted-string-in-javascript\r\n\t\t\t\tDate.prototype.toISOString = function toISOString() {\r\n\t\t\t\t\tvar MS_IN_S = 1000;\r\n\r\n\t\t\t\t\treturn this.getUTCFullYear()\r\n\t\t\t\t\t\t+ '-' + pad(this.getUTCMonth() + 1)\r\n\t\t\t\t\t\t+ '-' + pad(this.getUTCDate())\r\n\t\t\t\t\t\t+ 'T' + pad(this.getUTCHours())\r\n\t\t\t\t\t\t+ ':' + pad(this.getUTCMinutes())\r\n\t\t\t\t\t\t+ ':' + pad(this.getUTCSeconds())\r\n\t\t\t\t\t\t+ '.' + String((this.getUTCMilliseconds() / MS_IN_S).toFixed(3)).slice(2, 5)\r\n\t\t\t\t\t\t+ 'Z';\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinitConfigDefaults();\r\n\t\tinitRequiredPolyfills();\r\n\r\n\t\tvar DOMNodeTypes = {\r\n\t\t\t\"ELEMENT_NODE\": 1,\r\n\t\t\t\"TEXT_NODE\": 3,\r\n\t\t\t\"CDATA_SECTION_NODE\": 4,\r\n\t\t\t\"COMMENT_NODE\": 8,\r\n\t\t\t\"DOCUMENT_NODE\": 9\r\n\t\t};\r\n\r\n\t\tfunction getDomNodeLocalName(domNode) {\r\n\t\t\tvar localName = domNode.localName;\r\n\t\t\tif (localName == null) {\r\n\t\t\t\t// Yeah, this is IE!!\r\n\t\t\t\tlocalName = domNode.baseName;\r\n\t\t\t}\r\n\t\t\tif (localName == null || localName === \"\") {\r\n\t\t\t\t// ===\"\" is IE too\r\n\t\t\t\tlocalName = domNode.nodeName;\r\n\t\t\t}\r\n\t\t\treturn localName;\r\n\t\t}\r\n\r\n\t\tfunction getDomNodeNamespacePrefix(node) {\r\n\t\t\treturn node.prefix;\r\n\t\t}\r\n\r\n\t\tfunction escapeXmlChars(str) {\r\n\t\t\tif (typeof str === \"string\")\r\n\t\t\t\treturn str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''');\r\n\t\t\telse\r\n\t\t\t\treturn str;\r\n\t\t}\r\n\r\n\t\tfunction unescapeXmlChars(str) {\r\n\t\t\treturn str.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/'/g, \"'\").replace(/&/g, '&');\r\n\t\t}\r\n\r\n\t\tfunction ensureProperArrayAccessForm(element, childName, elementPath) {\r\n\t\t\tswitch (config.arrayAccessForm) {\r\n\t\t\t\tcase \"property\":\r\n\t\t\t\t\tif (!(element[childName] instanceof Array))\r\n\t\t\t\t\t\telement[childName + \"_asArray\"] = [element[childName]];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\telement[childName + \"_asArray\"] = element[childName];\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (!(element[childName] instanceof Array) && config.arrayAccessFormPaths.length > 0) {\r\n\t\t\t\tvar match = false;\r\n\r\n\t\t\t\tfor (var i = 0; i < config.arrayAccessFormPaths.length; i++) {\r\n\t\t\t\t\tvar arrayPath = config.arrayAccessFormPaths[i];\r\n\t\t\t\t\tif (typeof arrayPath === \"string\") {\r\n\t\t\t\t\t\tif (arrayPath === elementPath) {\r\n\t\t\t\t\t\t\tmatch = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (arrayPath instanceof RegExp) {\r\n\t\t\t\t\t\tif (arrayPath.test(elementPath)) {\r\n\t\t\t\t\t\t\tmatch = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (typeof arrayPath === \"function\") {\r\n\t\t\t\t\t\tif (arrayPath(childName, elementPath)) {\r\n\t\t\t\t\t\t\tmatch = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (match)\r\n\t\t\t\t\telement[childName] = [element[childName]];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction xmlDateTimeToDate(prop) {\r\n\t\t\t// Implementation based up on http://stackoverflow.com/questions/8178598/xml-datetime-to-javascript-date-object\r\n\t\t\t// Improved to support full spec and optional parts\r\n\t\t\tvar MINUTES_PER_HOUR = 60;\r\n\r\n\t\t\tvar bits = prop.split(/[-T:+Z]/g);\r\n\r\n\t\t\tvar d = new Date(bits[0], bits[1] - 1, bits[2]);\r\n\t\t\tvar secondBits = bits[5].split(\"\\.\");\r\n\t\t\td.setHours(bits[3], bits[4], secondBits[0]);\r\n\t\t\tif (secondBits.length > 1)\r\n\t\t\t\td.setMilliseconds(secondBits[1]);\r\n\r\n\t\t\t// Get supplied time zone offset in minutes\r\n\t\t\tif (bits[6] && bits[7]) {\r\n\t\t\t\tvar offsetMinutes = bits[6] * MINUTES_PER_HOUR + Number(bits[7]);\r\n\t\t\t\tvar sign = /\\d\\d-\\d\\d:\\d\\d$/.test(prop) ? '-' : '+';\r\n\r\n\t\t\t\t// Apply the sign\r\n\t\t\t\toffsetMinutes = 0 + (sign === '-' ? -1 * offsetMinutes : offsetMinutes);\r\n\r\n\t\t\t\t// Apply offset and local timezone\r\n\t\t\t\td.setMinutes(d.getMinutes() - offsetMinutes - d.getTimezoneOffset());\r\n\t\t\t} else if (prop.indexOf(\"Z\", prop.length - 1) !== -1) {\r\n\t\t\t\td = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()));\r\n\t\t\t}\r\n\r\n\t\t\t// d is now a local time equivalent to the supplied time\r\n\t\t\treturn d;\r\n\t\t}\r\n\r\n\t\tfunction convertToDateIfRequired(value, childName, fullPath) {\r\n\t\t\tif (config.datetimeAccessFormPaths.length > 0) {\r\n\t\t\t\tvar pathWithoutTextNode = fullPath.split(\"\\.#\")[0];\r\n\r\n\t\t\t\tfor (var i = 0; i < config.datetimeAccessFormPaths.length; i++) {\r\n\t\t\t\t\tvar candidatePath = config.datetimeAccessFormPaths[i];\r\n\t\t\t\t\tif (typeof candidatePath === \"string\") {\r\n\t\t\t\t\t\tif (candidatePath === pathWithoutTextNode)\r\n\t\t\t\t\t\t\treturn xmlDateTimeToDate(value);\r\n\t\t\t\t\t} else if (candidatePath instanceof RegExp) {\r\n\t\t\t\t\t\tif (candidatePath.test(pathWithoutTextNode))\r\n\t\t\t\t\t\t\treturn xmlDateTimeToDate(value);\r\n\t\t\t\t\t} else if (typeof candidatePath === \"function\") {\r\n\t\t\t\t\t\tif (candidatePath(pathWithoutTextNode))\r\n\t\t\t\t\t\t\treturn xmlDateTimeToDate(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn value;\r\n\t\t}\r\n\r\n\t\tfunction deserializeRootElementChildren(rootElement) {\r\n\t\t\tvar result = {};\r\n\t\t\tvar children = rootElement.childNodes;\r\n\r\n\t\t\t// Alternative for firstElementChild which is not supported in some environments\r\n\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\tvar child = children.item(i);\r\n\t\t\t\tif (child.nodeType === DOMNodeTypes.ELEMENT_NODE) {\r\n\t\t\t\t\tvar childName = getDomNodeLocalName(child);\r\n\r\n\t\t\t\t\tif (config.ignoreRoot)\r\n\t\t\t\t\t\tresult = deserializeDomChildren(child, childName);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tresult[childName] = deserializeDomChildren(child, childName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfunction deserializeElementChildren(element, elementPath) {\r\n\t\t\tvar result = {};\r\n\t\t\tresult.__cnt = 0;\r\n\r\n\t\t\tvar nodeChildren = element.childNodes;\r\n\r\n\t\t\t// Child nodes.\r\n\t\t\tfor (var iChild = 0; iChild < nodeChildren.length; iChild++) {\r\n\t\t\t\tvar child = nodeChildren.item(iChild);\r\n\t\t\t\tvar childName = getDomNodeLocalName(child);\r\n\r\n\t\t\t\tif (child.nodeType === DOMNodeTypes.COMMENT_NODE)\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tresult.__cnt++;\r\n\r\n\t\t\t\t// We deliberately do not accept everything falsey here because\r\n\t\t\t\t// elements that resolve to empty string should still be preserved.\r\n\t\t\t\tif (result[childName] == null) {\r\n\t\t\t\t\tresult[childName] = deserializeDomChildren(child, elementPath + \".\" + childName);\r\n\t\t\t\t\tensureProperArrayAccessForm(result, childName, elementPath + \".\" + childName);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (!(result[childName] instanceof Array)) {\r\n\t\t\t\t\t\tresult[childName] = [result[childName]];\r\n\t\t\t\t\t\tensureProperArrayAccessForm(result, childName, elementPath + \".\" + childName);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult[childName][result[childName].length] = deserializeDomChildren(child, elementPath + \".\" + childName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Attributes\r\n\t\t\tfor (var iAttribute = 0; iAttribute < element.attributes.length; iAttribute++) {\r\n\t\t\t\tvar attribute = element.attributes.item(iAttribute);\r\n\t\t\t\tresult.__cnt++;\r\n\r\n\t\t\t\tvar adjustedValue = attribute.value;\r\n\t\t\t\tfor (var iConverter = 0; iConverter < config.attributeConverters.length; iConverter++) {\r\n\t\t\t\t\tvar converter = config.attributeConverters[iConverter];\r\n\t\t\t\t\tif (converter.test.call(null, attribute.name, attribute.value))\r\n\t\t\t\t\t\tadjustedValue = converter.convert.call(null, attribute.name, attribute.value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult[config.attributePrefix + attribute.name] = adjustedValue;\r\n\t\t\t}\r\n\r\n\t\t\t// Node namespace prefix\r\n\t\t\tvar namespacePrefix = getDomNodeNamespacePrefix(element);\r\n\t\t\tif (namespacePrefix) {\r\n\t\t\t\tresult.__cnt++;\r\n\t\t\t\tresult.__prefix = namespacePrefix;\r\n\t\t\t}\r\n\r\n\t\t\tif (result[\"#text\"]) {\r\n\t\t\t\tresult.__text = result[\"#text\"];\r\n\r\n\t\t\t\tif (result.__text instanceof Array) {\r\n\t\t\t\t\tresult.__text = result.__text.join(\"\\n\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (config.escapeMode)\r\n\t\t\t\t\tresult.__text = unescapeXmlChars(result.__text);\r\n\r\n\t\t\t\tif (config.stripWhitespaces)\r\n\t\t\t\t\tresult.__text = result.__text.trim();\r\n\r\n\t\t\t\tdelete result[\"#text\"];\r\n\r\n\t\t\t\tif (config.arrayAccessForm === \"property\")\r\n\t\t\t\t\tdelete result[\"#text_asArray\"];\r\n\r\n\t\t\t\tresult.__text = convertToDateIfRequired(result.__text, \"#text\", elementPath + \".#text\");\r\n\t\t\t}\r\n\r\n\t\t\tif (result.hasOwnProperty('#cdata-section')) {\r\n\t\t\t\tresult.__cdata = result[\"#cdata-section\"];\r\n\t\t\t\tdelete result[\"#cdata-section\"];\r\n\r\n\t\t\t\tif (config.arrayAccessForm === \"property\")\r\n\t\t\t\t\tdelete result[\"#cdata-section_asArray\"];\r\n\t\t\t}\r\n\r\n\t\t\tif (result.__cnt === 1 && result.__text && !config.keepText) {\r\n\t\t\t\tresult = result.__text;\r\n\t\t\t} else if (result.__cnt === 0 && config.emptyNodeForm === \"text\") {\r\n\t\t\t\tresult = '';\r\n\t\t\t} else if (result.__cnt > 1 && result.__text !== undefined && config.skipEmptyTextNodesForObj) {\r\n\t\t\t\tif (config.stripWhitespaces && result.__text === \"\" || result.__text.trim() === \"\") {\r\n\t\t\t\t\tdelete result.__text;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tdelete result.__cnt;\r\n\r\n\t\t\t/**\r\n\t\t\t * We are checking if we are creating a __cdata property or if we just add the content of cdata inside result.\r\n\t\t\t * But, if we have a property inside xml tag (<tag PROPERTY=\"1\"></tag>), and a cdata inside, we can't ignore it.\r\n\t\t\t * In this case we are keeping __cdata property.\r\n\t\t\t */\r\n\t\t\tif (!config.keepCData && (!result.hasOwnProperty('__text') && result.hasOwnProperty('__cdata') && Object.keys(result).length === 1)) {\r\n\t\t\t\treturn (result.__cdata ? result.__cdata : '');\r\n\t\t\t}\r\n\r\n\t\t\tif (config.enableToStringFunc && (result.__text || result.__cdata)) {\r\n\t\t\t\tresult.toString = function toString() {\r\n\t\t\t\t\treturn (this.__text ? this.__text : '') + (this.__cdata ? this.__cdata : '');\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfunction deserializeDomChildren(node, parentPath) {\r\n\t\t\tif (node.nodeType === DOMNodeTypes.DOCUMENT_NODE) {\r\n\t\t\t\treturn deserializeRootElementChildren(node);\r\n\t\t\t} else if (node.nodeType === DOMNodeTypes.ELEMENT_NODE) {\r\n\t\t\t\treturn deserializeElementChildren(node, parentPath);\r\n\t\t\t} else if (node.nodeType === DOMNodeTypes.TEXT_NODE || node.nodeType === DOMNodeTypes.CDATA_SECTION_NODE) {\r\n\t\t\t\treturn node.nodeValue;\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction serializeStartTag(jsObject, elementName, attributeNames, selfClosing) {\r\n\t\t\tvar resultStr = \"<\" + ((jsObject && jsObject.__prefix) ? (jsObject.__prefix + \":\") : \"\") + elementName;\r\n\r\n\t\t\tif (attributeNames) {\r\n\t\t\t\tfor (var i = 0; i < attributeNames.length; i++) {\r\n\t\t\t\t\tvar attributeName = attributeNames[i];\r\n\t\t\t\t\tvar attributeValue = jsObject[attributeName];\r\n\r\n\t\t\t\t\tif (config.escapeMode)\r\n\t\t\t\t\t\tattributeValue = escapeXmlChars(attributeValue);\r\n\r\n\t\t\t\t\tresultStr += \" \" + attributeName.substr(config.attributePrefix.length) + \"=\";\r\n\r\n\t\t\t\t\tif (config.useDoubleQuotes)\r\n\t\t\t\t\t\tresultStr += '\"' + attributeValue + '\"';\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tresultStr += \"'\" + attributeValue + \"'\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!selfClosing)\r\n\t\t\t\tresultStr += \">\";\r\n\t\t\telse\r\n\t\t\t\tresultStr += \" />\";\r\n\r\n\t\t\treturn resultStr;\r\n\t\t}\r\n\r\n\t\tfunction serializeEndTag(jsObject, elementName) {\r\n\t\t\treturn \"</\" + ((jsObject && jsObject.__prefix) ? (jsObject.__prefix + \":\") : \"\") + elementName + \">\";\r\n\t\t}\r\n\r\n\t\tfunction endsWith(str, suffix) {\r\n\t\t\treturn str.indexOf(suffix, str.length - suffix.length) !== -1;\r\n\t\t}\r\n\r\n\t\tfunction isSpecialProperty(jsonObj, propertyName) {\r\n\t\t\tif ((config.arrayAccessForm === \"property\" && endsWith(propertyName.toString(), (\"_asArray\")))\r\n\t\t\t\t|| propertyName.toString().indexOf(config.attributePrefix) === 0\r\n\t\t\t\t|| propertyName.toString().indexOf(\"__\") === 0\r\n\t\t\t\t|| (jsonObj[propertyName] instanceof Function))\r\n\t\t\t\treturn true;\r\n\t\t\telse\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfunction getDataElementCount(jsObject) {\r\n\t\t\tvar count = 0;\r\n\r\n\t\t\tif (jsObject instanceof Object) {\r\n\t\t\t\tfor (var propertyName in jsObject) {\r\n\t\t\t\t\tif (isSpecialProperty(jsObject, propertyName))\r\n\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn count;\r\n\t\t}\r\n\r\n\t\tfunction getDataAttributeNames(jsObject) {\r\n\t\t\tvar names = [];\r\n\r\n\t\t\tif (jsObject instanceof Object) {\r\n\t\t\t\tfor (var attributeName in jsObject) {\r\n\t\t\t\t\tif (attributeName.toString().indexOf(\"__\") === -1\r\n\t\t\t\t\t\t&& attributeName.toString().indexOf(config.attributePrefix) === 0) {\r\n\t\t\t\t\t\tnames.push(attributeName);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn names;\r\n\t\t}\r\n\r\n\t\tfunction serializeComplexTextNodeContents(textNode) {\r\n\t\t\tvar result = \"\";\r\n\r\n\t\t\tif (textNode.__cdata) {\r\n\t\t\t\tresult += \"<![CDATA[\" + textNode.__cdata + \"]]>\";\r\n\t\t\t}\r\n\r\n\t\t\tif (textNode.__text || typeof (textNode.__text) === 'number' || typeof (textNode.__text) === 'boolean') {\r\n\t\t\t\tif (config.escapeMode)\r\n\t\t\t\t\tresult += escapeXmlChars(textNode.__text);\r\n\t\t\t\telse\r\n\t\t\t\t\tresult += textNode.__text;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfunction serializeTextNodeContents(textNode) {\r\n\t\t\tvar result = \"\";\r\n\r\n\t\t\tif (textNode instanceof Object) {\r\n\t\t\t\tresult += serializeComplexTextNodeContents(textNode);\r\n\t\t\t} else if (textNode !== null) {\r\n\t\t\t\tif (config.escapeMode)\r\n\t\t\t\t\tresult += escapeXmlChars(textNode);\r\n\t\t\t\telse\r\n\t\t\t\t\tresult += textNode;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfunction serializeArray(elementArray, elementName, attributes) {\r\n\t\t\tvar result = \"\";\r\n\r\n\t\t\tif (elementArray.length === 0) {\r\n\t\t\t\tresult += serializeStartTag(elementArray, elementName, attributes, true);\r\n\t\t\t} else {\r\n\t\t\t\tfor (var i = 0; i < elementArray.length; i++) {\r\n\t\t\t\t\tresult += serializeJavaScriptObject(elementArray[i], elementName, getDataAttributeNames(elementArray[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfunction serializeJavaScriptObject(element, elementName, attributes) {\r\n\t\t\tvar result = \"\";\r\n\r\n\t\t\t// Filter out elements\r\n\t\t\tif (config.jsAttributeFilter && config.jsAttributeFilter.call(null, elementName, element)) {\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t\t// Convert element\r\n\t\t\tif (config.jsAttributeConverter) {\r\n\t\t\t\telement = config.jsAttributeConverter.call(null, elementName, element);\r\n\t\t\t}\r\n\t\t\tif ((element === undefined || element === null || element === '') && config.selfClosingElements) {\r\n\t\t\t\tresult += serializeStartTag(element, elementName, attributes, true);\r\n\t\t\t} else if (typeof element === 'object') {\r\n\t\t\t\tif (Object.prototype.toString.call(element) === '[object Array]') {\r\n\t\t\t\t\tresult += serializeArray(element, elementName, attributes);\r\n\t\t\t\t} else if (element instanceof Date) {\r\n\t\t\t\t\tresult += serializeStartTag(element, elementName, attributes, false);\r\n\t\t\t\t\t// Serialize date\r\n\t\t\t\t\tresult += config.jsDateUTC ? element.toUTCString() : element.toISOString();\r\n\t\t\t\t\tresult += serializeEndTag(element, elementName);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar childElementCount = getDataElementCount(element);\r\n\t\t\t\t\tif (childElementCount > 0 || typeof (element.__text) === 'number' || typeof (element.__text) === 'boolean' || element.__text || element.__cdata) {\r\n\t\t\t\t\t\tresult += serializeStartTag(element, elementName, attributes, false);\r\n\t\t\t\t\t\tresult += serializeJavaScriptObjectChildren(element);\r\n\t\t\t\t\t\tresult += serializeEndTag(element, elementName);\r\n\t\t\t\t\t} else if (config.selfClosingElements) {\r\n\t\t\t\t\t\tresult += serializeStartTag(element, elementName, attributes, true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tresult += serializeStartTag(element, elementName, attributes, false);\r\n\t\t\t\t\t\tresult += serializeEndTag(element, elementName);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult += serializeStartTag(element, elementName, attributes, false);\r\n\t\t\t\tresult += serializeTextNodeContents(element);\r\n\t\t\t\tresult += serializeEndTag(element, elementName);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfunction serializeJavaScriptObjectChildren(jsObject) {\r\n\t\t\tvar result = \"\";\r\n\r\n\t\t\tvar elementCount = getDataElementCount(jsObject);\r\n\r\n\t\t\tif (elementCount > 0) {\r\n\t\t\t\tfor (var elementName in jsObject) {\r\n\t\t\t\t\tif (isSpecialProperty(jsObject, elementName))\r\n\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\tvar element = jsObject[elementName];\r\n\t\t\t\t\tvar attributes = getDataAttributeNames(element);\r\n\r\n\t\t\t\t\tresult += serializeJavaScriptObject(element, elementName, attributes);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tresult += serializeTextNodeContents(jsObject);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tfunction parseXml(xml) {\r\n\t\t\tif (xml === undefined) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof xml !== \"string\") {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar parser = null;\r\n\t\t\tvar domNode = null;\r\n\r\n\t\t\tif (CustomDOMParser) {\r\n\t\t\t\t// This branch is used for node.js, with the xmldom parser.\r\n\t\t\t\tparser = new CustomDOMParser(config.xmldomOptions);\r\n\r\n\t\t\t\tdomNode = parser.parseFromString(xml, \"text/xml\");\r\n\t\t\t} else if (window && window.DOMParser) {\r\n\t\t\t\tparser = new window.DOMParser();\r\n\t\t\t\tvar parsererrorNS = null;\r\n\r\n\t\t\t\tvar isIEParser = window.ActiveXObject || \"ActiveXObject\" in window;\r\n\r\n\t\t\t\t// IE9+ now is here\r\n\t\t\t\tif (!isIEParser && document.all && !document.addEventListener) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tparsererrorNS = parser.parseFromString(\"INVALID\", \"text/xml\").childNodes[0].namespaceURI;\r\n\t\t\t\t\t} catch (err) {\r\n\t\t\t\t\t\tparsererrorNS = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tdomNode = parser.parseFromString(xml, \"text/xml\");\r\n\t\t\t\t\tif (parsererrorNS !== null && domNode.getElementsByTagNameNS(parsererrorNS, \"parsererror\").length > 0) {\r\n\t\t\t\t\t\tdomNode = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tdomNode = null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// IE :(\r\n\t\t\t\tif (xml.indexOf(\"<?\") === 0) {\r\n\t\t\t\t\txml = xml.substr(xml.indexOf(\"?>\") + 2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* global ActiveXObject */\r\n\t\t\t\tdomNode = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n\t\t\t\tdomNode.async = \"false\";\r\n\t\t\t\tdomNode.loadXML(xml);\r\n\t\t\t}\r\n\r\n\t\t\treturn domNode;\r\n\t\t}\r\n\r\n\t\tthis.asArray = function asArray(prop) {\r\n\t\t\tif (prop === undefined || prop === null) {\r\n\t\t\t\treturn [];\r\n\t\t\t} else if (prop instanceof Array) {\r\n\t\t\t\treturn prop;\r\n\t\t\t} else {\r\n\t\t\t\treturn [prop];\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.toXmlDateTime = function toXmlDateTime(dt) {\r\n\t\t\tif (dt instanceof Date) {\r\n\t\t\t\treturn dt.toISOString();\r\n\t\t\t} else if (typeof (dt) === 'number') {\r\n\t\t\t\treturn new Date(dt).toISOString();\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.asDateTime = function asDateTime(prop) {\r\n\t\t\tif (typeof (prop) === \"string\") {\r\n\t\t\t\treturn xmlDateTimeToDate(prop);\r\n\t\t\t} else {\r\n\t\t\t\treturn prop;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t\tInternally the logic works in a cycle:\r\n\t\t\tDOM->JS - implemented by custom logic (deserialization).\r\n\t\t\tJS->XML - implemented by custom logic (serialization).\r\n\t\t\tXML->DOM - implemented by browser.\r\n\t\t*/\r\n\r\n\t\t// Transformns an XML string into DOM-tree\r\n\t\tthis.xml2dom = function xml2dom(xml) {\r\n\t\t\treturn parseXml(xml);\r\n\t\t};\r\n\r\n\t\t// Transforms a DOM tree to JavaScript objects.\r\n\t\tthis.dom2js = function dom2js(domNode) {\r\n\t\t\treturn deserializeDomChildren(domNode, null);\r\n\t\t};\r\n\r\n\t\t// Transforms JavaScript objects to a DOM tree.\r\n\t\tthis.js2dom = function js2dom(jsObject) {\r\n\t\t\tvar xml = this.js2xml(jsObject);\r\n\t\t\treturn parseXml(xml);\r\n\t\t};\r\n\r\n\t\t// Transformns an XML string into JavaScript objects.\r\n\t\tthis.xml2js = function xml2js(xml) {\r\n\t\t\tvar domNode = parseXml(xml);\r\n\t\t\tif (domNode != null)\r\n\t\t\t\treturn this.dom2js(domNode);\r\n\t\t\telse\r\n\t\t\t\treturn null;\r\n\t\t};\r\n\r\n\t\t// Transforms JavaScript objects into an XML string.\r\n\t\tthis.js2xml = function js2xml(jsObject) {\r\n\t\t\treturn serializeJavaScriptObjectChildren(jsObject);\r\n\t\t};\r\n\r\n\t\tthis.getVersion = function getVersion() {\r\n\t\t\treturn VERSION;\r\n\t\t};\r\n\t};\r\n});\r\n","import { utilities } from '../Utilities'\r\nimport { insertReportToContainer, ffunc, $B } from './supcan/dynaload';\r\nimport { SheetTag, TagModel, TagGroupModel } from './reportModel';\r\nimport X2JS from \"x2js\"\r\n\r\nexport interface RowAndCol {\r\n row: number;\r\n col: number;\r\n page?: number;\r\n}\r\n\r\nexport interface margin {\r\n top?: number;\r\n right?: number;\r\n bottom?: number;\r\n left?: number;\r\n}\r\n\r\nexport default class SupcanReport {\r\n public AF: any;\r\n public AFId: string = utilities.getUniqueCode().replaceAll('-', '');\r\n public DomId: string = \"\";\r\n public suReport: any;\r\n /** 当前报表的URL、或者是报表的XML大串 */\r\n public reportFile: string = \"\";\r\n /** design=设计、view=预览 */\r\n public mode: string = \"design\";\r\n\r\n /** 签章图片的高 */\r\n private signImageHeight = 35;\r\n /** 最后一行的高 */\r\n private lastRowHeight = this.signImageHeight + 1;\r\n\r\n public TagData: TagModel[] = [];\r\n // Tag进行分组\r\n public TagGroupData: TagGroupModel = new TagGroupModel();\r\n /** 组件是否已经安装 */\r\n public isInstall = utilities.isNull($B) ? false : ($B as any).ppapi ? true : ($B as any).npapi ? true : false;\r\n\r\n /**\r\n * 初始化报表容器\r\n * @param containerId 容器id\r\n * @param mode 默认design(设计模式)\r\n */\r\n public init(containerId: string, mode = 'design', callback: any = undefined, eventCallback: any = undefined) {\r\n let toolsStr = 'Rebar=none;PreviewButton=print;PagesTabPercent=80%;WorkMode=RunTime;';\r\n if (mode == 'design') {\r\n toolsStr = 'PagesTabPercent=70%;';\r\n }\r\n else if (mode == 'design1') {\r\n //只有字体和打印\r\n toolsStr = 'Rebar=Font,Print;PreviewButton=print;PagesTabPercent=80%;WorkMode=RunTime';\r\n }\r\n else if (mode == 'design2') {\r\n //只有字体\r\n toolsStr = 'Rebar=Font;PreviewButton=print;PagesTabPercent=80%;WorkMode=RunTime';\r\n } else if (mode == 'design20') {\r\n //只有字体 工地试验室打印预览去掉打印按钮\r\n toolsStr = 'Rebar=Font,Form;Form=717;PreviewButton=none;PagesTabPercent=80%;WorkMode=RunTime';\r\n }\r\n this.DomId = containerId;\r\n this.mode = mode;\r\n if (callback) {\r\n this.OnReportReady(callback);\r\n }\r\n if (eventCallback) {\r\n this.BindReportEvent(eventCallback);\r\n }\r\n insertReportToContainer(containerId, this.AFId, toolsStr);\r\n this.suReport = document.getElementById(this.AFId);\r\n }\r\n\r\n /**\r\n * 报表实例化后调用\r\n * @param callback\r\n */\r\n public OnReportReady(callback: any) {\r\n (window as any).ReportReady = (id: any) => {\r\n if (callback) {\r\n callback(id);\r\n }\r\n }\r\n }\r\n /**\r\n * 报表实例化后事件调用\r\n * @param callback\r\n */\r\n public BindReportEvent(callback: any) {\r\n (window as any).ReportEvent = (id: any, event: any, p1: any, p2: any, p3: any, p4: any) => {\r\n if (callback) {\r\n callback(id, event, p1, p2, p3, p4);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 构件报表\r\n * @param xmlPath 报表的URL、或者是报表的XML大串\r\n */\r\n public build(xmlPath: string, callback: any = undefined) {\r\n this.reportFile = xmlPath;\r\n const result = ffunc(this.suReport, 'Build', `${xmlPath}`);\r\n if (result == 1) {\r\n if (callback) {\r\n callback();\r\n }\r\n } else {\r\n return;\r\n }\r\n // const _this = this;\r\n // setTimeout(() => {\r\n // ffunc(_this.suReport,'Build', xmlPath);\r\n // if(callback) {\r\n // callback();\r\n // }\r\n // }, 1000);\r\n }\r\n /** 强制失去焦点 */\r\n public Blur() {\r\n ffunc(this.suReport, 'Blur', ``);\r\n }\r\n\r\n /**\r\n * 获取所有tag绑定的信息表头表尾等\r\n */\r\n public GetAllTagData() {\r\n this.TagData = this.getAllCellTagData();;\r\n this.TagGroupData.items = this.TagData.filter((u) => u.bindtype === 'item')\r\n this.TagGroupData.foot = this.TagData.filter((u) => u.bindtype === 'footer')\r\n this.TagGroupData.head = this.TagData.filter((u) => u.bindtype === 'header')\r\n this.TagGroupData.tables = this.TagData.filter((u) => u.bindtype === 'table')\r\n this.TagGroupData.pager = this.TagData.filter((u) => u.bindtype === 'pager')\r\n }\r\n\r\n /**\r\n * 获取指定sheetIndex的信息表头表尾等\r\n */\r\n public GetTagDataBySheetIndex(sheetIndex: number) {\r\n var TagData = this.getCellTagDataBysheetTagIndex(sheetIndex);\r\n var TagGroupData: any = {};\r\n TagGroupData.items = TagData.filter((u) => u.bindtype === 'item')\r\n TagGroupData.foot = TagData.filter((u) => u.bindtype === 'footer')\r\n TagGroupData.head = TagData.filter((u) => u.bindtype === 'header')\r\n TagGroupData.tables = TagData.filter((u) => u.bindtype === 'table')\r\n TagGroupData.pager = TagData.filter((u) => u.bindtype === 'pager')\r\n return TagGroupData;\r\n }\r\n\r\n /**\r\n * 转换为XLSX文件\r\n * @param fileName 文件路径\r\n */\r\n public convertToXLSX(fileName: string) {\r\n ffunc(this.suReport, 'callfunc', `105\\r\\nType=xlsx; WorkSheet=all; filename=${fileName}`);\r\n }\r\n\r\n /**\r\n * 转换为XML文件\r\n * @param fileName 文件路径\r\n */\r\n public convertToXML(fileName: string = '') {\r\n return ffunc(this.suReport, 'callfunc', `1074\\r\\n Filename=${fileName}`);\r\n }\r\n /**\r\n * 报表缩放\r\n * @param z 20、50、80、100、150、200\r\n */\r\n public setZoom(z: number) {\r\n ffunc(this.suReport, 'callfunc', `15\\r\\n${z}`);\r\n }\r\n\r\n /**\r\n * 设置全屏\r\n * @param m 0-自动,1-退出全屏, 2-进入全屏\r\n */\r\n public setFullScreen(m: number) {\r\n ffunc(this.suReport, 'callfunc', `717\\r\\n${m}`);\r\n }\r\n\r\n /**\r\n * 获取xml串\r\n */\r\n public getXmlStr() {\r\n return ffunc(this.suReport, \"GetFileXML\", \"\");\r\n }\r\n\r\n /**\r\n * 获取指定页的xml串\r\n * @param sheetIndex\r\n */\r\n public getSheetXmlStr(sheetIndex: any) {\r\n return ffunc(this.suReport, 'callfunc', `1074\\r\\n WorkSheet=${sheetIndex};isReturnContent=true;`);\r\n }\r\n\r\n /**\r\n * 设置列宽(单位:像素数)\r\n * @param colIndex\r\n * @param value\r\n * @param sheetHandle 工作表的句柄\r\n */\r\n public setColWidth(colIndex: number, value: number, sheetHandle: string = \"\") {\r\n return Number(ffunc(this.suReport, sheetHandle + 'SetColWidth', `${colIndex} \\r\\n ${value}`));\r\n }\r\n\r\n /**\r\n * 获取列宽(单位:像素数)\r\n * @param cellName\r\n * @param value\r\n * @param sheetHandle 工作表的句柄\r\n */\r\n public getColWidthByCellName(cellName: string, sheetHandle: string = \"\") {\r\n return Number(ffunc(this.suReport, sheetHandle + 'GetColWidth', `${cellName}`));\r\n }\r\n\r\n\r\n /**\r\n * 获取列宽(单位:像素数)\r\n * @param colIndex\r\n * @param value\r\n * @param sheetHandle 工作表的句柄\r\n */\r\n public getColWidth(colIndex: number, sheetHandle: string = \"\") {\r\n return Number(ffunc(this.suReport, sheetHandle + 'GetColWidth', `${colIndex}`));\r\n }\r\n\r\n /**\r\n * 设置行高(单位:像素数)\r\n * @param rowIndex\r\n * @param value\r\n * @param sheetHandle 工作表的句柄\r\n */\r\n public setRowHeight(rowIndex: number, value: number, sheetHandle: string = \"\") {\r\n return Number(ffunc(this.suReport, sheetHandle + 'SetRowHeight', `${rowIndex} \\r\\n ${value}`));\r\n }\r\n\r\n /**\r\n * 获取行高(单位:像素数)\r\n * @param rowIndex\r\n * @param sheetHandle 工作表的句柄\r\n */\r\n public getRowHeight(rowIndex: number, sheetHandle: string = \"\") {\r\n return Number(ffunc(this.suReport, sheetHandle + 'GetRowHeight', `${rowIndex}`));\r\n }\r\n\r\n /**\r\n * 获取sheet页的数量\r\n */\r\n public getWorksheets(): number {\r\n return Number(ffunc(this.suReport, 'GetWorksheets', ''));\r\n }\r\n\r\n /**\r\n * 获取当前sheet页的索引\r\n */\r\n public getCurrentWorksheet() {\r\n return ffunc(this.suReport, 'GetCurrentWorksheet', '');\r\n }\r\n /**\r\n * 获取当前sheet页句柄\r\n */\r\n public getCurrentSheetHandle() {\r\n return this.getHandle(Number(this.getCurrentWorksheet()))\r\n }\r\n\r\n /**\r\n * 设置当前工作表\r\n * @param sheetId 序号(从0开始计数),或工作表名称\r\n */\r\n public setCurrentWorksheet(sheetId: any) {\r\n ffunc(this.suReport, 'SetCurrentWorksheet', `${sheetId}`);\r\n }\r\n\r\n /**\r\n * 设置让报表能够重画或不能重画\r\n * @param value\r\n */\r\n public SetRedrawAble(value: boolean) {\r\n ffunc(this.suReport, 'SetRedrawAble', value ? \"true\" : \"false\");\r\n }\r\n\r\n /**\r\n * 控件隐藏\r\n * @param commandStr true=隐藏;空字符串=显示\r\n */\r\n public grayWindow(commandStr: string) {\r\n const isVisibility = commandStr == \"true\" ? 'hidden' : 'visible';\r\n let ele:any = document.getElementById(this.suReport.parentElement.id)\r\n ele.style.visibility = isVisibility;\r\n ffunc(this.suReport, 'grayWindow', commandStr)\r\n }\r\n\r\n /**\r\n * 获取总行数\r\n */\r\n public getRows(sheetHandle: string = \"\"): number {\r\n return Number(ffunc(this.suReport, sheetHandle + 'GetRows', ''));\r\n }\r\n\r\n /**\r\n * 获取总列数\r\n */\r\n public getCols(sheetHandle: string = \"\") {\r\n return Number(ffunc(this.suReport, sheetHandle + 'GetCols', ''));\r\n }\r\n\r\n /**\r\n * 删除行\r\n * @param startRowIndex 开始删除的行号(从0开始计数)\r\n * @param rowCount 行数,-1表示删除后面所有行\r\n * @param sheetHandle\r\n * @result 1-成功,空串-失败\r\n */\r\n public deleteRows(startRowIndex: number, rowCount: number, sheetHandle: string = \"\") {\r\n return ffunc(this.suReport, sheetHandle + 'DeleteRows', `${startRowIndex} \\r\\n ${rowCount}`);\r\n }\r\n\r\n /**\r\n * 删除列\r\n * @param startRowIndex 开始删除的行号(从0开始计数)\r\n * @param rowCount 行数,-1表示删除后面所有行\r\n * @param sheetHandle\r\n * @result 1-成功,空串-失败\r\n */\r\n public deleteCols(startColIndex: number, rowCount: number, sheetHandle: string = \"\") {\r\n return ffunc(this.suReport, sheetHandle + 'DeleteCols', `${startColIndex} \\r\\n ${rowCount}`);\r\n }\r\n\r\n public isRowHide(row: any): boolean {\r\n return ffunc(this.suReport, 'IsRowHide', `${row}`) > 0;\r\n }\r\n\r\n public isColHide(row: any): boolean {\r\n return ffunc(this.suReport, 'isColHide', `${row}`) > 0;\r\n }\r\n\r\n public showHideRow(row: any, isHide: boolean = false, sheetHandle: string = '') {\r\n ffunc(this.suReport, sheetHandle + 'HideRow', `${row} \\r\\n 1 \\r\\n ${isHide}`);\r\n }\r\n\r\n public showHideCol(col: any, isHide: boolean = false) {\r\n ffunc(this.suReport, 'HideCol', `${col} \\r\\n 1 \\r\\n ${isHide}`);\r\n }\r\n\r\n public toExcelIndex(columnName: string) {\r\n let index = 0;\r\n columnName = columnName.trim().toUpperCase();\r\n for (let i = 0; i < columnName.length; i++) {\r\n index += (this.stringToIndex(columnName.charAt(i)) - this.stringToIndex('A') + 1) * Math.pow(26, columnName.length - i - 1);\r\n }\r\n\r\n return index - 1;\r\n }\r\n\r\n public stringToIndex(str: any) {\r\n var charcode;\r\n return parseInt(str.toLowerCase().split('').map(function (item: any) {\r\n charcode = item.charCodeAt(0);\r\n charcode -= (charcode < 107 ? 49 : 10);\r\n return String.fromCharCode(charcode);\r\n }).join(''), 26);\r\n }\r\n\r\n /**\r\n * 删除高度为零的行\r\n */\r\n public clearEmptyRow() {\r\n const suReportSheetCount = this.getWorksheets();\r\n for (let i = 0; i < suReportSheetCount; i++) {\r\n this.setCurrentWorksheet(i);\r\n\r\n const rowCount = this.getRows();\r\n const deleteRowArray: number[] = [];\r\n for (let j = 0; j < rowCount; j++) {\r\n const height = this.getRowHeight(j);\r\n if (height <= 0 || this.isRowHide(j)) {\r\n deleteRowArray.push(j);\r\n this.showHideRow(j);\r\n }\r\n }\r\n\r\n let flag = 0;\r\n for (const rowIndex of deleteRowArray) {\r\n ffunc(this.suReport, 'DeleteRows', `${rowIndex - flag} \\r\\n ${1}`);\r\n flag++;\r\n }\r\n }\r\n }\r\n\r\n public clearEmptyCol() {\r\n const suReportSheetCount = this.getWorksheets();\r\n for (let i = 0; i < suReportSheetCount; i++) {\r\n this.setCurrentWorksheet(i);\r\n\r\n const colCount = this.getCols();\r\n const deleteColArray: number[] = [];\r\n for (let j = 0; j < colCount; j++) {\r\n const width = this.getColWidth(j);\r\n if (width <= 0 || this.isColHide(j)) {\r\n deleteColArray.push(j);\r\n this.showHideCol(j);\r\n }\r\n }\r\n\r\n let flag = 0;\r\n for (const colIndex of deleteColArray) {\r\n ffunc(this.suReport, 'DeleteCols', `${colIndex - flag} \\rr\\n ${1}`);\r\n flag++;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取自定义属性\r\n * @param row\r\n * @param col\r\n * @param attrName\r\n */\r\n public getCellProp(row: any, col: any, attrName: any, sheetHandle: string = \"\"): string {\r\n return ffunc(this.suReport, sheetHandle + 'GetCellProp', `${row} \\r\\n ${col} \\r\\n ${attrName}`);\r\n }\r\n\r\n /**\r\n * 获取自定义属性\r\n * @param commandStr\r\n * @param sheetHandle\r\n */\r\n public getCellProp2(commandStr: any, sheetHandle: string = \"\"): string {\r\n return ffunc(this.suReport, sheetHandle + 'GetCellProp', `${commandStr}`);\r\n }\r\n\r\n /**\r\n * 设置自定义属性\r\n * @param row\r\n * @param col\r\n */\r\n public SetCellProp(row: any, col: any, key: any, value: any, strHandle = '') {\r\n ffunc(this.suReport, strHandle + 'SetCellProp', `${row} \\r\\n ${col} \\r\\n ${key} \\r\\n ${value}`);\r\n }\r\n /**\r\n * 设置自定义属性\r\n */\r\n public SetCustomCellProp(str: string, strHandle = '') {\r\n ffunc(this.suReport, strHandle + 'SetCellProp', `${str}`);\r\n }\r\n\r\n /**\r\n * 根据别名设置字体属性\r\n * @param alias\r\n * @param key\r\n * @param val\r\n * @param strHandle\r\n */\r\n public setCellFont2(alias: string, key: string, val: string, strHandle = '') {\r\n ffunc(this.suReport, strHandle + 'setCellFont', `${alias} \\r\\n ${key} \\r\\n ${val}`);\r\n }\r\n /**\r\n * 设置字体属性\r\n * @param row\r\n * @param col\r\n * @param fontName 字体名称,例如\"Arial\" 、 \"微软雅黑\";\r\n * @param size 转换后的大小,肯定是正数\r\n * @param bold 否加粗, 1或0\r\n * @param strHandle\r\n */\r\n public setCellFont(row: number, col: number, str: string, strHandle = '') {\r\n ffunc(this.suReport, strHandle + 'setCellFont', `${row} \\r\\n ${col} \\r\\n ${str}`);\r\n }\r\n /**\r\n * 取得单元格的字体信息\r\n * @param row\r\n * @param col\r\n * @param key 属性名, 可以为: FontName(或 Name、FaceName)、Height(或size,但含义不一样)、Bold三种\r\n * @param strHandle\r\n * @returns\r\n */\r\n public getCellFont(row: any, col: any, key: any, strHandle: any) {\r\n return ffunc(this.suReport, strHandle + 'GetCellFont', `${row} \\r\\n ${col} \\r\\n ${key}`);\r\n }\r\n /**\r\n * 根据别名取得单元格的字体信息\r\n * @param alias\r\n * @param key 属性名, 可以为: FontName(或 Name、FaceName)、Height(或size,但含义不一样)、Bold三种\r\n * @param strHandle\r\n * @returns\r\n */\r\n public getCellFont2(alias: any, key: any, strHandle: any) {\r\n return ffunc(this.suReport, strHandle + 'getCellFont', `${alias} \\r\\n ${key}`);\r\n }\r\n /**\r\n * 导入报表,弹出选择框\r\n */\r\n public importReport() {\r\n ffunc(this.suReport, 'callfunc', \"103\");\r\n }\r\n /**\r\n * 导出xml\r\n * @param WorkSheets 导出指定页,不指定导出全部,或者全部all,默认是全部\r\n * @param isReturnContent 如果为true, 表示函数返回的不是文件名,而是内容本身的XML串, 默认是false. 如果 isReturnContent = true, 那么 Filename 就不需要指定了,也不会弹出文件选择对话框, 因为不输出到文件了;\r\n\r\n */\r\n public exportReport(WorkSheets: string = '', isReturnContent = false) {\r\n if (!utilities.isNull(WorkSheets)) {\r\n return ffunc(this.suReport, 'callfunc', `1074\\r\\n WorkSheet=${WorkSheets};isReturnContent=${isReturnContent}`);\r\n } else {\r\n return ffunc(this.suReport, 'callfunc', `1074\\r\\n isReturnContent=${isReturnContent}`);\r\n }\r\n }\r\n\r\n /**\r\n * 将报表导出到excel\r\n */\r\n public exportReportToExcel() {\r\n ffunc(this.suReport, 'callfunc', `105`);\r\n }\r\n\r\n public exportReportToExcel2(filename: any) {\r\n const filePathDir = ffunc(this.suReport, \"FileDialog\", \"isDir=false;isOpen=false;FileType='xlsx';FileName='\" + filename + \".xlsx'\");\r\n if (!utilities.isNull(filePathDir)) {\r\n return ffunc(this.suReport, 'callfunc', `105\\r\\nType=xlsx;filename=${filePathDir}`);\r\n }\r\n }\r\n\r\n /**\r\n * 弹出选择框并返回选择路径\r\n */\r\n public filePathDir() {\r\n const filePathDir = ffunc(this.suReport, \"FileDialog\", \"isDir=true\");\r\n return filePathDir;\r\n }\r\n\r\n /**\r\n * 将报表导出到PDF\r\n */\r\n public exportReportToPDF(filename: any) {\r\n const filePathDir = ffunc(this.suReport, \"FileDialog\", \"isDir=false;isOpen=false;FileType='pdf';FileName='\" + filename + \".pdf'\");\r\n if (!utilities.isNull(filePathDir)) {\r\n ffunc(this.suReport, 'callfunc', `105\\r\\nType=pdf;filename=${filePathDir}`);\r\n }\r\n }\r\n\r\n /**\r\n * 将报表导出到PDF,提供具体文件路径\r\n */\r\n public exportReportToPDF2(filename: any) {\r\n return ffunc(this.suReport, 'callfunc', `105\\r\\nType=pdf;filename=${filename}`);\r\n }\r\n\r\n /**\r\n * 导出全部pdf---横、纵表都存在分开导出\r\n * @param filename\r\n */\r\n public exportAllPdf(filename: any) {\r\n const filePathDir: string = ffunc(this.suReport, \"FileDialog\", \"isDir=false;isOpen=false;FileType='pdf';FileName='\" + filename + \".pdf'\");\r\n if (!utilities.isNull(filePathDir)) {\r\n const sheetlen = this.getWorksheets();\r\n if (sheetlen > 0) {\r\n const hSheets: any[] = []; //横标\r\n const zSheets: any[] = []; //纵表\r\n this.setCurrentWorksheet(0);\r\n for (let sheetindex = 0; sheetindex < sheetlen; sheetindex++) {\r\n const strHandle = this.getHandle(sheetindex);\r\n const oriantation: string = this.getPrintProp('Oriantation', strHandle);\r\n if (oriantation.toLowerCase() == 'landscape') { //横表\r\n hSheets.push(sheetindex);\r\n } else {\r\n zSheets.push(sheetindex);\r\n }\r\n }\r\n if (zSheets.length > 0 && hSheets.length > 0) {\r\n const strHandle = this.getHandle(0);\r\n const oriantation: string = this.getPrintProp('Oriantation', strHandle);\r\n if (oriantation.toLowerCase() == 'landscape') {\r\n ffunc(this.suReport, 'callfunc', `105\\r\\nType=pdf;filename=${filePathDir}`);\r\n this.setSheetHide(`sheetNum=${hSheets.toString()}`);\r\n const xmlstr = this.getXmlStr();\r\n this.build(xmlstr);\r\n const filename2 = filename + '_2';\r\n const filePathDir2 = filePathDir.replace(filename, filename2);\r\n ffunc(this.suReport, 'callfunc', `105\\r\\nfilename=${filePathDir2}`);\r\n } else {\r\n ffunc(this.suReport, 'callfunc', `105\\r\\nType=pdf;filename=${filePathDir}`);\r\n this.setSheetHide(`sheetNum=${zSheets.toString()}`);\r\n const xmlstr = this.getXmlStr();\r\n this.build(xmlstr);\r\n const filename2 = filename + '_2';\r\n const filePathDir2 = filePathDir.replace(filename, filename2);\r\n ffunc(this.suReport, 'callfunc', `105\\r\\nType=pdf;filename=${filePathDir2}`);\r\n }\r\n } else {\r\n ffunc(this.suReport, 'callfunc', `105\\r\\nType=pdf;filename=${filePathDir}`);\r\n }\r\n }\r\n //上面代码为文字型的 pdf(Type=pdf),Type=img.pdf 是图片型的 pdf\r\n //ffunc(this.suReport, 'callfunc', `105\\r\\nType=img.pdf;Scale=400;filename=${filePathDir}`);\r\n }\r\n }\r\n\r\n /**\r\n * 打印预览\r\n * @param all true=全部;false=当前页\r\n */\r\n public printView(all: boolean = true) {\r\n ffunc(this.suReport, \"callfunc\", `18\\r\\n all=${all}`);\r\n }\r\n\r\n /**\r\n * 打印报表\r\n * @param WorkSheet 工作表, 可以是如下几种:\r\n ** OpenDialog(弹出对话框选择打印(如果多个工作表));\r\n ** All - 打印全部工作表\r\n ** Default - 打印在 “属性” 对话框中勾选了 “默认打印本工作表” 的所有工作表;\r\n ** Current - 打印当前工作表;\r\n ** 以逗号分隔的工作表名或工作表顺序号 - 打印指定的工作表;\r\n * @param isOpenSysDialog 是否弹出打印选项:\r\n */\r\n public print(WorkSheet = 'all', isOpenSysDialog = true) {\r\n ffunc(this.suReport, 'Print', `isOpenSysDialog=${isOpenSysDialog}; WorkSheet=${WorkSheet}`)\r\n }\r\n\r\n /**\r\n * 打印所有\r\n */\r\n public printAll() {\r\n ffunc(this.suReport, 'Print', 'WorkSheet=All')\r\n }\r\n\r\n /**\r\n * 打印当前页\r\n */\r\n public printCurrent() {\r\n ffunc(this.suReport, 'Print', 'WorkSheet=Current')\r\n }\r\n\r\n /**\r\n * 设置纸张打印方向\r\n * @param isPortrait 是否为纵表(true=纵表;false=横表)\r\n */\r\n public setPrintOriantation(isPortrait: boolean, sheetHandle: string = \"\") {\r\n ffunc(this.suReport, sheetHandle + 'SetPrintProp', `Oriantation=${isPortrait ? \"Portrait\" : \"Landscape\"}`);\r\n }\r\n\r\n /**\r\n * 设置打印纸张尺寸\r\n * @param paperNumber 纸张编号 默认9(A4)\r\n */\r\n public setPrintSize(paperNumber = 9) {\r\n for (let sheetIndex = 0; sheetIndex < this.getWorksheets(); sheetIndex++) {\r\n const sheetHandle = this.getHandle(sheetIndex);\r\n ffunc(this.suReport, sheetHandle + 'SetPrintProp', `paperNumber=${paperNumber}`);\r\n }\r\n }\r\n\r\n /**\r\n * 设置打印时纸的边距(单位为毫米)\r\n * @param left\r\n * @param top\r\n * @param right\r\n * @param bottom\r\n */\r\n public setPrintMargin(left: number, top: number, right: number, bottom: number, sheetHandle: string = \"\") {\r\n ffunc(this.suReport, sheetHandle + 'SetPrintProp', `Margin=${left},${top},${right},${bottom}`);\r\n }\r\n\r\n /**\r\n * 获取打印属性\r\n * @param propertyName 打印属性\r\n ** Printer 打印机名\r\n ** PaperNumber 打印纸号\r\n ** Oriantation 纸的方向 返回值 Portrait/Landscape 分别表示垂直/横向走纸\r\n ** Scale 打印的缩放比例\r\n ** AutoScale 自动缩放, 空串(或false)/NoEnlarge/AutoFit 分别表示不自动缩放/自动缩小但不放大/自动缩放使打印纸满幅显示\r\n ** Copies 打印份数, 大于0的纯数字\r\n ** Margin 纸的边距, 逗号分隔的左上右下, 单位为毫米\r\n ** Duplex 支持双面打印的打印机, 双面打印模式\r\n ** isPrintBothSide 打印奇偶页时是否交换左右边距\r\n ** PrintColor 彩色打印方式, Device/BW 分别表示采用打印设备所具备的色彩能力打印/强制黑白打印\r\n * @param sheetHandle\r\n */\r\n public getPrintProp(propertyName: string, sheetHandle: string = \"\") {\r\n return ffunc(this.suReport, sheetHandle + 'GetPrintProp', propertyName);\r\n }\r\n\r\n /**\r\n * 根据行列号得到单元名\r\n * @param row\r\n * @param col\r\n */\r\n public getCellName(row: any, col: any, sheethandle: string = \"\") {\r\n return ffunc(this.suReport, sheethandle + 'GetCellName', `${row} \\r\\n ${col}`);\r\n }\r\n\r\n /**\r\n * 根据单元名得到行号\r\n * @param cellName 单元名, 或单元格范围\r\n ** 行号, 如果参数是单元格范围, 则返回逗号分隔的行号\r\n ** AF.func(\"GetCellRow\", \"A5\"); 返回 \"4\"\r\n ** AF.func(\"GetCellRow\", \"A5:D6\"); 返回 \"4,5\"\r\n */\r\n public getCellRow(cellName: string, sheethandle: string = \"\"): string {\r\n return ffunc(this.suReport, sheethandle + 'GetCellRow', cellName);\r\n }\r\n\r\n /**\r\n * 根据单元名得到列号\r\n * @param cellName 单元名, 或单元格范围\r\n ** 列号, 如果参数是单元格范围, 则返回逗号分隔的列号\r\n ** AF.func(\"GetCellCol\", \"A5\"); 返回 \"4\"\r\n ** AF.func(\"GetCellCol\", \"A5:D6\"); 返回 \"4,5\"\r\n */\r\n public getCellCol(cellName: string, sheethandle: string = \"\"): string {\r\n return ffunc(this.suReport, sheethandle + 'GetCellCol', cellName);\r\n }\r\n\r\n /**\r\n * 取得当前焦点单元格\r\n ** 返回 串,单元格名,如 \"D4\"、\"E4\"; 如果当前选中的是内嵌对象(如文本框),则返回它的别名\r\n */\r\n public getCurrentCell() {\r\n return ffunc(this.suReport, 'GetCurrentCell', '');\r\n }\r\n\r\n /**\r\n * 取得当前焦点单元格\r\n */\r\n public getCurrentCells(sheethandle: string = \"\") {\r\n return ffunc(this.suReport, sheethandle + 'GetCurrentCells', '');\r\n }\r\n\r\n /**\r\n * 取得某单元的内容,或者计算公式的值\r\n * @param commandStr 命令字符串\r\n ** var s1 = AF.func(\"getCellData\", \"3 \\r\\n 9\");\r\n ** var s2 = AF.func(\"getCellData\", \"B7\");\r\n ** var s4 = AF.func(\"getCellData\", \"MyTh\"); //\"MyTh\"是别名\r\n ** var s5 = AF.func(\"getCellData\", \"D3:F8\"); //一次性取多个单元格的内容\r\n */\r\n public getCellData(commandStr: any, sheetHandle: string = \"\") {\r\n return ffunc(this.suReport, sheetHandle + 'GetCellData', commandStr);\r\n }\r\n\r\n /**\r\n * 获取单元格的值\r\n * @param row\r\n * @param col\r\n * @param sheetHandle\r\n */\r\n public getCellValue(row: number, col: number, sheetHandle: string = \"\") {\r\n return ffunc(this.suReport, sheetHandle + \"GetCellData\", `${row} \\r\\n ${col}`);\r\n }\r\n\r\n /**\r\n * 设置选中单元格的值\r\n * @param value\r\n */\r\n public setSelectedCellsValue(value: string) {\r\n let cells = this.getCurrentCells();\r\n if (!utilities.isNull(cells)) {\r\n let arr = cells.split(',');\r\n for (let index = 0; index < arr.length; index++) {\r\n const elArr = arr[index].split(':');\r\n const startRow = Number(this.getCellRow(elArr[0]));\r\n const startCol = Number(this.getCellCol(elArr[0]));\r\n const endRow = Number(this.getCellRow(elArr[1]));\r\n const endCol = Number(this.getCellCol(elArr[1]));\r\n for (let rIndex = startRow; rIndex <= endRow; rIndex++) {\r\n for (let cIndex = startCol; cIndex <= endCol; cIndex++) {\r\n this.setCellData(`${rIndex} \\r\\n ${cIndex} \\r\\n${value}`);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 设置某单元的内容、或计算公式(计算公式以等号开头)\r\n * @param commandStr 命令字符串\r\n ** AF.func(\"SetCellData\", \"3 \\r\\n 9 \\r\\n年度计划\");\r\n ** AF.func(\"setCellData\", \"B7\\r\\n=B8+B9\"); //为B7单元格设置公式\r\n ** AF.func(\"setCellData\", \"MyTh \\r\\n年度计划\"); //\"MyTh\"是别名\r\n ** AF.func(\"setCellData\", \"A1,B3:B10, C3:C11, E11, MyTh \\r\\n12\"); //同时将多个单元格内容全部设置为\"12\"\r\n */\r\n public setCellData(commandStr: any, sheetHandle: string = \"\") {\r\n ffunc(this.suReport, sheetHandle + 'SetCellData', commandStr);\r\n }\r\n\r\n /**\r\n * 给指定单元格赋值\r\n * @param row\r\n * @param col\r\n * @param val\r\n */\r\n public setCellValue(row: any, col: any, val: any, sheetHandle: string = \"\") {\r\n //参数2和参数3之间不得留有多余空格\r\n ffunc(this.suReport, sheetHandle + 'SetCellData', `${row} \\r\\n ${col} \\r\\n${val}`);\r\n }\r\n\r\n /**\r\n * 根据别名给单元格赋值\r\n * @param alias\r\n * @param val\r\n */\r\n public setCellValueByAlias(alias: string, val: any, strHandle = '') {\r\n ffunc(this.suReport, strHandle + 'SetCellData', `${alias} \\r\\n ${val}`);\r\n }\r\n\r\n /**\r\n * 设置可编辑权限单元格名(有多个则以逗号分隔),如\"A5, B4, D4\";\r\n * @param cell\r\n * @param sheethandle\r\n */\r\n public setCellCanEdit(cell: string, sheethandle: string = \"\") {\r\n var commandStr = `level=top;cell=${cell}`;\r\n this.addEditAbleOnly(commandStr, sheethandle);\r\n }\r\n /**\r\n * 设置可编辑权限单元格名(区域);\r\n * @param cell\r\n * @param sheethandle\r\n */\r\n public setCellAreaCanEdit(cellArea: string, sheethandle: string = \"\") {\r\n var commandStr = `level=top;cellArea=${cellArea}`;\r\n this.addEditAbleOnly(commandStr, sheethandle);\r\n }\r\n\r\n /**\r\n * 设置可编辑权限别名名\r\n * @param alias\r\n * @param sheethandle 句柄\r\n ** AF.func(\"addEditAbleOnly\", \"alias=KK*\"); 别名以\"KK\"开头的单元格\r\n */\r\n public setCellCanEditByAlias(alias: string, sheethandle: string = \"\") {\r\n var commandStr = `level=top;alias=${alias}`;\r\n this.addEditAbleOnly(commandStr, sheethandle);\r\n }\r\n\r\n /**\r\n * 根据表达式查找单元格\r\n * @param attributeName\r\n * @param attributeVale\r\n * @param sheetHandle\r\n */\r\n public findCell(attributeName: any, attributeVale: any, sheetHandle: string = \"\") {\r\n return ffunc(this.suReport, sheetHandle + 'FindCell', `${attributeName}='${attributeVale}'`);\r\n }\r\n\r\n /**\r\n * 查询单元格\r\n * @param searchText 查询文本\r\n */\r\n public findCell2(searchText: string): RowAndCol[] {\r\n const rowAndCols: RowAndCol[] = [];\r\n const strRowCols: string = ffunc(this.suReport, 'FindCell', searchText);\r\n const strRowColArray: string[] = strRowCols.split(',');\r\n\r\n for (const rowCol of strRowColArray) {\r\n const rowAndCol = this.convertRowAndCol(rowCol);\r\n rowAndCols.push(rowAndCol);\r\n }\r\n\r\n return rowAndCols;\r\n }\r\n\r\n public convertRowAndCol(strRowCol: string): RowAndCol {\r\n const row = Number(strRowCol.replace(/[^0-9]/ig, ``)) - 1;\r\n const colA = strRowCol.replace(`${row + 1}`, '');\r\n\r\n return {\r\n col: this.toExcelIndex(colA),\r\n row: row\r\n };\r\n }\r\n\r\n /**\r\n * 取得某单元的显示内容命令字符串\r\n * @param commandStr 命令字符串\r\n ** var s1 = AF.func(\"getCellText\", \"3 \\r\\n 9\");\r\n ** var s2 = AF.func(\"getCellText\", \"B7\");\r\n ** var s4 = AF.func(\"getCellText\", \"MyTh\"); //\"MyTh\"是别名\r\n ** var s5 = AF.func(\"getCellText\", \"A1:A9\"); //一次性取多个单元格的内容\r\n */\r\n public getCellText(commandStr: any) {\r\n return ffunc(this.suReport, 'GetCellText', commandStr);\r\n }\r\n\r\n /**\r\n * 取得工作表的名称\r\n * @param sheetIndex\r\n */\r\n public getWorksheetName(sheetIndex = 0) {\r\n return ffunc(this.suReport, 'GetWorksheetName', `${sheetIndex}`);\r\n }\r\n\r\n /**\r\n * 修改工作表的名称\r\n * @param commandStr 命令字符串\r\n ** 序号(从0开始计数),或工作表名称\r\n ** 新的名称\r\n ** AF.func(\"SetWorksheetName\", \"1\\r\\n 新名字\");\r\n ** AF.func(\"SetWorksheetName\", \"旧名字\\r\\n 新名字\");\r\n */\r\n public setWorksheetName(commandStr: any) {\r\n return ffunc(this.suReport, 'SetWorksheetName', commandStr);\r\n }\r\n\r\n /**\r\n * 修改工作表的名称\r\n * @param sheetIndex 修改哪个工作表(索引从0开始)\r\n * @param sheetName 新名称\r\n */\r\n public setSheetName(sheetIndex: number, sheetName: string) {\r\n ffunc(this.suReport, 'SetWorksheetName', sheetIndex + \" \\r\\n \" + sheetName);\r\n }\r\n\r\n /**\r\n * 设置当前工作表的名称\r\n * @param sheetName 新名称\r\n */\r\n public setCurrentSheetName(sheetName: string) {\r\n const sheetIndex = ffunc(this.suReport, 'GetCurrentWorksheet', '');\r\n ffunc(this.suReport, 'SetWorksheetName', sheetIndex + \" \\r\\n \" + sheetName);\r\n }\r\n\r\n /**\r\n * 设置工作表显示\r\n * @param sheetNames 工作表名, 如果要一次性恢复多个工作表, 请以逗号分隔各个工作表名; 空串表示恢复全部工作表\r\n */\r\n public setSheetShow(sheetNames: string = \"\") {\r\n //显示\r\n ffunc(this.suReport, 'UnhideWorkSheet', sheetNames + \" \\r\\n locate=current\");\r\n }\r\n\r\n /**\r\n * 设置工作表隐藏\r\n * @param commandStr 命令字符串\r\n * 可选, 无参数表示隐藏当前工作表, 如果有参数, 那么格式为 sheetName=[?];sheetNum=[?], 含义如下:\r\n * sheetName - 工作表名, 如果要一次性隐藏多个工作表, 工作表名之间以逗号分隔\r\n * sheetNum - 工作表序号(从0开始计数), 如果要一次性隐藏多个工作表, 序号之间以逗号分隔\r\n */\r\n public setSheetHide(commandStr: any) {\r\n ffunc(this.suReport, 'HideWorkSheet', commandStr);\r\n }\r\n\r\n /**\r\n * 取得所有隐藏的工作表的表名\r\n */\r\n public getHideWorkSheet() {\r\n return ffunc(this.suReport, 'GetHideWorkSheet');\r\n }\r\n\r\n /**\r\n * 删除工作表\r\n * @param commandStr 命令字符串\r\n ** 序号(从0开始计数),或工作表名称\r\n ** AF.func(\"DeleteWorksheet\", \"1\");\r\n ** AF.func(\"DeleteWorksheet\", \"表名字\");\r\n */\r\n public deleteWorksheet(commandStr: string) {\r\n return ffunc(this.suReport, 'DeleteWorksheet', commandStr);\r\n }\r\n\r\n /**\r\n * 改变当前工作表的位置\r\n * @param sheetIndex 旧索引\r\n * @param newSheetIndex 新索引\r\n */\r\n public exchangeWorksheet(sheetIndex: number, newSheetIndex: number) {\r\n ffunc(this.suReport, \"ExchangeWorksheet\", `${newSheetIndex} \\r\\n ${sheetIndex}`);\r\n }\r\n\r\n /**\r\n * 追加工作表(追加到末尾,追加之后新的sheet页会变成活动页)\r\n * @param commandStr 如果不指定 sheetNum 和 sheetName, 也不打开对话框, 那么将导入全部工作表.\r\n * AF.func(\"appendWorksheet\", xmlFile + \"\\r\\n\" + \" isWithFormula=true;isWithDS=true;SheetNum=1,2,3\");\r\n * @returns 1/0 - 成功/失败\r\n */\r\n public appendWorksheet(commandStr: any): string {\r\n return ffunc(this.suReport, \"appendWorksheet\", commandStr);\r\n }\r\n\r\n /**\r\n * 添加工作表:从外部报表导入\r\n * @param reportXml 报表的URL或大串\r\n * @param sheetNum 逗号分隔的工作表序号, 例如 \"0,3,5\" 表示导入顺序号为0、3、4的工作表;\r\n * @returns 1/0 - 成功/失败\r\n */\r\n public appendWorksheetByIndex(reportXml: any, sheetNum: any): string {\r\n return ffunc(this.suReport, \"appendWorksheet\", reportXml + \"\\r\\n\" + \" sheetNum=\" + sheetNum);\r\n }\r\n\r\n /**\r\n * 添加工作表:从外部报表导入\r\n * @param reportXml 报表的URL或大串\r\n * @param sheetName 逗号分隔的工作表名, 例如 \"利润表, 资产负债表\";\r\n * @returns 1/0 - 成功/失败\r\n */\r\n public appendWorksheetByName(reportXml: any, sheetName: any): string {\r\n return ffunc(this.suReport, \"appendWorksheet\", reportXml + \"\\r\\n\" + \" sheetName=\" + sheetName);\r\n }\r\n\r\n /**\r\n * 设置sheet页自定义属性\r\n * @param sheetIndex sheet页索引\r\n * @param commandStr 命令字符串\r\n ** AF.func(\"SetMemo\", \"0 \\r\\n sheettag \\r\\n33333333333333\")\r\n */\r\n public setSheetProp(sheetIndex: number, commandStr: string) {\r\n this.setMemo(sheetIndex, \"sheettag\", commandStr)\r\n }\r\n\r\n /**\r\n * 设置报表自定义属性\r\n * @param commandStr 命令字符串\r\n */\r\n public setReportProp(commandStr: any) {\r\n this.setMemo(\"\", \"reporttag\", commandStr)\r\n }\r\n /**\r\n * 获取sheet页自定义属性\r\n * @param sheetIndex sheet页索引\r\n */\r\n public getSheetProp(sheetIndex: number) {\r\n return this.getMemo(sheetIndex, \"sheettag\")\r\n }\r\n\r\n /**\r\n * 设置某自由存储区的存储串\r\n * @param sheetIndex\r\n * @param key 存储区的ID,为任意串,但不得含逗号\r\n * @param value\r\n */\r\n public setMemo(sheetIndex: any, key: any, value: any) {\r\n //不要在参数2和参数3之间留有多余空格,否则空格也会保存到XML中去的\r\n ffunc(this.suReport, 'SetMemo', `${sheetIndex}\\r\\n${key}\\r\\n${value}`);\r\n }\r\n\r\n /**\r\n * 取得某自由存储区的存储串\r\n * @param sheetIndex\r\n * @param key\r\n */\r\n public getMemo(sheetIndex: any, key: any) {\r\n return ffunc(this.suReport, 'GetMemo', `${sheetIndex}\\r\\n${key}`);\r\n }\r\n\r\n /**\r\n * 取得自由存储区的所有ID\r\n * @param sheetIndex 工作表顺序号(从0开始计数),如果为空串,则表示是和工作表无关的的独立存储区\r\n * @returns 逗号分隔的存储区ID号\r\n */\r\n public getMemos(sheetIndex: any) {\r\n return ffunc(this.suReport, 'GetMemos', `${sheetIndex}`);\r\n }\r\n\r\n /**\r\n * 限制某些交互功能,默认只读\r\n * @param commandStr 命令字符串\r\n ** 可包含如下、以逗号分隔的串:\r\n ** 1 -公式修改权\r\n ** 2 -非公式的修改权\r\n ** 3 -内容复制权\r\n ** 4 -格式修改权(如行高列宽、字体、对齐、隐藏等),也可分拆成:\r\n ** 4a - 行高列宽调整权\r\n ** 4b - 行列隐藏权\r\n ** 4c - 行列取消隐藏权\r\n ** 4d - 除行高列宽、行列隐藏、取消隐藏外的其它格式调整权\r\n ** 8 -行列增删权, 也可拆分成:\r\n ** 256 -行增删权\r\n ** 512 -列增删权\r\n ** 16-被保护的单元的内容修改权\r\n ** 32-平衡校验修改权\r\n ** 64-数据源修改权,也可拆分成:\r\n ** 64a -新建数据源权\r\n ** 64d -删除数据源权\r\n ** 64m -修改数据源权\r\n ** 128-工作表的增删权\r\n ** 0 -不显示单元格的焦点(通常和 1、2一起使用)\r\n */\r\n public swkrntpomzqa(commandStr: any = '1,2') {\r\n ffunc(this.suReport, 'Swkrntpomzqa', commandStr);\r\n }\r\n\r\n /**\r\n * 添加可编辑的单元格范围,除了这些单元格,其它单元格都不得修改\r\n * @param commandStr 命令字符串\r\n ** AF.func(\"addEditAbleOnly\", \"cellArea=B3:B5, D3:D5; alias=KK*\"); //仅如下范围的单元格可以编辑: B3:B5之间的单元格、 D3:D5之间的单元格、或别名以\"KK\"开头的单元格\r\n */\r\n public addEditAbleOnly(commandStr: any, sheetHandle: string = \"\") {\r\n ffunc(this.suReport, sheetHandle + 'addEditAbleOnly', commandStr);\r\n }\r\n\r\n /**\r\n * 添加不可编辑的单元格范围,除了这些单元格不可修改,其它单元格都是可以修改的\r\n * @param commandStr 命令字符串\r\n ** AF.func(\"addUnEditAbleOnly\", \"cellArea=B3:B5, D3:D5; alias=KK*\");\r\n */\r\n public addUnEditAbleOnly(commandStr: any, sheetHandle: string = \"\") {\r\n ffunc(this.suReport, sheetHandle + 'addUnEditAbleOnly', commandStr);\r\n }\r\n\r\n /**\r\n * 清理上面2个函数 (addEditAbleOnly, addUnEditAbleOnly) 设置的权限\r\n ** 1.不影响 Swkrntpomzqa 函数设置的权限;\r\n ** 2.只对当前工作表生效\r\n */\r\n public clearLimit() {\r\n ffunc(this.suReport, 'ClearLimit', '');\r\n }\r\n\r\n /**\r\n * 判断某单元是否有编辑权限\r\n * @param commandStr 命令字符串\r\n ** var isAble = AF.func(\"getCellEditAble\", \"3 \\r\\n 9\");\r\n ** var isAble = AF.func(\"getCellEditAble\", \"B7\");\r\n ** var isAble = AF.func(\"getCellEditAble\", \"MyTh\"); //\"MyTh\"是别名\r\n */\r\n public getCellEditAble(commandStr: any) {\r\n ffunc(this.suReport, 'GetCellEditAble', commandStr);\r\n }\r\n\r\n /**\r\n * 预订事件\r\n * @param commandStr 命令字符串\r\n ** 需要预订的事件有:CurSelChanged、Clicked、DblClicked、EditChanged、Editing、CellPropChanged,其含义分别是:当前单元格切换、鼠标点击单元格、鼠标双击单元格、单元格或文本框的内容输入已更新、单元格或文本框的输入框已打开并且内容有修改、工具箱中单元格的某些属性被修改\r\n ** AF.func(\"SubscribeEvent\", \"CurSelChanged, Clicked\");\r\n */\r\n public subscribeEvent(commandStr: any) {\r\n ffunc(this.suReport, 'SubscribeEvent', commandStr);\r\n }\r\n\r\n /**\r\n * 获取单元格的tag属性\r\n * @param sheetIndex\r\n * @param row\r\n * @param col\r\n */\r\n public getCellTag(row: number, col: number, sheetHandle: string = \"\"): TagModel {\r\n var cellTag = ffunc(this.suReport, sheetHandle + \"GetCellProp\", `${row} \\r\\n ${col} \\r\\n tag`);\r\n return cellTag == \"\" ? null as any : JSON.parse(cellTag);\r\n }\r\n\r\n /**\r\n * 设置单元格的tag属性\r\n * @param sheetIndex\r\n * @param row\r\n * @param col\r\n * @param value\r\n */\r\n public setCellTag(row: number, col: number, value: string, sheetHandle: string = \"\") {\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n tag \\r\\n ${value}`);\r\n }\r\n\r\n /**\r\n * 获取sheet的sheettag属性\r\n * @param sheetIndex\r\n */\r\n public GetSheetTag(sheetIndex: number): SheetTag {\r\n var handle = ffunc(this.suReport, \"GetHandle\", sheetIndex.toString());//取得第index个工作表的句柄\r\n var sheettag = ffunc(this.suReport, handle + \"GetCellProp\", `0 \\r\\n 0 \\r\\n sheettag`);//获取自定义的tag属性\r\n return sheettag == \"\" ? null as any : JSON.parse(sheettag);\r\n }\r\n\r\n /**\r\n * 设置sheet的sheettag属性\r\n * @param sheetIndex\r\n * @param value\r\n */\r\n public SetSheetTag(sheetIndex: number, value: string) {\r\n this.setSheetProp(sheetIndex, value)\r\n // var handle = ffunc(this.suReport, \"GetHandle\", sheetIndex.toString());//取得第index个工作表的句柄\r\n // ffunc(this.suReport, handle + \"SetCellProp\", `0 \\r\\n 0 \\r\\n sheettag \\r\\n ${value}`);//设置自定义的tag属性\r\n }\r\n\r\n /**\r\n * 获取当前sheet页tag值\r\n */\r\n public getCurrentSheetTag(): SheetTag {\r\n const sheettag = this.getCellProp(0, 0, 'sheettag');\r\n return sheettag == \"\" ? null as any : JSON.parse(sheettag);\r\n }\r\n\r\n /**\r\n * 设置当前sheet页tag值\r\n */\r\n public setCurrentSheetTag(value: string) {\r\n this.SetCellProp(0, 0, 'sheettag', value);\r\n }\r\n\r\n /**\r\n * 取得第index个工作表的句柄\r\n * @param sheetIndex\r\n */\r\n public getHandle(sheetIndex: number) {\r\n return ffunc(this.suReport, \"getHandle\", sheetIndex.toString());\r\n }\r\n\r\n /**\r\n * 获取sheet的sheettag属性\r\n * @param sheetIndex\r\n */\r\n public getSheetTag(sheetIndex: number = 0) {\r\n let sheettag = this.getSheetProp(sheetIndex)\r\n return !sheettag ? {} : JSON.parse(sheettag);\r\n // var sheettag = ffunc(this.suReport, sheetHandle + \"GetCellProp\", `0 \\r\\n 0 \\r\\n sheettag`); //获取自定义的tag属性\r\n // return sheettag == \"\" ? null as any : JSON.parse(sheettag);\r\n }\r\n\r\n public urlImage2Base64(url: string): Promise<string> {\r\n return new Promise((resolve) => {\r\n const tmpImage = new Image();\r\n tmpImage.setAttribute(\"crossOrigin\", 'Anonymous');\r\n tmpImage.src = url;\r\n tmpImage.onload = () => {\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext(\"2d\");\r\n canvas.width = tmpImage.width;\r\n canvas.height = tmpImage.height;\r\n\r\n context!.drawImage(tmpImage, 0, 0);\r\n let base64Str = canvas.toDataURL('image/png');\r\n resolve(base64Str);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 添加图片文本框元素\r\n * @param x\r\n * @param y\r\n * @param tWidth\r\n * @param tHeight\r\n * @param aliasName\r\n * @param imagebase64\r\n * @param sheetHandle\r\n */\r\n public addImageInputElement(x: any, y: any, tWidth: any, tHeight: any, aliasName: any, imagebase64: any, sheetHandle: string = \"\") {\r\n //插入别名为 \"MyPic\" 的文本框\r\n ffunc(this.suReport, sheetHandle + \"callfunc\", \"112 \\r\\n x=\" + x + \"; y=\" + y + \"; width=\" + tWidth + \"; height=\" + tHeight + \"; alias=\" + aliasName + \"\");\r\n //将其数据类型改成字符串型\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", \"\" + aliasName + \" \\r\\n dataType \\r\\n string\");\r\n //添加图片显示掩码\r\n var id = ffunc(this.suReport, \"Mask_Add\", \"string \\r\\n =picture()\");\r\n //修改它的显示掩码\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", aliasName + \" \\r\\n maskId \\r\\n\" + id);\r\n //设置值\r\n ffunc(this.suReport, sheetHandle + \"SetCellData\", aliasName + \" \\r\\n\" + imagebase64);\r\n //设置其它效果:背景色为透明、无边框\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", aliasName + \" \\r\\n bgColor \\r\\n T\");\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", aliasName + \" \\r\\n borderThick \\r\\n 0\");\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", `${aliasName} \\r\\n align \\r\\n 1`);\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", `${aliasName} \\r\\n vAlign \\r\\n 1`);\r\n //设置图片显示时的缩放模式\r\n ffunc(this.suReport, sheetHandle + \"SetCellProp\", aliasName + \" \\r\\n ImageArrange \\r\\n stretchKeepRatio\");\r\n }\r\n\r\n /**\r\n * 设置所有Sheet页日期\r\n * @param testItemTime\r\n * @returns\r\n */\r\n public async SetAllSheetDate(isShowSignDate: boolean, testItemTime: any, businessId: any = '', auditType: number = 0, isSeparatesupervisorExamineDate: boolean = false) {\r\n if (utilities.isNull(testItemTime)) {\r\n return;\r\n }\r\n let sheetLen = this.getWorksheets();\r\n for (let sheetIndex = 0; sheetIndex < sheetLen; sheetIndex++) {\r\n var sheetHandle = this.getHandle(sheetIndex);\r\n const sheetTag = this.getSheetTag(sheetHandle);\r\n if (isSeparatesupervisorExamineDate == true) {\r\n if (auditType == 1) {\r\n switch (sheetTag.type) {\r\n case 1://检测记录 监理审核日期\r\n if (!utilities.isNull(testItemTime.监理审核日期) && isShowSignDate) { // 监理审核日期\r\n this.setCellValueByAlias('jltrialdate', `${testItemTime.监理审核日期}`, sheetHandle);\r\n } else {\r\n this.setCellValueByAlias('jltrialdate', ` 年 月 日`, sheetHandle);\r\n }\r\n break;\r\n }\r\n }\r\n else if (auditType == 2) {\r\n switch (sheetTag.type) {\r\n case 0://检测报告 监理审核日期\r\n if (!utilities.isNull(testItemTime.监理审核日期) && isShowSignDate) { // 监理审核日期\r\n this.setCellValueByAlias('jltrialdate', `${testItemTime.监理审核日期}`, sheetHandle);\r\n } else {\r\n this.setCellValueByAlias('jltrialdate', ` 年 月 日`, sheetHandle);\r\n }\r\n break;\r\n }\r\n }\r\n } else {\r\n if (!utilities.isNull(testItemTime.监理审核日期) && isShowSignDate) { // 监理审核日期\r\n this.setCellValueByAlias('jltrialdate', `${testItemTime.监理审核日期}`, sheetHandle);\r\n } else {\r\n this.setCellValueByAlias('jltrialdate', ` 年 月 日`, sheetHandle);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * 获取所有工作表下所有单元格设置tag属性\r\n */\r\n public getAllCellTagData(): Array<any> {\r\n var result: Array<TagModel> = [];\r\n let sheetLen = this.getWorksheets();\r\n for (let sheetIndex = 0; sheetIndex < sheetLen; sheetIndex++) {\r\n var handle = this.getHandle(sheetIndex);//取得第index个工作表的句柄\r\n var rowLen = this.getRows(handle);\r\n var colLen = this.getCols(handle);\r\n for (let rIndex = 0; rIndex < rowLen; rIndex++) {\r\n for (let cIndex = 0; cIndex < colLen; cIndex++) {\r\n var tag = this.getCellTag(rIndex, cIndex, handle);\r\n if (tag != null) {\r\n tag.row = rIndex;\r\n tag.col = cIndex;\r\n tag.sheetindex = sheetIndex;\r\n result.push(tag);\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 获取指定工作表下所有单元格设置tag属性\r\n */\r\n public getCellTagDataBysheetTagIndex(sheetTagIndex: any): Array<any> {\r\n var result: Array<TagModel> = [];\r\n var handle = this.getHandle(sheetTagIndex);//取得第index个工作表的句柄\r\n var rowLen = this.getRows(handle);\r\n var colLen = this.getCols(handle);\r\n for (let rIndex = 0; rIndex < rowLen; rIndex++) {\r\n for (let cIndex = 0; cIndex < colLen; cIndex++) {\r\n var tag = this.getCellTag(rIndex, cIndex, handle);\r\n if (tag != null) {\r\n tag.row = rIndex;\r\n tag.col = cIndex;\r\n tag.sheetindex = sheetTagIndex;\r\n result.push(tag);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * 获取指定sheet页中的所有tag\r\n */\r\n public getSheetAllTagData(strHanedle: string) {\r\n var result: Array<TagModel> = [];\r\n var rowLen = this.getRows(strHanedle);\r\n var colLen = this.getCols(strHanedle);\r\n for (let rIndex = 0; rIndex < rowLen; rIndex++) {\r\n for (let cIndex = 0; cIndex < colLen; cIndex++) {\r\n var tag = this.getCellTag(rIndex, cIndex, strHanedle);\r\n if (tag != null) {\r\n tag.row = rIndex;\r\n tag.col = cIndex;\r\n result.push(tag);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n *清除tag值\r\n */\r\n public clearSelectedAreaTag() {\r\n const cellsStr: string = this.getCurrentCells();\r\n if (!utilities.isNull(cellsStr)) {\r\n const rowsStr: string = this.getCellRow(cellsStr);\r\n const colsStr: string = this.getCellCol(cellsStr);\r\n const rows = rowsStr.split(',');\r\n const cols = colsStr.split(',');\r\n for (let r = Number(rows[0]); r <= Number(rows[1]); r++) {\r\n for (let c = Number(cols[0]); c <= Number(cols[1]); c++) {\r\n var tag = this.getCellTag(r, c);\r\n if (tag != null) {\r\n this.setCellTag(r, c, \"\");\r\n }\r\n if (this.getCellValue(r, c) == \"已绑定\") {\r\n this.setCellValue(r, c, \"\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取tag值\r\n * @param row\r\n * @param col\r\n */\r\n public getTag(row: any, col: any): TagModel {\r\n const tag = this.getCellProp(row, col, 'tag');\r\n return utilities.isNull(tag) ? null as any : JSON.parse(tag);\r\n }\r\n\r\n /**\r\n * 创建空白页\r\n * @param name\r\n */\r\n public addWorksheet(name: string) {\r\n ffunc(this.suReport, \"addWorksheet\", `name=${name}`);\r\n }\r\n\r\n /**\r\n * 获取打印总页数\r\n */\r\n public getPrintPages() {\r\n return ffunc(this.suReport, \"GetPrintPages\", ``);\r\n }\r\n\r\n /**\r\n * 导入Excel文件\r\n * @param file\r\n */\r\n public importExcelFile(file: any) {\r\n this.appendWorksheet(file);\r\n }\r\n\r\n /**\r\n * 取得上次打开(Build)的报表的文件名, 包括URL\r\n */\r\n public getFileURL() {\r\n return ffunc(this.suReport, \"GetFileURL\", '');\r\n }\r\n\r\n //#region 自适应纸张大小\r\n /**\r\n * 自适应纸张大小\r\n * @param size 默认A4;也可以210*297单位(mm)\r\n */\r\n autoFitPaperSize(size: string = \"A4\") {\r\n //A4=210*297\r\n if (size.toLowerCase() == \"a4\") {\r\n this.setAllSheetA4Size();\r\n }\r\n else {\r\n //100*100\r\n }\r\n }\r\n\r\n /**\r\n * (开发中)设置所有sheet页的打印纸尺寸\r\n * @param size 例:210*297(单位:mm)\r\n * @param margin 边距(单位:mm)\r\n */\r\n public setAllSheetPrintSize(size: string, margin: margin) {\r\n size = size.replace(/\\s+/g, \"\");\r\n let isA4: boolean = size == \"210*297\";\r\n let aWidth = Number(size.split('*')[0]);\r\n let aHeight = Number(size.split('*')[1]);\r\n\r\n let pxWidth = this.getPxWidth(aWidth);\r\n let pxHeight = this.getPxHeight(aHeight);\r\n\r\n let sheetCount = this.getWorksheets();\r\n for (let i = 0; i < sheetCount; i++) {\r\n var sheetHandle = this.getHandle(i);\r\n if (isA4) {\r\n //获取纸张方向\r\n const oriantation = this.getPrintOriantation(sheetHandle);\r\n //设置A4格式\r\n this.setSheetA4Size(sheetHandle, oriantation == \"portrait\");\r\n }\r\n else {\r\n this.setSheetPrintSize(sheetHandle, pxWidth, pxHeight, margin);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * (开发中)设置sheet页的打印纸尺寸\r\n * @param sheetHandle\r\n * @param pxWidth 纸张宽度(单位:px)\r\n * @param pxHeight 纸张高度(单位:p)\r\n * @param margin 边距(单位:mm)\r\n */\r\n private setSheetPrintSize(sheetHandle: string, pxWidth: number, pxHeight: number, margin: margin) {\r\n\r\n }\r\n\r\n /**\r\n * 自适应A4\r\n * @param sheetIndexs 不指定则设置所有,指定时用逗号隔开\r\n */\r\n public setAllSheetA4Size(sheetIndexs: string = \"\", minPx: number = 1.5, maxPx = 2.5) {\r\n //关闭屏幕重画\r\n this.SetRedrawAble(false);\r\n if (sheetIndexs == \"\") {\r\n let sheetCount = this.getWorksheets();\r\n for (let i = 0; i < sheetCount; i++) {\r\n var sheetHandle = this.getHandle(i);\r\n //获取纸张方向\r\n const oriantation = this.getPrintOriantation(sheetHandle);\r\n //设置A4格式\r\n this.setSheetA4Size(sheetHandle, oriantation == \"portrait\", minPx, maxPx);\r\n }\r\n }\r\n else {\r\n sheetIndexs.split(',').forEach((el: any) => {\r\n var sheetHandle = this.getHandle(el);\r\n //获取纸张方向\r\n const oriantation = this.getPrintOriantation(sheetHandle);\r\n //设置A4格式\r\n this.setSheetA4Size(sheetHandle, oriantation == \"portrait\", minPx, maxPx);\r\n })\r\n }\r\n //开启屏幕重画\r\n this.SetRedrawAble(true);\r\n }\r\n\r\n /**\r\n * 自适应A4\r\n * 纵表:Left 2.5cm Right 1.5cm Top 1.5cm Bottom 1.5cm\r\n * 横表:Left 1.5cm Right 1.5cm Top 2.5cm Bottom 1.5cm\r\n * Tip1: 最后一行为签字行,行高固定为35\r\n * @param sheetHandle sheet页索引\r\n * @param isPortrait 是否为纵表(true=纵表;false=横表)\r\n */\r\n public setSheetA4Size(sheetHandle: string, isPortrait: boolean, minPx: number = 1.5, maxPx = 2.5) {\r\n let a4Width = this.getA4PxWidth();\r\n let a4Height = this.getA4PxHeight();\r\n const top = this.cmToPx(isPortrait ? minPx : maxPx, false);\r\n const bottom = this.cmToPx(minPx, false);\r\n const left = this.cmToPx(isPortrait ? maxPx : minPx, true);\r\n const right = this.cmToPx(minPx, true);\r\n if (!isPortrait) {\r\n const ac = a4Height;\r\n a4Height = a4Width;\r\n a4Width = ac;\r\n }\r\n console.log(`A4=>宽${a4Width}`);\r\n a4Width = a4Width - left - right;\r\n a4Height = a4Height - top - bottom;\r\n // const sheetHandle = this.getHandle(sheetIndex);\r\n const sheetWidth = this.getSheetWidth(sheetHandle);\r\n console.log(`A4=>宽${a4Width},左=>${left},右=>${right} 实际=>宽${sheetWidth}`);\r\n const sheetHeight = this.getSheetHeight(sheetHandle);\r\n const countRow = this.getRows(sheetHandle);\r\n const countCol = this.getCols(sheetHandle);\r\n\r\n // //设置签章图片的大小\r\n // 目前有问题\r\n // var pictures = sheet.pictures.all();\r\n // var signImageNameArr: Array<string> = [\"NvJC\", \"NvJL\", \"NVFH\", \"NvSH\", \"NvPZ\"];\r\n // for (let index = 0; index < pictures.length; index++) {\r\n // let element = pictures[index];\r\n // if (signImageNameArr.indexOf(element.name.toString()) >= 0) {\r\n // element.height(this.signImageHeight);\r\n // }\r\n // }\r\n //行高\r\n const dh = (a4Height - sheetHeight - this.lastRowHeight - 5) / (countRow - 2);\r\n for (let i = 0; i < countRow - 1; i++) {\r\n let height = this.getRowHeight(i, sheetHandle);\r\n this.setRowHeight(i, height + dh, sheetHandle);\r\n }\r\n\r\n //设置随后一行行高\r\n this.setRowHeight(countRow - 2, this.lastRowHeight, sheetHandle);\r\n const pyl = this.GetRowOffset(countRow, sheetHandle);\r\n let h2 = a4Height - pyl;\r\n const h = this.getRowHeight(countRow - 3, sheetHandle);\r\n this.setRowHeight(countRow - 3, h2 + h, sheetHandle);\r\n // 列宽\r\n const dw = (a4Width - sheetWidth) / (countCol - 1);\r\n for (let i = 0; i < (countCol - 1); i++) {\r\n let width = this.getColWidth(i, sheetHandle);\r\n this.setColWidth(i, width + dw, sheetHandle);\r\n }\r\n const pyl2 = this.GetColOffset((countCol - 1), sheetHandle);\r\n let w2 = a4Width - pyl2;\r\n const w = this.getColWidth((countCol - 1), sheetHandle);\r\n this.setColWidth((countCol - 1), w2 + w, sheetHandle);\r\n //设置纸张方向\r\n this.setPrintOriantation(isPortrait, sheetHandle);\r\n const minPx10 = minPx * 10;\r\n const maxPx10 = maxPx * 10;\r\n //设置纸张边距\r\n if (isPortrait) {\r\n //纵表:Left 2.5cm Right 1.5cm Top 1.5cm Bottom 1.5cm\r\n\r\n this.setPrintMargin(maxPx10, minPx10, minPx10, minPx10, sheetHandle);\r\n }\r\n else {\r\n //横表:Left 1.5cm Right 1.5cm Top 2.5cm Bottom 1.5cm\r\n this.setPrintMargin(minPx10, maxPx10, minPx10, minPx10, sheetHandle);\r\n }\r\n }\r\n\r\n /**\r\n * 获取打印纸的宽度(单位:像素)\r\n * 1英寸=25.4毫米\r\n * @param width 宽度(单位:mm)\r\n * @returns 像素\r\n */\r\n public getPxWidth(width: number) {\r\n const dpi = this.getDPI();\r\n return (width / 25.4) * dpi[0];\r\n }\r\n\r\n /**\r\n * 获取打印纸的高度(单位:像素)\r\n * 1英寸=25.4毫米\r\n * @param height 高度(单位:mm)\r\n * @returns 像素\r\n */\r\n public getPxHeight(height: number) {\r\n const dpi = this.getDPI();\r\n return (height / 25.4) * dpi[1];\r\n }\r\n\r\n /**\r\n * 获取A4纸的像素宽度\r\n * A4纸的尺寸是210mm×297mm\r\n * 1英寸=25.4毫米\r\n * A4纸的尺寸的图像的像素是(210/25.4)*分辨率×(297/25.4)*分辨率\r\n */\r\n public getA4PxWidth() {\r\n const dpi = this.getDPI();\r\n return (210 / 25.4) * dpi[0];\r\n }\r\n\r\n /**\r\n * 获取A4纸的像素高度\r\n * A4纸的尺寸是210mm×297mm\r\n * 1英寸=25.4毫米\r\n * A4纸的尺寸的图像的像素是(210/25.4)*分辨率×(297/25.4)*分辨率\r\n */\r\n public getA4PxHeight() {\r\n const dpi = this.getDPI();\r\n return (297 / 25.4) * dpi[1];\r\n }\r\n\r\n /**\r\n *\r\n * @param cm\r\n * @param isWDPI true:宽度;false:高度\r\n */\r\n public cmToPx(cm: number, isWDPI: boolean) {\r\n const dpis = this.getDPI();\r\n const dpi = isWDPI ? dpis[0] : dpis[1];\r\n return ((cm * 10) / 25.4) * dpi\r\n }\r\n\r\n /**\r\n * 斜向一英寸里的物理像素数量\r\n * 设备分辨率一栏表\r\n * 1、px(pixels):物理像素,硬件像素,设备像素\r\n * 2、dp,dip(deveice independent pixels):逻辑像素、设备无关像素、CSS像素\r\n * 3、pt(point):1/72英寸\r\n * 4、dpr(devicePixelRatio): 设备像素缩放比,即 1dp的长度相当于几个px的长度\r\n * 5、ppi,dpi:像素密度(像素每英寸),斜向一英寸里的物理像素数量\r\n * 6、em: 相对于父元素的font-size的相对单位。\r\n * 7、rem: 相对于根元素的font-size的相对单位。\r\n * 8、vw: 1% 布局视口宽度\r\n * 9、vh: 1% 布局视口高度\r\n * 10、分辨率:横向物理像素数 * 纵向物理像素数\r\n */\r\n public getDPI() {\r\n var arrDPI = new Array();\r\n if ((window.screen as any).deviceXDPI != undefined) {\r\n arrDPI[0] = (window.screen as any).deviceXDPI;\r\n arrDPI[1] = (window.screen as any).deviceYDPI;\r\n }\r\n else {\r\n var tmpNode = document.createElement(\"DIV\");\r\n tmpNode.style.cssText = \"width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden\";\r\n document.body.appendChild(tmpNode);\r\n arrDPI[0] = tmpNode.offsetWidth;\r\n arrDPI[1] = tmpNode.offsetHeight;\r\n tmpNode.parentNode!.removeChild(tmpNode);\r\n }\r\n return arrDPI;\r\n }\r\n\r\n /**\r\n * 取得某行的偏移量\r\n * @param rowIndex 行号(从0开始计数)\r\n * @param strHanle\r\n */\r\n public GetRowOffset(row: number, strHanle: string): number {\r\n return Number(ffunc(this.suReport, strHanle + 'GetRowOffset', `${row}`));\r\n }\r\n\r\n /**\r\n * 取得某列的偏移量\r\n * @param col 列号(从0开始计数),或列名(如 A、K、AC)\r\n * @param strHanle\r\n */\r\n public GetColOffset(col: any, strHanle: string): number {\r\n return Number(ffunc(this.suReport, strHanle + 'GetColOffset', `${col}`));\r\n }\r\n\r\n /**\r\n * 获取纸张方向\r\n * @param sheetIndex\r\n * @return portrait/landscape 分别表示垂直/横向走纸;\r\n */\r\n public getPrintOriantation(sheetHandle: string) {\r\n var strOriantation: string = ffunc(this.suReport, sheetHandle + \"GetPrintProp\", \"Oriantation\");\r\n if (utilities.isNull(strOriantation)) {\r\n //没有设置纸张方向\r\n const sheetWidth = this.getSheetWidth(sheetHandle);\r\n alert(sheetWidth);\r\n return sheetWidth > 900 ? \"landscape\" : \"portrait\";\r\n }\r\n else {\r\n //返回值 Portrait/Landscape 分别表示垂直/横向走纸;\r\n return strOriantation.toLowerCase();\r\n }\r\n }\r\n\r\n /**\r\n * 获取sheet的宽度\r\n */\r\n public getSheetWidth(sheetHandle: string = \"\") {\r\n // let total = 0;\r\n let len = this.getCols(sheetHandle);\r\n // for (let i = 0; i < len; i++) {\r\n // total += this.getColWidth(i, sheetHandle);\r\n // }\r\n const total = this.GetColOffset(len - 1, sheetHandle);\r\n return total;\r\n }\r\n\r\n /**\r\n * 获取sheet的高度\r\n */\r\n public getSheetHeight(sheetHandle: string = \"\") {\r\n let total = 0;\r\n let len = this.getRows(sheetHandle);\r\n // for (let i = 0; i < len; i++) {\r\n // total += this.getRowHeight(i, sheetHandle);\r\n // }\r\n total = this.GetRowOffset(len - 2, sheetHandle);\r\n return total;\r\n }\r\n //#endregion\r\n\r\n /**\r\n * 动态更改工具条中某按钮/菜单项的状态\r\n * @param functionIndex 功能号\r\n * @param functionName 可用状态,为 Enable、Visible、Check\r\n * @param status true / false\r\n */\r\n public setToolbarItemStatus(functionIndex: number, functionName: string, status: boolean) {\r\n return ffunc(this.suReport, 'SetToolbarItemStatus', `${functionIndex}\\r\\n ${functionName}\\r\\n ${status}`);\r\n }\r\n\r\n /**\r\n * 插入行\r\n * @param rowIndex 插入处行号 从0开始计数,-1表示从末尾添加\r\n * @param rowCount 可选, 插入行数,默认1\r\n * @param after 可选, true/false(或1/0、yes/no),分别表示前插/后插,默认前插\r\n ** AF.func(\"insertRows\", \"1 \\r\\n 3 \\r\\n false\"); //表示在第二行位置后插3行\r\n */\r\n public insertRows(rowIndex: number, rowCount: number = 1, after = 'no', sheetHandle = '') {\r\n return ffunc(this.suReport, sheetHandle + 'insertRows', `${rowIndex}\\r\\n ${rowCount}\\r\\n ${after}`);\r\n }\r\n /**\r\n * 取得所有显示掩码的id\r\n ** 掩码的id,相互以逗号分隔\r\n */\r\n public masks_Get() {\r\n return ffunc(this.suReport, \"Masks_Get\", '');\r\n }\r\n /**\r\n * 取得某个显示掩码的表达式\r\n * @param id\r\n */\r\n public mask_Get(id: any) {\r\n return ffunc(this.suReport, \"Mask_Get\", `${id}`);\r\n }\r\n /**\r\n * 添加一个显示掩码\r\n * @param dataType 可以是 string, int, double, date, datetime\r\n * @param codeStr 表达式\r\n ** 如果该掩码表达式已经存在,则返回原ID号\r\n ** var id = AF.func(\"Mask_Add\", \"string \\r\\n =formatNum(data, '¥#,##0.00')\");\r\n ** var id = AF.func(\"Mask_Add\", \"string \\r\\n =picture()\"); //添加图片显示掩码\r\n ** var id = AF.func(\"Mask_Add\", \"string \\r\\n =barcode(33,0,0,0)\"); //添加二维码显示掩码\r\n */\r\n public mask_Add(dataType: string, codeStr: any,) {\r\n return ffunc(this.suReport, \"Mask_Add\", `${dataType} \\r\\n =${codeStr}`);\r\n }\r\n\r\n /**\r\n * 删除某个显示掩码\r\n * @param id\r\n */\r\n public mask_Delete(id: any) {\r\n return ffunc(this.suReport, \"Mask_Delete\", `${id}`);\r\n }\r\n\r\n /**\r\n * 选取焦点单元、或嵌入对象(如文本框)\r\n * @param startRowIndex 行号(从0开始计数)\r\n * @param startColIndex 列号(从0开始计数)\r\n * @param endRowIndex 可选, 至行号, -1表示到末行\r\n * @param endColIndex 可选, 至列号, -1表示到末列\r\n * @result true/false - 成功/失败\r\n */\r\n public selectCell(startRowIndex: any, startColIndex: any, endRowIndex: any, endColIndex: any) {\r\n return ffunc(this.suReport, \"SelectCell\", `${startRowIndex} \\r\\n ${startColIndex} \\r\\n ${endRowIndex} \\r\\n ${endColIndex}`);\r\n }\r\n\r\n /**\r\n * 复制当前选中的行列\r\n * @result 1/0 - 成功/失败\r\n */\r\n public copyRows() {\r\n //20 复制 31 剪切\r\n return ffunc(this.suReport, 'callfunc', `20`);\r\n }\r\n\r\n /**\r\n * 粘贴复制的行列\r\n * @result 1/0 - 成功/失败\r\n */\r\n public pasteRows() {\r\n //34 粘贴格式和文字 35 仅粘贴文字\r\n return ffunc(this.suReport, 'callfunc', `34`);\r\n }\r\n\r\n /**\r\n * 取得所有内嵌对象的别名 或 ID号\r\n * @param commandStr 可选,类型筛选,可以是如下类型的组合(逗号分隔):Chart、ECharts、Line、TextBox、Picture、Treelist, 分别表示统计图、百度ECharts统计图、线条、文本框、图片、树列表\r\n * @param strHandle 可选,格式为 range=[?];return=[?], 含义和可用值说明如下: range - 工作表范围,可用值为:full 或 all - 表示全部工作表,默认; current - 仅当前工作表;return - 返回内容,可用值为:alias - 返回别名, 默认, 注:没有别名的对象会被忽略(不在返回串中).id - 返回 ID 号,ID号是井号(#)开头的一个数字, 数字的生成规则是 (工作表顺序号 + 1) * 1000 + 对象顺序号.\r\n * @result 以逗号分隔的别名或ID号的串\r\n */\r\n public getGraphics(commandStr: any, strHandle = '') {\r\n return ffunc(this.suReport, strHandle + \"GetGraphics\", commandStr);\r\n }\r\n\r\n /**\r\n * 删除内嵌对象\r\n * @param alias 别名\r\n * @param strhandle\r\n */\r\n public deleteGraphics(alias: any, strHandle = '') {\r\n ffunc(this.suReport, strHandle + \"DeleteGraphics\", `${alias}`);\r\n }\r\n\r\n /**\r\n * 插入文本框\r\n * @param strhandle\r\n * @param alias 别名\r\n * @param mode 0:无边框\r\n */\r\n public insertInput(strhandle: any, alias = 'QRcodeTag', mode = 1) {\r\n // ffunc(this.suReport,strhandle + \"DeleteGraphics\", `${alias}`);\r\n //插入别名为 \"QRcodeTag\" 的文本框\r\n ffunc(this.suReport, strhandle + \"callfunc\", `112 \\r\\n x=2; y=2; width=66; height=66; alias=${alias}`);\r\n if (mode == 0) {\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${alias} \\r\\n borderThick \\r\\n 0`);\r\n }\r\n //刷新一下屏幕\r\n ffunc(this.suReport, strhandle + \"SetRedrawAble\", \"true\");\r\n }\r\n\r\n /**\r\n * 插入文本框\r\n * @param strhandle\r\n * @param alias 别名\r\n * @param mode 0:无边框\r\n */\r\n public insertCustomInput(strhandle: any, alias: any, x: any, y: any, w: any, h: any, mode = 1) {\r\n // ffunc(this.suReport,strhandle + \"DeleteGraphics\", `${alias}`);\r\n //插入别名为 \"QRcodeTag\" 的文本框\r\n ffunc(this.suReport, strhandle + \"callfunc\", `112 \\r\\n x=${x}; y=${y}; width=${w}; height=${h}; alias=${alias}`);\r\n if (mode == 0) {\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${alias} \\r\\n borderThick \\r\\n 0`);\r\n }\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${alias} \\r\\n vAlign \\r\\n middle`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${alias} \\r\\n align \\r\\n left`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${alias} \\r\\n bgColor \\r\\n t`);\r\n //刷新一下屏幕\r\n ffunc(this.suReport, strhandle + \"SetRedrawAble\", \"true\");\r\n }\r\n\r\n /**\r\n * 生成二维码\r\n * @param strhandle 句柄\r\n * @param aliasName 别名\r\n * @param codeStr 二维码内容\r\n */\r\n public createQRcode(strhandle: any, aliasName: string, codeStr: string) {\r\n // ffunc(this.suReport,strhandle + \"DeleteGraphics\", \"MyQr\");\r\n //插入别名为 \"MyPic\" 的文本框\r\n // ffunc(this.suReport,strhandle + \"callfunc\", \"112 \\r\\n x=2; y=2; width=66; height=66; alias=MyQr\");\r\n //将其数据类型改成字符串型\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n datatype \\r\\n 1`);\r\n //添加二维码显示掩码\r\n var id = ffunc(this.suReport, strhandle + \"Mask_Add\", \"string \\r\\n =barcode(34,0,0,0)\");\r\n //修改它的显示掩码, 至此,该文本框就二维码显示了\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n maskid \\r\\n ${id}`);\r\n\r\n //赋图片: 通过 SetCellData 赋值就行\r\n ffunc(this.suReport, strhandle + \"SetCellData\", `${aliasName} \\r\\n ${codeStr}`);\r\n //设置其它效果:背景透明,无边框\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n bgColor \\r\\n T`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n borderThick \\r\\n 0`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n align \\r\\n 1`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n vAlign \\r\\n 1`);\r\n //刷新一下屏幕\r\n ffunc(this.suReport, strhandle + \"SetRedrawAble\", \"true\");\r\n }\r\n\r\n /**\r\n * 设置单元格显示二维码\r\n * @param strhandle\r\n * @param row\r\n * @param col\r\n * @param codeStr\r\n */\r\n public setCellQRcode(strhandle: any, row: any, col: any, codeStr: any) {\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n datatype \\r\\n 1`);\r\n var id = ffunc(this.suReport, strhandle + \"Mask_Add\", \"string \\r\\n =barcode(34,0,0,0)\");\r\n //修改它的显示掩码, 至此,该文本框就二维码显示了\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n maskid \\r\\n ${id}`);\r\n ffunc(this.suReport, strhandle + \"SetCellData\", `${row} \\r\\n ${col} \\r\\n ${codeStr}`);\r\n //设置其它效果:背景透明,无边框\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n bgColor \\r\\n T`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n borderThick \\r\\n 0`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n align \\r\\n 1`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n vAlign \\r\\n 1`);\r\n //刷新一下屏幕\r\n ffunc(this.suReport, strhandle + \"SetRedrawAble\", \"true\");\r\n }\r\n /**\r\n * 设置单元格显示图片\r\n * @param strhandle\r\n * @param row\r\n * @param col\r\n * @param codeStr\r\n */\r\n public setCellPicture(strhandle: any, row: any, col: any, codeStr: any) {\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n datatype \\r\\n 1`);\r\n var id = ffunc(this.suReport, strhandle + \"Mask_Add\", \"string \\r\\n =picture()\");\r\n //修改它的显示掩码, 至此,该文本框就二维码显示了\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n maskid \\r\\n ${id}`);\r\n ffunc(this.suReport, strhandle + \"SetCellData\", `${row} \\r\\n ${col} \\r\\n${codeStr}`);\r\n //设置其它效果:背景透明,无边框\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n bgColor \\r\\n T`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} imageArrange \\r\\n stretchKeepRatio`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n borderThick \\r\\n 0`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n align \\r\\n 1`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${row} \\r\\n ${col} \\r\\n vAlign \\r\\n 1`);\r\n //刷新一下屏幕\r\n ffunc(this.suReport, strhandle + \"SetRedrawAble\", \"true\");\r\n }\r\n /**\r\n * 单元格插入图片\r\n * @param strhandle\r\n * @param aliasName\r\n * @param base64Str\r\n */\r\n public insertPicture(strhandle: any, aliasName: string, base64Str: string) {\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n datatype \\r\\n 1`);\r\n var id = ffunc(this.suReport, strhandle + \"Mask_Add\", \"string \\r\\n =picture()\");\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n maskid \\r\\n ${id}`);\r\n //修改它的显示掩码, 至此,该文本框就二维码显示了\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n maskid \\r\\n ${id}`);\r\n\r\n //赋图片: 通过 SetCellData 赋值就行\r\n ffunc(this.suReport, strhandle + \"SetCellData\", `${aliasName} \\r\\n${base64Str}`);\r\n //设置其它效果:背景透明,无边框\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n bgColor \\r\\n T`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n imageArrange \\r\\n stretchKeepRatio`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n borderThick \\r\\n 0`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n align \\r\\n 1`);\r\n ffunc(this.suReport, strhandle + \"SetCellProp\", `${aliasName} \\r\\n vAlign \\r\\n 1`);\r\n //刷新一下屏幕\r\n ffunc(this.suReport, strhandle + \"SetRedrawAble\", \"true\");\r\n }\r\n\r\n /**\r\n * 插入图片\r\n * @param imageUrl\r\n * @param tWidth\r\n * @param tHeight\r\n * @param x\r\n * @param y\r\n * @param sheetHandle\r\n */\r\n public insertImage(imageUrl: string, tWidth: string, tHeight: string, x: number, y: number, alias: string = '', sheetHandle: string = '') {\r\n ffunc(this.suReport, sheetHandle + \"callfunc\", \"192 \\r\\n x=\" + x + \"; y=\" + y + \";IsSaveURLOnly=false;URL=\" + imageUrl + \";maxSize=\" + tWidth + \",\" + tHeight + \";alias=\" + alias);\r\n }\r\n\r\n /**\r\n * 复制当前页\r\n * @param sheetName\r\n */\r\n public copySheet(sheetName = '') {\r\n const sheetIndex = ffunc(this.suReport, 'GetCurrentWorksheet', '');\r\n const strHandle = ffunc(this.suReport, \"getHandle\", sheetIndex);\r\n const sheetXmlStr = ffunc(this.suReport, strHandle + 'callfunc', `1074\\r\\n WorkSheet=${sheetIndex};isReturnContent=true;`);\r\n ffunc(this.suReport, strHandle + \"appendWorksheet\", sheetXmlStr);\r\n const newSheetIndex = ffunc(this.suReport, 'GetCurrentWorksheet', '');\r\n if (!utilities.isNull(sheetName)) {\r\n ffunc(this.suReport, strHandle + 'SetWorksheetName', newSheetIndex + \" \\r\\n \" + sheetName);\r\n }\r\n return newSheetIndex;\r\n }\r\n /**\r\n * 复制指定页\r\n * @param sheetXmlStr\r\n * @param sheetName\r\n */\r\n public copySheet2(sheetXmlStr: any, sheetName: any) {\r\n ffunc(this.suReport, \"appendWorksheet\", sheetXmlStr);\r\n const newSheetIndex = ffunc(this.suReport, 'GetCurrentWorksheet', '');\r\n ffunc(this.suReport, 'SetWorksheetName', newSheetIndex + \" \\r\\n \" + sheetName);\r\n return newSheetIndex;\r\n }\r\n\r\n /**\r\n * 清空所有报表\r\n */\r\n public clearSheet() {\r\n const sheetCount = Number(ffunc(this.suReport, \"GetWorksheets\", ''));\r\n for (let index = sheetCount - 1; index >= 0; index--) {\r\n ffunc(this.suReport, \"DeleteWorksheet\", index.toString());\r\n }\r\n }\r\n\r\n /**\r\n * 插入sheet页(添加成功后会自动变成当前活动的页)\r\n * @param sheetXml 待添加sheet串(注意:不是整个报表的串)\r\n * @param newSheetIndex 添加到哪里(默认-1,-1表示添加到末尾)\r\n * @param newSheetName 添加的名称\r\n */\r\n public insertSheet(sheetXml: string, newSheetIndex: number = -1, newSheetName: string = \"\") {\r\n var sheetLen = this.getWorksheets();\r\n\r\n if (newSheetIndex < 0 || newSheetIndex > (sheetLen - 1)) {\r\n //如果超出范围,则添加到最后\r\n newSheetIndex = sheetLen;\r\n }\r\n //添加sheet页\r\n var m = this.appendWorksheet(`${sheetXml}`);\r\n if (m == \"1\") {//表示添加成功\r\n //获取添加sheet页的索引\r\n var index = this.getCurrentWorksheet();\r\n if (!utilities.isNull(newSheetName)) {\r\n //设置添加sheet页的名称\r\n this.setSheetName(index, newSheetName);\r\n }\r\n //设置添加sheet页的位置\r\n for (let indextemp = newSheetIndex; indextemp < index; indextemp++) {\r\n this.exchangeWorksheet(-1, newSheetIndex);\r\n }\r\n //设置活动页(由于appendWorksheet之后,活动页变成了新添加的sheet,之后又执行了exchangeWorksheet,就会导致当前活动页可能变了,所以此处重新设置活动页)\r\n this.setCurrentWorksheet(newSheetIndex);\r\n }\r\n }\r\n /**\r\n * 根据sheet页的名称获取SheetIndex\r\n * @param sheetName sheet页的名称\r\n */\r\n public getSheetIndexBySheetName(sheetName: string) {\r\n let sheetIndex = -1;\r\n for (let index = 0; index < this.getWorksheets(); index++) {\r\n if (this.getWorksheetName(index) == sheetName) {\r\n sheetIndex = index;\r\n break;\r\n }\r\n }\r\n return sheetIndex;\r\n }\r\n /**\r\n * 取得某单元格所在的合并区域\r\n * @param row 行号(从0开始计数)\r\n * @param col 列号(从0开始计数),或列名(如 A、K、AC)\r\n * @param strhandle\r\n */\r\n public getMergedCells(row: number, col: number, strhandle: string = '') {\r\n return ffunc(this.suReport, strhandle + \"GetMergedCells\", `${row} \\r\\n ${col}`);\r\n }\r\n /**\r\n * 合并单元格\r\n * @param row1\r\n * @param col1\r\n * @param row2\r\n * @param col2\r\n * @param strhandle\r\n */\r\n public merge(row1: number, col1: number, row2: number, col2: number, strhandle: string = '') {\r\n ffunc(this.suReport, strhandle + \"Merge\", `${row1} \\r\\n ${col1} \\r\\n ${row2} \\r\\n ${col2}`);\r\n }\r\n /**\r\n * 合并相同内容的单元格\r\n * @param row\r\n * @param col1\r\n * @param col2\r\n * @param strhandle\r\n */\r\n public mergeSameCol(row: number, col1: number, col2: number, strhandle: string = '') {\r\n ffunc(this.suReport, strhandle + \"MergeSame\", `row=${row};col1=${col1};col2=${col2}`);\r\n }\r\n /**\r\n * 合并相同内容的单元格\r\n * @param row\r\n * @param col1\r\n * @param col2\r\n * @param strhandle\r\n */\r\n public mergeSameRow(col: number, row1: number, row2: number, strhandle: string = '') {\r\n ffunc(this.suReport, strhandle + \"MergeSame\", `col=${col};row1=${row1};row2=${row2}`);\r\n }\r\n\r\n /**\r\n * 合并相同内容的单元格\r\n * @param row\r\n * @param col1\r\n * @param col2\r\n * @param strhandle\r\n */\r\n public mergeSame(col: string, row1: string, row2: string, strhandle: string = '') {\r\n ffunc(this.suReport, strhandle + \"MergeSame\", `col=${col};row1=${row1};row2=${row2}`);\r\n }\r\n\r\n /**\r\n * 自定义菜单\r\n * @param content\r\n ** XML串\r\n ** <items>\r\n ** <item id=\"3103\" text=\"热销\" icon=\"buttons.zip#303.ico\">\r\n ** <item id=\"KB3104\" text=\"滞销产品\" icon=\"buttons.zip#304.ico\">\r\n ** <item id=\"31041\" text=\"库存1\" style=\"checkbox\" checked=\"true\" icon=\"buttons.zip#304.ico\" detail=\"浮动的详细说明,可选\"/>\r\n ** <item id=\"31042DM\" text=\"库存2\" enable=\"false\" detail=\"浮动的详细说明,可选\"/>\r\n ** </item>\r\n ** </items>\r\n ** 非XML的普通串\r\n ** var s = \"id=40N01; text=男帽; icon=buttons.zip#301.ico; detail=夏季时装\\r\\n\";\r\n s += \"id=4002; text=时髦头巾; icon=buttons.zip#302.ico; detail=优惠直销\"\r\n */\r\n public addMenu(content: string) {\r\n ffunc(this.suReport, \"AddMenu\", content);\r\n }\r\n\r\n public menuBeforePopup_Lock() {\r\n ffunc(this.suReport, \"MenuBeforePopup_Lock\", \"\");\r\n }\r\n\r\n public menuBeforePopup_UnLock() {\r\n ffunc(this.suReport, \"MenuBeforePopup_UnLock\", \"\");\r\n }\r\n /**\r\n * 获取单元格的状态\r\n * @param row\r\n * @param col\r\n * @param strHandle\r\n * @returns A - 普通单元格;H - 被合并; M - 被合并,但位于合并区的左上角,是有效的主单元格; 空串 - 该单元格不存在\r\n */\r\n public getCellStatus(row: any, col: any, strHandle = '') {\r\n return ffunc(this.suReport, strHandle + \"GetCellStatus\", `${row}\\r\\n${col}`);\r\n }\r\n /**\r\n * 添加一种字体, 如果字体已经存在,则返回该字体的顺序号(fontIndex)\r\n * @param fontname\r\n * @returns 字体顺序号,返回 -1 表示失败\r\n */\r\n public addFont(fontname: string) {\r\n return ffunc(this.suReport, \"addFont\", `{'faceName':'${fontname}', 'height':'-12', 'weight':'400'}`);\r\n }\r\n\r\n /**\r\n * 设置内嵌对象运行时不可拖动\r\n * @param sheets 指定sheet页的序号,多个用,隔开,默认all(全部)\r\n * @param tagNames 指定内嵌对象的名称,不指定即所有内嵌对象,默认不限制\r\n * @param type 内嵌对象的类型 Chart、ECharts、Line、TextBox、Picture、Treelist, 分别表示统计图、百度ECharts统计图、线条、文本框、图片、树列表,默认TextBox,Picture\r\n */\r\n public setUnDragAbleAtRuntime(sheets: string = 'all', tagNames: string = '', type: string = 'TextBox,Picture') {\r\n let sheetIndexs: string[] = [];\r\n if (sheets == 'all') {\r\n const sheetLen = this.getWorksheets();\r\n for (let sheetIndex = 0; sheetIndex < sheetLen; sheetIndex++) {\r\n sheetIndexs.push(sheetIndex.toString());\r\n }\r\n } else {\r\n sheetIndexs = sheets.split(',');\r\n }\r\n for (let sheetIndex of sheetIndexs) {\r\n const strHandle = this.getHandle(sheetIndex as any);\r\n const tmpNameStr: string = this.getGraphics(`${type}\\r\\n range=${sheetIndex};return=alias`);\r\n if (!utilities.isNull(tmpNameStr)) {\r\n const tmpNames = tmpNameStr.split(',');\r\n for (let tmpName of tmpNames) {\r\n if (utilities.isNull(tagNames)) {\r\n this.SetCustomCellProp(`${tmpName} \\r\\n unDragAbleAtRuntime \\r\\n 1`, strHandle);\r\n } else {\r\n const tagNameArr = tagNames.split(',');\r\n if (tagNameArr.indexOf(tmpName) > -1) {\r\n this.SetCustomCellProp(`${tmpName} \\r\\n unDragAbleAtRuntime \\r\\n 1`, strHandle);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取选择单元格范围\r\n * @param {string} range - 单元格范围,如\"H17:H21\"\r\n * @returns {Object} {rowRange:[startRow,endRow],colRange:[starCol,endCol],cells:[[8,17], [8,18], [8,19], [8,20], [8,21]]}\r\n */\r\n getSelectionRange(strHandle = '') {\r\n if (!strHandle) {\r\n strHandle = this.getHandle(this.getCurrentWorksheet())\r\n }\r\n let range = this.getCurrentCells(strHandle)\r\n if (!range) {\r\n return { rowRange: [-1, -1], colRange: [-1, -1], cells: [] }\r\n }\r\n /**\r\n * 将Excel列字母转换为数字\r\n * @param {string} letters - 列字母,如\"A\", \"AB\", \"H\"\r\n * @returns {number} 列数字(从1开始)\r\n */\r\n let columnLetterToNumber = (letters: any) => {\r\n let res = 0;\r\n for (let i = 0; i < letters.length; i++) {\r\n res = res * 26 + (letters.charCodeAt(i) - 'A'.charCodeAt(0) + 1);\r\n }\r\n return res;\r\n }\r\n const [startCell, endCell] = range.split(':');\r\n\r\n // 解析起始单元格\r\n const startCol: number = Number(columnLetterToNumber(startCell.replace(/\\d/g, '')));\r\n const startRow: number = parseInt(startCell.replace(/\\D/g, ''));\r\n\r\n // 解析结束单元格\r\n const endCol: number = columnLetterToNumber(endCell.replace(/\\d/g, ''));\r\n const endRow: number = parseInt(endCell.replace(/\\D/g, ''));\r\n\r\n const result: [number, number][] = [];\r\n\r\n // 如果是单列范围(如H17:H21)\r\n if (startCol == endCol) {\r\n for (let row = startRow; row <= endRow; row++) {\r\n result.push([startCol - 1, row - 1]);\r\n }\r\n }\r\n // 如果是多列范围(如A1:C3)\r\n else {\r\n for (let col: number = startCol; col <= endCol; col++) {\r\n for (let row = startRow; row <= endRow; row++) {\r\n result.push([col - 1, row - 1]);\r\n }\r\n }\r\n }\r\n\r\n return { rowRange: [startRow - 1, endRow - 1], colRange: [startCol - 1, endCol - 1], cells: result };\r\n }\r\n\r\n public jsonToxmlSupcan(jsonres: Array<any>) {\r\n let jsonObj: any = { Report: { WorkSheet: [] } }\r\n jsonres.map((e: any) => {\r\n let Fonts: any = []\r\n let Table: any = {\r\n Col: [],\r\n TR: []\r\n }\r\n debugger\r\n let Merges: any = []\r\n\r\n //#region Properties属性\r\n let BackGround = { _bgColor: \"#FFFFFF\" }\r\n let DefaultTD: any = {\r\n TD: []\r\n };\r\n DefaultTD.TD.push({\r\n _fontIndex: \"0\",\r\n _textColor: \"#000000\",\r\n _transparent: \"true\",\r\n _leftBorder: \"1\",\r\n _topBorder: \"1\",\r\n _leftBorderColor: \"#C0C0C0\",\r\n _topBorderColor: \"#C0C0C0\",\r\n _decimal: \"2\",\r\n _align: \"center\",\r\n _vAlign: \"middle\",\r\n _isProtected: \"false\",\r\n _isThousandSeparat: \"true\",\r\n _datatype: \"0\",\r\n _isRound: \"true\",\r\n _isPrint: \"true\"\r\n })\r\n\r\n let Other = {\r\n _isShowZero: \"true\",\r\n _isRefOri: \"true\",\r\n _Ellipsis: \"1\",\r\n _LineDistance: \"0\",\r\n _isRowHeightAutoExtendAble: \"true\"\r\n }\r\n //#endregion\r\n\r\n debugger\r\n let rowlen = e.config.rowlen\r\n e.data.forEach((row: any, rowid: number) => {\r\n let tr: any = {\r\n _height: rowlen[rowid],\r\n _sequence: rowid,\r\n TD: []\r\n }\r\n row.map((cell: any, columnid: number) => {\r\n if (rowid == 0) {\r\n Table.Col.push({\r\n _width: e.config.columnlen[columnid] + 1\r\n })\r\n }\r\n if (cell) {\r\n let value = cell.v\r\n if (!value) {\r\n if (cell?.ct?.s && cell?.ct.s[0].v) {\r\n value = cell.ct.s[0].v\r\n }\r\n }\r\n let tag = cell?.flag?.tag\r\n let cellObj: any = {\r\n __text: value,\r\n _tag: tag ? tag : JSON.stringify({})\r\n }\r\n\r\n let font = cell.fs ? (Number(cell.fs) / -0.75) : -13\r\n font = Number(font.toFixed(0))\r\n let weight = cell.bl == 1 ? 700 : 400\r\n if (cell.ff) {\r\n if (Fonts.find((v: any) => v._faceName == cell.ff && v._height == font && v._weight == weight)) {\r\n let index = Fonts.findIndex((v: any) => v._faceName == cell.ff && v._height == font)\r\n cellObj._fontIndex = index\r\n } else {\r\n console.log(cell.fs)\r\n Fonts.push({\r\n _faceName: cell.ff,\r\n _height: font,\r\n _weight: weight,\r\n _charSet: \"134\",\r\n _pitchAndFamily: \"2\",\r\n _quality: \"1\",\r\n _outPrecision: \"3\",\r\n _clipPrecision: \"2\"\r\n })\r\n cellObj._fontIndex = Fonts.length - 1\r\n }\r\n }\r\n }\r\n })\r\n });\r\n\r\n jsonObj.Report.WorkSheet.push({\r\n _name: e.name,\r\n Properties: {\r\n BackGround: BackGround,\r\n DefaultTD: DefaultTD,\r\n Other: Other\r\n },\r\n Fonts: {\r\n Font: Fonts\r\n },\r\n Table: Table,\r\n Merges: {\r\n Range: Merges\r\n },\r\n PrintPage: {}\r\n })\r\n });\r\n\r\n let x2js = new X2JS();\r\n let xml = x2js.js2xml(jsonObj)\r\n\r\n xml = `<?xml version=\"1.0\" encoding=\"UTF-8\" ?>${xml}`\r\n console.log(xml)\r\n return xml\r\n }\r\n\r\n public jsonToXml(jsonres: Array<any>) {\r\n let sheetTagInfo0: any = {}\r\n let jsonObj: any = { Report: { WorkSheet: [] }, memos: { memo: [] } }\r\n jsonres.map((e: any, index: number) => {\r\n let Fonts: any = []\r\n let memos: any = []\r\n let __text: any = {}\r\n let borderInfo = e.config.borderInfo\r\n let Table: any = {\r\n Col: [],\r\n TR: []\r\n }\r\n let rows: any = []\r\n let rowlen = e.config.rowlen\r\n e.data.forEach((row: any, rowid: number) => {\r\n let tr: any = {\r\n _height: rowlen[rowid],\r\n _sequence: rowid,\r\n TD: []\r\n }\r\n row.map((cell: any, columnid: any) => {\r\n if (rowid == 0) {\r\n Table.Col.push({\r\n _width: e.config.columnlen[columnid]\r\n })\r\n }\r\n if (cell) {\r\n if (rowid == 0 && columnid == 0) {\r\n let sheetTag = cell?.flag?.sheettag\r\n if (sheetTag) {\r\n let sheetTagInfo = JSON.parse(sheetTag)\r\n if (sheetTagInfo.sheetType) {\r\n let sheetType = sheetTagInfo?.sheetType\r\n if (sheetType) {\r\n __text.sheetType = sheetType\r\n }\r\n }\r\n }\r\n }\r\n let value = cell.v\r\n if (!value) {\r\n if (cell?.ct?.s && cell?.ct.s[0].v) {\r\n value = cell.ct.s[0].v\r\n }\r\n }\r\n value = value?value:\"\"\r\n let tag = cell?.flag?.tag\r\n cell.c = cell.c?cell.c:columnid\r\n let cellObj: any = {\r\n __text: value,\r\n _col:cell.c,\r\n _tag: tag ? tag : JSON.stringify({})\r\n }\r\n if (cell.bg) {\r\n let color = this.rgbToHex(cell.bg)\r\n if (color) {\r\n cellObj._bgColor = color\r\n }\r\n }\r\n let cellStyle = borderInfo.find((x: any) => x.value && x.value.row_index == rowid && x.value.col_index == cell.c)\r\n if (cellStyle) {\r\n if (cellStyle.value.l) {\r\n cellObj._leftBorder = this.getBorderNum(cellStyle.value.l.style)\r\n cellObj._leftBorderColor = cellStyle.value.l.color ?? \"#ffffff\"\r\n }\r\n if (cellStyle.value.t) {\r\n cellObj._topBorder = this.getBorderNum(cellStyle.value.t.style)\r\n cellObj._topBorderColor = cellStyle.value.t.color ?? \"#ffffff\"\r\n }\r\n if (cellStyle.value.b) {\r\n cellObj._bottomBorder = this.getBorderNum(cellStyle.value.b.style)\r\n cellObj._bottomBorderColor = cellStyle.value.b.color ?? \"#ffffff\"\r\n }\r\n if (cellStyle.value.r) {\r\n cellObj._rightBorder = this.getBorderNum(cellStyle.value.r.style)\r\n cellObj._rightBorderColor = cellStyle.value.r.color ?? \"#ffffff\"\r\n }\r\n } else {\r\n let cellStyle2s = borderInfo.filter((x: any) => {\r\n if (x.range && x.range.find((v: any) => v.row[0] <= rowid && v.row[1] >= rowid && v.column[0] <= cell.c && v.column[1] >= cell.c)) {\r\n return x\r\n }\r\n })\r\n let cellStyleAll = cellStyle2s.find((x:any)=>x.borderType==\"border-all\")\r\n let cellStyleL = cellStyle2s.find((x:any)=>x.borderType==\"border-left\")\r\n let cellStyleR = cellStyle2s.find((x:any)=>x.borderType==\"border-right\")\r\n let cellStyleT = cellStyle2s.find((x:any)=>x.borderType==\"border-top\")\r\n let cellStyleB = cellStyle2s.find((x:any)=>x.borderType==\"border-bottom\")\r\n // if (cellStyle2) {\r\n if (cellStyleAll) {\r\n let border = this.getBorderNum(cellStyleAll.style)\r\n cellObj._leftBorder = border\r\n cellObj._leftBorderColor = cellStyleAll.color ?? \"#ffffff\"\r\n cellObj._rightBorder = border\r\n cellObj._rightBorderColor = cellStyleAll.color ?? \"#ffffff\"\r\n cellObj._topBorder = border\r\n cellObj._topBorderColor = cellStyleAll.color ?? \"#ffffff\"\r\n cellObj._bottomBorder = border\r\n cellObj._bottomBorderColor = cellStyleAll.color ?? \"#ffffff\"\r\n }\r\n if (cellStyleL) {\r\n let border = this.getBorderNum(cellStyleL.style)\r\n cellObj._leftBorder = border\r\n cellObj._leftBorderColor = cellStyleL.color ?? \"#ffffff\"\r\n }\r\n if (cellStyleR) {\r\n cellObj._rightBorder = this.getBorderNum(cellStyleR.style)\r\n cellObj._rightBorderColor = cellStyleR.color ?? \"#ffffff\"\r\n }\r\n if (cellStyleT) {\r\n cellObj._topBorder = this.getBorderNum(cellStyleT.style)\r\n cellObj._topBorderColor = cellStyleT.color ?? \"#ffffff\"\r\n }\r\n if (cellStyleB) {\r\n cellObj._bottomBorder = this.getBorderNum(cellStyleB.style)\r\n cellObj._bottomBorderColor = cellStyleB.color ?? \"#ffffff\"\r\n }\r\n // }\r\n }\r\n cellObj._align = cell.ht == 0 ? 'center' : cell.ht == 1 ? 'left' : 'right'\r\n cellObj._vAlign = cell.vt == 0 ? 'middle' : cell.vt == 1 ? 'top' : 'bottom'\r\n cellObj._textColor = cell.fc ? cell.fc : \"#000000\"\r\n tr.TD.push(cellObj)\r\n let font = cell.fs ? (Number(cell.fs) / -0.75) : -13\r\n font = Number(font.toFixed(0))\r\n let weight = cell.bl == 1 ? 700 : 400\r\n if (cell.ff) {\r\n if (Fonts.find((v: any) => v._faceName == cell.ff && v._height == font && v._weight == weight)) {\r\n let index = Fonts.findIndex((v: any) => v._faceName == cell.ff && v._height == font)\r\n cellObj._fontIndex = index\r\n } else {\r\n console.log(cell.fs)\r\n Fonts.push({\r\n _faceName: cell.ff,\r\n _height: font,\r\n _weight: weight\r\n })\r\n cellObj._fontIndex = Fonts.length - 1\r\n }\r\n }\r\n }\r\n })\r\n rows.push(tr)\r\n })\r\n\r\n Table.TR = rows\r\n let Merges: any = []\r\n for (const key in e.config.merge) {\r\n const element = e.config.merge[key];\r\n Merges.push({\r\n _row1: element.r,\r\n _row2: element.r + element.rs - 1,\r\n _col1: element.c,\r\n _col2: element.c + element.cs - 1\r\n })\r\n\r\n }\r\n if (sheetTagInfo0.reportPageTargets) {\r\n let reportTargets = sheetTagInfo0?.reportPageTargets.find((target: any) => target.sheet == index)?.targets\r\n __text.reportTargets = reportTargets\r\n }\r\n __text.sheetIndex = e.index ? e.index : utilities.getUniqueCode()\r\n memos.push({\r\n _key: \"sheettag\",\r\n __text: JSON.stringify(__text)\r\n })\r\n let oriantation = \"portrait\"\r\n let paperMargin:any = {}\r\n if(e.config.printPage){\r\n if(e.config.printPage.marginTop){\r\n paperMargin._top = e.config.printPage.marginTop\r\n }\r\n if(e.config.printPage.marginRight){\r\n paperMargin._right = e.config.printPage.marginRight\r\n }\r\n if(e.config.printPage.marginBottom){\r\n paperMargin._bottom = e.config.printPage.marginBottom\r\n }\r\n if(e.config.printPage.marginLeft){\r\n paperMargin._left = e.config.printPage.marginLeft\r\n } \r\n oriantation = e.config.printPage.oriantation?e.config.printPage.oriantation:\"portrait\"\r\n }\r\n let DefaultTD: any = {\r\n TD: []\r\n };\r\n DefaultTD.TD.push({\r\n _fontIndex: \"0\",\r\n _textColor: \"#000000\",\r\n _transparent: \"true\",\r\n _leftBorder: \"0\",\r\n _topBorder: \"0\",\r\n _leftBorderColor: \"#ffffff\",\r\n _topBorderColor: \"#ffffff\",\r\n _decimal: \"2\",\r\n _align: \"center\",\r\n _vAlign: \"middle\",\r\n _isProtected: \"false\",\r\n _isThousandSeparat: \"true\",\r\n _datatype: \"0\",\r\n _isRound: \"true\",\r\n _isPrint: \"true\"\r\n })\r\n jsonObj.Report.WorkSheet.push({\r\n _name: e.name,\r\n Fonts: {\r\n Font: Fonts\r\n },\r\n Properties: {\r\n DefaultTD: DefaultTD,\r\n },\r\n Table: Table,\r\n Merges: {\r\n Range: Merges\r\n },\r\n memos: {\r\n memo: memos\r\n },\r\n PrintPage:{\r\n Paper:{\r\n _oriantation:oriantation,\r\n Margin:paperMargin\r\n },\r\n Page:{\r\n _align:\"center\",\r\n _vAlign:\"middle\",\r\n _isIgnoreValidBorder:\"true\"\r\n }\r\n }\r\n })\r\n })\r\n let memo: any = {}\r\n if (sheetTagInfo0?.formulaInfo) {\r\n memo.formulaInfo = sheetTagInfo0.formulaInfo\r\n }\r\n if (sheetTagInfo0?.callbackInfo) {\r\n memo.callbackInfo = sheetTagInfo0.callbackInfo\r\n }\r\n if (sheetTagInfo0?.fieldMappings) {\r\n memo.fieldMappings = sheetTagInfo0.fieldMappings\r\n }\r\n jsonObj.memos.memo = [\r\n {\r\n _key: \"reportGS\",\r\n __text: JSON.stringify(memo)\r\n }\r\n ]\r\n let x2js = new X2JS();\r\n let xml = x2js.js2xml(jsonObj)\r\n\r\n xml = `<?xml version=\"1.0\" encoding=\"UTF-8\" ?>${xml}`\r\n console.log(xml)\r\n return xml\r\n }\r\n\r\n rgbToHex(rgb: any) {\r\n try {\r\n const [r, g, b] = rgb.match(/\\d+/g).map((x: any) => parseInt(x)); // 提取RGB值并转换为整数\r\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); // 转换为十六进制并去除开头的'0x'\r\n return `#${hex}`; // 返回格式为#RRGGBB的十六进制颜色值\r\n } catch (error) {\r\n return null\r\n }\r\n }\r\n\r\n getBorderNum(type: string) {\r\n let borderNumber = 0;\r\n let borderType: any = {\r\n \"0\": \"none\",\r\n \"1\": \"Thin\",\r\n \"2\": \"Hair\",\r\n \"3\": \"Dotted\",\r\n \"4\": \"Dashed\",\r\n \"5\": \"DashDot\",\r\n \"6\": \"DashDotDot\",\r\n \"7\": \"Double\",\r\n \"8\": \"Medium\",\r\n \"9\": \"MediumDashed\",\r\n \"10\": \"MediumDashDot\",\r\n \"11\": \"MediumDashDotDot\",\r\n \"12\": \"SlantedDashDot\",\r\n \"13\": \"Thick\"\r\n };\r\n type = borderType[type];\r\n if (type.indexOf(\"Medium\") > -1) {\r\n borderNumber = 2;\r\n }\r\n else if (type == \"Thick\") {\r\n borderNumber = 3;\r\n }else if (type == \"Thin\") {\r\n borderNumber = 1;\r\n }else if (type == \"none\") {\r\n borderNumber = 0;\r\n }else {\r\n borderNumber = 1;\r\n }\r\n return borderNumber\r\n }\r\n\r\n}\r\n"],"names":["DateHelper","_proto","prototype","add","date","value","unit","moment","toDate","subtract","startOf","unitOfTime","endOf","format","diff","b","precise","getWeekDay","Array","weekday","base64EncodeChars","base64DecodeChars","StringHelper","encodeToBase64","str","utilities","isNull","out","i","len","c1","c2","c3","length","charCodeAt","charAt","decodeBase64","c4","String","fromCharCode","utf16To8","c","utf8To16","char2","char3","toString","toMoment","convertCurrency","integerNum","decimalNum","parts","cnNums","cnIntRadice","cnIntUnits","cnDecUnits","chineseStr","money","parseFloat","indexOf","split","substring","parseInt","zeroCount","IntLen","n","p","q","m","decLen","Number","hiddenIDCardNum","replace","hiddenTelNum","leftPad","count","pad","nlen","str1","encryptAES","key","encKey","CryptoJs","enc","Utf8","parse","srcs","AES","encrypt","mode","ECB","padding","Pkcs7","error","decryptAES","decrypt","stringify","ArrayHelper","getTreeSelectTitleBaseOnVals","data","val","array","_this","forEach","option","includes","push","title","children","parseIViewOptions","source","text","map","e","Utilities","dateHelper","this","stringHelper","arrayHelper","obj","getValueNotNull","defaultValue","getUniqueCode","prefix","Guid","create","getCurrentDate","dateTime","Date","getMoment","parseApiResult","apiResult","code","issucess","msg","result","deepCopy","fromJS","toJS","getMilestone","milestone","s_arr","s_Klm","match","s_LM","_unused","debounce","fn","timerout","_arguments","arguments","debounceTimer","clearTimeout","Promise","resolve","setTimeout","apply","slice","call","then","_fn","reject","adaptDesignSize","$value","largeBreakpoint","largeDesignWidth","scaleFactor","window","innerWidth","unitMatch","numericValue","isNaN","getSerialNumber","$B","Object","npapi","ppapi","chrome_install_apitype","version","sver","agnt","navigator","userAgent","toLowerCase","type","off","mimeTypes","substr","is64","s","appVersion","NewBrowserObj","ffunc","af","funcname","para","postMessageAndAwaitResponse","func","console","TagModel","bindname","bindtype","tableId","indexnum","looptype","xcount","xstep","ycount","ystep","tcount","tstep","row","col","sheetindex","ispage","isChart","tag","isOtherTag","otherTagType","bindTargetId","TagGroupModel","items","head","foot","tables","pager","SheetTag","orgindex","totalpage","currentpage","index","typenames","trialSheetIndex","trialId","taskId","sortindex","freeze","object","oc","undefined","MIME_TYPE","HTML","isHTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","NAMESPACE","uri","SVG","XML","XMLNS","target","TypeError","hasOwnProperty","list","predicate","ac","find","item","conventions","notEmptyString","input","orderedSetReducer","current","element","toOrderedSet","filter","splitOnASCIIWhitespace","keys","reduce","copy","src","dest","_extends","Class","Super","pt","t","constructor","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","HIERARCHY_REQUEST_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","NOT_FOUND_ERR","NOT_SUPPORTED_ERR","INUSE_ATTRIBUTE_ERR","DOMException","message","Error","captureStackTrace","NodeList","LiveNodeList","node","refresh","_node","_refresh","_updateLiveList","inc","_inc","ownerDocument","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","el","newAttr","oldAttr","ownerElement","doc","_onRemoveAttribute","namespaceURI","_nsMap","localName","_onAddAttribute","_removeNamedNode","attr","tagName","lastIndex","DOMImplementation","Node","_xmlEncoder","_visitNode","callback","firstChild","nextSibling","Document","remove","_onUpdateChild","newChild","cs","childNodes","child","_removeChild","parentNode","previous","previousSibling","next","lastChild","isDocTypeNode","nodeType","isElementNode","isTextNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","assertPreInsertionValidityInDocument","parent","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","_insertBefore","_inDocumentAssertion","hasValidParentNodeType","hasInsertableNodeType","assertPreInsertionValidity1to5","cp","removeChild","newFirst","newLast","pre","Element","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","XMLSerializer","nodeSerializeToString","isHtml","nodeFilter","buf","refNode","documentElement","lookupPrefix","visibleNamespaces","namespace","serializeToString","join","needNamespaceDefine","ns","addSerializedAttribute","qualifiedName","attrs","attributes","nodeName","prefixedNodeName","defaultNS","ai","name","nsi","test","pubid","publicId","sysid","systemId","sub","internalSubset","importNode","deep","node2","cloneNode","appendChild","v","attrs2","_ownerElement","setAttributeNode","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","getNamedItem","setNamedItem","setNamedItemNS","getNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","createDocument","doctype","implementation","root","createElementNS","createDocumentType","nodeValue","insertBefore","refChild","replaceChild","oldChild","hasChildNodes","normalize","appendData","isSupported","hasAttributes","lookupNamespaceURI","isDefaultNamespace","importedNode","getElementById","id","rtv","getAttribute","getElementsByClassName","classNames","classNamesSet","base","nodeClassNames","matches","nodeClassNamesSet","every","createElement","createDocumentFragment","createTextNode","createComment","createCDATASection","createProcessingInstruction","createAttribute","specified","createEntityReference","pl","createAttributeNS","getElementsByTagName","hasAttribute","getAttributeNode","setAttribute","removeAttribute","removeAttributeNode","_appendSingleChild","setAttributeNodeNS","removeAttributeNS","old","getAttributeNodeNS","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByTagNameNS","substringData","offset","insertData","replaceData","deleteData","start","end","splitText","newText","newNode","defineProperty","getTextContent","get","set","require$$0","exports","XML_ENTITIES","amp","apos","gt","lt","quot","HTML_ENTITIES","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","ast","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bottom","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","check","checkmark","Chi","chi","cir","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","COPY","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","dd","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","div","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","ee","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","elinters","ell","els","elsdot","Emacr","emacr","empty","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","equals","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","ETH","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","gap","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gl","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","ii","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","image","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","in","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","it","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lg","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","Map","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","ne","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","num","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","or","orarr","ord","order","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","parallel","parsim","parsl","part","PartialD","Pcy","pcy","percnt","period","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","phone","Pi","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","pound","Pr","pr","prap","prcue","prE","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","prop","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","race","Racute","racute","radic","raemptyv","Rang","rang","rangd","range","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","rect","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","Rsh","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","entityMap","nameStartChar","nameChar","RegExp","tagNamePattern","ParseError","locator","XMLReader","copyLocator","f","lineNumber","columnNumber","parseElementStartPart","currentNSMap","entityReplacer","errorHandler","addAttribute","qname","startIndex","attributeNames","fatalError","addValue","attrName","warning","setTagName","closed","appendElement","domBuilder","localNSMap","a","qName","nsp","nsPrefix","_copy","startPrefixMapping","startElement","endElement","endPrefixMapping","parseHtmlSpecialContent","elStartEnd","elEndStart","characters","fixSelfClosed","closeMap","pos","lastIndexOf","parseDCC","comment","startCDATA","endCDATA","matchs","exec","lastMatch","startDTD","endDTD","parseInstruction","processingInstruction","ElementAttributes","defaultNSMap","startDocument","defaultNSMapCopy","k","appendText","xt","position","lineEnd","linePattern","lineStart","parseStack","tagStart","currentElement","config","pop","endMatch","locator2","Math","max","endDocument","getLocalName","getLocator","getQName","getURI","getValue","dom","normalizeLineEndings","DOMParser","options","DOMHandler","cdata","_locator","l","_toString","chars","java","hander","parseFromString","mimeType","sax","xmlns","entities","setDocumentLocator","errorImpl","isCallback","Function","build","buildErrorHandler","xml","documentURI","ins","ignorableWhitespace","ch","charNode","skippedEntity","comm","impl","dt","warn","factory","CustomDOMParser","getDomNodeLocalName","domNode","baseName","escapeXmlChars","ensureProperArrayAccessForm","childName","elementPath","arrayAccessForm","arrayAccessFormPaths","arrayPath","xmlDateTimeToDate","bits","d","secondBits","setHours","setMilliseconds","offsetMinutes","setMinutes","getMinutes","getTimezoneOffset","UTC","getFullYear","getMonth","getDate","getHours","getSeconds","getMilliseconds","deserializeDomChildren","parentPath","rootElement","ignoreRoot","deserializeRootElementChildren","nodeChildren","iChild","__cnt","iAttribute","attribute","adjustedValue","iConverter","attributeConverters","converter","convert","attributePrefix","namespacePrefix","__prefix","__text","escapeMode","stripWhitespaces","trim","fullPath","datetimeAccessFormPaths","pathWithoutTextNode","candidatePath","convertToDateIfRequired","__cdata","keepText","emptyNodeForm","skipEmptyTextNodesForObj","keepCData","enableToStringFunc","deserializeElementChildren","serializeStartTag","jsObject","elementName","selfClosing","resultStr","attributeName","attributeValue","useDoubleQuotes","serializeEndTag","isSpecialProperty","jsonObj","propertyName","suffix","getDataElementCount","getDataAttributeNames","names","serializeTextNodeContents","textNode","serializeComplexTextNodeContents","serializeJavaScriptObject","jsAttributeFilter","jsAttributeConverter","selfClosingElements","elementArray","serializeArray","jsDateUTC","toUTCString","toISOString","serializeJavaScriptObjectChildren","parseXml","parser","xmldomOptions","parsererrorNS","ActiveXObject","document","all","addEventListener","err","async","loadXML","number","r","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","toFixed","initRequiredPolyfills","asArray","toXmlDateTime","asDateTime","xml2dom","dom2js","js2dom","js2xml","xml2js","getVersion","module","X2JS","SupcanReport","AF","AFId","replaceAll","DomId","suReport","reportFile","signImageHeight","lastRowHeight","TagData","TagGroupData","isInstall","init","containerId","eventCallback","toolsStr","OnReportReady","BindReportEvent","reportId","supcanStr","ctlType","height","typeid","host","location","SupcanPath","arrScript","href","zipurl","cookie","log","bldStr","innerHTML","funcStr","fullCode","script","ex","body","addScript","insertReportToContainer","ReportReady","ReportEvent","event","p1","p2","p3","p4","xmlPath","Blur","GetAllTagData","getAllCellTagData","u","GetTagDataBySheetIndex","sheetIndex","getCellTagDataBysheetTagIndex","convertToXLSX","fileName","convertToXML","setZoom","z","setFullScreen","getXmlStr","getSheetXmlStr","setColWidth","colIndex","sheetHandle","getColWidthByCellName","cellName","getColWidth","setRowHeight","rowIndex","getRowHeight","getWorksheets","getCurrentWorksheet","getCurrentSheetHandle","getHandle","setCurrentWorksheet","sheetId","SetRedrawAble","grayWindow","commandStr","isVisibility","parentElement","style","visibility","getRows","getCols","deleteRows","startRowIndex","rowCount","deleteCols","startColIndex","isRowHide","isColHide","showHideRow","isHide","showHideCol","toExcelIndex","columnName","toUpperCase","stringToIndex","pow","charcode","clearEmptyRow","suReportSheetCount","deleteRowArray","j","flag","_i","_deleteRowArray","clearEmptyCol","colCount","deleteColArray","_i2","_deleteColArray","getCellProp","getCellProp2","SetCellProp","strHandle","SetCustomCellProp","setCellFont2","alias","setCellFont","getCellFont","getCellFont2","importReport","exportReport","WorkSheets","isReturnContent","exportReportToExcel","exportReportToExcel2","filename","filePathDir","exportReportToPDF","exportReportToPDF2","exportAllPdf","sheetlen","hSheets","zSheets","getPrintProp","setSheetHide","xmlstr","filePathDir2","printView","print","WorkSheet","isOpenSysDialog","printAll","printCurrent","setPrintOriantation","isPortrait","setPrintSize","paperNumber","setPrintMargin","left","right","getCellName","sheethandle","getCellRow","getCellCol","getCurrentCell","getCurrentCells","getCellData","getCellValue","setSelectedCellsValue","cells","arr","elArr","startRow","startCol","endRow","endCol","rIndex","cIndex","setCellData","setCellValue","setCellValueByAlias","setCellCanEdit","cell","addEditAbleOnly","setCellAreaCanEdit","cellArea","setCellCanEditByAlias","findCell","attributeVale","findCell2","searchText","_step","rowAndCols","_iterator","_createForOfIteratorHelperLoose","done","rowAndCol","convertRowAndCol","strRowCol","colA","getCellText","getWorksheetName","setWorksheetName","setSheetName","sheetName","setCurrentSheetName","setSheetShow","sheetNames","getHideWorkSheet","deleteWorksheet","exchangeWorksheet","newSheetIndex","appendWorksheet","appendWorksheetByIndex","reportXml","sheetNum","appendWorksheetByName","setSheetProp","setMemo","setReportProp","getSheetProp","getMemo","getMemos","swkrntpomzqa","addUnEditAbleOnly","clearLimit","getCellEditAble","subscribeEvent","getCellTag","cellTag","JSON","setCellTag","GetSheetTag","handle","sheettag","SetSheetTag","getCurrentSheetTag","setCurrentSheetTag","getSheetTag","urlImage2Base64","url","tmpImage","Image","onload","canvas","context","getContext","width","drawImage","base64Str","toDataURL","addImageInputElement","x","y","tWidth","tHeight","aliasName","imagebase64","SetAllSheetDate","isShowSignDate","testItemTime","businessId","auditType","isSeparatesupervisorExamineDate","sheetLen","sheetTag","监理审核日期","rowLen","colLen","sheetTagIndex","getSheetAllTagData","strHanedle","clearSelectedAreaTag","cellsStr","rowsStr","colsStr","rows","cols","getTag","addWorksheet","getPrintPages","importExcelFile","file","getFileURL","autoFitPaperSize","size","setAllSheetA4Size","setAllSheetPrintSize","margin","isA4","aWidth","aHeight","pxWidth","getPxWidth","pxHeight","getPxHeight","sheetCount","oriantation","getPrintOriantation","setSheetA4Size","setSheetPrintSize","sheetIndexs","minPx","maxPx","_this2","a4Width","getA4PxWidth","a4Height","getA4PxHeight","cmToPx","sheetWidth","getSheetWidth","sheetHeight","getSheetHeight","countRow","countCol","dh","h2","GetRowOffset","h","dw","w2","GetColOffset","w","minPx10","maxPx10","getDPI","cm","isWDPI","dpis","arrDPI","screen","deviceXDPI","deviceYDPI","tmpNode","cssText","offsetWidth","offsetHeight","strHanle","strOriantation","alert","setToolbarItemStatus","functionIndex","functionName","status","insertRows","after","masks_Get","mask_Get","mask_Add","dataType","codeStr","mask_Delete","selectCell","endRowIndex","endColIndex","copyRows","pasteRows","getGraphics","deleteGraphics","insertInput","strhandle","insertCustomInput","createQRcode","setCellQRcode","setCellPicture","insertPicture","insertImage","imageUrl","copySheet","sheetXmlStr","copySheet2","clearSheet","insertSheet","sheetXml","newSheetName","indextemp","getSheetIndexBySheetName","getMergedCells","merge","row1","col1","row2","col2","mergeSameCol","mergeSameRow","mergeSame","addMenu","content","menuBeforePopup_Lock","menuBeforePopup_UnLock","getCellStatus","addFont","fontname","setUnDragAbleAtRuntime","sheets","tagNames","_step2","_iterator2","tmpNameStr","_step3","_iterator3","tmpName","getSelectionRange","rowRange","colRange","columnLetterToNumber","letters","res","_range$split","startCell","endCell","jsonToxmlSupcan","jsonres","Report","Fonts","Table","Col","TR","DefaultTD","TD","_fontIndex","_textColor","_transparent","_leftBorder","_topBorder","_leftBorderColor","_topBorderColor","_decimal","_align","_vAlign","_isProtected","_isThousandSeparat","_datatype","_isRound","_isPrint","rowid","columnid","_width","columnlen","_cell$flag","_cell$ct","ct","cellObj","_tag","font","fs","weight","bl","ff","_faceName","_height","_weight","findIndex","_charSet","_pitchAndFamily","_quality","_outPrecision","_clipPrecision","_name","Properties","BackGround","_bgColor","Other","_isShowZero","_isRefOri","_Ellipsis","_LineDistance","_isRowHeightAutoExtendAble","Font","Merges","Range","PrintPage","jsonToXml","_this3","sheetTagInfo0","memos","memo","borderInfo","rowlen","tr","_sequence","_cell$flag3","_cell$flag2","sheetTagInfo","sheetType","_cell$ct2","_col","bg","color","rgbToHex","cellStyle","row_index","col_index","_cellStyle$value$l$co","_cellStyle$value$t$co","_cellStyle$value$b$co","_cellStyle$value$r$co","getBorderNum","_bottomBorder","_bottomBorderColor","_rightBorder","_rightBorderColor","_cellStyleR$color","_cellStyleT$color","_cellStyleB$color","cellStyle2s","column","cellStyleAll","borderType","cellStyleL","cellStyleR","cellStyleT","cellStyleB","_cellStyleAll$color","_cellStyleAll$color2","_cellStyleAll$color3","_cellStyleAll$color4","border","_cellStyleL$color","ht","vt","fc","_row1","_row2","rs","_col1","_col2","reportPageTargets","_sheetTagInfo0$report","reportTargets","sheet","targets","_key","paperMargin","printPage","marginTop","_top","marginRight","_right","marginBottom","_bottom","marginLeft","_left","Paper","_oriantation","Margin","Page","_isIgnoreValidBorder","formulaInfo","callbackInfo","fieldMappings","rgb","_rgb$match$map"],"mappings":"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"}
|