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