| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | from __future__ import absolute_import |
| | from __future__ import print_function |
| | from __future__ import unicode_literals |
| | import sys |
| |
|
| | from ..cli import open_hwpfile |
| | from ..storage import open_storage_item |
| |
|
| |
|
| | PY2 = sys.version_info.major == 2 |
| |
|
| |
|
| | def main(args): |
| | if PY2: |
| | output_fp = sys.stdout |
| | else: |
| | output_fp = sys.stdout.buffer |
| |
|
| | hwp5file = open_hwpfile(args) |
| | stream = open_storage_item(hwp5file, args.stream) |
| | f = stream.open() |
| | try: |
| | while True: |
| | data = f.read(4096) |
| | if data: |
| | output_fp.write(data) |
| | else: |
| | return |
| | finally: |
| | if hasattr(f, 'close'): |
| | f.close() |
| |
|
| |
|
| | def cat_argparser(subparsers, _): |
| | parser = subparsers.add_parser( |
| | 'cat', |
| | help=_( |
| | 'Extract out internal streams of .hwp files' |
| | ), |
| | description=_( |
| | 'Extract out the specified stream in the <hwp5file> ' |
| | 'to the standard output.' |
| | ) |
| | ) |
| | parser.add_argument( |
| | 'hwp5file', |
| | metavar='<hwp5file>', |
| | help=_('.hwp file to analyze'), |
| | ) |
| | parser.add_argument( |
| | 'stream', |
| | metavar='<stream>', |
| | help=_('Internal path of a stream to extract'), |
| | ) |
| | mutex_group = parser.add_mutually_exclusive_group() |
| | mutex_group.add_argument( |
| | '--vstreams', |
| | action='store_true', |
| | help=_( |
| | 'Process with virtual streams (i.e. parsed/converted form of ' |
| | 'real streams)' |
| | ) |
| | ) |
| | mutex_group.add_argument( |
| | '--ole', |
| | action='store_true', |
| | help=_( |
| | 'Treat <hwp5file> as an OLE Compound File. As a result, ' |
| | 'some streams will be presented as-is. (i.e. not decompressed)' |
| | ) |
| | ) |
| | parser.set_defaults(func=main) |
| | return parser |
| |
|