| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| 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) |
|
|