toss-hwp / src /hwp5 /cli.py
seawolf2357's picture
Add src
d94b56e verified
# -*- coding: utf-8 -*-
#
# pyhwp : hwp file format parser in python
# Copyright (C) 2010-2023 mete0r <https://github.com/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 <http://www.gnu.org/licenses/>.
#
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)