@magic-xpa/utils
Version:
magic utils package
125 lines • 15 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";
export class 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 {?}
*/
static GetDisplayListFromString(choiceDispStr, removeAccelerators, shouldMakePrintable, shouldTrimOptions) {
/** @type {?} */
let fromHelp = new Array("\\\\", "\\-", "\\,");
/** @type {?} */
let toHelp = new Array("XX", "XX", "XX");
choiceDispStr = NString.TrimEnd(choiceDispStr);
/** @type {?} */
let helpStrDisp = StrUtil.searchAndReplace(choiceDispStr, fromHelp, toHelp);
/** @type {?} */
let sTok = StrUtil.tokenize(helpStrDisp, ",");
/** @type {?} */
let size = (helpStrDisp !== "" ? sTok.length : 0);
/** @type {?} */
let tokenBuffer;
/** @type {?} */
let helpTokenDisp;
/** @type {?} */
let token;
/** @type {?} */
let currPosDisp = 0;
/** @type {?} */
let nextPosDisp = 0;
/** @type {?} */
let tokenPosDisp;
/** @type {?} */
let i = 0;
/** @type {?} */
let 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 {?} */
let 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 {?}
*/
static RemoveAcclCharFromOptions(OptionStr) {
/** @type {?} */
let 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);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hvaWNlVXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFnaWMteHBhL3V0aWxzLyIsInNvdXJjZXMiOlsic3JjL0Nob2ljZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRTdDLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBY0osTUFBTSxDQUFDLHdCQUF3QixDQUFDLGFBQXFCLEVBQUUsa0JBQTJCLEVBQUUsbUJBQTRCLEVBQUUsaUJBQTBCOztZQUN0SSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7O1lBQzFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztRQUN4QyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQzs7WUFDM0MsV0FBVyxHQUFXLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQzs7WUFDL0UsSUFBSSxHQUFhLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQzs7WUFDbkQsSUFBSSxHQUFXLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUNyRCxXQUEwQjs7WUFDMUIsYUFBcUI7O1lBQUUsS0FBYTs7WUFDcEMsV0FBVyxHQUFXLENBQUM7O1lBQUUsV0FBVyxHQUFHLENBQUM7O1lBQUUsWUFBWTs7WUFBRSxDQUFDLEdBQUcsQ0FBQzs7WUFDN0QsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztRQUNoQyxHQUFHLENBQUMs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aW5nLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtTRVFfMl9TVFIsIFN0clV0aWx9IGZyb20gXCIuL1N0clV0aWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDaG9pY2VVdGlscyB7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbml0IHRoZSBkaXNwbGF5IFZhbHVlIGZyb20gc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNob2ljZURpc3BTdHJcIj50aGUgYWxsIHN1YnN0cmluZyBzZXBhcmF0ZWQgd2l0aCBjb21tYS5cclxuICAvLy8gICBUaGUgYmVoYXZpb3I6XHJcbiAgLy8vICAgYS4gd2hlbiBoYXZlIFwiXFxcIiBiZWZvcmUgY2hhciBhLXogbmVlZCB0byBpZ25vcmUgdGhlIFxcIHB1dCB0aGUgYS16IGNoYXJcclxuICAvLy8gICBiLiB3aGVuIFwiXFwsXCIgLT4gXCIsXCJcclxuICAvLy8gICBjLiB3aGVuIFwiXFwtXCIgLT4gXCItXCJcclxuICAvLy8gICBkLiB3aGVuIFwiXFxcXFwiIC0+IFwiXFxcIlxyXG4gIC8vLyAgIGUuIHdoZW4gXCJcXFxcXFxcXFwiIC0+IFwiXFxcXFwiXHJcbiAgLy8vICAgdGhlIGRpc3BsYXkgY2FuIGJlIGFsbCBzdHJpbmcuIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHZhbGlkYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBkYXRhVHlwZShhcyB3ZSBkbyBpbiBMaW5rXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIEdldERpc3BsYXlMaXN0RnJvbVN0cmluZyhjaG9pY2VEaXNwU3RyOiBzdHJpbmcsIHJlbW92ZUFjY2VsZXJhdG9yczogYm9vbGVhbiwgc2hvdWxkTWFrZVByaW50YWJsZTogYm9vbGVhbiwgc2hvdWxkVHJpbU9wdGlvbnM6IGJvb2xlYW4pOiBzdHJpbmdbXSB7XHJcbiAgICBsZXQgZnJvbUhlbHAgPSBuZXcgQXJyYXkoXCJcXFxcXFxcXFwiLCBcIlxcXFwtXCIsIFwiXFxcXCxcIik7XHJcbiAgICBsZXQgdG9IZWxwID0gbmV3IEFycmF5KFwiWFhcIiwgXCJYWFwiLCBcIlhYXCIpO1xyXG4gICAgY2hvaWNlRGlzcFN0ciA9IE5TdHJpbmcuVHJpbUVuZChjaG9pY2VEaXNwU3RyKTtcclxuICAgIGxldCBoZWxwU3RyRGlzcDogc3RyaW5nID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKGNob2ljZURpc3BTdHIsIGZyb21IZWxwLCB0b0hlbHApO1xyXG4gICAgbGV0IHNUb2s6IFN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShoZWxwU3RyRGlzcCwgXCIsXCIpO1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IChoZWxwU3RyRGlzcCAhPT0gXCJcIiA/IHNUb2subGVuZ3RoIDogMCk7XHJcbiAgICBsZXQgdG9rZW5CdWZmZXI6IFN0cmluZ0J1aWxkZXI7XHJcbiAgICBsZXQgaGVscFRva2VuRGlzcDogc3RyaW5nLCB0b2tlbjogc3RyaW5nO1xyXG4gICAgbGV0IGN1cnJQb3NEaXNwOiBudW1iZXIgPSAwLCBuZXh0UG9zRGlzcCA9IDAsIHRva2VuUG9zRGlzcCwgaSA9IDA7XHJcbiAgICBsZXQgY2hvaWNlRGlzcCA9IG5ldyBBcnJheShzaXplKTtcclxuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgIG5leHRQb3NEaXNwID0gY3VyclBvc0Rpc3A7XHJcbiAgICAgIG5leHRQb3NEaXNwID0gaGVscFN0ckRpc3AuaW5kZXhPZignLCcsIG5leHRQb3NEaXNwKTtcclxuICAgICAgaWYgKG5leHRQb3NEaXNwID09PSBjdXJyUG9zRGlzcClcclxuICAgICAgICB0b2tlbiA9IGhlbHBUb2tlbkRpc3AgPSBcIlwiO1xyXG4gICAgICBlbHNlIGlmIChuZXh0UG9zRGlzcCA9PT0gLTEpIHtcclxuICAgICAgICB0b2tlbiA9IGNob2ljZURpc3BTdHIuc3Vic3RyKGN1cnJQb3NEaXNwKTtcclxuICAgICAgICBoZWxwVG9rZW5EaXNwID0gaGVscFN0ckRpc3Auc3Vic3RyKGN1cnJQb3NEaXNwKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0b2tlbiA9IGNob2ljZURpc3BTdHIuc3Vic3RyKGN1cnJQb3NEaXNwLCAobmV4dFBvc0Rpc3ApIC0gKGN1cnJQb3NEaXNwKSk7XHJcbiAgICAgICAgaGVscFRva2VuRGlzcCA9IGhlbHBTdHJEaXNwLnN1YnN0cihjdXJyUG9zRGlzcCwgKG5leHRQb3NEaXNwKSAtIChjdXJyUG9zRGlzcCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJQb3NEaXNwID0gbmV4dFBvc0Rpc3AgKyAxO1xyXG4gICAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xyXG4gICAgICAgIHRva2VuID0gU3RyVXRpbC5sdHJpbSh0b2tlbik7XHJcbiAgICAgICAgaWYgKHJlbW92ZUFjY2VsZXJhdG9ycylcclxuICAgICAgICAgIHRva2VuID0gQ2hvaWNlVXRpbHMuUmVtb3ZlQWNjbENoYXJGcm9tT3B0aW9ucyhuZXcgU3RyaW5nQnVpbGRlcih0b2tlbikpO1xyXG4gICAgICAgIGhlbHBUb2tlbkRpc3AgPSBTdHJVdGlsLmx0cmltKGhlbHBUb2tlbkRpc3ApO1xyXG4gICAgICAgIGlmIChyZW1vdmVBY2NlbGVyYXRvcnMpXHJcbiAgICAgICAgICBoZWxwVG9rZW5EaXNwID0gQ2hvaWNlVXRpbHMuUmVtb3ZlQWNjbENoYXJGcm9tT3B0aW9ucyhuZXcgU3RyaW5nQnVpbGRlcihoZWxwVG9rZW5EaXNwKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhlbHBUb2tlbkRpc3AuaW5kZXhPZignXFxcXCcpID49IDApIHtcclxuICAgICAgICB0b2tlbkJ1ZmZlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgICAgZm9yICg7IHRva2VuUG9zRGlzcCA8IGhlbHBUb2tlbkRpc3AubGVuZ3RoOyB0b2tlblBvc0Rpc3ArKylcclxuICAgICAgICAgIGlmIChoZWxwVG9rZW5EaXNwW3Rva2VuUG9zRGlzcF0gIT09ICdcXFxcJylcclxuICAgICAgICAgICAgdG9rZW5CdWZmZXIuQXBwZW5kKHRva2VuW3Rva2VuUG9zRGlzcF0pO1xyXG4gICAgICAgICAgZWxzZSBpZiAodG9rZW5Qb3NEaXNwID09PSBoZWxwVG9rZW5EaXNwLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgICAgIHRva2VuQnVmZmVyLkFwcGVuZCgnICcpO1xyXG4gICAgICAgIHRva2VuID0gdG9rZW5CdWZmZXIuVG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hvdWxkTWFrZVByaW50YWJsZSkge1xyXG4gICAgICAgIHRva2VuID0gU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zKHRva2VuLCBTRVFfMl9TVFIpO1xyXG4gICAgICAgIGlmIChzaG91bGRUcmltT3B0aW9ucykge1xyXG4gICAgICAgICAgbGV0IHRlbXA6IHN0cmluZyA9IE5TdHJpbmcuVHJpbUVuZCh0b2tlbik7XHJcbiAgICAgICAgICBpZiAodGVtcC5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIGNob2ljZURpc3BbaV0gPSBcIiBcIjtcclxuICAgICAgICAgIGVsc2UgY2hvaWNlRGlzcFtpXSA9IE5TdHJpbmcuVHJpbUVuZCh0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgY2hvaWNlRGlzcFtpXSA9IHRva2VuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgY2hvaWNlRGlzcFtpXSA9IHRva2VuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNob2ljZURpc3A7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgUmVtb3ZlQWNjbENoYXJGcm9tT3B0aW9ucyhPcHRpb25TdHI6IFN0cmluZ0J1aWxkZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcbiAgICBpZiAoT3B0aW9uU3RyICE9IG51bGwpIHtcclxuICAgICAgZm9yICg7IGkgPCBPcHRpb25TdHIuTGVuZ3RoOykge1xyXG4gICAgICAgIGlmIChPcHRpb25TdHIuZ2V0X0l0ZW0oaSkgPT09ICcmJykge1xyXG4gICAgICAgICAgaWYgKGkgPCBPcHRpb25TdHIuTGVuZ3RoIC0gMSAmJiBPcHRpb25TdHIuZ2V0X0l0ZW0oaSArIDEpID09PSAoJyYnKSlcclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgT3B0aW9uU3RyID0gT3B0aW9uU3RyLlJlbW92ZShpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAoT3B0aW9uU3RyICE9IG51bGwgPyBPcHRpb25TdHIuVG9TdHJpbmcoKSA6IG51bGwpO1xyXG4gIH1cclxufVxyXG4iXX0=