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

/**
 * Примечание (аннотация). Оформляется двумя такими объектами - 
 * для начальной позиции и конечной позиции.
 * Примечание (аннотация)
 */
public class UnitextComment extends UnitextItem {

    /**
     * Текст комментария
     */
    public String text;

    /**
     * Автор (если есть)
     */
    public String author;

    /**
     * Ссылка на Id "братского" элемента (начала или окончания аннотации)
     */
    public String twinId;

    /**
     * Признак того, что это указатель конечной позиции 
     * (при false - начальная позиция, при true - конечная)
     */
    public boolean isEndOfComment;

    @Override
    public UnitextItem clone() {
        UnitextComment res = new UnitextComment();
        res._cloneFrom(this);
        res.text = text;
        res.author = author;
        res.twinId = twinId;
        return res;
    }

    @Override
    public String toString() {
        return ("Comment: " + text + (isEndOfComment ? " (end)" : ""));
    }

    @Override
    public String getInnerTag() {
        return "comment";
    }


    @Override
    public void getPlaintext(StringBuilder res, GetPlaintextParam pars) {
        if (pars != null && pars.setPositions) {
            beginChar = (endChar = res.length());
            if (isEndOfComment && res.length() > 0) 
                beginChar = (endChar = res.length() - 1);
        }
    }

    @Override
    public void getHtml(StringBuilder res, GetHtmlParam par) {
        if (par.hideEditionsAndComments) 
            return;
        if (!par.callBefore(this, res)) 
            return;
        if (text != null && !isEndOfComment) {
            if (par.outCommentsWithDelTags) {
                res.append("<del");
                if (id != null) 
                    res.append(" id=\"").append(id).append("\"");
                res.append(">");
                com.pullenti.util.MiscHelper.correctHtmlValue(res, text, false, false, false);
                res.append("</del>");
            }
            else {
                res.append(" <span id=\"").append(id).append("\" style=\"font-size:smaller;font-style:italic;color:blue;background:lightyellow\">[<b>Комментарий: </b>");
                com.pullenti.util.MiscHelper.correctHtmlValue(res, text, false, false, false);
                res.append("]</span>");
            }
        }
        par.callAfter(this, res);
    }

    @Override
    public void getXml(com.pullenti.unisharp.XmlWriterWrapper xml) throws javax.xml.stream.XMLStreamException {
        xml.wr.writeStartElement("comment");
        this._writeXmlAttrs(xml);
        if (author != null) 
            xml.wr.writeAttribute("author", com.pullenti.util.MiscHelper.correctXmlValue(author));
        if (isEndOfComment) 
            xml.wr.writeAttribute("end", "true");
        if (twinId != null) 
            xml.wr.writeAttribute("twin", twinId);
        xml.wr.writeCharacters(com.pullenti.util.MiscHelper.correctXmlValue(text));
        xml.wr.writeEndElement();
    }

    @Override
    public void fromXml(org.w3c.dom.Node xml) throws NumberFormatException {
        super.fromXml(xml);
        if (xml.getAttributes() != null) {
            for (org.w3c.dom.Node a : (new com.pullenti.unisharp.XmlAttrListWrapper(xml.getAttributes())).arr) {
                if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "author")) 
                    author = a.getNodeValue();
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "twin")) 
                    twinId = a.getNodeValue();
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "end")) 
                    isEndOfComment = com.pullenti.unisharp.Utils.stringsEq(a.getNodeValue(), "true");
            }
        }
        text = xml.getTextContent();
    }

    public static UnitextComment _new50(String _arg1) {
        UnitextComment res = new UnitextComment();
        res.text = _arg1;
        return res;
    }

    public static UnitextComment _new500(String _arg1, String _arg2, boolean _arg3) {
        UnitextComment res = new UnitextComment();
        res.id = _arg1;
        res.twinId = _arg2;
        res.isEndOfComment = _arg3;
        return res;
    }
    public UnitextComment() {
        super();
    }
}
