/*
 * 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
 */

package com.pullenti.unitext;

/**
 * Параметры генерации HTML функциями GetHtml и GetHtmlString
 * Параметры генерации HTML
 */
public class GetHtmlParam {

    /**
     * Дополнительные элементы стилей (ключ - Id элемента)
     */
    public java.util.HashMap<String, String> styles = new java.util.HashMap<String, String>();

    /**
     * Генерировать ли для внутренних документов UnitextDocument.InnerDocuments, если они есть, по умолчанию true.
     */
    public boolean useInnerDocuments = true;

    /**
     * Как выводить сноски, по умолчанию, в конце параграфов (FootnoteManagement.EndOfUnit).
     */
    public GetHtmlParamFootnoteOutType footnotes = GetHtmlParamFootnoteOutType.ENDOFUNIT;

    /**
     * Комментарии выводить в элементах del (иначе span)
     */
    public boolean outCommentsWithDelTags = false;

    /**
     * Выводить ли в HTML-теги значения BeginChar и EndChar в тегах bc=... ec=..., по умолчанию false.
     */
    public boolean outBeginEndChars = false;

    /**
     * Выводить ли стили UnitextStyle, оформляя их атрибутами style=...
     */
    public boolean outStyles = true;

    /**
     * Не выводить блоки редакций и комментариев (Container с типом Edition или Comment)
     */
    public boolean hideEditionsAndComments = false;

    /**
     * Ставить для гиперссылок target="_blank", по умолчанию false.
     */
    public boolean hyperlinksTargetBlank = false;

    /**
     * Использовать вмес то style=... для элементов имена классов class=... (список имён см. отдельно) 
     * Это нужно, если форматировать документ на клиентской стороне нужно "красиво"
     */
    public boolean useCssClasses = false;

    /**
     * Вставлять в начало и конец теги HTML и BODY для формирования полноценного HTML, по умолчанию false.
     */
    public boolean outHtmlAndBodyTags = false;

    /**
     * Если формируется полноценный HTML, то в тег title вставить этот текст
     */
    public String title;

    /**
     * Максимальный размер картинки (если больше, то содержимое не выводится)
     */
    public int maxImageSize = 10000000;

    /**
     * Максимальный размер результирующего Html в символах (если превышает, то отсаток информации не 
     * выводится, а в конец Html добавляется предупреждение о том, что не уместилось)
     */
    public int maxHtmlSize = 20000000;

    /**
     * Максимально строк в таблице для вывода (если больше, то обрубаются). 0 - без ограничений
     */
    public int maxTableRowCount = 0;

    /**
     * Использовать произвольным образом
     */
    public Object tag;

    /**
     * Вызывается в самом начале перед генерацией для элемента
     * @param it текущий элемент
     * @param res для результата
     * @return если false, то сразу выход из функции - генерация для элемета не производится
     */
    public boolean callBefore(UnitextItem it, StringBuilder res) {
        return true;
    }

    /**
     * Вызывается в самом конце после генерации Html для элемента
     * @param it текущий элемент
     * @param res для результата
     */
    public void callAfter(UnitextItem it, StringBuilder res) {
    }

    // Используется внутренним образом
    public java.util.ArrayList<UnitextFootnote> m_Footnotes = new java.util.ArrayList<UnitextFootnote>();

    public java.util.ArrayList<UnitextFootnote> m_Endnotes = new java.util.ArrayList<UnitextFootnote>();

    public java.util.ArrayList<UnitextDocblock> m_FootnotesDb = new java.util.ArrayList<UnitextDocblock>();

    private boolean m_InFootregime = false;

    public void _outEndnotes(StringBuilder res) {
        if (m_InFootregime) 
            return;
        m_InFootregime = true;
        if (m_Endnotes.size() > 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 (int i = 0; i < m_Endnotes.size(); i++) {
                if (i > 0) 
                    res.append("<br/>");
                res.append("\r\n<b id=\"").append(((m_Endnotes.get(i).id != null ? m_Endnotes.get(i).id : ""))).append("\"><sup>E").append((i + 1)).append("</sup></b>");
                if (m_Endnotes.get(i).content != null) 
                    m_Endnotes.get(i).content.getHtml(res, this);
            }
            res.append("\r\n</div>");
            m_Endnotes.clear();
        }
        m_InFootregime = false;
    }

    // Не вызывать (это используется при специфических генерациях для вывода сносок)
    public void _outFootnotes(StringBuilder res) {
        if (m_InFootregime) 
            return;
        m_InFootregime = true;
        if (m_Footnotes.size() > 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 (int i = 0; i < m_Footnotes.size(); i++) {
                if (i > 0) 
                    res.append("<br/>");
                StringBuilder tmp = new StringBuilder();
                if (m_Footnotes.get(i).content != null) 
                    m_Footnotes.get(i).content.getHtml(tmp, this);
                String sss = tmp.toString();
                String mark = (m_Footnotes.get(i).customMark != null ? m_Footnotes.get(i).customMark : ((((Integer)(i + 1)).toString())));
                if (sss.startsWith("<div")) {
                    int j = sss.indexOf('>');
                    tmp.insert(j + 1, ("<b id=\"" + ((m_Footnotes.get(i).id != null ? m_Footnotes.get(i).id : "")) + "\"><sup>" + mark + "</sup></b>"));
                    res.append("\r\n");
                    res.append(tmp.toString());
                }
                else {
                    res.append("\r\n<b id=\"").append(((m_Footnotes.get(i).id != null ? m_Footnotes.get(i).id : ""))).append("\"><sup>").append(mark).append("</sup></b>");
                    res.append(sss);
                }
            }
            res.append("\r\n</div>");
            m_Footnotes.clear();
        }
        if (m_FootnotesDb.size() > 0) {
            if (m_FootnotesDb.size() > 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 (int i = 0; i < m_FootnotesDb.size(); i++) {
                UnitextDocblock ff = m_FootnotesDb.get(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>");
            m_FootnotesDb.clear();
        }
        m_InFootregime = false;
    }
    public GetHtmlParam() {
    }
}
