/*
 * SDK Pullenti Unitext, version 4.33, fabruary 2026. Copyright (c) 2013-2026, Pullenti. All rights reserved. 
 * Non-Commercial Freeware and Commercial Software. 
 * This class is generated using the converter UniSharping (www.unisharping.ru) from Pullenti C# project. 
 * The latest version of the code is available on the site www.pullenti.ru
 */

const Hashtable = require("./../unisharp/Hashtable");
const StringBuilder = require("./../unisharp/StringBuilder");

const GetHtmlParamFootnoteOutType = require("./GetHtmlParamFootnoteOutType");

/**
 * Параметры генерации HTML функциями GetHtml и GetHtmlString
 * Параметры генерации HTML
 */
class GetHtmlParam {
    
    constructor() {
        this.styles = new Hashtable();
        this.useInnerDocuments = true;
        this.footnotes = GetHtmlParamFootnoteOutType.ENDOFUNIT;
        this.outCommentsWithDelTags = false;
        this.outBeginEndChars = false;
        this.outStyles = true;
        this.hideEditionsAndComments = false;
        this.hyperlinksTargetBlank = false;
        this.useCssClasses = false;
        this.outHtmlAndBodyTags = false;
        this.title = null;
        this.maxImageSize = 10000000;
        this.maxHtmlSize = 20000000;
        this.maxTableRowCount = 0;
        this.tag = null;
        this.m_Footnotes = new Array();
        this.m_Endnotes = new Array();
        this.m_FootnotesDb = new Array();
        this.m_InFootregime = false;
    }
    
    /**
     * Вызывается в самом начале перед генерацией для элемента
     * @param it текущий элемент
     * @param res для результата
     * @return если false, то сразу выход из функции - генерация для элемета не производится
     */
    callBefore(it, res) {
        return true;
    }
    
    /**
     * Вызывается в самом конце после генерации Html для элемента
     * @param it текущий элемент
     * @param res для результата
     */
    callAfter(it, res) {
        
    }
    
    _outEndnotes(res) {
        if (this.m_InFootregime) 
            return;
        this.m_InFootregime = true;
        if (this.m_Endnotes.length > 0) {
            res.append("\r\n<hr/>");
            res.append("\r\n<div style=\"border-left:2pt solid green;padding-left:5pt;margin-left:30pt;margin-top:10pt;margin-bottom:10pt;font-size:smaller;text-align:left;font-weight:normal\">");
            for (let i = 0; i < this.m_Endnotes.length; i++) {
                if (i > 0) 
                    res.append("<br/>");
                res.append("\r\n<b id=\"").append(((this.m_Endnotes[i].id != null ? this.m_Endnotes[i].id : ""))).append("\"><sup>E").append((i + 1)).append("</sup></b>");
                if (this.m_Endnotes[i].content !== null) 
                    this.m_Endnotes[i].content.getHtml(res, this);
            }
            res.append("\r\n</div>");
            this.m_Endnotes.splice(0, this.m_Endnotes.length);
        }
        this.m_InFootregime = false;
    }
    
    // Не вызывать (это используется при специфических генерациях для вывода сносок)
    _outFootnotes(res) {
        if (this.m_InFootregime) 
            return;
        this.m_InFootregime = true;
        if (this.m_Footnotes.length > 0) {
            res.append("\r\n<div style=\"border-left:2pt solid green;padding-left:5pt;border-left:2pt;margin-left:30pt;margin-top:10pt;margin-bottom:10pt;font-size:smaller;text-align:left;font-weight:normal\">");
            for (let i = 0; i < this.m_Footnotes.length; i++) {
                if (i > 0) 
                    res.append("<br/>");
                let tmp = new StringBuilder();
                if (this.m_Footnotes[i].content !== null) 
                    this.m_Footnotes[i].content.getHtml(tmp, this);
                let sss = tmp.toString();
                let mark = (this.m_Footnotes[i].customMark != null ? this.m_Footnotes[i].customMark : ((String(i + 1))));
                if (sss.startsWith("<div")) {
                    let j = sss.indexOf('>');
                    tmp.insert(j + 1, ("<b id=\"" + ((this.m_Footnotes[i].id != null ? this.m_Footnotes[i].id : "")) + "\"><sup>" + mark + "</sup></b>"));
                    res.append("\r\n");
                    res.append(tmp.toString());
                }
                else {
                    res.append("\r\n<b id=\"").append(((this.m_Footnotes[i].id != null ? this.m_Footnotes[i].id : ""))).append("\"><sup>").append(mark).append("</sup></b>");
                    res.append(sss);
                }
            }
            res.append("\r\n</div>");
            this.m_Footnotes.splice(0, this.m_Footnotes.length);
        }
        if (this.m_FootnotesDb.length > 0) {
            if (this.m_FootnotesDb.length > 1) {
            }
            res.append("\r\n<div style=\"border-left:2pt solid green;padding-left:5pt;margin-left:30pt;margin-top:10pt;margin-bottom:10pt;font-size:smaller;text-align:left;font-weight:normal\">");
            for (let i = 0; i < this.m_FootnotesDb.length; i++) {
                let ff = this.m_FootnotesDb[i];
                res.append("\r\n  <div id=\"").append(((ff.id != null ? ff.id : "?"))).append("\">");
                if (ff.head !== null) 
                    ff.head.getHtml(res, this);
                if (ff.body !== null) 
                    ff.body.getHtml(res, this);
                res.append("</div>");
            }
            res.append("\r\n</div>");
            this.m_FootnotesDb.splice(0, this.m_FootnotesDb.length);
        }
        this.m_InFootregime = false;
    }
}


module.exports = GetHtmlParam