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