| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| from __future__ import absolute_import |
| from __future__ import print_function |
| from __future__ import unicode_literals |
| from functools import partial |
| import logging |
|
|
| from ..utils import make_open_dest_file |
| from ..utils import wrap_open_dest_for_tty |
| from ..utils import wrap_open_dest |
| from ..utils import pager |
| from ..utils import syntaxhighlight |
| from ..utils import xmllint |
| from ..xmldump_flat import xmldump_flat |
| from ..xmlmodel import Hwp5File |
|
|
|
|
| logger = logging.getLogger(__name__) |
|
|
|
|
| def xmldump_nested(hwp5file, output, embedbin=False, xml_declaration=True): |
| dump = hwp5file.xmlevents(embedbin=embedbin).dump |
| dump = partial(dump, xml_declaration=xml_declaration) |
| dump(output) |
|
|
|
|
| def main(args): |
| ''' Transform <hwp5file> into an XML. |
| ''' |
|
|
| fmt = args.format or 'nested' |
| if fmt == 'flat': |
| xmldump = partial( |
| xmldump_flat, |
| xml_declaration=not args.no_xml_decl |
| ) |
| elif fmt == 'nested': |
| xmldump = partial( |
| xmldump_nested, |
| xml_declaration=not args.no_xml_decl, |
| embedbin=args.embedbin, |
| ) |
|
|
| open_dest = make_open_dest_file(args.output) |
| open_dest = wrap_open_dest_for_tty(open_dest, [ |
| pager(), |
| syntaxhighlight('application/xml'), |
| ] + ([ |
| xmllint(format=True), |
| ] if not args.no_validate_wellformed else [])) |
| open_dest = wrap_open_dest(open_dest, [ |
| xmllint(encode='utf-8'), |
| xmllint(c14n=True), |
| ] if not args.no_validate_wellformed else []) |
|
|
| hwp5file = Hwp5File(args.hwp5file) |
| with open_dest() as output: |
| xmldump(hwp5file, output) |
|
|
|
|
| def xml_argparser(subparsers, _): |
| parser = subparsers.add_parser( |
| 'xml', |
| help=_( |
| 'Transform .hwp files into an XML.' |
| ), |
| description=_( |
| 'Transform <hwp5file> into an XML.' |
| ), |
| ) |
| parser.add_argument( |
| 'hwp5file', |
| metavar='<hwp5file>', |
| help=_('.hwp file to analyze'), |
| ) |
| parser.add_argument( |
| '--embedbin', |
| action='store_true', |
| help=_('Embed BinData/* streams in the output XML.'), |
| ) |
| parser.add_argument( |
| '--no-xml-decl', |
| action='store_true', |
| help=_('Do not output <?xml ... ?> XML declaration.'), |
| ) |
| parser.add_argument( |
| '--output', |
| metavar='<file>', |
| help=_('Output filename.'), |
| ) |
| parser.add_argument( |
| '--format', |
| metavar='<format>', |
| help=_('"flat", "nested" (default: "nested")'), |
| ) |
| parser.add_argument( |
| '--no-validate-wellformed', |
| action='store_true', |
| help=_('Do not validate well-formedness of output.'), |
| ) |
| parser.set_defaults(func=main) |
| return parser |
|
|