UNPKG

@magic-xpa/utils

Version:

magic utils package

141 lines (140 loc) • 15.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { NString, StringBuilder } from "@magic-xpa/mscorelib"; import { SEQ_2_STR, StrUtil } from "./StrUtil"; var ChoiceUtils = /** @class */ (function () { function ChoiceUtils() { } /// <summary> /// init the display Value from string /// </summary> /// <param name = "choiceDispStr">the all substring separated with comma. /// The behavior: /// a. when have "\" before char a-z need to ignore the \ put the a-z char /// b. when "\," -> "," /// c. when "\-" -> "-" /// d. when "\\" -> "\" /// e. when "\\\\" -> "\\" /// the display can be all string. and we don't need to check validation according to the dataType(as we do in Link /// </param> /** * @param {?} choiceDispStr * @param {?} removeAccelerators * @param {?} shouldMakePrintable * @param {?} shouldTrimOptions * @return {?} */ ChoiceUtils.GetDisplayListFromString = /** * @param {?} choiceDispStr * @param {?} removeAccelerators * @param {?} shouldMakePrintable * @param {?} shouldTrimOptions * @return {?} */ function (choiceDispStr, removeAccelerators, shouldMakePrintable, shouldTrimOptions) { /** @type {?} */ var fromHelp = new Array("\\\\", "\\-", "\\,"); /** @type {?} */ var toHelp = new Array("XX", "XX", "XX"); choiceDispStr = NString.TrimEnd(choiceDispStr); /** @type {?} */ var helpStrDisp = StrUtil.searchAndReplace(choiceDispStr, fromHelp, toHelp); /** @type {?} */ var sTok = StrUtil.tokenize(helpStrDisp, ","); /** @type {?} */ var size = (helpStrDisp !== "" ? sTok.length : 0); /** @type {?} */ var tokenBuffer; /** @type {?} */ var helpTokenDisp; /** @type {?} */ var token; /** @type {?} */ var currPosDisp = 0; /** @type {?} */ var nextPosDisp = 0; /** @type {?} */ var tokenPosDisp; /** @type {?} */ var i = 0; /** @type {?} */ var choiceDisp = new Array(size); for (; i < size; i++) { nextPosDisp = currPosDisp; nextPosDisp = helpStrDisp.indexOf(',', nextPosDisp); if (nextPosDisp === currPosDisp) token = helpTokenDisp = ""; else if (nextPosDisp === -1) { token = choiceDispStr.substr(currPosDisp); helpTokenDisp = helpStrDisp.substr(currPosDisp); } else { token = choiceDispStr.substr(currPosDisp, (nextPosDisp) - (currPosDisp)); helpTokenDisp = helpStrDisp.substr(currPosDisp, (nextPosDisp) - (currPosDisp)); } currPosDisp = nextPosDisp + 1; if (token != null) { token = StrUtil.ltrim(token); if (removeAccelerators) token = ChoiceUtils.RemoveAcclCharFromOptions(new StringBuilder(token)); helpTokenDisp = StrUtil.ltrim(helpTokenDisp); if (removeAccelerators) helpTokenDisp = ChoiceUtils.RemoveAcclCharFromOptions(new StringBuilder(helpTokenDisp)); } if (helpTokenDisp.indexOf('\\') >= 0) { tokenBuffer = new StringBuilder(); for (; tokenPosDisp < helpTokenDisp.length; tokenPosDisp++) if (helpTokenDisp[tokenPosDisp] !== '\\') tokenBuffer.Append(token[tokenPosDisp]); else if (tokenPosDisp === helpTokenDisp.length - 1) tokenBuffer.Append(' '); token = tokenBuffer.ToString(); } if (shouldMakePrintable) { token = StrUtil.makePrintableTokens(token, SEQ_2_STR); if (shouldTrimOptions) { /** @type {?} */ var temp = NString.TrimEnd(token); if (temp.length === 0) choiceDisp[i] = " "; else choiceDisp[i] = NString.TrimEnd(token); } else choiceDisp[i] = token; } else choiceDisp[i] = token; } return choiceDisp; }; /** * @param {?} OptionStr * @return {?} */ ChoiceUtils.RemoveAcclCharFromOptions = /** * @param {?} OptionStr * @return {?} */ function (OptionStr) { /** @type {?} */ var i = 0; if (OptionStr != null) { for (; i < OptionStr.Length;) { if (OptionStr.get_Item(i) === '&') { if (i < OptionStr.Length - 1 && OptionStr.get_Item(i + 1) === ('&')) i++; OptionStr = OptionStr.Remove(i, 1); } else i++; } } return (OptionStr != null ? OptionStr.ToString() : null); }; return ChoiceUtils; }()); export { ChoiceUtils }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hvaWNlVXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFnaWMteHBhL3V0aWxzLyIsInNvdXJjZXMiOlsic3JjL0Nob2ljZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRTdDLElBQUE7OztJQUVFLGFBQWE7SUFDYix3Q0FBd0M7SUFDeEMsY0FBYztJQUNkLHlFQUF5RTtJQUN6RSxtQkFBbUI7SUFDbkIsNEVBQTRFO0lBQzVFLHlCQUF5QjtJQUN6Qix5QkFBeUI7SUFDekIseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixxSEFBcUg7SUFDckgsWUFBWTs7Ozs7Ozs7SUFDTCxvQ0FBd0I7Ozs7Ozs7SUFBL0IsVUFBZ0MsYUFBcUIsRUFBRSxrQkFBMkIsRUFBRSxtQkFBNEIsRUFBRSxpQkFBMEI7O1FBQzFJLElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7O1FBQy9DLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7O1FBQy9DLElBQUksV0FBVyxHQUFXLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztRQUNwRixJQUFJLElBQUksR0FBYSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7UUFDeEQsSUFBSSxJQUFJLEdBQVcsQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMs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QUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3BDO2dCQUNELElBQUk7b0JBQUMsQ0FBQyxFQUFFLENBQUM7YUFDVjtTQUNGO1FBQ0QsTUFBTSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxRDtzQkF2Rkg7SUF3RkMsQ0FBQTtBQXJGRCx1QkFxRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1NFUV8yX1NUUiwgU3RyVXRpbH0gZnJvbSBcIi4vU3RyVXRpbFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENob2ljZVV0aWxzIHtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXQgdGhlIGRpc3BsYXkgVmFsdWUgZnJvbSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hvaWNlRGlzcFN0clwiPnRoZSBhbGwgc3Vic3RyaW5nIHNlcGFyYXRlZCB3aXRoIGNvbW1hLlxyXG4gIC8vLyAgIFRoZSBiZWhhdmlvcjpcclxuICAvLy8gICBhLiB3aGVuIGhhdmUgXCJcXFwiIGJlZm9yZSBjaGFyIGEteiBuZWVkIHRvIGlnbm9yZSB0aGUgXFwgcHV0IHRoZSBhLXogY2hhclxyXG4gIC8vLyAgIGIuIHdoZW4gXCJcXCxcIiAtPiBcIixcIlxyXG4gIC8vLyAgIGMuIHdoZW4gXCJcXC1cIiAtPiBcIi1cIlxyXG4gIC8vLyAgIGQuIHdoZW4gXCJcXFxcXCIgLT4gXCJcXFwiXHJcbiAgLy8vICAgZS4gd2hlbiBcIlxcXFxcXFxcXCIgLT4gXCJcXFxcXCJcclxuICAvLy8gICB0aGUgZGlzcGxheSBjYW4gYmUgYWxsIHN0cmluZy4gYW5kIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdmFsaWRhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlKGFzIHdlIGRvIGluIExpbmtcclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgR2V0RGlzcGxheUxpc3RGcm9tU3RyaW5nKGNob2ljZURpc3BTdHI6IHN0cmluZywgcmVtb3ZlQWNjZWxlcmF0b3JzOiBib29sZWFuLCBzaG91bGRNYWtlUHJpbnRhYmxlOiBib29sZWFuLCBzaG91bGRUcmltT3B0aW9uczogYm9vbGVhbik6IHN0cmluZ1tdIHtcclxuICAgIGxldCBmcm9tSGVscCA9IG5ldyBBcnJheShcIlxcXFxcXFxcXCIsIFwiXFxcXC1cIiwgXCJcXFxcLFwiKTtcclxuICAgIGxldCB0b0hlbHAgPSBuZXcgQXJyYXkoXCJYWFwiLCBcIlhYXCIsIFwiWFhcIik7XHJcbiAgICBjaG9pY2VEaXNwU3RyID0gTlN0cmluZy5UcmltRW5kKGNob2ljZURpc3BTdHIpO1xyXG4gICAgbGV0IGhlbHBTdHJEaXNwOiBzdHJpbmcgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2UoY2hvaWNlRGlzcFN0ciwgZnJvbUhlbHAsIHRvSGVscCk7XHJcbiAgICBsZXQgc1RvazogU3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKGhlbHBTdHJEaXNwLCBcIixcIik7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gKGhlbHBTdHJEaXNwICE9PSBcIlwiID8gc1Rvay5sZW5ndGggOiAwKTtcclxuICAgIGxldCB0b2tlbkJ1ZmZlcjogU3RyaW5nQnVpbGRlcjtcclxuICAgIGxldCBoZWxwVG9rZW5EaXNwOiBzdHJpbmcsIHRva2VuOiBzdHJpbmc7XHJcbiAgICBsZXQgY3VyclBvc0Rpc3A6IG51bWJlciA9IDAsIG5leHRQb3NEaXNwID0gMCwgdG9rZW5Qb3NEaXNwLCBpID0gMDtcclxuICAgIGxldCBjaG9pY2VEaXNwID0gbmV3IEFycmF5KHNpemUpO1xyXG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgbmV4dFBvc0Rpc3AgPSBjdXJyUG9zRGlzcDtcclxuICAgICAgbmV4dFBvc0Rpc3AgPSBoZWxwU3RyRGlzcC5pbmRleE9mKCcsJywgbmV4dFBvc0Rpc3ApO1xyXG4gICAgICBpZiAobmV4dFBvc0Rpc3AgPT09IGN1cnJQb3NEaXNwKVxyXG4gICAgICAgIHRva2VuID0gaGVscFRva2VuRGlzcCA9IFwiXCI7XHJcbiAgICAgIGVsc2UgaWYgKG5leHRQb3NEaXNwID09PSAtMSkge1xyXG4gICAgICAgIHRva2VuID0gY2hvaWNlRGlzcFN0ci5zdWJzdHIoY3VyclBvc0Rpc3ApO1xyXG4gICAgICAgIGhlbHBUb2tlbkRpc3AgPSBoZWxwU3RyRGlzcC5zdWJzdHIoY3VyclBvc0Rpc3ApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRva2VuID0gY2hvaWNlRGlzcFN0ci5zdWJzdHIoY3VyclBvc0Rpc3AsIChuZXh0UG9zRGlzcCkgLSAoY3VyclBvc0Rpc3ApKTtcclxuICAgICAgICBoZWxwVG9rZW5EaXNwID0gaGVscFN0ckRpc3Auc3Vic3RyKGN1cnJQb3NEaXNwLCAobmV4dFBvc0Rpc3ApIC0gKGN1cnJQb3NEaXNwKSk7XHJcbiAgICAgIH1cclxuICAgICAgY3VyclBvc0Rpc3AgPSBuZXh0UG9zRGlzcCArIDE7XHJcbiAgICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XHJcbiAgICAgICAgdG9rZW4gPSBTdHJVdGlsLmx0cmltKHRva2VuKTtcclxuICAgICAgICBpZiAocmVtb3ZlQWNjZWxlcmF0b3JzKVxyXG4gICAgICAgICAgdG9rZW4gPSBDaG9pY2VVdGlscy5SZW1vdmVBY2NsQ2hhckZyb21PcHRpb25zKG5ldyBTdHJpbmdCdWlsZGVyKHRva2VuKSk7XHJcbiAgICAgICAgaGVscFRva2VuRGlzcCA9IFN0clV0aWwubHRyaW0oaGVscFRva2VuRGlzcCk7XHJcbiAgICAgICAgaWYgKHJlbW92ZUFjY2VsZXJhdG9ycylcclxuICAgICAgICAgIGhlbHBUb2tlbkRpc3AgPSBDaG9pY2VVdGlscy5SZW1vdmVBY2NsQ2hhckZyb21PcHRpb25zKG5ldyBTdHJpbmdCdWlsZGVyKGhlbHBUb2tlbkRpc3ApKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGVscFRva2VuRGlzcC5pbmRleE9mKCdcXFxcJykgPj0gMCkge1xyXG4gICAgICAgIHRva2VuQnVmZmVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgICBmb3IgKDsgdG9rZW5Qb3NEaXNwIDwgaGVscFRva2VuRGlzcC5sZW5ndGg7IHRva2VuUG9zRGlzcCsrKVxyXG4gICAgICAgICAgaWYgKGhlbHBUb2tlbkRpc3BbdG9rZW5Qb3NEaXNwXSAhPT0gJ1xcXFwnKVxyXG4gICAgICAgICAgICB0b2tlbkJ1ZmZlci5BcHBlbmQodG9rZW5bdG9rZW5Qb3NEaXNwXSk7XHJcbiAgICAgICAgICBlbHNlIGlmICh0b2tlblBvc0Rpc3AgPT09IGhlbHBUb2tlbkRpc3AubGVuZ3RoIC0gMSlcclxuICAgICAgICAgICAgdG9rZW5CdWZmZXIuQXBwZW5kKCcgJyk7XHJcbiAgICAgICAgdG9rZW4gPSB0b2tlbkJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzaG91bGRNYWtlUHJpbnRhYmxlKSB7XHJcbiAgICAgICAgdG9rZW4gPSBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnModG9rZW4sIFNFUV8yX1NUUik7XHJcbiAgICAgICAgaWYgKHNob3VsZFRyaW1PcHRpb25zKSB7XHJcbiAgICAgICAgICBsZXQgdGVtcDogc3RyaW5nID0gTlN0cmluZy5UcmltRW5kKHRva2VuKTtcclxuICAgICAgICAgIGlmICh0ZW1wLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgY2hvaWNlRGlzcFtpXSA9IFwiIFwiO1xyXG4gICAgICAgICAgZWxzZSBjaG9pY2VEaXNwW2ldID0gTlN0cmluZy5UcmltRW5kKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBjaG9pY2VEaXNwW2ldID0gdG9rZW47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBjaG9pY2VEaXNwW2ldID0gdG9rZW47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hvaWNlRGlzcDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBSZW1vdmVBY2NsQ2hhckZyb21PcHRpb25zKE9wdGlvblN0cjogU3RyaW5nQnVpbGRlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuICAgIGlmIChPcHRpb25TdHIgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKDsgaSA8IE9wdGlvblN0ci5MZW5ndGg7KSB7XHJcbiAgICAgICAgaWYgKE9wdGlvblN0ci5nZXRfSXRlbShpKSA9PT0gJyYnKSB7XHJcbiAgICAgICAgICBpZiAoaSA8IE9wdGlvblN0ci5MZW5ndGggLSAxICYmIE9wdGlvblN0ci5nZXRfSXRlbShpICsgMSkgPT09ICgnJicpKVxyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICBPcHRpb25TdHIgPSBPcHRpb25TdHIuUmVtb3ZlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChPcHRpb25TdHIgIT0gbnVsbCA/IE9wdGlvblN0ci5Ub1N0cmluZygpIDogbnVsbCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==