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

// Демонстрация получения представления Unitext из файлов разных форматов, и генерация
// из этого представления форматов Plaintext и Html.
public class Program {

    public static void main(String[] args) throws Exception, java.io.IOException, java.io.FileNotFoundException, javax.xml.stream.XMLStreamException {
        System.out.println("Unitext SDK version " + com.pullenti.unitext.UnitextService.VERSION + " (" + com.pullenti.unitext.UnitextService.VERSIONDATE + ")");
        // Перебираем примеры файлов разных форматов из встроенных ресурсов.
        // Содержимое там примерно одинаковое, и результат будет примерно одинаковым.
        
        String[] resNames = demo.properties.Resources.getNames();
        for (String resnam : resNames) {
            System.out.print("Resource " + resnam + ": ");
            byte[] content;
            // получаем байтовый поток ресурса
            try (com.pullenti.unisharp.Stream stream = demo.properties.Resources.getStream(resnam)) {
                content = new byte[(int)stream.length()];
                stream.read(content, 0, content.length);
            }
            System.out.print(content.length + " bytes ... ");
            // извлекли байтовый поток из ресурса, обрабатываем его
            com.pullenti.unitext.UnitextDocument doc = com.pullenti.unitext.UnitextService.createDocument(null, content, null);
            if (doc.errorMessage != null) {
                // скорее всего, этот формат не поддерживается на данный момент
                System.out.println(" error, sorry: " + doc.errorMessage + " ");
                continue;
            }
            // восстанавливаем имя исходного файла, извлечённого из ресурсов
            doc.sourceFileName = resnam;
            for (int i = resnam.length() - 7; i > 0; i--) {
                if (resnam.charAt(i) == '.') {
                    doc.sourceFileName = resnam.substring(i + 1);
                    break;
                }
            }
            // записываем результат в XML
            try (com.pullenti.unisharp.FileStream fs = new com.pullenti.unisharp.FileStream(doc.sourceFileName + ".xml", "rw", "t")) {
                com.pullenti.unisharp.XmlWriterSettings xmlParams = new com.pullenti.unisharp.XmlWriterSettings();
                xmlParams.setEncoding(java.nio.charset.Charset.forName("UTF-8"));
                xmlParams.setIndent(true);
                xmlParams.setIndentChars("  ");
                try (com.pullenti.unisharp.XmlWriterWrapper xml = new com.pullenti.unisharp.XmlWriterWrapper(fs, xmlParams)) {
                    xml.wr.writeStartDocument(xml.encoding, "1.0");
                    doc.getXml(xml);
                    xml.wr.writeEndDocument();
                }
            }
            // получаем плоский текст
            String plainText = doc.getPlaintextString(null);
            if (plainText == null) 
                plainText = "Текст не выделен";
            com.pullenti.unisharp.Utils.writeAllBytes(doc.sourceFileName + ".txt", com.pullenti.unisharp.Utils.encodeCharset(java.nio.charset.Charset.forName("UTF-8"), plainText));
            // получаем html
            com.pullenti.unitext.GetHtmlParam htmlParams = new com.pullenti.unitext.GetHtmlParam();
            htmlParams.outHtmlAndBodyTags = true;
            String html = doc.getHtmlString(htmlParams);
            com.pullenti.unisharp.Utils.writeAllBytes(doc.sourceFileName + ".html", com.pullenti.unisharp.Utils.encodeCharset(java.nio.charset.Charset.forName("UTF-8"), html));
            System.out.println(" format " + doc.sourceFormat.toString() + ", save xml & text & html");
        }
        System.out.println("Bye!");
    }
    public Program() {
    }
}
