@magic-xpa/utils
Version:
magic utils package
141 lines (140 loc) • 15.8 kB
JavaScript
/**
* @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==