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

    /**
     * Ссылка на страницу, начало координат в левом верхнем углу
     */
    public UnilayPage page;

    /**
     * Отступ слева
     */
    public double left;

    /**
     * Отступ сверху
     */
    public double top;

    /**
     * Отступ слева правой границы
     */
    public double right;

    /**
     * Отступ сверху нижней границы
     */
    public double bottom;

    /**
     * Текст в прямоугольнике (если есть)
     */
    public String text;

    /**
     * Картинка (если есть)
     */
    public byte[] imageContent;

    /**
     * Этот признак выставляется для текстовых фрагментов, подлежащих игнорированию. 
     * Например, повторяющийся на каждой странице текст колонтитулов или нумерация страниц.
     */
    public boolean ignored;

    /**
     * Номер линии (от 1), нумерация условна, для многоколоночных текстов нумерация сквозная
     */
    public int lineNumber;

    // Качество распознавания (устанавливается после применения OCR)
    public UnilayOcrQuality quality = UnilayOcrQuality.UNDEFINED;

    /**
     * Признак того, что перед словом отсутствует пробел, то есть стыковаться должно к слову в предыдущей области
     */
    public boolean noWhitespaceBefore;

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

    @Override
    public String toString() {
        String res = (((Double)com.pullenti.unisharp.Utils.mathRound(left, 2)).toString() + ".." + com.pullenti.unisharp.Utils.mathRound(right, 2) + " x " + com.pullenti.unisharp.Utils.mathRound(top, 2) + ".." + com.pullenti.unisharp.Utils.mathRound(bottom, 2));
        if (text != null) 
            return (res + ": " + text);
        if (imageContent != null) 
            return (res + ": Image");
        return res;
    }

    public void getXml(com.pullenti.unisharp.XmlWriterWrapper xml) throws javax.xml.stream.XMLStreamException {
        xml.wr.writeStartElement("rect");
        if (lineNumber > 0) 
            xml.wr.writeAttribute("line", ((Integer)lineNumber).toString());
        xml.wr.writeAttribute("left", com.pullenti.util.MiscHelper.outDouble(left));
        xml.wr.writeAttribute("top", com.pullenti.util.MiscHelper.outDouble(top));
        xml.wr.writeAttribute("right", com.pullenti.util.MiscHelper.outDouble(right));
        xml.wr.writeAttribute("bottom", com.pullenti.util.MiscHelper.outDouble(bottom));
        if (noWhitespaceBefore) 
            xml.wr.writeAttribute("no_ws", "true");
        if (quality != UnilayOcrQuality.UNDEFINED) 
            xml.wr.writeAttribute("q", quality.toString().toLowerCase());
        if (imageContent != null) 
            xml.writeElementString("image", new String(java.util.Base64.getEncoder().encode(imageContent)));
        else if (text != null) 
            xml.writeElementString("text", (String)com.pullenti.unisharp.Utils.notnull(com.pullenti.util.MiscHelper.correctXmlValue(text), ""));
        xml.wr.writeEndElement();
    }

    public void restore(org.w3c.dom.Node xml) {
        double d;
        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), "line")) {
                    int i;
                    com.pullenti.unisharp.Outargwrapper<Integer> wrapi577 = new com.pullenti.unisharp.Outargwrapper<Integer>();
                    boolean inoutres578 = com.pullenti.unisharp.Utils.parseInteger(a.getNodeValue(), 0, null, wrapi577);
                    i = (wrapi577.value != null ? wrapi577.value : 0);
                    if (inoutres578) 
                        lineNumber = i;
                }
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "left")) {
                    com.pullenti.unisharp.Outargwrapper<Double> wrapd579 = new com.pullenti.unisharp.Outargwrapper<Double>();
                    boolean inoutres580 = com.pullenti.util.MiscHelper.tryParseDouble(a.getNodeValue(), wrapd579);
                    d = (wrapd579.value != null ? wrapd579.value : 0);
                    if (inoutres580) 
                        left = d;
                }
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "top")) {
                    com.pullenti.unisharp.Outargwrapper<Double> wrapd581 = new com.pullenti.unisharp.Outargwrapper<Double>();
                    boolean inoutres582 = com.pullenti.util.MiscHelper.tryParseDouble(a.getNodeValue(), wrapd581);
                    d = (wrapd581.value != null ? wrapd581.value : 0);
                    if (inoutres582) 
                        top = d;
                }
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "right")) {
                    com.pullenti.unisharp.Outargwrapper<Double> wrapd583 = new com.pullenti.unisharp.Outargwrapper<Double>();
                    boolean inoutres584 = com.pullenti.util.MiscHelper.tryParseDouble(a.getNodeValue(), wrapd583);
                    d = (wrapd583.value != null ? wrapd583.value : 0);
                    if (inoutres584) 
                        right = d;
                }
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "bottom")) {
                    com.pullenti.unisharp.Outargwrapper<Double> wrapd585 = new com.pullenti.unisharp.Outargwrapper<Double>();
                    boolean inoutres586 = com.pullenti.util.MiscHelper.tryParseDouble(a.getNodeValue(), wrapd585);
                    d = (wrapd585.value != null ? wrapd585.value : 0);
                    if (inoutres586) 
                        bottom = d;
                }
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "no_ws")) 
                    noWhitespaceBefore = com.pullenti.unisharp.Utils.stringsEq(a.getNodeValue(), "true");
                else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(a), "q")) {
                    try {
                        quality = (UnilayOcrQuality)UnilayOcrQuality.of(a.getNodeValue());
                    } catch (Exception ex587) {
                    }
                }
            }
        }
        for (org.w3c.dom.Node x : (new com.pullenti.unisharp.XmlNodeListWrapper(xml.getChildNodes())).arr) {
            if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(x), "text")) 
                text = x.getTextContent();
            else if (com.pullenti.unisharp.Utils.stringsEq(com.pullenti.unisharp.Utils.getXmlLocalName(x), "image")) 
                imageContent = java.util.Base64.getDecoder().decode((x.getTextContent()).replace("\r", "").replace("\n", ""));
        }
    }

    public static UnilayRectangle _new576(UnilayPage _arg1) {
        UnilayRectangle res = new UnilayRectangle();
        res.page = _arg1;
        return res;
    }
    public UnilayRectangle() {
    }
}
