Files
Yajbir Singh f1b860b25c
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

2107 lines
49 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
/**
* FORMULA field
* @constructor
*/
function CFieldInstructionFORMULA()
{
AscWord.FieldInstructionBase.call(this);
this.ParseQueue = null;
this.Error = null;
this.ErrStr = null;
this.ResultStr = null;
this.Format = null;
this.ParentContent = null;
}
CFieldInstructionFORMULA.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionFORMULA.prototype.constructor = CFieldInstructionFORMULA;
CFieldInstructionFORMULA.prototype.Type = AscWord.fieldtype_FORMULA;
CFieldInstructionFORMULA.prototype.SetFormat = function(oFormat)
{
this.Format = oFormat;
};
CFieldInstructionFORMULA.prototype.SetParseQueue = function(oParseQueue)
{
this.ParseQueue = oParseQueue;
};
CFieldInstructionFORMULA.prototype.SetError = function(oError)
{
this.Error = oError;
};
CFieldInstructionFORMULA.prototype.SetFormula = function(sFormula)
{
this.Formula = sFormula;
};
CFieldInstructionFORMULA.prototype.GetErrorStr = function (oErr) {
var ret = "!";
if(oErr)
{
if(typeof oErr.Type === 'string')
{
ret += AscCommon.translateManager.getValue(oErr.Type);
}
if(typeof oErr.Data === 'string')
{
ret += (", " + oErr.Data);
}
}
return ret;
};
CFieldInstructionFORMULA.prototype.Calculate = function(oLogicDocument)
{
this.ErrStr = null;
this.ResultStr = null;
this.private_Calculate(oLogicDocument);
if(this.Error)
{
this.ErrStr = this.GetErrorStr(this.Error);
return;
}
if(this.ParseQueue)
{
var oCalcError = this.ParseQueue.calculate(oLogicDocument);
if(oCalcError)
{
this.ErrStr = this.GetErrorStr(oCalcError);
return;
}
if(typeof this.ParseQueue.resultS === "string")
{
this.ResultStr = this.ParseQueue.resultS;
}
else
{
this.ResultStr = '';
}
}
else
{
this.ResultStr = '';
}
};
CFieldInstructionFORMULA.prototype.private_Calculate = function (oLogicDocument)
{
var sListSeparator = ",";
var sDigitSeparator = ".";
if (oLogicDocument && oLogicDocument.GetDecimalSymbol && oLogicDocument.GetListSeparator && oLogicDocument.GetDecimalSymbol() !== oLogicDocument.GetListSeparator())
{
sListSeparator = oLogicDocument.GetListSeparator();
sDigitSeparator = oLogicDocument.GetDecimalSymbol();
}
var oParser = new AscCommonWord.CFormulaParser(sListSeparator, sDigitSeparator);
oParser.parse(this.Formula, this.ParentContent);
this.SetParseQueue(oParser.parseQueue);
if (oParser.parseQueue)
{
oParser.parseQueue.format = this.Format;
}
this.SetError(oParser.error);
};
CFieldInstructionFORMULA.prototype.SetComplexField = function(oComplexField){
AscWord.FieldInstructionBase.prototype.SetComplexField.call(this, oComplexField);
this.ParentContent = null;
var oBeginChar = oComplexField.BeginChar;
if(oBeginChar)
{
var oRun = oBeginChar.Run;
if(oRun)
{
var oParagraph = oRun.Paragraph;
if(oParagraph)
{
this.ParentContent = oParagraph.Parent;
}
}
}
};
CFieldInstructionFORMULA.prototype.GetResultString = function()
{
if (!this.ResultStr)
return this.ResultStr;
return this.applyNumericFormat(this.ResultStr);
};
CFieldInstructionFORMULA.prototype.applyNumericFormat = function(strValue)
{
if (!this.haveNumericFormat())
return strValue;
let numValue = parseFloat(strValue);
if (isNaN(numValue))
return strValue;
numValue = Math.trunc(numValue + 0.5);
let textPr = null;
if (this.ComplexField && this.ComplexField.BeginChar && this.ComplexField.BeginChar.GetRun())
textPr = this.ComplexField.BeginChar.GetRun().getCompiledPr();
return "" + AscCommon.IntToNumberFormat(numValue, this.getNumericFormat(), {lang: textPr && textPr.Lang, isFromField: true, isSkipFractPart: true});
};
/**
* PAGE field
* @constructor
*/
function CFieldInstructionPAGE()
{
AscWord.FieldInstructionBase.call(this);
}
CFieldInstructionPAGE.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionPAGE.prototype.constructor = CFieldInstructionPAGE;
CFieldInstructionPAGE.prototype.Type = AscWord.fieldtype_PAGE;
/**
* PAGEREF field
* @constructor
*/
function CFieldInstructionPAGEREF(sBookmarkName, isHyperlink, isPositionRelative)
{
AscWord.FieldInstructionBase.call(this);
this.BookmarkName = sBookmarkName ? sBookmarkName : "";
this.Hyperlink = isHyperlink ? true : false;
this.PosRelative = isPositionRelative ? true : false;
}
CFieldInstructionPAGEREF.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionPAGEREF.prototype.constructor = CFieldInstructionPAGEREF;
CFieldInstructionPAGEREF.prototype.Type = AscWord.fieldtype_PAGEREF;
CFieldInstructionPAGEREF.prototype.SetHyperlink = function(isHyperlink)
{
this.Hyperlink = isHyperlink ? true : false;
};
CFieldInstructionPAGEREF.prototype.SetPositionRelative = function(isPosRel)
{
this.PosRelative = isPosRel ? true : false;
};
CFieldInstructionPAGEREF.prototype.IsHyperlink = function()
{
return this.Hyperlink;
};
CFieldInstructionPAGEREF.prototype.IsPositionRelative = function()
{
return this.PosRelative;
};
CFieldInstructionPAGEREF.prototype.GetBookmarkName = function()
{
return this.BookmarkName;
};
/**
* TOC field
* @constructor
*/
function CFieldInstructionTOC()
{
AscWord.FieldInstructionBase.call(this);
this.PreserveTabs = false;
this.RemoveBreaks = true;
this.Hyperlinks = false;
this.Separator = "";
this.HeadingS = -1;
this.HeadingE = -1;
this.Styles = [];
this.SkipPageRef = false;
this.SkipPageRefStart = -1;
this.SkipPageRefEnd = -1;
this.ForceTabLeader = undefined;
this.Caption = undefined;
this.CaptionOnlyText = undefined;
}
CFieldInstructionTOC.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionTOC.prototype.constructor = CFieldInstructionTOC;
CFieldInstructionTOC.prototype.Type = AscWord.fieldtype_TOC;
CFieldInstructionTOC.prototype.IsPreserveTabs = function()
{
return this.PreserveTabs;
};
CFieldInstructionTOC.prototype.SetPreserveTabs = function(isPreserve)
{
this.PreserveTabs = isPreserve;
};
CFieldInstructionTOC.prototype.IsRemoveBreaks = function()
{
return this.RemoveBreaks;
};
CFieldInstructionTOC.prototype.SetRemoveBreaks = function(isRemove)
{
this.RemoveBreaks = isRemove;
};
CFieldInstructionTOC.prototype.IsHyperlinks = function()
{
return this.Hyperlinks;
};
CFieldInstructionTOC.prototype.SetHyperlinks = function(isHyperlinks)
{
this.Hyperlinks = isHyperlinks;
};
CFieldInstructionTOC.prototype.SetSeparator = function(sSeparator)
{
this.Separator = sSeparator;
};
CFieldInstructionTOC.prototype.GetSeparator = function()
{
return this.Separator;
};
CFieldInstructionTOC.prototype.SetHeadingRange = function(nStart, nEnd)
{
this.HeadingS = nStart;
this.HeadingE = nEnd;
};
CFieldInstructionTOC.prototype.GetHeadingRangeStart = function()
{
return this.HeadingS;
};
CFieldInstructionTOC.prototype.GetHeadingRangeEnd = function()
{
return this.HeadingE;
};
CFieldInstructionTOC.prototype.SetStylesArrayRaw = function(sString)
{
var oLogicDocument = editor.WordControl.m_oLogicDocument;
var sListSeparator = oLogicDocument.GetListSeparator();
var arrValues = sString.split(sListSeparator);
var arrStyles = [];
for (var nIndex = 0, nCount = arrValues.length; nIndex < nCount; ++nIndex)
{
var sName = arrValues[nIndex];
var nLvl = nIndex + 1 >= nCount ? 1 : parseInt(arrValues[nIndex + 1]);
if (isNaN(nLvl))
nLvl = undefined;
else
nIndex++;
arrStyles.push({
Name : sName,
Lvl : nLvl
});
}
this.SetStylesArray(arrStyles);
};
CFieldInstructionTOC.prototype.SetStylesArray = function(arrStyles)
{
this.Styles = arrStyles;
};
CFieldInstructionTOC.prototype.GetStylesArray = function()
{
return this.Styles;
};
CFieldInstructionTOC.prototype.SetPageRefSkippedLvls = function(isSkip, nSkipStart, nSkipEnd)
{
this.SkipPageRef = isSkip;
if (true === isSkip
&& null !== nSkipStart
&& undefined !== nSkipStart
&& null !== nSkipEnd
&& undefined !== nSkipEnd)
{
this.SkipPageRefStart = nSkipStart;
this.SkipPageRefEnd = nSkipEnd;
}
else
{
this.SkipPageRefStart = -1;
this.SkipPageRefEnd = -1;
}
};
CFieldInstructionTOC.prototype.IsSkipPageRefLvl = function(nLvl)
{
if (undefined === nLvl)
return this.SkipPageRef;
if (false === this.SkipPageRef)
return false;
if (-1 === this.SkipPageRefStart || -1 === this.SkipPageRefEnd)
return true;
return (nLvl >= this.SkipPageRefStart - 1 && nLvl <= this.SkipPageRefEnd - 1);
};
CFieldInstructionTOC.prototype.SetCaption = function (sCaption)
{
this.Caption = sCaption;
};
CFieldInstructionTOC.prototype.GetCaption = function()
{
return this.Caption;
};
CFieldInstructionTOC.prototype.SetCaptionOnlyText = function (sVal)
{
this.CaptionOnlyText = sVal;
};
CFieldInstructionTOC.prototype.GetCaptionOnlyText = function()
{
return this.CaptionOnlyText;
};
CFieldInstructionTOC.prototype.SetPr = function(oPr)
{
if (!(oPr instanceof Asc.CTableOfContentsPr))
return;
this.SetStylesArray(oPr.get_Styles());
this.SetHeadingRange(oPr.get_OutlineStart(), oPr.get_OutlineEnd());
this.SetHyperlinks(oPr.get_Hyperlink());
if (oPr.PageNumbers)
this.SetPageRefSkippedLvls(false);
else
this.SetPageRefSkippedLvls(true);
if (oPr.RightTab)
this.SetSeparator("");
else
this.SetSeparator(" ");
this.ForceTabLeader = oPr.TabLeader;
var sCaption = oPr.get_CaptionForInstruction();
if(sCaption !== undefined)
{
if(sCaption || this.Styles.length > 0)
{
if(oPr.IsIncludeLabelAndNumber)
{
this.SetCaption(sCaption);
this.SetCaptionOnlyText(undefined);
}
else
{
this.SetCaptionOnlyText(sCaption);
this.SetCaption(undefined);
}
this.SetHeadingRange(-1, -1);
}
}
};
CFieldInstructionTOC.prototype.GetForceTabLeader = function()
{
var nTabLeader = this.ForceTabLeader;
this.ForceTabLeader = undefined;
return nTabLeader;
};
CFieldInstructionTOC.prototype.ToString = function()
{
var oLogicDocument = editor.WordControl.m_oLogicDocument;
var sListSeparator = oLogicDocument.GetListSeparator();
var sInstr = "TOC ";
if (this.HeadingS >= 1
&& this.HeadingS <= 9
&& this.HeadingE >= this.HeadingS
&& this.HeadingE <= 9)
sInstr += "\\o " + "\"" + this.HeadingS + "-" + this.HeadingE + "\" ";
if (this.SkipPageRef)
{
sInstr += "\\n ";
if (this.SkipPageRefStart >= 1
&& this.SkipPageRefStart <= 9
&& this.SkipPageRefEnd >= this.SkipPageRefStart
&& this.SkipPageRefEnd <= 9)
sInstr += "\"" + this.SkipPageRefStart + "-" + this.SkipPageRefEnd + "\" ";
}
if (this.Hyperlinks)
sInstr += "\\h ";
if (!this.RemoveBreaks)
sInstr += "\\x ";
if (this.PreserveTabs)
sInstr += "\\w ";
if (this.Separator)
sInstr += "\\p \"" + this.Separator + "\"";
if (this.Styles.length > 0)
{
sInstr += "\\t \"";
for (var nIndex = 0, nCount = this.Styles.length; nIndex < nCount; ++nIndex)
{
if (0 === nIndex)
sInstr += this.Styles[nIndex].Name;
else
sInstr += sListSeparator + this.Styles[nIndex].Name;
if (undefined !== this.Styles[nIndex].Lvl && null !== this.Styles[nIndex].Lvl)
sInstr += sListSeparator + this.Styles[nIndex].Lvl;
}
sInstr += "\" ";
}
if(this.Caption !== undefined)
{
sInstr += "\\c ";
if(typeof this.Caption === "string" && this.Caption.length > 0)
{
sInstr += "\"" + this.Caption + "\"";
}
}
if(this.CaptionOnlyText !== undefined)
{
sInstr += "\\a ";
if(typeof this.CaptionOnlyText === "string" && this.CaptionOnlyText.length > 0)
{
sInstr += "\"" + this.CaptionOnlyText + "\"";
}
}
return sInstr;
};
CFieldInstructionTOC.prototype.IsTableOfFigures = function ()
{
if(this.Caption !== undefined || this.CaptionOnlyText !== undefined)
{
return true;
}
return false;
};
CFieldInstructionTOC.prototype.IsTableOfContents = function ()
{
return !this.IsTableOfFigures();
};
/**
* ASK field
* @constructor
*/
function CFieldInstructionASK()
{
AscWord.FieldInstructionBase.call(this);
this.BookmarkName = "";
this.PromptText = "";
}
CFieldInstructionASK.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionASK.prototype.constructor = CFieldInstructionASK;
CFieldInstructionASK.prototype.Type = AscWord.fieldtype_ASK;
CFieldInstructionASK.prototype.SetBookmarkName = function(sBookmarkName)
{
this.BookmarkName = sBookmarkName;
};
CFieldInstructionASK.prototype.GetBookmarkName = function()
{
return this.BookmarkName;
};
CFieldInstructionASK.prototype.SetPromptText = function(sText)
{
this.PromptText = sText;
};
CFieldInstructionASK.prototype.GetPromptText = function()
{
if (!this.PromptText)
return this.BookmarkName;
return this.PromptText;
};
/**
* NUMPAGES field
* @constructor
*/
function CFieldInstructionNUMPAGES()
{
AscWord.FieldInstructionBase.call(this);
}
CFieldInstructionNUMPAGES.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionNUMPAGES.prototype.constructor = CFieldInstructionNUMPAGES;
CFieldInstructionNUMPAGES.prototype.Type = AscWord.fieldtype_NUMPAGES;
/**
* HYPERLINK field
* @constructor
*/
function CFieldInstructionHYPERLINK()
{
AscWord.FieldInstructionBase.call(this);
this.ToolTip = "";
this.Link = "";
this.BookmarkName = "";
}
CFieldInstructionHYPERLINK.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionHYPERLINK.prototype.constructor = CFieldInstructionHYPERLINK;
CFieldInstructionHYPERLINK.prototype.Type = AscWord.fieldtype_HYPERLINK;
CFieldInstructionHYPERLINK.prototype.SetToolTip = function(sToolTip)
{
this.ToolTip = sToolTip;
};
CFieldInstructionHYPERLINK.prototype.GetToolTip = function()
{
if ("" === this.ToolTip)
{
if (this.Link)
return (this.BookmarkName ? this.Link + "#" + this.BookmarkName : this.Link)
else if (this.BookmarkName)
return AscCommon.translateManager.getValue("Current Document");
return "";
}
return this.ToolTip;
};
CFieldInstructionHYPERLINK.prototype.SetLink = function(sLink)
{
this.Link = sLink;
};
CFieldInstructionHYPERLINK.prototype.GetLink = function()
{
return this.Link;
};
CFieldInstructionHYPERLINK.prototype.SetBookmarkName = function(sBookmarkName)
{
this.BookmarkName = sBookmarkName;
};
CFieldInstructionHYPERLINK.prototype.GetBookmarkName = function()
{
return this.BookmarkName;
};
CFieldInstructionHYPERLINK.prototype.ToString = function()
{
var sInstr = "HYPERLINK ";
if (this.Link)
sInstr += "\"" + this.Link + "\"";
if (this.ToolTip)
sInstr += "\\o \"" + this.ToolTip + "\"";
if (this.BookmarkName)
sInstr += "\\l " + this.BookmarkName;
return sInstr;
};
//----------------------------------------------------------------------------------------------------------------------
// Функции для совместимости с обычным ParaHyperlink
//----------------------------------------------------------------------------------------------------------------------
CFieldInstructionHYPERLINK.prototype.GetAnchor = function()
{
return this.GetBookmarkName();
};
CFieldInstructionHYPERLINK.prototype.GetValue = function()
{
return this.GetLink();
};
CFieldInstructionHYPERLINK.prototype.SetVisited = function(isVisited)
{
};
/**
* Проверяем является ли данная ссылка ссылкой в начало документа
* @returns {boolean}
*/
CFieldInstructionHYPERLINK.prototype.IsTopOfDocument = function()
{
return (this.GetBookmarkName() === "_top");
};
CFieldInstructionHYPERLINK.prototype.IsUseInDocument = function()
{
return !!(this.ComplexField && this.ComplexField.IsValid());
};
/**
* TIME field
* @constructor
*/
function CFieldInstructionTIME()
{
AscWord.FieldInstructionBase.call(this);
this.Format = "";
}
CFieldInstructionTIME.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionTIME.prototype.constructor = CFieldInstructionTIME;
CFieldInstructionTIME.prototype.Type = AscWord.fieldtype_TIME;
CFieldInstructionTIME.prototype.ToString = function()
{
return ("TIME \\@ \"" + this.sFormat + "\"");
};
CFieldInstructionTIME.prototype.SetFormat = function(sFormat)
{
this.Format = sFormat;
};
CFieldInstructionTIME.prototype.GetFormat = function()
{
return this.Format;
};
/**
* TIME field
* @constructor
*/
function CFieldInstructionDATE()
{
AscWord.FieldInstructionBase.call(this);
this.Format = "";
}
CFieldInstructionDATE.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionDATE.prototype.constructor = CFieldInstructionDATE;
CFieldInstructionDATE.prototype.Type = AscWord.fieldtype_DATE;
CFieldInstructionDATE.prototype.ToString = function()
{
return ("TIME \\@ \"" + this.sFormat + "\"");
};
CFieldInstructionDATE.prototype.SetFormat = function(sFormat)
{
this.Format = sFormat;
};
CFieldInstructionDATE.prototype.GetFormat = function()
{
return this.Format;
};
/**
* SEQ field
* @constructor
*/
function CFieldInstructionSEQ()
{
AscWord.FieldInstructionBase.call(this);
this.Id = null;
this.C = false;
this.H = false;
this.N = false;
this.R = null;
this.S = null;
this.NumFormat = Asc.c_oAscNumberingFormat.Decimal;
this.GeneralSwitches = [];
this.ParentContent = null;
}
CFieldInstructionSEQ.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionSEQ.prototype.constructor = CFieldInstructionSEQ;
CFieldInstructionSEQ.prototype.Type = AscWord.fieldtype_SEQ;
CFieldInstructionSEQ.prototype.ToString = function ()
{
var sInstruction = " SEQ ";
if(this.Id)
{
sInstruction += this.Id;
}
for(var i = 0; i < this.GeneralSwitches.length; ++i)
{
sInstruction += " \\* " + this.GeneralSwitches[i];
}
if(this.C)
{
sInstruction += " \\c"
}
if(this.H)
{
sInstruction += " \\h";
}
if(this.R)
{
sInstruction += " \\r " + this.R;
}
if(this.S)
{
sInstruction += " \\s " + this.S;
}
return sInstruction;
};
CFieldInstructionSEQ.prototype.SetComplexField = function (oComplexField)
{
AscWord.FieldInstructionBase.prototype.SetComplexField.call(this, oComplexField);
this.ParentContent = null;
var oBeginChar = oComplexField.BeginChar;
if(oBeginChar)
{
var oRun = oBeginChar.Run;
if(oRun)
{
var oParagraph = oRun.Paragraph;
if(oParagraph)
{
this.ParentContent = oParagraph.Parent;
}
}
}
};
CFieldInstructionSEQ.prototype.GetRestartNum = function ()
{
if(typeof this.R === "string" && this.R.length > 0)
{
var aTest = /[0-9]+/.exec(this.R);
var nResult;
if(Array.isArray(aTest) && aTest.length > 0)
{
nResult = parseInt(aTest[0]);
if(!isNaN(nResult))
{
return nResult;
}
}
}
return null;
};
CFieldInstructionSEQ.prototype.GetText = function ()
{
if(!this.ParentContent)
{
return "";
}
var oTopDocument = this.ParentContent.Is_TopDocument(true);
var aFields, oField, i, nIndex, nLvl, nCounter;
if(!oTopDocument)
{
return "";
}
if(oTopDocument.IsHdrFtr(false) || oTopDocument.IsFootnote(false))
{
return AscCommon.translateManager.getValue("Error! Main Document Only.");
}
if(this.H)
{
if(this.GeneralSwitches.length === 0)
{
return "";
}
}
nIndex = this.GetRestartNum();
if(nIndex === null)
{
aFields = [];
oTopDocument.GetAllSeqFieldsByType(this.Id, aFields);
nIndex = -1;
if(this.S)
{
nLvl = parseInt(this.S);
if(!isNaN(nLvl))
{
--nLvl;
for(i = aFields.length - 1; i > -1; --i)
{
oField = aFields[i];
if(AscCommon.isRealObject(oField) && this.ComplexField === oField)
{
break;
}
}
if(i > -1)
{
nCounter = i;
for(i = i - 1; i > -1; --i)
{
oField = aFields[i];
if(AscFormat.isRealNumber(oField) && oField <= nLvl)
{
aFields = aFields.splice(i + 1, nCounter - i);
break;
}
}
}
}
}
nCounter = 1;
for(i = 0; i < aFields.length; ++i)
{
oField = aFields[i];
if(AscCommon.isRealObject(oField))
{
if(this.ComplexField === oField)
{
nIndex = nCounter;
break;
}
if(!(oField.Instruction && oField.Instruction.C))
{
++nCounter;
}
}
}
}
if(nIndex > -1)
{
return AscCommon.IntToNumberFormat(nIndex, this.NumFormat);
}
return AscCommon.translateManager.getValue("Error! Main Document Only.");
};
CFieldInstructionSEQ.prototype.SetId = function (sVal)
{
this.Id = sVal;
};
CFieldInstructionSEQ.prototype.SetC = function (sVal)
{
this.C = sVal;
};
CFieldInstructionSEQ.prototype.SetH = function (sVal)
{
this.H = sVal;
};
CFieldInstructionSEQ.prototype.SetN = function (sVal)
{
this.N = sVal;
};
CFieldInstructionSEQ.prototype.SetR = function (sVal)
{
this.R = sVal;
};
CFieldInstructionSEQ.prototype.SetS = function (sVal)
{
this.S = sVal;
};
CFieldInstructionSEQ.prototype.SetGeneralSwitches = function (aSwitches)
{
this.GeneralSwitches = aSwitches;
for(var i = 0; i < aSwitches.length; ++i)
{
this.NumFormat = GeneralToNumFormat(aSwitches[i]);
}
};
CFieldInstructionSEQ.prototype.CheckId = function(type)
{
if (!(typeof type === "string"))
return type === this.Id;
return (type.split(" ").join("_") === this.Id);
};
function GeneralToNumFormat(sFormat)
{
if(typeof sFormat === 'string')
{
if(sFormat.toLowerCase() === 'arabic')
{
return Asc.c_oAscNumberingFormat.Decimal;
}
else if(sFormat.toLowerCase() === 'alphabetic')
{
if(sFormat[0] === 'A')
{
return Asc.c_oAscNumberingFormat.UpperLetter;
}
else
{
return Asc.c_oAscNumberingFormat.LowerLetter;
}
}
else if(sFormat.toLowerCase() === 'roman')
{
if(sFormat[0] === 'r')
{
return Asc.c_oAscNumberingFormat.LowerRoman;
}
else
{
return Asc.c_oAscNumberingFormat.UpperRoman;
}
}
}
return Asc.c_oAscNumberingFormat.Decimal;
}
/**
* STYLEREF field
* @constructor
*/
function CFieldInstructionSTYLEREF()
{
AscWord.FieldInstructionBase.call(this);
this.StyleName = null;
this.OutlineLvl = null;
this.L = null;
this.N = null;
this.P = null;
this.R = null;
this.T = null;
this.W = null;
this.S = null;
this.GeneralSwitches = [];
this.ParentContent = null;
this.ParentParagraph = null;
}
CFieldInstructionSTYLEREF.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionSTYLEREF.prototype.constructor = CFieldInstructionSTYLEREF;
CFieldInstructionSTYLEREF.prototype.Type = AscWord.fieldtype_STYLEREF;
CFieldInstructionSTYLEREF.prototype.SetL = function(v){this.L = v;};
CFieldInstructionSTYLEREF.prototype.SetN = function(v){this.N = v;};
CFieldInstructionSTYLEREF.prototype.SetP = function(v){this.P = v;};
CFieldInstructionSTYLEREF.prototype.SetR = function(v){this.R = v;};
CFieldInstructionSTYLEREF.prototype.SetT = function(v){this.T = v;};
CFieldInstructionSTYLEREF.prototype.SetW = function(v){this.W = v;};
CFieldInstructionSTYLEREF.prototype.SetS = function(v){this.S = v;};
CFieldInstructionSTYLEREF.prototype.SetGeneralSwitches = function(v){this.GeneralSwitches = v;};
CFieldInstructionSTYLEREF.prototype.GetText = function()
{
const sDefaultMessage = "Error! No text of specified style in document.";
if(this.ParentContent)
{
const oHdrFtr = this.ParentContent.IsHdrFtr(true);
if (oHdrFtr)
{
//TODO
}
else
{
const oFootNote = this.ParentContent.IsFootnote(true);
if(oFootNote)
{
//TODO
}
else
{
if(this.ParentParagraph)
{
let oParagraph = null;
let sRet = "";
let bAbove = true;
let oStyles = this.ParentContent.GetStyles();
let sStyleId;
let nOutlineLvl;
let nStartIndex, oTmpContent;
let oShape, oMainGroup, oDrawing, oCell, oRow, oTable, oBLSdt;
let oParentParagraph, oParentContent, nParentIdx;
let fCheckParagraph = null;
if(this.StyleName)
{
sStyleId = oStyles.GetStyleIdByName(this.StyleName);
if(sStyleId)
{
fCheckParagraph = function (oParagraph)
{
return oParagraph.GetParagraphStyle() === sStyleId;
};
}
}
else if(this.OutlineLvl !== null)
{
nOutlineLvl = this.OutlineLvl - 1;
fCheckParagraph = function (oParagraph)
{
return oParagraph.GetOutlineLvl() === nOutlineLvl;
};
}
if(fCheckParagraph)
{
oParentParagraph = this.ParentParagraph;
oParentContent = this.ParentContent;
nParentIdx = this.ParentParagraph.GetIndex();
oShape = this.ParentContent.Is_DrawingShape(true);
if(oShape)
{
if(oShape.group)
{
oMainGroup = oShape.getMainGroup();
oDrawing = oMainGroup.parent;
}
else
{
oDrawing = oShape.parent;
}
if(!oDrawing)
{
return AscCommon.translateManager.getValue(sDefaultMessage);
}
oParentParagraph = oDrawing.GetParagraph();
oParentContent = oParentParagraph.GetParent();
nParentIdx = oParentParagraph.GetIndex();
}
if(fCheckParagraph(oParentParagraph))
{
oParagraph = oParentParagraph;
}
oTmpContent = oParentContent;
nStartIndex = nParentIdx;
while(oTmpContent && !oParagraph)
{
oParagraph = oTmpContent.FindParagraph(fCheckParagraph, true, nStartIndex);
if(oParagraph)
{
break;
}
oCell = oTmpContent.IsTableCellContent(true);
if(oCell)
{
oRow = oCell.GetRow();
oTable = oRow.GetTable();
if(!oRow || !oTable)
{
return AscCommon.translateManager.getValue(sDefaultMessage);
}
oParagraph = oRow.FindParagraph(fCheckParagraph, true, oCell.GetIndex() - 1);
if(!oParagraph)
{
oParagraph = oTable.FindParagraph(fCheckParagraph, true, oRow.GetIndex() - 1);
}
oTmpContent = oTable.Parent;
nStartIndex = oTable.GetIndex() - 1;
}
else if(oTmpContent.IsBlockLevelSdtContent())
{
oBLSdt = oTmpContent.GetParent();
oTmpContent = oBLSdt.Parent;
nStartIndex = oBLSdt.GetIndex() - 1;
}
else
{
break;
}
}
if(!oParagraph)
{
oTmpContent = oParentContent;
nStartIndex = nParentIdx + 1;
while(oTmpContent && !oParagraph)
{
oParagraph = oTmpContent.FindParagraph(fCheckParagraph, false, nStartIndex);
if(oParagraph)
{
break;
}
oCell = oTmpContent.IsTableCellContent(true);
if(oCell)
{
oRow = oCell.GetRow();
oTable = oRow.GetTable();
if(!oRow || !oTable)
{
return AscCommon.translateManager.getValue(sDefaultMessage);
}
oParagraph = oRow.FindParagraph(fCheckParagraph, false, oCell.GetIndex() + 1);
if(!oParagraph)
{
oParagraph = oTable.FindParagraph(fCheckParagraph, false, oRow.GetIndex() + 1);
}
oTmpContent = oTable.Parent;
nStartIndex = oTable.GetIndex() + 1;
}
else if(oTmpContent.IsBlockLevelSdtContent())
{
oBLSdt = oTmpContent.GetParent();
oTmpContent = oBLSdt.Parent;
nStartIndex = oBLSdt.GetIndex() + 1;
}
else
{
break;
}
}
}
if(oParagraph)
{
if(this.N || this.R || this.W || this.S)
{
if(oParagraph.IsNumberedNumbering())
{
sRet += oParagraph.GetNumberingText(true);
}
else
{
sRet += "0";
}
}
else
{
oParagraph.ApplyToAll = true;
sRet = oParagraph.GetSelectedText(true, {});
oParagraph.ApplyToAll = false;
}
if(this.P)
{
sRet += (" " + AscCommon.translateManager.getValue(bAbove ? "above" : "below"));
}
return sRet;
}
}
return AscCommon.translateManager.getValue(sDefaultMessage);
}
}
}
}
return AscCommon.translateManager.getValue(sDefaultMessage);
};
CFieldInstructionSTYLEREF.prototype.SetStyleName = function(v)
{
this.StyleName = v;
};
CFieldInstructionSTYLEREF.prototype.SetOutlineLvl = function(v)
{
this.OutlineLvl = v;
};
CFieldInstructionSTYLEREF.prototype.ToString = function()
{
var sRet = " STYLEREF ";
if(this.S)
{
sRet += " \\s"
}
if(this.StyleName)
{
sRet += this.StyleName;
}
else if(this.OutlineLvl !== null)
{
sRet += this.OutlineLvl;
}
if(this.L)
{
sRet += " \\l";
}
if(this.N)
{
sRet += " \\n"
}
if(this.P)
{
sRet += " \\p"
}
if(this.R)
{
sRet += " \\r"
}
if(this.T)
{
sRet += " \\t"
}
if(this.W)
{
sRet += " \\w"
}
return sRet;
};
CFieldInstructionSTYLEREF.prototype.SetComplexField = function (oComplexField)
{
AscWord.FieldInstructionBase.prototype.SetComplexField.call(this, oComplexField);
this.ParentContent = null;
var oBeginChar = oComplexField.BeginChar;
if(oBeginChar)
{
var oRun = oBeginChar.Run;
if(oRun)
{
var oParagraph = oRun.Paragraph;
if(oParagraph)
{
this.ParentParagraph = oParagraph;
this.ParentContent = oParagraph.Parent;
}
}
}
};
/**
* NOTEREF field
* @constructor
*/
function CFieldInstructionNOTEREF()
{
AscWord.FieldInstructionBase.call(this);
this.GeneralSwitches = [];
this.BookmarkName = "";
this.Hyperlink = false; // \h - is hyperlink
this.bIsPosition = false; // \p - above/below
this.bFormatting = false; // \p - format as notes or endnotes
}
CFieldInstructionNOTEREF.prototype = Object.create(AscWord.FieldInstructionBase.prototype);
CFieldInstructionNOTEREF.prototype.constructor = CFieldInstructionNOTEREF;
CFieldInstructionNOTEREF.prototype.Type = AscWord.fieldtype_NOTEREF;
CFieldInstructionNOTEREF.prototype.SetGeneralSwitches = function (aSwitches)
{
this.GeneralSwitches = aSwitches;
};
CFieldInstructionNOTEREF.prototype.SetBookmarkName = function(sBookmarkName)
{
this.BookmarkName = sBookmarkName;
};
CFieldInstructionNOTEREF.prototype.GetBookmarkName = function()
{
return this.BookmarkName;
};
CFieldInstructionNOTEREF.prototype.SetHyperlink = function(bIsHyperlink)
{
this.Hyperlink = bIsHyperlink;
};
CFieldInstructionNOTEREF.prototype.GetHyperlink = function()
{
return this.Hyperlink;
};
CFieldInstructionNOTEREF.prototype.SetIsPosition = function(bVal)
{
this.bIsPosition = bVal;
};
CFieldInstructionNOTEREF.prototype.IsPosition = function()
{
return this.bIsPosition;
};
CFieldInstructionNOTEREF.prototype.SetIsFormatting = function(bVal)
{
this.bFormatting = bVal;
};
CFieldInstructionNOTEREF.prototype.IsFormatting = function()
{
return this.bFormatting;
};
CFieldInstructionNOTEREF.prototype.ToString = function()
{
var sInstruction = " NOTEREF ";
sInstruction += this.BookmarkName;
for(var nSwitch = 0; nSwitch < this.GeneralSwitches.length; ++nSwitch)
{
sInstruction += " \\* " + this.GeneralSwitches[nSwitch];
}
if(this.GetHyperlink())
{
sInstruction += " \\h";
}
if(this.IsPosition())
{
sInstruction += " \\p";
}
if(this.IsFormatting())
{
sInstruction += " \\f";
}
return sInstruction;
};
//----------------------------------------------------------------------------------------------------------------------
// Функции для совместимости с обычным ParaHyperlink
//----------------------------------------------------------------------------------------------------------------------
CFieldInstructionNOTEREF.prototype.IsTopOfDocument = function()
{
return (this.GetAnchor() === "_top");
};
CFieldInstructionNOTEREF.prototype.GetAnchor = function()
{
var sBookmarkName = this.GetBookmarkName();
var sAnchor = sBookmarkName;
if(this.ComplexField)
{
var oLogicDoc = this.ComplexField.LogicDocument;
if(oLogicDoc)
{
var oBookmarksManager = oLogicDoc.GetBookmarksManager();
if(oBookmarksManager)
{
var oBookmark = oBookmarksManager.GetBookmarkByName(sBookmarkName);
if(!oBookmark)
{
sAnchor = "_top";
}
}
}
}
return sAnchor;
};
CFieldInstructionNOTEREF.prototype.GetValue = function()
{
return "";
};
CFieldInstructionNOTEREF.prototype.SetVisited = function(isVisited)
{
};
CFieldInstructionNOTEREF.prototype.SetToolTip = function(sToolTip)
{
};
CFieldInstructionNOTEREF.prototype.GetToolTip = function()
{
return AscCommon.translateManager.getValue("Current Document");
};
/**
* Класс для разбора строки с инструкцией
* @constructor
*/
function CFieldInstructionParser()
{
this.Line = "";
this.Pos = 0;
this.Buffer = "";
this.Result = null;
this.SavedStates = [];
}
CFieldInstructionParser.prototype.GetInstructionClass = function(sLine)
{
this.Line = sLine;
this.Pos = 0;
this.Buffer = "";
this.Result = null;
this.private_Parse();
return this.Result;
};
CFieldInstructionParser.prototype.InitParaFieldArguments = function(Type, sLine, oParaFiles)
{
this.Line = sLine;
this.Pos = 0;
this.Buffer = "";
this.Result = null;
oParaFiles.FieldType = Type;
oParaFiles.Arguments = this.private_ReadArguments().slice(1);
//todo Switches
oParaFiles.Switches = this.Pos < this.Line.length ? [this.Line.substring(this.Pos)] : [];
};
CFieldInstructionParser.prototype.private_Parse = function()
{
if (!this.private_ReadNext())
return this.private_ReadREF("");
var sBuffer = this.Buffer.toUpperCase();
if("PAGE" === sBuffer)
{
this.private_ReadPAGE();
}
else if("PAGEREF" === sBuffer)
{
this.private_ReadPAGEREF();
}
else if("TOC" === sBuffer)
{
this.private_ReadTOC();
}
else if("ASC" === sBuffer)
{
this.private_ReadASK();
}
else if("REF" === sBuffer)
{
this.private_ReadREF();
}
else if("NOTEREF" === sBuffer)
{
this.private_ReadNOTEREF();
}
else if("NUMPAGES" === sBuffer)
{
this.private_ReadNUMPAGES();
}
else if("HYPERLINK" === sBuffer)
{
this.private_ReadHYPERLINK();
}
else if("SEQ" === sBuffer)
{
this.private_ParseSEQ();
}
else if("STYLEREF" === sBuffer)
{
this.private_ParseSTYLEREF();
}
else if ("TIME" === sBuffer)
{
this.private_ReadTIME();
}
else if ("DATE" === sBuffer)
{
this.private_ReadDATE();
}
else if ("ADDIN" === sBuffer)
{
this.private_ReadADDIN();
}
else if ("MERGEFIELD" === sBuffer)
{
this.private_ReadMERGEFIELD();
}
else if ("FORMTEXT" === sBuffer)
{
this.private_ReadFORMTEXT();
}
else if ("FORMCHECKBOX" === sBuffer)
{
this.private_ReadFORMCHECKBOX();
}
else if(sBuffer.indexOf("=") === 0)
{
this.private_ReadFORMULA();
}
else
{
this.private_ReadREF();
}
};
CFieldInstructionParser.prototype.private_ReadNext = function()
{
let nLen = this.Line.length;
let bWord = false;
this.Buffer = "";
while (this.Pos < nLen)
{
var nCharCode = this.Line.charCodeAt(this.Pos);
if (32 === nCharCode || 9 === nCharCode)
{
if (bWord)
return true;
}
else if (34 === nCharCode && (0 === this.Pos || 92 !== this.Line.charCodeAt(this.Pos - 1)))
{
// Кавычки
this.Pos++;
bWord = true;
while (this.Pos < nLen)
{
nCharCode = this.Line.charCodeAt(this.Pos);
if (34 === nCharCode && 92 !== this.Line.charCodeAt(this.Pos - 1))
{
this.Pos++;
break;
}
if (34 === nCharCode && 92 === this.Line.charCodeAt(this.Pos - 1) && this.Buffer.length > 0)
this.Buffer = this.Buffer.substring(0, this.Buffer.length - 1);
this.Buffer += this.Line.charAt(this.Pos);
this.Pos++;
}
return bWord;
}
else
{
this.Buffer += this.Line.charAt(this.Pos);
bWord = true;
}
this.Pos++;
}
return bWord;
};
CFieldInstructionParser.prototype.private_ReadTillEnd = function()
{
this.Buffer = this.Line.substr(this.Pos).trim();
return !!this.Buffer;
};
CFieldInstructionParser.prototype.private_ReadArguments = function()
{
var arrArguments = [];
var sArgument = this.private_ReadArgument();
while (null !== sArgument)
{
arrArguments.push(sArgument);
sArgument = this.private_ReadArgument();
}
return arrArguments;
};
CFieldInstructionParser.prototype.private_ReadArgument = function()
{
this.private_SaveState();
if (!this.private_ReadNext())
return null;
if (this.private_IsSwitch())
{
this.private_RestoreState();
return null;
}
this.private_RemoveLastState();
return this.Buffer;
};
CFieldInstructionParser.prototype.private_IsSwitch = function()
{
return this.Buffer.charAt(0) === '\\';
};
CFieldInstructionParser.prototype.private_GetSwitchLetter = function()
{
return this.Buffer.charAt(1);
};
CFieldInstructionParser.prototype.private_SaveState = function()
{
this.SavedStates.push(this.Pos);
};
CFieldInstructionParser.prototype.private_RestoreState = function()
{
if (this.SavedStates.length > 0)
this.Pos = this.SavedStates[this.SavedStates.length - 1];
this.private_RemoveLastState();
};
CFieldInstructionParser.prototype.private_RemoveLastState = function()
{
if (this.SavedStates.length > 0)
this.SavedStates.splice(this.SavedStates.length - 1, 1);
};
CFieldInstructionParser.prototype.private_ReadGeneralFormatSwitch = function()
{
if (!this.private_IsSwitch() || this.private_GetSwitchLetter() !== '*')
return;
let arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.addGeneralSwitches(arrArguments);
};
CFieldInstructionParser.prototype.private_ReadPAGE = function()
{
this.Result = new CFieldInstructionPAGE();
// Zero or more general-formatting-switches
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
this.private_ReadGeneralFormatSwitch();
}
};
CFieldInstructionParser.prototype.private_ReadFORMULA = function()
{
this.Result = new CFieldInstructionFORMULA();
var sFormula = this.Buffer.slice(1, this.Buffer.length);
var sFormat = null;
var bFormat = false;
var bNumFormat = false;
while(this.private_ReadNext())
{
if(this.private_IsSwitch())
{
bFormat = true;
if ('#' === this.Buffer.charAt(1))
{
bNumFormat = true;
}
else
{
this.private_ReadGeneralFormatSwitch();
}
}
else
{
if(bFormat)
{
if(bNumFormat)
{
sFormat = this.Buffer;
}
}
else
{
sFormula += this.Buffer;
}
bFormat = false;
bNumFormat = false;
}
}
sFormula = sFormula.toUpperCase();
var oFormat;
if(null !== sFormat)
{
oFormat = AscCommon.oNumFormatCache.get(sFormat, AscCommon.NumFormatType.WordFieldNumeric);
this.Result.SetFormat(oFormat);
}
this.Result.SetFormula(sFormula);
};
CFieldInstructionParser.prototype.private_ReadPAGEREF = function()
{
var sBookmarkName = null;
var isHyperlink = false, isPageRel = false;
var isSwitch = false, isBookmark = false;
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
isSwitch = true;
if ('p' === this.Buffer.charAt(1))
isPageRel = true;
else if ('h' === this.Buffer.charAt(1))
isHyperlink = true;
}
else if (!isSwitch && !isBookmark)
{
sBookmarkName = this.Buffer;
isBookmark = true;
}
}
this.Result = new CFieldInstructionPAGEREF(sBookmarkName, isHyperlink, isPageRel);
};
CFieldInstructionParser.prototype.private_ReadTOC = function()
{
// TODO: \a, \b, \c, \d, \f, \l, \s, \z, \u
this.Result = new CFieldInstructionTOC();
var arrArguments;
var isOutline = false, isStyles = false;
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
var sType = this.private_GetSwitchLetter();
if ('w' === sType)
{
this.Result.SetPreserveTabs(true);
}
else if ('x' === sType)
{
this.Result.SetRemoveBreaks(false);
}
else if ('h' === sType)
{
this.Result.SetHyperlinks(true);
}
else if ('p' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetSeparator(arrArguments[0]);
}
else if ('o' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
var arrRange = this.private_ParseIntegerRange(arrArguments[0]);
if (null !== arrRange)
this.Result.SetHeadingRange(arrRange[0], arrRange[1]);
}
else
{
this.Result.SetHeadingRange(1, 9);
}
isOutline = true;
}
else if ('t' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
this.Result.SetStylesArrayRaw(arrArguments[0]);
isStyles = true;
}
}
else if ('n' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
var arrRange = this.private_ParseIntegerRange(arrArguments[0]);
if (null !== arrRange)
this.Result.SetPageRefSkippedLvls(true, arrRange[0], arrRange[1]);
else
this.Result.SetPageRefSkippedLvls(true, -1, -1);
}
else
{
this.Result.SetPageRefSkippedLvls(true, -1, -1);
}
}
else if ('c' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0 && (typeof arrArguments[0] === "string"))
this.Result.SetCaption(arrArguments[0]);
}
else if ('a' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0 && (typeof arrArguments[0] === "string"))
this.Result.SetCaptionOnlyText(arrArguments[0]);
}
}
}
if (!isOutline && !isStyles)
this.Result.SetHeadingRange(1, 9);
};
CFieldInstructionParser.prototype.private_ReadASK = function()
{
this.Result = new CFieldInstructionASK();
var arrArguments = this.private_ReadArguments();
if (arrArguments.length >= 2)
this.Result.SetPromptText(arrArguments[1]);
if (arrArguments.length >= 1)
this.Result.SetBookmarkName(arrArguments[0]);
// TODO: Switches
};
CFieldInstructionParser.prototype.private_ReadREF = function(sBookmarkName)
{
this.Result = new AscWord.FieldInstructionREF();
if (undefined !== sBookmarkName)
{
this.Result.SetBookmarkName(sBookmarkName);
}
else
{
var arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
this.Result.SetBookmarkName(arrArguments[0]);
}
}
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
var sType = this.private_GetSwitchLetter();
if ('*' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.addGeneralSwitches(arrArguments);
}
else if("d" === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
if(typeof arrArguments[0] === "string" && arrArguments[0].length > 0)
{
this.Result.SetDelimiter(arrArguments[0]);
}
}
}
else if("h" === sType)
{
this.Result.SetHyperlink(true);
}
else if("n" === sType)
{
this.Result.SetIsNumberNoContext(true);
}
else if("w" === sType)
{
this.Result.SetIsNumberFullContext(true);
}
else if("r" === sType)
{
this.Result.SetIsNumber(true);
}
else if("p" === sType)
{
this.Result.SetIsPosition(true);
}
}
else if ("" === this.Result.GetBookmarkName())
{
this.Result.SetBookmarkName(this.Buffer);
}
}
};
CFieldInstructionParser.prototype.private_ReadNOTEREF = function()
{
this.Result = new CFieldInstructionNOTEREF();
var arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
this.Result.SetBookmarkName(arrArguments[0]);
}
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
var sType = this.private_GetSwitchLetter();
if ('*' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetGeneralSwitches(arrArguments);
}
else if("h" === sType) {
this.Result.SetHyperlink(true);
}
else if("f" === sType) {
this.Result.SetIsFormatting(true);
}
else if("p" === sType) {
this.Result.SetIsPosition(true);
}
}
}
};
CFieldInstructionParser.prototype.private_ReadNUMPAGES = function()
{
this.Result = new CFieldInstructionNUMPAGES();
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
this.private_ReadGeneralFormatSwitch();
}
};
CFieldInstructionParser.prototype.private_ReadHYPERLINK = function()
{
this.Result = new CFieldInstructionHYPERLINK();
var arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetLink(arrArguments[0]);
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
var sType = this.private_GetSwitchLetter();
if ('o' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetToolTip(arrArguments[0]);
}
else if ('l' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetBookmarkName(arrArguments[0]);
}
// TODO: Остальные флаги \m \n \t для нас бесполезны
}
}
};
CFieldInstructionParser.prototype.private_ParseIntegerRange = function(sValue)
{
// value1-value2
var nSepPos = sValue.indexOf("-");
if (-1 === nSepPos)
return null;
var nValue1 = parseInt(sValue.substr(0, nSepPos));
var nValue2 = parseInt(sValue.substr(nSepPos + 1));
if (isNaN(nValue1) || isNaN(nValue2))
return null;
return [nValue1, nValue2];
};
CFieldInstructionParser.prototype.private_ParseSEQ = function()
{
this.Result = new CFieldInstructionSEQ();
var arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetId(arrArguments[0]);
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
var sType = this.private_GetSwitchLetter();
if ('*' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetGeneralSwitches(arrArguments);
}
else if ('c' === sType)
{
this.Result.SetC(true);
}
else if ('h' === sType)
{
this.Result.SetH(true);
}
else if ('n' === sType)
{
this.Result.SetN(true);
}
else if ('r' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
this.Result.SetR(arrArguments[0]);
}
}
else if('s' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
this.Result.SetS(arrArguments[0]);
}
}
}
}
};
CFieldInstructionParser.prototype.private_ParseSTYLEREF = function()
{
this.Result = new CFieldInstructionSTYLEREF();
var arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
{
let sArgument = arrArguments[0];
if (typeof sArgument === "string" &&
sArgument.length === 1 &&
AscCommon.IsDigit(sArgument.charCodeAt(0)) &&
sArgument !== "0")
{
this.Result.SetOutlineLvl(parseInt(sArgument));
}
else
{
this.Result.SetStyleName(sArgument);
}
}
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
var sType = this.private_GetSwitchLetter();
if ('*' === sType)
{
arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetGeneralSwitches(arrArguments);
}
else if ('l' === sType)
{
this.Result.SetL(true);
}
else if ('n' === sType)
{
this.Result.SetN(true);
}
else if ('p' === sType)
{
this.Result.SetP(true);
}
else if ('r' === sType)
{
this.Result.SetR(true);
}
else if('t' === sType)
{
this.Result.SetT(true)
}
else if('w' === sType)
{
this.Result.SetW(true)
}
else if ('s' === sType)
{
this.Result.SetS(true);
}
}
}
};
CFieldInstructionParser.prototype.private_ReadTIME = function()
{
this.Result = new CFieldInstructionTIME();
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
if ('@' === this.Buffer.charAt(1))
{
var arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetFormat(arrArguments[0]);
}
}
}
};
CFieldInstructionParser.prototype.private_ReadDATE = function()
{
this.Result = new CFieldInstructionDATE();
while (this.private_ReadNext())
{
if (this.private_IsSwitch())
{
if ('@' === this.Buffer.charAt(1))
{
var arrArguments = this.private_ReadArguments();
if (arrArguments.length > 0)
this.Result.SetFormat(arrArguments[0]);
}
}
}
};
CFieldInstructionParser.prototype.private_ReadADDIN = function()
{
this.Result = new AscWord.CFieldInstructionADDIN();
if (this.private_ReadTillEnd())
this.Result.SetValue(this.Buffer);
};
CFieldInstructionParser.prototype.private_ReadMERGEFIELD = function()
{
this.Result = new AscWord.CFieldInstructionMERGEFIELD();
let arrArguments = this.private_ReadArguments();
if (arrArguments.length)
this.Result.SetName(arrArguments[0]);
};
CFieldInstructionParser.prototype.private_ReadFORMTEXT = function()
{
this.Result = new AscWord.CFieldInstructionFORMTEXT();
};
CFieldInstructionParser.prototype.private_ReadFORMCHECKBOX = function()
{
this.Result = new AscWord.CFieldInstructionFORMCHECKBOX();
};