# -*- coding: utf-8 -*- # # pyhwp : hwp file format parser in python # Copyright (C) 2010-2023 mete0r # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import logging import os from .plat import xsltproc from .plat import xmllint from .storage import ExtraItemStorage from .storage import open_storage_item from .storage.ole import OleStorage from .xmlmodel import Hwp5File def init_logger(args): logger = logging.getLogger('hwp5') try: from colorlog import ColoredFormatter except ImportError: formatter = None else: formatter = ColoredFormatter( '%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s', datefmt=None, reset=True, log_colors={ 'DEBUG': 'cyan', 'INFO': 'green', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'red' } ) loglevel = args.loglevel if not loglevel: loglevel = os.environ.get('PYHWP_LOGLEVEL') if loglevel: levels = dict(debug=logging.DEBUG, info=logging.INFO, warning=logging.WARNING, error=logging.ERROR, critical=logging.CRITICAL) loglevel = loglevel.lower() loglevel = levels.get(loglevel, logging.WARNING) logger.setLevel(loglevel) logfile = args.logfile if not logfile: logfile = os.environ.get('PYHWP_LOGFILE') if logfile: handler = logging.FileHandler(logfile) else: handler = logging.StreamHandler() if formatter: handler.setFormatter(formatter) logger.addHandler(handler) def init_with_environ(): if 'PYHWP_XSLTPROC' in os.environ: xsltproc.executable = os.environ['PYHWP_XSLTPROC'] xsltproc.enable() if 'PYHWP_XMLLINT' in os.environ: xmllint.executable = os.environ['PYHWP_XMLLINT'] xmllint.enable() def open_hwpfile(args): filename = args.hwp5file if args.ole: hwpfile = OleStorage(filename) else: hwpfile = Hwp5File(filename) if args.vstreams: hwpfile = ExtraItemStorage(hwpfile) return hwpfile def parse_recordstream_name(hwpfile, streamname): if streamname == 'docinfo': return hwpfile.docinfo segments = streamname.split('/') if len(segments) == 2: if segments[0] == 'bodytext': try: idx = int(segments[1]) return hwpfile.bodytext.section(idx) except ValueError: pass return open_storage_item(hwpfile, streamname)