|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from contextlib import contextmanager |
|
|
import logging |
|
|
|
|
|
from ..errors import ImplementationNotAvailable |
|
|
from ..plat import get_xslt_compile |
|
|
from ..utils import hwp5_resources_path |
|
|
from ..utils import mkstemp_open |
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
class BaseTransform: |
|
|
|
|
|
def __init__(self, xslt_compile=None, embedbin=False): |
|
|
self.xslt_compile = xslt_compile or self.get_default_xslt_compile() |
|
|
self.embedbin = embedbin |
|
|
|
|
|
@classmethod |
|
|
def get_default_xslt_compile(cls): |
|
|
xslt_compile = get_xslt_compile() |
|
|
if not xslt_compile: |
|
|
raise ImplementationNotAvailable('xslt') |
|
|
return xslt_compile |
|
|
|
|
|
def make_transform_hwp5(self, transform_xhwp5): |
|
|
def transform_hwp5(hwp5file, output): |
|
|
with self.transformed_xhwp5_at_temp(hwp5file) as xhwp5path: |
|
|
return transform_xhwp5(xhwp5path, output) |
|
|
return transform_hwp5 |
|
|
|
|
|
def make_xsl_transform(self, resource_path, **params): |
|
|
with hwp5_resources_path(resource_path) as xsl_path: |
|
|
return self.xslt_compile(xsl_path, **params) |
|
|
|
|
|
@contextmanager |
|
|
def transformed_xhwp5_at_temp(self, hwp5file): |
|
|
with mkstemp_open() as (tmp_path, f): |
|
|
hwp5file.xmlevents(embedbin=self.embedbin).dump(f) |
|
|
yield tmp_path |
|
|
|