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

using System;
using System.IO;
using System.Reflection;
using System.Text;
using System.Xml;

namespace Demo
{
    // Демонстрация получения представления Unitext из файлов разных форматов, и генерация
    // из этого представления форматов Plaintext и Html.
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Unitext SDK version {0} ({1})", Pullenti.Unitext.UnitextService.Version, Pullenti.Unitext.UnitextService.VersionDate);
            // Перебираем примеры файлов разных форматов из встроенных ресурсов.
            // Содержимое там примерно одинаковое, и результат будет примерно одинаковым.
            Assembly assembly = Assembly.GetEntryAssembly();
            string[] resNames = assembly.GetManifestResourceNames();
            foreach (string resnam in resNames) 
            {
                Console.Write("Resource {0}: ", resnam);
                byte[] content;
                // получаем байтовый поток ресурса
                using (Stream stream = assembly.GetManifestResourceStream(resnam)) 
                {
                    content = new byte[(int)stream.Length];
                    stream.Read(content, 0, content.Length);
                }
                Console.Write("{0} bytes ... ", content.Length);
                // извлекли байтовый поток из ресурса, обрабатываем его
                Pullenti.Unitext.UnitextDocument doc = Pullenti.Unitext.UnitextService.CreateDocument(null, content, null);
                if (doc.ErrorMessage != null) 
                {
                    // скорее всего, этот формат не поддерживается на данный момент
                    Console.WriteLine(" error, sorry: {0} ", doc.ErrorMessage);
                    continue;
                }
                // восстанавливаем имя исходного файла, извлечённого из ресурсов
                doc.SourceFileName = resnam;
                for (int i = resnam.Length - 7; i > 0; i--) 
                {
                    if (resnam[i] == '.') 
                    {
                        doc.SourceFileName = resnam.Substring(i + 1);
                        break;
                    }
                }
                // записываем результат в XML
                using (FileStream fs = new FileStream(doc.SourceFileName + ".xml", FileMode.Create, FileAccess.Write)) 
                {
                    XmlWriterSettings xmlParams = new XmlWriterSettings();
                    xmlParams.Encoding = Encoding.UTF8;
                    xmlParams.Indent = true;
                    xmlParams.IndentChars = "  ";
                    using (XmlWriter xml = XmlWriter.Create(fs, xmlParams)) 
                    {
                        xml.WriteStartDocument();
                        doc.GetXml(xml);
                        xml.WriteEndDocument();
                    }
                }
                // получаем плоский текст
                string plainText = doc.GetPlaintextString(null);
                if (plainText == null) 
                    plainText = "Текст не выделен";
                File.WriteAllBytes(doc.SourceFileName + ".txt", Encoding.UTF8.GetBytes(plainText));
                // получаем html
                Pullenti.Unitext.GetHtmlParam htmlParams = new Pullenti.Unitext.GetHtmlParam();
                htmlParams.OutHtmlAndBodyTags = true;
                string html = doc.GetHtmlString(htmlParams);
                File.WriteAllBytes(doc.SourceFileName + ".html", Encoding.UTF8.GetBytes(html));
                Console.WriteLine(" format {0}, save xml & text & html", doc.SourceFormat);
            }
            Console.WriteLine("Bye!");
        }
    }
}