189 lines
5.7 KiB
JavaScript
189 lines
5.7 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";
|
|
|
|
(function(window)
|
|
{
|
|
/**
|
|
* Класс представляющий элемент номер страницы
|
|
* @constructor
|
|
* @extends {AscWord.CRunElementBase}
|
|
*/
|
|
function CRunPageNum()
|
|
{
|
|
AscWord.CRunElementBase.call(this);
|
|
|
|
this.Width = 0;
|
|
this.WidthVisible = 0;
|
|
|
|
this.parent = null;
|
|
this.numFormat = -1;
|
|
this.numText = "1";
|
|
this.pageNum = 1;
|
|
this.textPr = null;
|
|
this.graphemes = [];
|
|
this.widths = [];
|
|
}
|
|
CRunPageNum.prototype = Object.create(AscWord.CRunElementBase.prototype);
|
|
CRunPageNum.prototype.constructor = CRunPageNum;
|
|
|
|
CRunPageNum.prototype.Type = para_PageNum;
|
|
CRunPageNum.prototype.Draw = function(x, y, context)
|
|
{
|
|
let fontSize = this.textPr.FontSize * this.textPr.getFontCoef();
|
|
for (let index = 0; index < this.graphemes.length; ++index)
|
|
{
|
|
AscFonts.DrawGrapheme(this.graphemes[index], context, x, y, fontSize);
|
|
x += this.widths[index] * fontSize;
|
|
}
|
|
};
|
|
CRunPageNum.prototype.Measure = function (Context, TextPr)
|
|
{
|
|
this.textPr = TextPr;
|
|
this._measure();
|
|
};
|
|
CRunPageNum.prototype.SetNumFormat = function(format)
|
|
{
|
|
this.numFormat = format;
|
|
};
|
|
CRunPageNum.prototype.SetValue = function(pageNum, numFormat)
|
|
{
|
|
if (-1 !== this.numFormat)
|
|
numFormat = this.numFormat;
|
|
|
|
this.pageNum = pageNum;
|
|
this.numText = AscCommon.IntToNumberFormat(pageNum, numFormat);
|
|
|
|
this._measure();
|
|
};
|
|
CRunPageNum.prototype.IsNeedSaveRecalculateObject = function()
|
|
{
|
|
return true;
|
|
};
|
|
CRunPageNum.prototype.SaveRecalculateObject = function(isCopy)
|
|
{
|
|
return new AscWord.PageNumRecalculateObject(this.Type, this.graphemes, this.widths, this.Width, isCopy);
|
|
};
|
|
CRunPageNum.prototype.LoadRecalculateObject = function(recalcObj)
|
|
{
|
|
this.graphemes = recalcObj.graphemes;
|
|
this.widths = recalcObj.widths;
|
|
this.Width = recalcObj.width;
|
|
this.WidthVisible = this.Width;
|
|
};
|
|
CRunPageNum.prototype.PrepareRecalculateObject = function()
|
|
{
|
|
this.graphemes = [];
|
|
this.widths = [];
|
|
};
|
|
CRunPageNum.prototype.Document_CreateFontCharMap = function(charMap)
|
|
{
|
|
let numFormat = (-1 !== this.numFormat ? this.numFormat : Asc.c_oAscNumberingFormat.Decimal);
|
|
let symbols = AscWord.GetNumberingSymbolsByFormat(numFormat);
|
|
for (let iter = symbols.getUnicodeIterator(); iter.check(); iter.next())
|
|
{
|
|
charMap.AddChar(String.fromCodePoint(iter.value()));
|
|
}
|
|
};
|
|
CRunPageNum.prototype.CanAddNumbering = function()
|
|
{
|
|
return true;
|
|
};
|
|
CRunPageNum.prototype.GetValue = function()
|
|
{
|
|
return this.pageNum;
|
|
};
|
|
/**
|
|
* Выставляем родительский класс
|
|
* @param {ParaRun} parent
|
|
*/
|
|
CRunPageNum.prototype.SetParent = function(parent)
|
|
{
|
|
this.parent = parent;
|
|
};
|
|
/**
|
|
* Получаем родительский класс
|
|
* @returns {?ParaRun}
|
|
*/
|
|
CRunPageNum.prototype.GetParent = function()
|
|
{
|
|
return this.parent;
|
|
};
|
|
CRunPageNum.prototype.GetFontSlot = function(textPr)
|
|
{
|
|
return AscWord.fontslot_Unknown;
|
|
};
|
|
CRunPageNum.prototype.ToString = function()
|
|
{
|
|
return this.numText;
|
|
};
|
|
CRunPageNum.prototype._measure = function()
|
|
{
|
|
if (!this.textPr)
|
|
return;
|
|
|
|
AscWord.stringShaper.Shape(this.numText.codePointsArray(), this.textPr);
|
|
|
|
this.graphemes = AscWord.stringShaper.GetGraphemes();
|
|
this.widths = AscWord.stringShaper.GetWidths();
|
|
|
|
let totalWidth = 0;
|
|
for (let index = 0; index < this.widths.length; ++index)
|
|
{
|
|
totalWidth += this.widths[index];
|
|
}
|
|
let fontSize = this.textPr.FontSize * this.textPr.getFontCoef();
|
|
totalWidth = (totalWidth * fontSize * AscWord.TEXTWIDTH_DIVIDER) | 0;
|
|
|
|
this.Width = totalWidth;
|
|
this.WidthVisible = totalWidth;
|
|
};
|
|
|
|
/**
|
|
* @constructor
|
|
*/
|
|
function PageNumRecalculateObject(type, graphemes, widths, totalWidth, isCopy)
|
|
{
|
|
this.type = type;
|
|
this.graphemes = graphemes && isCopy ? graphemes.slice() : graphemes;
|
|
this.widths = widths && isCopy ? widths.slice() : widths;
|
|
this.width = totalWidth;
|
|
}
|
|
|
|
//--------------------------------------------------------export----------------------------------------------------
|
|
window['AscWord'] = window['AscWord'] || {};
|
|
window['AscWord'].CRunPageNum = CRunPageNum;
|
|
window['AscWord'].PageNumRecalculateObject = PageNumRecalculateObject;
|
|
|
|
})(window);
|