UNPKG

@magic-xpa/utils

Version:

magic utils package

1,020 lines (1,019 loc) • 119 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Encoding, Hashtable, NChar, NNumber, Stack } from "@magic-xpa/mscorelib"; import { UtilStrByteMode } from "./UtilStrByteMode"; var Rtf_SYMBOL = /** @class */ (function () { /* index into property table if kwd == kwdProp */ /* index into destination table if kwd == kwdDest */ /* character to print if kwd == kwdChar */ function Rtf_SYMBOL(keyWord, kwd, idxInRgprop) { this.szKeyword = null; /* RTF keyword */ this.kwd = null; /* base action to take */ this.idxInRgprop = null; this.szKeyword = keyWord; this.kwd = kwd; this.idxInRgprop = idxInRgprop; } return Rtf_SYMBOL; }()); export { Rtf_SYMBOL }; if (false) { /** @type {?} */ Rtf_SYMBOL.prototype.szKeyword; /** @type {?} */ Rtf_SYMBOL.prototype.kwd; /** @type {?} */ Rtf_SYMBOL.prototype.idxInRgprop; } var Rtf_PROP = /** @class */ (function () { /* structure containing value */ function Rtf_PROP(actn, prop) { this.actn = null; /* size of value */ this.prop = null; this.actn = actn; this.prop = prop; } return Rtf_PROP; }()); export { Rtf_PROP }; if (false) { /** @type {?} */ Rtf_PROP.prototype.actn; /** @type {?} */ Rtf_PROP.prototype.prop; } var Rtf_StackSave = /** @class */ (function () { function Rtf_StackSave() { this.rds = null; this.ris = null; } return Rtf_StackSave; }()); if (false) { /** @type {?} */ Rtf_StackSave.prototype.rds; /** @type {?} */ Rtf_StackSave.prototype.ris; } /** @enum {number} */ var Rtf_KWD = { CHAR: 0, DEST: 1, PROP: 2, SPEC: 3, }; export { Rtf_KWD }; Rtf_KWD[Rtf_KWD.CHAR] = 'CHAR'; Rtf_KWD[Rtf_KWD.DEST] = 'DEST'; Rtf_KWD[Rtf_KWD.PROP] = 'PROP'; Rtf_KWD[Rtf_KWD.SPEC] = 'SPEC'; /** @enum {number} */ var Rtf_PROPTYPE = { CHP: 0, PAP: 1, SEP: 2, DOP: 3, }; export { Rtf_PROPTYPE }; Rtf_PROPTYPE[Rtf_PROPTYPE.CHP] = 'CHP'; Rtf_PROPTYPE[Rtf_PROPTYPE.PAP] = 'PAP'; Rtf_PROPTYPE[Rtf_PROPTYPE.SEP] = 'SEP'; Rtf_PROPTYPE[Rtf_PROPTYPE.DOP] = 'DOP'; /** @enum {number} */ var Rtf_ACTN = { SPEC: 0, BYTE: 1, WORD: 2, }; export { Rtf_ACTN }; Rtf_ACTN[Rtf_ACTN.SPEC] = 'SPEC'; Rtf_ACTN[Rtf_ACTN.BYTE] = 'BYTE'; Rtf_ACTN[Rtf_ACTN.WORD] = 'WORD'; /** @enum {number} */ var Rtf_IPFN = { BIN: 0, HEX: 1, SKIP_DEST: 2, BREAK: 3, NEW: 4, FONT: 5, CHARSET: 6, UNICODE: 7, }; export { Rtf_IPFN }; Rtf_IPFN[Rtf_IPFN.BIN] = 'BIN'; Rtf_IPFN[Rtf_IPFN.HEX] = 'HEX'; Rtf_IPFN[Rtf_IPFN.SKIP_DEST] = 'SKIP_DEST'; Rtf_IPFN[Rtf_IPFN.BREAK] = 'BREAK'; Rtf_IPFN[Rtf_IPFN.NEW] = 'NEW'; Rtf_IPFN[Rtf_IPFN.FONT] = 'FONT'; Rtf_IPFN[Rtf_IPFN.CHARSET] = 'CHARSET'; Rtf_IPFN[Rtf_IPFN.UNICODE] = 'UNICODE'; /** @enum {number} */ var Rtf_IDEST = { PICT: 0, COLOR: 1, SKIP: 2, }; export { Rtf_IDEST }; Rtf_IDEST[Rtf_IDEST.PICT] = 'PICT'; Rtf_IDEST[Rtf_IDEST.COLOR] = 'COLOR'; Rtf_IDEST[Rtf_IDEST.SKIP] = 'SKIP'; /** @enum {number} */ var Rtf_IPROP = { BOLD: 0, ITALIC: 1, UNDERLINE: 2, FONT: 3, SIZE: 4, COLOR: 5, RED: 6, GREEN: 7, BLUE: 8, LEFT_IND: 9, RIGHT_IND: 10, FIRST_IND: 11, COLS: 12, PGN_X: 13, PGN_Y: 14, XA_PAGE: 15, YA_PAGE: 16, XA_LEFT: 17, XA_RIGHT: 18, YA_TOP: 19, YA_BOTTOM: 20, PGN_START: 21, SBK: 22, PGN_FORMAT: 23, FACING_P: 24, LANDSCAPE: 25, JUST: 26, PARD: 27, PLAIN: 28, SECTD: 29, BULLET: 30, XA_BULLET: 31, MAX: 32, }; export { Rtf_IPROP }; Rtf_IPROP[Rtf_IPROP.BOLD] = 'BOLD'; Rtf_IPROP[Rtf_IPROP.ITALIC] = 'ITALIC'; Rtf_IPROP[Rtf_IPROP.UNDERLINE] = 'UNDERLINE'; Rtf_IPROP[Rtf_IPROP.FONT] = 'FONT'; Rtf_IPROP[Rtf_IPROP.SIZE] = 'SIZE'; Rtf_IPROP[Rtf_IPROP.COLOR] = 'COLOR'; Rtf_IPROP[Rtf_IPROP.RED] = 'RED'; Rtf_IPROP[Rtf_IPROP.GREEN] = 'GREEN'; Rtf_IPROP[Rtf_IPROP.BLUE] = 'BLUE'; Rtf_IPROP[Rtf_IPROP.LEFT_IND] = 'LEFT_IND'; Rtf_IPROP[Rtf_IPROP.RIGHT_IND] = 'RIGHT_IND'; Rtf_IPROP[Rtf_IPROP.FIRST_IND] = 'FIRST_IND'; Rtf_IPROP[Rtf_IPROP.COLS] = 'COLS'; Rtf_IPROP[Rtf_IPROP.PGN_X] = 'PGN_X'; Rtf_IPROP[Rtf_IPROP.PGN_Y] = 'PGN_Y'; Rtf_IPROP[Rtf_IPROP.XA_PAGE] = 'XA_PAGE'; Rtf_IPROP[Rtf_IPROP.YA_PAGE] = 'YA_PAGE'; Rtf_IPROP[Rtf_IPROP.XA_LEFT] = 'XA_LEFT'; Rtf_IPROP[Rtf_IPROP.XA_RIGHT] = 'XA_RIGHT'; Rtf_IPROP[Rtf_IPROP.YA_TOP] = 'YA_TOP'; Rtf_IPROP[Rtf_IPROP.YA_BOTTOM] = 'YA_BOTTOM'; Rtf_IPROP[Rtf_IPROP.PGN_START] = 'PGN_START'; Rtf_IPROP[Rtf_IPROP.SBK] = 'SBK'; Rtf_IPROP[Rtf_IPROP.PGN_FORMAT] = 'PGN_FORMAT'; Rtf_IPROP[Rtf_IPROP.FACING_P] = 'FACING_P'; Rtf_IPROP[Rtf_IPROP.LANDSCAPE] = 'LANDSCAPE'; Rtf_IPROP[Rtf_IPROP.JUST] = 'JUST'; Rtf_IPROP[Rtf_IPROP.PARD] = 'PARD'; Rtf_IPROP[Rtf_IPROP.PLAIN] = 'PLAIN'; Rtf_IPROP[Rtf_IPROP.SECTD] = 'SECTD'; Rtf_IPROP[Rtf_IPROP.BULLET] = 'BULLET'; Rtf_IPROP[Rtf_IPROP.XA_BULLET] = 'XA_BULLET'; Rtf_IPROP[Rtf_IPROP.MAX] = 'MAX'; /** @enum {number} */ var Rtf_RDS = { NORM: 0, COLOR: 1, SKIP: 2, NEW: 3, }; export { Rtf_RDS }; Rtf_RDS[Rtf_RDS.NORM] = 'NORM'; Rtf_RDS[Rtf_RDS.COLOR] = 'COLOR'; Rtf_RDS[Rtf_RDS.SKIP] = 'SKIP'; Rtf_RDS[Rtf_RDS.NEW] = 'NEW'; /** @enum {number} */ var Rtf_ErrorRtf = { OK: 0, STACK_UNDERFLOW: 1, STACK_OVERFLOW: 2, UNMATCHED_BRACE: 3, INVALID_HEX: 4, BAD_TABLE: 5, ASSERTION: 6, END_OF_FILE: 7, BUFFER_TOO_SMALL: 8, }; export { Rtf_ErrorRtf }; Rtf_ErrorRtf[Rtf_ErrorRtf.OK] = 'OK'; Rtf_ErrorRtf[Rtf_ErrorRtf.STACK_UNDERFLOW] = 'STACK_UNDERFLOW'; Rtf_ErrorRtf[Rtf_ErrorRtf.STACK_OVERFLOW] = 'STACK_OVERFLOW'; Rtf_ErrorRtf[Rtf_ErrorRtf.UNMATCHED_BRACE] = 'UNMATCHED_BRACE'; Rtf_ErrorRtf[Rtf_ErrorRtf.INVALID_HEX] = 'INVALID_HEX'; Rtf_ErrorRtf[Rtf_ErrorRtf.BAD_TABLE] = 'BAD_TABLE'; Rtf_ErrorRtf[Rtf_ErrorRtf.ASSERTION] = 'ASSERTION'; Rtf_ErrorRtf[Rtf_ErrorRtf.END_OF_FILE] = 'END_OF_FILE'; Rtf_ErrorRtf[Rtf_ErrorRtf.BUFFER_TOO_SMALL] = 'BUFFER_TOO_SMALL'; var Rtf_RtfChar = /** @class */ (function () { function Rtf_RtfChar() { } Rtf_RtfChar.CR = String.fromCharCode(0x0d); Rtf_RtfChar.LF = String.fromCharCode(0x0A); Rtf_RtfChar.TAB = String.fromCharCode(0x09); Rtf_RtfChar.BULLET = String.fromCharCode(0x95); Rtf_RtfChar.TILDA = String.fromCharCode(0xA0); Rtf_RtfChar.DASH = String.fromCharCode(0xAD); Rtf_RtfChar.DASH_CHAR = '-'; Rtf_RtfChar.QUOTE = '\''; Rtf_RtfChar.DBLQUOTE = '"'; Rtf_RtfChar.OPENINGBRACE = '{'; Rtf_RtfChar.CLOSINGBRACE = '}'; Rtf_RtfChar.BACKSLASH = '\\'; return Rtf_RtfChar; }()); export { Rtf_RtfChar }; if (false) { /** @type {?} */ Rtf_RtfChar.CR; /** @type {?} */ Rtf_RtfChar.LF; /** @type {?} */ Rtf_RtfChar.TAB; /** @type {?} */ Rtf_RtfChar.BULLET; /** @type {?} */ Rtf_RtfChar.TILDA; /** @type {?} */ Rtf_RtfChar.DASH; /** @type {?} */ Rtf_RtfChar.DASH_CHAR; /** @type {?} */ Rtf_RtfChar.QUOTE; /** @type {?} */ Rtf_RtfChar.DBLQUOTE; /** @type {?} */ Rtf_RtfChar.OPENINGBRACE; /** @type {?} */ Rtf_RtfChar.CLOSINGBRACE; /** @type {?} */ Rtf_RtfChar.BACKSLASH; } /** @enum {number} */ var Rtf_RIS = { NORM: 0, BIN: 1, HEX: 2, UNICODE: 3, }; export { Rtf_RIS }; Rtf_RIS[Rtf_RIS.NORM] = 'NORM'; Rtf_RIS[Rtf_RIS.BIN] = 'BIN'; Rtf_RIS[Rtf_RIS.HEX] = 'HEX'; Rtf_RIS[Rtf_RIS.UNICODE] = 'UNICODE'; var Rtf = /** @class */ (function () { /// <summary> Constructor /// </summary> function Rtf() { this._group = 0; this._cbBin = 0; this._lParam = 0; this._skipDestIfUnk = false; this._outputOnce = false; this._processCrlfSpecial = false; this._destState = null; this._internalState = null; this._stack = null; this._index = 0; this._fontNum = 0; this._charsetTable = new Hashtable(); this._codePageTable = new Hashtable(); this._stack = new Stack(); this._group = 0; this._cbBin = 0; this._lParam = 0; this._outputOnce = false; this._skipDestIfUnk = false; this._processCrlfSpecial = false; this._destState = Rtf_RDS.NORM; this._internalState = Rtf_RIS.NORM; this._fontNum = 0; if (UtilStrByteMode.isLocaleDefLangDBCS()) { this.setCodePageTable(); } } /// <summary> Checks if the blob has a Rtf data or not /// /// </summary> /// <param name="str"> /// </param> /// <returns> /// </returns> /** * @param {?} str * @return {?} */ Rtf.isRtf = /** * @param {?} str * @return {?} */ function (str) { /** @type {?} */ var isRtf = false; if (str !== null && str.startsWith(this.RTF_PREFIX)) { isRtf = true; } return isRtf; }; /** * @param {?} rtfTxt * @param {?} outputTxt * @return {?} */ Rtf.prototype.toTxt = /** * @param {?} rtfTxt * @param {?} outputTxt * @return {?} */ function (rtfTxt, outputTxt) { /** @type {?} */ var cNibble = 2; /** @type {?} */ var b = 0; /** @type {?} */ var currPos = 0; /** @type {?} */ var skipNewline = false; /** @type {?} */ var blobStrLen; /** @type {?} */ var blobChar; /** @type {?} */ var ec; /** @type {?} */ var dbcsBytes = new Uint8Array(2); /** @type {?} */ var skipParseChar = false; /** @type {?} */ var charset = 0; /** @type {?} */ var codePage = 0; this._outputOnce = false; this._processCrlfSpecial = false; blobStrLen = rtfTxt.length; this._index = 0; this._destState = Rtf_RDS.NORM; if (rtfTxt === null || blobStrLen === 0 || !Rtf.isRtf(rtfTxt)) { return Rtf_ErrorRtf.OK; } while (this._index < blobStrLen) { blobChar = rtfTxt[this._index]; this._index++; if (this._group < 0) return Rtf_ErrorRtf.STACK_UNDERFLOW; /* if we're parsing binary data, handle it directly */ if (this._internalState === Rtf_RIS.BIN) { if ((ec = this.ParseChar(blobChar, outputTxt)) !== Rtf_ErrorRtf.OK) return ec; } else { switch (blobChar) { case Rtf_RtfChar.OPENINGBRACE: skipNewline = false; if ((ec = this.PushState()) !== Rtf_ErrorRtf.OK) return ec; break; case Rtf_RtfChar.CLOSINGBRACE: skipNewline = true; if ((ec = this.PopState()) !== Rtf_ErrorRtf.OK) return ec; break; case Rtf_RtfChar.BACKSLASH: skipNewline = false; if ((ec = this.ParseKeyword(rtfTxt, outputTxt)) !== Rtf_ErrorRtf.OK) return ec; break; case Rtf_RtfChar.LF: case Rtf_RtfChar.CR: /* cr and lf are noise characters... */ if (this._processCrlfSpecial) { /* Once we reach the 0x0a while ProcessCRLFSpecial_, reset the ProcessCRLFSpecial_ */ if (blobChar === Rtf_RtfChar.LF) { this._processCrlfSpecial = false; } } else { /*---------------------------------------------------------------*/ /* skip new lines coming only from the RTF header 1/1/98 - #2390 */ /*---------------------------------------------------------------*/ /* Skip the LF (0x0a) if we are not in the ProcessCRLFSpecial_ */ if (blobChar === Rtf_RtfChar.LF || (blobChar === Rtf_RtfChar.CR && skipNewline && !this._outputOnce)) break; } /* falls through */ default: if (blobChar !== Rtf_RtfChar.CR) skipNewline = false; if (this._internalState === Rtf_RIS.NORM) { if ((ec = this.ParseChar(blobChar, outputTxt)) !== Rtf_ErrorRtf.OK) return ec; } else if (this._internalState === Rtf_RIS.UNICODE) { if ((ec = this.ParseChar(String.fromCharCode(this._lParam), outputTxt)) !== Rtf_ErrorRtf.OK) return ec; this._internalState = Rtf_RIS.NORM; } else { /* parsing hex data */ if (this._internalState !== Rtf_RIS.HEX) return Rtf_ErrorRtf.ASSERTION; b = b << 4; if (NChar.IsDigit(blobChar)) b += blobChar.charCodeAt(0) - '0'.charCodeAt(0); else { if (NChar.IsLower(blobChar)) { if (blobChar < 'a' || blobChar > 'f') return Rtf_ErrorRtf.INVALID_HEX; b += 10 + blobChar.charCodeAt(0) - 'a'.charCodeAt(0); } else { if (blobChar < 'A' || blobChar > 'F') return Rtf_ErrorRtf.INVALID_HEX; b += 10 + blobChar.charCodeAt(0) - 'A'.charCodeAt(0); } } cNibble--; if (cNibble === 0) { if (UtilStrByteMode.isLocaleDefLangDBCS()) { charset = this.getCharset(this._fontNum); // leading byte of a double-byte character if (!skipParseChar && Rtf.is1stByte(b, charset)) { dbcsBytes[0] = b; dbcsBytes[1] = 0; skipParseChar = true; } else { // trailing byte of a double-byte character if (skipParseChar && Rtf.is2ndByte(b, charset)) dbcsBytes[1] = b; else { dbcsBytes[0] = b; dbcsBytes[1] = 0; } // convert DBCS to Unicode codePage = this.getCodePage(charset); /** @type {?} */ var workStr = Encoding.GetEncoding(codePage).GetString(dbcsBytes, 0, 2); b = workStr.charCodeAt(0); skipParseChar = false; } } if (!skipParseChar) { if ((ec = this.ParseChar(String.fromCharCode(b), outputTxt)) !== Rtf_ErrorRtf.OK) return ec; } cNibble = 2; b = 0; this._internalState = Rtf_RIS.NORM; } } /* end else (ris != risNorm) */ break; } /* switch */ } /* else (ris != risBin) */ } /* while */ if (this._group < 0) return Rtf_ErrorRtf.STACK_UNDERFLOW; if (this._group > 0) return Rtf_ErrorRtf.UNMATCHED_BRACE; /*-------------------------------------------------------------------*/ /* Eliminate suffix of carrige return + line feed */ /* (Check last characters - just in case format is not the expected) */ /*-------------------------------------------------------------------*/ currPos = outputTxt.Length; if (currPos >= 3 && (outputTxt.get_Item(currPos - 3) === Rtf_RtfChar.CR && outputTxt.get_Item(currPos - 2) === Rtf_RtfChar.LF && outputTxt.get_Item(currPos - 1) === Rtf_RtfChar.CR || outputTxt.get_Item(currPos - 3) === Rtf_RtfChar.LF && outputTxt.get_Item(currPos - 2) === Rtf_RtfChar.CR && outputTxt.get_Item(currPos - 1) === Rtf_RtfChar.CR)) outputTxt.Remove(currPos - 3, 3); return Rtf_ErrorRtf.OK; }; /** * @param {?} ch * @param {?} outputTxt * @return {?} */ Rtf.prototype.ParseChar = /** * @param {?} ch * @param {?} outputTxt * @return {?} */ function (ch, outputTxt) { /** @type {?} */ var ret = Rtf_ErrorRtf.OK; if (this._internalState === Rtf_RIS.BIN && --this._cbBin <= 0) { this._internalState = Rtf_RIS.NORM; } if (this._destState === Rtf_RDS.SKIP) { } else if (this._destState === Rtf_RDS.NORM) { /* Output a character. Properties are valid at this point. */ ret = this.PrintChar(ch, outputTxt); } else { /* handle other destinations.... */ } return ret; }; /** * @param {?} ch * @param {?} outputTxt * @return {?} */ Rtf.prototype.PrintChar = /** * @param {?} ch * @param {?} outputTxt * @return {?} */ function (ch, outputTxt) { /* Allow carrige return + line feed in text, but remove bullet sign */ /*------------------------------------------------------------------*/ if ((ch >= ' ' || ch === Rtf_RtfChar.CR || ch === Rtf_RtfChar.LF) && ch !== String.fromCharCode(183)) { outputTxt.Append(ch); } if (ch >= ' ') { this._outputOnce = true; } return Rtf_ErrorRtf.OK; }; /** * @return {?} */ Rtf.prototype.PushState = /** * @return {?} */ function () { /** @type {?} */ var stackSave = new Rtf_StackSave(); if (stackSave === null) { return Rtf_ErrorRtf.STACK_OVERFLOW; } stackSave.rds = this._destState; stackSave.ris = this._internalState; this._internalState = Rtf_RIS.NORM; this._stack.push(stackSave); this._group++; return Rtf_ErrorRtf.OK; }; /** * @return {?} */ Rtf.prototype.PopState = /** * @return {?} */ function () { /** @type {?} */ var savedPop = this._stack.pop(); if (savedPop === null) { return Rtf_ErrorRtf.STACK_UNDERFLOW; } this._destState = savedPop.rds; this._internalState = savedPop.ris; this._group--; return Rtf_ErrorRtf.OK; }; /** * @param {?} rtfTxt * @param {?} outputTxt * @return {?} */ Rtf.prototype.ParseKeyword = /** * @param {?} rtfTxt * @param {?} outputTxt * @return {?} */ function (rtfTxt, outputTxt) { /** @type {?} */ var ch; /** @type {?} */ var fNeg = false; /** @type {?} */ var szKeyword = ""; /** @type {?} */ var szParameter = ""; if ((ch = rtfTxt[this._index++]) === String.fromCharCode(0)) { return Rtf_ErrorRtf.END_OF_FILE; } /* a control symbol; no delimiter. */ if (!NChar.IsLetter(ch)) { szKeyword = szKeyword + ch; return this.TranslateKeyword(szKeyword, outputTxt); } for (; NChar.IsLetter(ch); ch = rtfTxt[this._index++]) szKeyword = szKeyword + ch; if (ch === '-') { fNeg = true; if ((ch = rtfTxt[this._index++]) === String.fromCharCode(0)) return Rtf_ErrorRtf.END_OF_FILE; } if (NChar.IsDigit(ch)) { for (; NChar.IsDigit(ch); ch = rtfTxt[this._index++]) szParameter = szParameter + ch; this._lParam = NNumber.Parse(szParameter); if (fNeg) this._lParam = -this._lParam; } if (ch !== ' ') this._index--; if (szKeyword === Rtf.CHAR_PAR) { /* if we get a RTF sequence of \par[0xd][0xa], ie a \par kwd followed */ /* immidiately by the CR and LF, then ignore the \par kwd. otherwise */ /* we will translate the \par - which translates to a LF (0xa) and also */ /* the following 0x0d is translated to 0x0a, thus resulting in TWO LF's */ /* being inserted instead of just one LF. So by skipping [\par] and */ /* translating only the [0xd 0xa] will result in only one LF appearing */ /* - which is the desired behaviour */ if (rtfTxt[this._index] === Rtf_RtfChar.CR && rtfTxt[this._index + 1] === Rtf_RtfChar.LF) this._processCrlfSpecial = true; } if (this._processCrlfSpecial) { return Rtf_ErrorRtf.OK; } else { return this.TranslateKeyword(szKeyword, outputTxt); } }; /** * @param {?} szKeyword * @param {?} outputTxt * @return {?} */ Rtf.prototype.TranslateKeyword = /** * @param {?} szKeyword * @param {?} outputTxt * @return {?} */ function (szKeyword, outputTxt) { /** @type {?} */ var result = Rtf_ErrorRtf.OK; /** @type {?} */ var isym; /* search for szKeyword in rgsymRtf */ for (isym = 0; isym < Rtf.rgsymRtf.length; isym++) { if (szKeyword === Rtf.rgsymRtf[isym].szKeyword) { break; } } /* control word not found */ if (isym === Rtf.rgsymRtf.length) { if (this._skipDestIfUnk) { /* if this is a new destination */ this._destState = Rtf_RDS.SKIP; /* skip the destination */ } /* else just discard it */ this._skipDestIfUnk = false; } else { result = Rtf_ErrorRtf.BAD_TABLE; /* found it! use kwd and idxInRgprop to determine what to do with it. */ this._skipDestIfUnk = false; if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.PROP) { result = this.validateProp(/** @type {?} */ (Rtf.rgsymRtf[isym].idxInRgprop)); } else if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.CHAR) { result = this.ParseChar((Rtf.rgsymRtf[isym].idxInRgprop), outputTxt); } else if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.DEST) { result = this.changeDestState(); } else if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.SPEC) { result = this.ParseSpecialKeyword(/** @type {?} */ (Rtf.rgsymRtf[isym].idxInRgprop)); } } return result; }; /** * @param {?} iprop * @return {?} */ Rtf.prototype.validateProp = /** * @param {?} iprop * @return {?} */ function (iprop) { /** @type {?} */ var ret = Rtf_ErrorRtf.OK; if (this._destState === Rtf_RDS.SKIP) { /* If we're skipping text, */ return ret; /* don't do anything. */ } /* validate prop */ if (Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.DOP && Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.SEP && Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.PAP && Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.CHP && Rtf.rgprop[iprop].actn !== Rtf_ACTN.SPEC) { ret = Rtf_ErrorRtf.BAD_TABLE; } if (Rtf.rgprop[iprop].actn !== Rtf_ACTN.BYTE && Rtf.rgprop[iprop].actn !== Rtf_ACTN.WORD && Rtf.rgprop[iprop].actn !== Rtf_ACTN.SPEC) { ret = Rtf_ErrorRtf.BAD_TABLE; } return ret; }; /** * @return {?} */ Rtf.prototype.changeDestState = /** * @return {?} */ function () { if (this._destState === Rtf_RDS.SKIP) { /* if we're skipping text, */ return Rtf_ErrorRtf.OK; /* don't do anything */ } this._destState = Rtf_RDS.SKIP; /* when in doubt, skip it... */ return Rtf_ErrorRtf.OK; }; /** * @param {?} ipfn * @return {?} */ Rtf.prototype.ParseSpecialKeyword = /** * @param {?} ipfn * @return {?} */ function (ipfn) { /** @type {?} */ var ret = Rtf_ErrorRtf.OK; if (!UtilStrByteMode.isLocaleDefLangDBCS()) { if (this._destState === Rtf_RDS.SKIP && ipfn !== Rtf_IPFN.BIN) { /* if we're skipping, and it's not */ return ret; /* the \bin keyword, ignore it. */ } if (ipfn === Rtf_IPFN.FONT || ipfn === Rtf_IPFN.CHARSET || ipfn === Rtf_IPFN.UNICODE) { return ret; } } else { if (this._destState === Rtf_RDS.SKIP && ipfn !== Rtf_IPFN.BIN && ipfn !== Rtf_IPFN.FONT && ipfn !== Rtf_IPFN.CHARSET && ipfn !== Rtf_IPFN.UNICODE) { return ret; } } if (ipfn === Rtf_IPFN.BIN) { this._internalState = Rtf_RIS.BIN; this._cbBin = this._lParam; } else if (ipfn === Rtf_IPFN.SKIP_DEST) { this._skipDestIfUnk = true; } else if (ipfn === Rtf_IPFN.HEX) { this._internalState = Rtf_RIS.HEX; } else if (ipfn === Rtf_IPFN.FONT) { this._fontNum = /** @type {?} */ (this._lParam); } else if (ipfn === Rtf_IPFN.CHARSET) { this._charsetTable.set_Item(this._fontNum, /** @type {?} */ (this._lParam)); } else if (ipfn === Rtf_IPFN.UNICODE) { this._internalState = Rtf_RIS.UNICODE; } else { ret = Rtf_ErrorRtf.BAD_TABLE; } return ret; }; /** * @param {?} dbcsBytes * @param {?} charset * @return {?} */ Rtf.is1stByte = /** * @param {?} dbcsBytes * @param {?} charset * @return {?} */ function (dbcsBytes, charset) { /** @type {?} */ var ret = false; if (dbcsBytes > 255) return ret; switch (charset) { case 128: ret = (129 <= dbcsBytes && dbcsBytes <= 159) || (224 <= dbcsBytes && dbcsBytes <= 254); break; case 129: case 134: case 136: ret = (129 <= dbcsBytes); break; default: break; } return ret; }; /** * @param {?} dbcsBytes * @param {?} charset * @return {?} */ Rtf.is2ndByte = /** * @param {?} dbcsBytes * @param {?} charset * @return {?} */ function (dbcsBytes, charset) { /** @type {?} */ var ret = false; if (dbcsBytes > 255) return ret; switch (charset) { case 128: ret = (dbcsBytes !== 127) && (64 <= dbcsBytes && dbcsBytes <= 252); break; case 129: case 134: case 136: ret = (64 <= dbcsBytes); break; default: break; } return ret; }; /** * @return {?} */ Rtf.prototype.setCodePageTable = /** * @return {?} */ function () { // add elements with key (charset) and value (codepage) into the table. this._codePageTable.set_Item(0, 1252); // ANSI_CHARSET this._codePageTable.set_Item(128, 932); // SHIFTJIS_CHARSET this._codePageTable.set_Item(129, 949); // HANGUL_CHARSET this._codePageTable.set_Item(134, 936); // GB2312_CHARSET this._codePageTable.set_Item(136, 950); // CHINESEBIG5_CHARSET this._codePageTable.set_Item(161, 1253); // GREEK_CHARSET this._codePageTable.set_Item(162, 1254); // TURKISH_CHARSET this._codePageTable.set_Item(177, 1255); // HEBREW_CHARSET this._codePageTable.set_Item(178, 1256); // ARABIC _CHARSET this._codePageTable.set_Item(186, 1257); // BALTIC_CHARSET this._codePageTable.set_Item(204, 1251); // RUSSIAN_CHARSET this._codePageTable.set_Item(222, 874); // THAI_CHARSET this._codePageTable.set_Item(238, 1250); // EASTEUROPE_CHARSET }; /** * @param {?} charset * @return {?} */ Rtf.prototype.getCodePage = /** * @param {?} charset * @return {?} */ function (charset) { /** @type {?} */ var codePage = 0; if (this._codePageTable.ContainsKey(charset)) { codePage = this._codePageTable.get_Item(charset); } return codePage; }; /** * @param {?} font * @return {?} */ Rtf.prototype.getCharset = /** * @param {?} font * @return {?} */ function (font) { /** @type {?} */ var charset = 0; if (this._charsetTable.ContainsKey(font)) { charset = this._charsetTable.get_Item(font); } return charset; }; Rtf.RTF_PREFIX = "{\\rtf"; Rtf.CHAR_PAR = "par"; Rtf.rgprop = [ new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.SEP) ]; Rtf.rgsymRtf = [ new Rtf_SYMBOL("b", Rtf_KWD.PROP, Rtf_IPROP.BOLD), new Rtf_SYMBOL("ul", Rtf_KWD.PROP, Rtf_IPROP.UNDERLINE), new Rtf_SYMBOL("i", Rtf_KWD.PROP, Rtf_IPROP.ITALIC), new Rtf_SYMBOL("li", Rtf_KWD.PROP, Rtf_IPROP.LEFT_IND), new Rtf_SYMBOL("ri", Rtf_KWD.PROP, Rtf_IPROP.RIGHT_IND), new Rtf_SYMBOL("fi", Rtf_KWD.PROP, Rtf_IPROP.FIRST_IND), new Rtf_SYMBOL("cols", Rtf_KWD.PROP, Rtf_IPROP.COLS), new Rtf_SYMBOL("sbknone", Rtf_KWD.PROP, Rtf_IPROP.SBK), new Rtf_SYMBOL("sbkcol", Rtf_KWD.PROP, Rtf_IPROP.SBK), new Rtf_SYMBOL("sbkeven", Rtf_KWD.PROP, Rtf_IPROP.SBK), new Rtf_SYMBOL("sbkodd", Rtf_KWD.PROP, Rtf_IPROP.SBK), new Rtf_SYMBOL("sbkpage", Rtf_KWD.PROP, Rtf_IPROP.SBK), new Rtf_SYMBOL("pgnx", Rtf_KWD.PROP, Rtf_IPROP.PGN_X), new Rtf_SYMBOL("pgny", Rtf_KWD.PROP, Rtf_IPROP.PGN_Y), new Rtf_SYMBOL("pgndec", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("pgnucrm", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("pgnlcrm", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("pgnucltr", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("pgnlcltr", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("qc", Rtf_KWD.PROP, Rtf_IPROP.JUST), new Rtf_SYMBOL("ql", Rtf_KWD.PROP, Rtf_IPROP.JUST), new Rtf_SYMBOL("qr", Rtf_KWD.PROP, Rtf_IPROP.JUST), new Rtf_SYMBOL("qj", Rtf_KWD.PROP, Rtf_IPROP.JUST), new Rtf_SYMBOL("paperw", Rtf_KWD.PROP, Rtf_IPROP.XA_PAGE), new Rtf_SYMBOL("paperh", Rtf_KWD.PROP, Rtf_IPROP.YA_PAGE), new Rtf_SYMBOL("margl", Rtf_KWD.PROP, Rtf_IPROP.XA_LEFT), new Rtf_SYMBOL("margr", Rtf_KWD.PROP, Rtf_IPROP.XA_RIGHT), new Rtf_SYMBOL("margt", Rtf_KWD.PROP, Rtf_IPROP.YA_TOP), new Rtf_SYMBOL("margb", Rtf_KWD.PROP, Rtf_IPROP.YA_BOTTOM), new Rtf_SYMBOL("pgnstart", Rtf_KWD.PROP, Rtf_IPROP.PGN_START), new Rtf_SYMBOL("facingp", Rtf_KWD.PROP, Rtf_IPROP.FACING_P), new Rtf_SYMBOL("landscape", Rtf_KWD.PROP, Rtf_IPROP.LANDSCAPE), new Rtf_SYMBOL("par", Rtf_KWD.CHAR, Rtf_RtfChar.LF), new Rtf_SYMBOL("\0x0a", Rtf_KWD.CHAR, Rtf_RtfChar.LF), new Rtf_SYMBOL("\0x0d", Rtf_KWD.CHAR, Rtf_RtfChar.LF), new Rtf_SYMBOL("tab", Rtf_KWD.CHAR, Rtf_RtfChar.TAB), new Rtf_SYMBOL("ldblquote", Rtf_KWD.CHAR, Rtf_RtfChar.DBLQUOTE), new Rtf_SYMBOL("rdblquote", Rtf_KWD.CHAR, Rtf_RtfChar.DBLQUOTE), new Rtf_SYMBOL("lquote", Rtf_KWD.CHAR, Rtf_RtfChar.QUOTE), new Rtf_SYMBOL("rquote", Rtf_KWD.CHAR, Rtf_RtfChar.QUOTE), new Rtf_SYMBOL("bullet", Rtf_KWD.CHAR, Rtf_RtfChar.BULLET), new Rtf_SYMBOL("endash", Rtf_KWD.CHAR, Rtf_RtfChar.DASH_CHAR), new Rtf_SYMBOL("emdash", Rtf_KWD.CHAR, Rtf_RtfChar.DASH_CHAR), new Rtf_SYMBOL("~", Rtf_KWD.CHAR, Rtf_RtfChar.TILDA), new Rtf_SYMBOL("-", Rtf_KWD.CHAR, Rtf_RtfChar.DASH), new Rtf_SYMBOL("{", Rtf_KWD.CHAR, Rtf_RtfChar.OPENINGBRACE), new Rtf_SYMBOL("}", Rtf_KWD.CHAR, Rtf_RtfChar.CLOSINGBRACE), new Rtf_SYMBOL("\\", Rtf_KWD.CHAR, Rtf_RtfChar.BACKSLASH), new Rtf_SYMBOL("bin", Rtf_KWD.SPEC, Rtf_IPFN.BIN), new Rtf_SYMBOL("*", Rtf_KWD.SPEC, Rtf_IPFN.SKIP_DEST), new Rtf_SYMBOL("'", Rtf_KWD.SPEC, Rtf_IPFN.HEX), new Rtf_SYMBOL("f", Rtf_KWD.SPEC, Rtf_IPFN.FONT), new Rtf_SYMBOL("fcharset", Rtf_KWD.SPEC, Rtf_IPFN.CHARSET), new Rtf_SYMBOL("u", Rtf_KWD.SPEC, Rtf_IPFN.UNICODE), new Rtf_SYMBOL("author", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("buptim", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("colortbl", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("comment", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("creatim", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("doccomm", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("fonttbl", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footer", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footerf", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footerl", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footerr", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footnote", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("ftncn", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("ftnsep", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("ftnsepc", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("header", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("headerf", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("headerl", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("headerr", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("info", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("keywords", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("operator", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("pict", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("printim", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("private1", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("revtim", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("rxe", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("stylesheet", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("subject", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("tc", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("title", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("txe", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("xe", Rtf_KWD.DEST, Rtf_IDEST.SKIP) ]; return Rtf; }()); export { Rtf }; if (false) { /** @type {?} */ Rtf.RTF_PREFIX; /** @type {?} */ Rtf.CHAR_PAR; /** @type {?} */ Rtf.rgprop; /** @type {?} */ Rtf.rgsymRtf; /** @type {?} */ Rtf.prototype._group; /** @type {?} */ Rtf.prototype._cbBin; /** @type {?} */ Rtf.prototype._lParam; /** @type {?} */ Rtf.prototype._skipDestIfUnk; /** @type {?} */ Rtf.prototype._outputOnce; /** @type {?} */ Rtf.prototype._processCrlfSpecial; /** @type {?} */ Rtf.prototype._destState; /** @type {?} */ Rtf.prototype._internalState; /** @type {?} */ Rtf.prototype._stack; /** @type {?} */ Rtf.prototype._index; /** @type {?} */ Rtf.prototype._fontNum; /** @type {?} */ Rtf.prototype._charsetTable; /** @type {?} */ Rtf.prototype._codePageTable; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnRmLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG1hZ2ljLXhwYS91dGlscy8iLCJzb3VyY2VzIjpbInNyYy9SdGYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdsRCxJQUFBO0lBTUUsaURBQWlEO0lBRWpELHFEQUFxRDtJQUVyRCxxREFBcUQ7SUFDckQsb0JBQVksT0FBZSxFQUFFLEdBQVksRUFBRSxXQUFnQjt5QkFWdkMsSUFBSTs7bUJBRVQsSUFBSTs7MkJBRUEsSUFBSTtRQU9yQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0tBQ2hDO3FCQW5CSDtJQW9CQyxDQUFBO0FBaEJELHNCQWdCQzs7Ozs7Ozs7O0FBRUQsSUFBQTtJQUtFLGdDQUFnQztJQUVoQyxrQkFBWSxJQUFjLEVBQUUsSUFBa0I7b0JBTjdCLElBQUk7O29CQUVBLElBQUk7UUFLdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7S0FDbEI7bUJBaENIO0lBaUNDLENBQUE7QUFYRCxvQkFXQzs7Ozs7OztBQUVELElBQUE7O21CQUNpQixJQUFJO21CQUNKLElBQUk7O3dCQXJDckI7SUFzQ0MsQ0FBQTs7Ozs7Ozs7O0lBR0MsT0FBSTtJQUNKLE9BQUk7SUFDSixPQUFJO0lBQ0osT0FBSTs7O2dCQUhKLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixJQUFJO2dCQUNKLElBQUk7OztJQUlKLE1BQUc7SUFDSCxNQUFHO0lBQ0gsTUFBRztJQUNILE1BQUc7Ozsw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