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

/**
 * Хелпер работы с форматами файлов
 */
public class FileFormatsHelper {

    /**
     * Проанализировать формат файла по расширению и небольшому начальному фрагменту
     * @param fileExt расширение файла (может быть null)
     * @param fileContext начальный фрагмент файла (может быть null), но можно и весь файл целиком, если он уже в памяти.
     * @return формат
     */
    public static com.pullenti.unitext.FileFormat analizeFormat(String fileExt, byte[] fileContext) {
        if (fileExt != null) {
            fileExt = fileExt.toLowerCase();
            if (!fileExt.startsWith(".")) 
                fileExt = "." + fileExt;
        }
        if (fileContext != null && fileContext.length > 6) {
            if (fileContext[0] == ((byte)0xD0) && fileContext[1] == ((byte)0xCF)) {
                if ((com.pullenti.unisharp.Utils.stringsEq(fileExt, ".doc") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".docx") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".rtf")) || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".txt") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".dot")) 
                    return com.pullenti.unitext.FileFormat.DOC;
                if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xls") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xlsx") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xlsb")) 
                    return com.pullenti.unitext.FileFormat.XLS;
                if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".msg")) 
                    return com.pullenti.unitext.FileFormat.MSG;
                if (fileExt == null || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".")) 
                    return com.pullenti.unitext.FileFormat.DOC;
            }
            if ((((char)fileContext[0]) == '0' && ((char)fileContext[1]) == 'M' && ((char)fileContext[2]) == '8') && ((char)fileContext[3]) == 'R') {
                if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".msg")) 
                    return com.pullenti.unitext.FileFormat.MSG;
            }
            if (fileContext[0] == ((byte)1) && fileContext[1] == ((byte)0) && fileContext.length > 0x30) {
                if ((((char)fileContext[0x28]) == ' ' && ((char)fileContext[0x29]) == 'E' && ((char)fileContext[0x2A]) == 'M') && ((char)fileContext[0x2B]) == 'F') 
                    return com.pullenti.unitext.FileFormat.EMF;
            }
            if (((fileContext[0] == ((byte)0x53) && fileContext[1] == ((byte)0x51) && fileContext[2] == ((byte)0x4C)) && fileContext[3] == ((byte)0x69) && fileContext[4] == ((byte)0x74)) && fileContext[5] == ((byte)0x65)) 
                return com.pullenti.unitext.FileFormat.SQLIGHT;
            if (fileContext[0] == ((byte)0x50) && fileContext[1] == ((byte)0x4B)) {
                if ((com.pullenti.unisharp.Utils.stringsEq(fileExt, ".doc") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".docx") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".rtf")) || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".dotm")) 
                    return com.pullenti.unitext.FileFormat.DOCX;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".pptx")) 
                    return com.pullenti.unitext.FileFormat.PPTX;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".vsdx")) 
                    return com.pullenti.unitext.FileFormat.UNKNOWN;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xlsb")) 
                    return com.pullenti.unitext.FileFormat.XLSB;
                else if (fileExt != null && fileExt.startsWith(".xls")) 
                    return com.pullenti.unitext.FileFormat.XLSX;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".odt")) 
                    return com.pullenti.unitext.FileFormat.ODT;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".ods")) 
                    return com.pullenti.unitext.FileFormat.ODS;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".epub")) 
                    return com.pullenti.unitext.FileFormat.EPUB;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".fb3")) 
                    return com.pullenti.unitext.FileFormat.FB3;
                else if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xps")) 
                    return com.pullenti.unitext.FileFormat.XPS;
                else {
                    for (int k = 0; k < 5; k++) {
                        String tag = (k == 0 ? "workbook.bin" : (k == 1 ? "workbook.xml" : (k == 2 ? "word/document.xml" : (k == 3 ? "word/" : "[Content_Types].xml"))));
                        for (int i = 0; i < ((fileContext.length - tag.length())); i++) {
                            int j;
                            for (j = 0; j < tag.length(); j++) {
                                if (fileContext[i + j] != ((byte)tag.charAt(j))) 
                                    break;
                            }
                            if (j >= tag.length()) 
                                return (k == 0 ? com.pullenti.unitext.FileFormat.XLSB : (k == 1 ? com.pullenti.unitext.FileFormat.XLSX : com.pullenti.unitext.FileFormat.DOCX));
                        }
                    }
                    String odtTag = "oasis.opendocument.text";
                    for (int i = 0; i < (fileContext.length - odtTag.length()); i++) {
                        int j;
                        for (j = 0; j < odtTag.length(); j++) {
                            if (fileContext[i + j] != ((byte)odtTag.charAt(j))) 
                                break;
                        }
                        if (j >= odtTag.length()) 
                            return com.pullenti.unitext.FileFormat.ODT;
                    }
                    return com.pullenti.unitext.FileFormat.ZIP;
                }
            }
            if (fileContext[0] == ((byte)0x52) && fileContext[1] == ((byte)0x61) && fileContext[2] == ((byte)0x72)) 
                return com.pullenti.unitext.FileFormat.RAR;
            if (fileContext[0] == ((byte)0x37) && fileContext[1] == ((byte)0x7A) && fileContext[2] == ((byte)0xDC)) 
                return com.pullenti.unitext.FileFormat.ZIP7;
            if (fileContext[0] == ((byte)0x1F) && fileContext[1] == ((byte)0x8B)) 
                return com.pullenti.unitext.FileFormat.GZIP;
            if ((fileContext[0] == ((byte)0x25) && fileContext[1] == ((byte)0x50) && fileContext[2] == ((byte)0x44)) && fileContext[3] == ((byte)0x46) && fileContext[4] == ((byte)0x2D)) 
                return com.pullenti.unitext.FileFormat.PDF;
            if ((fileContext[0] == ((byte)0x7B) && fileContext[1] == ((byte)0x5C) && fileContext[2] == ((byte)0x72)) && fileContext[3] == ((byte)0x74) && fileContext[4] == ((byte)0x66)) 
                return com.pullenti.unitext.FileFormat.RTF;
            if (((char)fileContext[0]) == 'B' && ((char)fileContext[1]) == 'M') {
                if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".bmp") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".") || fileExt == null) 
                    return com.pullenti.unitext.FileFormat.BMP;
            }
            if (((char)fileContext[0]) == 'I' && ((char)fileContext[1]) == 'I') {
                if ((com.pullenti.unisharp.Utils.stringsEq(fileExt, ".tif") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".tiff") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".")) || fileExt == null) 
                    return com.pullenti.unitext.FileFormat.TIF;
            }
            if (((char)fileContext[1]) == 'P' && ((char)fileContext[2]) == 'N' && ((char)fileContext[3]) == 'G') {
                if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".png") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".") || fileExt == null) 
                    return com.pullenti.unitext.FileFormat.PNG;
            }
            if (((char)fileContext[0]) == 'G' && ((char)fileContext[1]) == 'I' && ((char)fileContext[2]) == 'F') {
                if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".gif") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".") || fileExt == null) 
                    return com.pullenti.unitext.FileFormat.GIF;
            }
            if ((fileContext.length > 20 && ((char)fileContext[6]) == 'J' && ((char)fileContext[7]) == 'F') && ((char)fileContext[8]) == 'I') {
                if ((com.pullenti.unisharp.Utils.stringsEq(fileExt, ".jpg") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".jpeg") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".")) || fileExt == null) 
                    return com.pullenti.unitext.FileFormat.JPG;
            }
            if (((fileContext.length > 10 && fileContext[0] == ((byte)0) && fileContext[1] == ((byte)0)) && fileContext[2] == ((byte)0) && fileContext[3] == ((byte)0xC)) && fileContext[4] == ((byte)0x6A) && fileContext[5] == ((byte)0x50)) 
                return com.pullenti.unitext.FileFormat.JPG2000;
            String enc = MiscHelper.decodeStringAscii(fileContext, 0, (fileContext.length < 1000 ? fileContext.length : 1000));
            if (fileContext[0] == ((byte)0xEF) && fileContext[1] == ((byte)0xBB) && fileContext[2] == ((byte)0xBF)) 
                enc = enc.substring(3);
            enc = enc.toUpperCase().trim();
            if (enc.startsWith("<HTML") || enc.startsWith("<!DOCTYPE HTML") || enc.startsWith("<DIV>")) 
                return com.pullenti.unitext.FileFormat.HTML;
            if (enc.startsWith("AT&TFORM")) 
                return com.pullenti.unitext.FileFormat.DJVU;
            if (com.pullenti.unisharp.Utils.startsWithString(enc, "<?xml", true)) {
                if ((enc.indexOf("<FUNCTIONBOOK") >= 0) || (enc.indexOf("<FICTIONBOOK") >= 0)) 
                    return com.pullenti.unitext.FileFormat.FB2;
                if ((enc.indexOf("<WORKBOOK ") >= 0) || (enc.indexOf("<?mso-application progid=\"Excel.Sheet\"".toUpperCase()) >= 0)) 
                    return com.pullenti.unitext.FileFormat.XLSXML;
                if ((enc.indexOf("<?mso-application progid=\"Word.Document\"".toUpperCase()) >= 0)) 
                    return com.pullenti.unitext.FileFormat.DOCXML;
                if ((enc.indexOf("<HTML") >= 0)) 
                    return com.pullenti.unitext.FileFormat.HTML;
            }
            if ((enc.startsWith("DELIVERED-TO:") || enc.startsWith("RECEIVED:") || enc.startsWith("RECEIVED-FROM:")) || enc.startsWith("DELIVERED:")) 
                return com.pullenti.unitext.FileFormat.EML;
            int ii = enc.indexOf("CONTENT-TYPE:");
            if (ii > 0) {
                if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".eml")) 
                    return com.pullenti.unitext.FileFormat.EML;
                if (enc.indexOf("MULTIPART/RELATED") > ii) 
                    return com.pullenti.unitext.FileFormat.MHT;
            }
            if (fileContext[0] == ((byte)0xFF) && fileContext[1] == ((byte)0xFE)) {
                String txt = MiscHelper.decodeStringUnicode(fileContext, 0, -1);
                if ((txt.indexOf("<htm") >= 0)) 
                    return com.pullenti.unitext.FileFormat.HTML;
                return com.pullenti.unitext.FileFormat.TXT;
            }
            if (fileContext[0] == ((byte)0xFE) && fileContext[1] == ((byte)0xFF)) {
                String txt = MiscHelper.decodeStringUnicodeBE(fileContext, 0, -1);
                if ((txt.indexOf("<htm") >= 0)) 
                    return com.pullenti.unitext.FileFormat.HTML;
                return com.pullenti.unitext.FileFormat.TXT;
            }
            if (com.pullenti.unisharp.Utils.startsWithString(enc, "<?xml", true)) 
                return com.pullenti.unitext.FileFormat.XML;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".")) {
                String txt = TextHelper.readStringFromBytes(fileContext, false, false);
                if (txt != null) 
                    return com.pullenti.unitext.FileFormat.TXT;
            }
        }
        else {
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".doc") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".dot")) 
                return com.pullenti.unitext.FileFormat.DOC;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".odt")) 
                return com.pullenti.unitext.FileFormat.ODT;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".docx") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".dotx")) 
                return com.pullenti.unitext.FileFormat.DOCX;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".pptx")) 
                return com.pullenti.unitext.FileFormat.PPTX;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".zip")) 
                return com.pullenti.unitext.FileFormat.ZIP;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".rar")) 
                return com.pullenti.unitext.FileFormat.RAR;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xlsx")) 
                return com.pullenti.unitext.FileFormat.XLSX;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xlsb")) 
                return com.pullenti.unitext.FileFormat.XLSB;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xls")) 
                return com.pullenti.unitext.FileFormat.XLS;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".msg")) 
                return com.pullenti.unitext.FileFormat.MSG;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".eml")) 
                return com.pullenti.unitext.FileFormat.EML;
            if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".djvu")) 
                return com.pullenti.unitext.FileFormat.DJVU;
        }
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".tar")) 
            return com.pullenti.unitext.FileFormat.TAR;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".gzip") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".gz")) 
            return com.pullenti.unitext.FileFormat.GZIP;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".7z")) 
            return com.pullenti.unitext.FileFormat.ZIP7;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xml")) 
            return com.pullenti.unitext.FileFormat.XML;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".json")) 
            return com.pullenti.unitext.FileFormat.JSON;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".pdf")) 
            return com.pullenti.unitext.FileFormat.PDF;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".djvu")) 
            return com.pullenti.unitext.FileFormat.DJVU;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".xls")) 
            return com.pullenti.unitext.FileFormat.XLS;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".txt")) 
            return com.pullenti.unitext.FileFormat.TXT;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".csv")) 
            return com.pullenti.unitext.FileFormat.CSV;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".rtf")) 
            return com.pullenti.unitext.FileFormat.RTF;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".htm") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".html")) 
            return com.pullenti.unitext.FileFormat.HTML;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".doc")) 
            return com.pullenti.unitext.FileFormat.TXT;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".mht") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".mhtml")) 
            return com.pullenti.unitext.FileFormat.MHT;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".fb2")) 
            return com.pullenti.unitext.FileFormat.FB2;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".fb3")) 
            return com.pullenti.unitext.FileFormat.FB3;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".epub")) 
            return com.pullenti.unitext.FileFormat.EPUB;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".bmp")) 
            return com.pullenti.unitext.FileFormat.BMP;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".jpg") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".jpeg")) 
            return com.pullenti.unitext.FileFormat.JPG;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".jp2")) 
            return com.pullenti.unitext.FileFormat.JPG2000;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".gif")) 
            return com.pullenti.unitext.FileFormat.GIF;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".png")) 
            return com.pullenti.unitext.FileFormat.PNG;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".emf")) 
            return com.pullenti.unitext.FileFormat.EMF;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".dbf")) 
            return com.pullenti.unitext.FileFormat.DBF;
        if (com.pullenti.unisharp.Utils.stringsEq(fileExt, ".tif") || com.pullenti.unisharp.Utils.stringsEq(fileExt, ".tiff")) 
            return com.pullenti.unitext.FileFormat.TIF;
        return com.pullenti.unitext.FileFormat.UNKNOWN;
    }

    /**
     * Получить класс формата. Пригодится для определения типа файла.
     * @param frm формат
     * @return класс формата
     */
    public static com.pullenti.unitext.FileFormatClass getFormatClass(com.pullenti.unitext.FileFormat frm) {
        if ((frm == com.pullenti.unitext.FileFormat.ZIP || frm == com.pullenti.unitext.FileFormat.ZIP7 || frm == com.pullenti.unitext.FileFormat.RAR) || frm == com.pullenti.unitext.FileFormat.TAR || frm == com.pullenti.unitext.FileFormat.GZIP) 
            return com.pullenti.unitext.FileFormatClass.ARCHIVE;
        if (((frm == com.pullenti.unitext.FileFormat.BMP || frm == com.pullenti.unitext.FileFormat.JPG || frm == com.pullenti.unitext.FileFormat.JPG2000) || frm == com.pullenti.unitext.FileFormat.PNG || frm == com.pullenti.unitext.FileFormat.TIF) || frm == com.pullenti.unitext.FileFormat.GIF || frm == com.pullenti.unitext.FileFormat.EMF) 
            return com.pullenti.unitext.FileFormatClass.IMAGE;
        if ((((frm == com.pullenti.unitext.FileFormat.DOC || frm == com.pullenti.unitext.FileFormat.DOCX || frm == com.pullenti.unitext.FileFormat.XLS) || frm == com.pullenti.unitext.FileFormat.XLSX || frm == com.pullenti.unitext.FileFormat.PPTX) || frm == com.pullenti.unitext.FileFormat.RTF || frm == com.pullenti.unitext.FileFormat.ODT) || frm == com.pullenti.unitext.FileFormat.DOCXML || frm == com.pullenti.unitext.FileFormat.XLSXML) 
            return com.pullenti.unitext.FileFormatClass.OFFICE;
        if (frm == com.pullenti.unitext.FileFormat.PDF || frm == com.pullenti.unitext.FileFormat.DJVU || frm == com.pullenti.unitext.FileFormat.XPS) 
            return com.pullenti.unitext.FileFormatClass.PAGELAYOUT;
        return com.pullenti.unitext.FileFormatClass.UNDEFINED;
    }

    /**
     * Получить расширение для формата
     * @param frm формат
     * @return расширение с точкой (null - если не знает)
     */
    public static String getFormatExt(com.pullenti.unitext.FileFormat frm) {
        if (frm == com.pullenti.unitext.FileFormat.DOC) 
            return ".doc";
        if (frm == com.pullenti.unitext.FileFormat.DOCX) 
            return ".docx";
        if (frm == com.pullenti.unitext.FileFormat.DOCXML) 
            return ".doc";
        if (frm == com.pullenti.unitext.FileFormat.PPTX) 
            return ".pptx";
        if (frm == com.pullenti.unitext.FileFormat.HTML) 
            return ".htm";
        if (frm == com.pullenti.unitext.FileFormat.PDF) 
            return ".pdf";
        if (frm == com.pullenti.unitext.FileFormat.RTF) 
            return ".rtf";
        if (frm == com.pullenti.unitext.FileFormat.TXT) 
            return ".txt";
        if (frm == com.pullenti.unitext.FileFormat.XLS || frm == com.pullenti.unitext.FileFormat.XLSXML) 
            return ".xls";
        if (frm == com.pullenti.unitext.FileFormat.XLSX) 
            return ".xlsx";
        if (frm == com.pullenti.unitext.FileFormat.EPUB) 
            return ".epub";
        if (frm == com.pullenti.unitext.FileFormat.FB2) 
            return ".fb2";
        if (frm == com.pullenti.unitext.FileFormat.FB3) 
            return ".fb3";
        if (frm == com.pullenti.unitext.FileFormat.CSV) 
            return ".csv";
        if (frm == com.pullenti.unitext.FileFormat.MSG) 
            return ".msg";
        if (frm == com.pullenti.unitext.FileFormat.EML) 
            return ".eml";
        if (frm == com.pullenti.unitext.FileFormat.JPG) 
            return ".jpg";
        if (frm == com.pullenti.unitext.FileFormat.JPG2000) 
            return ".jp2";
        if (frm == com.pullenti.unitext.FileFormat.BMP) 
            return ".bmp";
        if (frm == com.pullenti.unitext.FileFormat.GIF) 
            return ".gif";
        if (frm == com.pullenti.unitext.FileFormat.TIF) 
            return ".tif";
        if (frm == com.pullenti.unitext.FileFormat.PNG) 
            return ".png";
        if (frm == com.pullenti.unitext.FileFormat.EMF) 
            return ".emf";
        if (frm == com.pullenti.unitext.FileFormat.XML) 
            return ".xml";
        if (frm == com.pullenti.unitext.FileFormat.ZIP) 
            return ".zip";
        if (frm == com.pullenti.unitext.FileFormat.RAR) 
            return ".rar";
        if (frm == com.pullenti.unitext.FileFormat.TAR) 
            return ".tar";
        if (frm == com.pullenti.unitext.FileFormat.GZIP) 
            return ".gz";
        if (frm == com.pullenti.unitext.FileFormat.ZIP7) 
            return ".7z";
        if (frm == com.pullenti.unitext.FileFormat.XPS) 
            return ".xps";
        if (frm == com.pullenti.unitext.FileFormat.DJVU) 
            return ".djvu";
        return null;
    }

    /**
     * Проанализировать формат файла или байтового потока.
     * @param fileName имя файла, может быть null, если есть содержимое
     * @param content содержимое, может быть null, тогда файл указывает на файл локальной файловой системы
     * @return 
     */
    public static com.pullenti.unitext.FileFormat analizeFileFormat(String fileName, byte[] content) throws Exception, java.io.FileNotFoundException, java.io.IOException {
        byte[] head = new byte[10000];
        if (content != null) {
            if (content.length < 2) 
                return com.pullenti.unitext.FileFormat.UNKNOWN;
            for (int i = 0; ((i < head.length) && (i < content.length)); i++) {
                head[i] = content[i];
            }
        }
        else {
            if (!((new java.io.File(fileName)).exists() && (new java.io.File(fileName)).isFile())) 
                return com.pullenti.unitext.FileFormat.UNKNOWN;
            try (com.pullenti.unisharp.FileStream f = new com.pullenti.unisharp.FileStream(fileName, "r", "")) {
                if (f.read(head, 0, head.length) < 2) 
                    return com.pullenti.unitext.FileFormat.UNKNOWN;
            }
        }
        String ext = null;
        try {
            ext = (fileName == null ? "." : com.pullenti.unisharp.Utils.getFileExt(fileName));
        } catch (Exception ex) {
            ext = ".";
        }
        return analizeFormat(ext, head);
    }
    public FileFormatsHelper() {
    }
}
