#!/usr/bin/python3

from lxml import etree
import sys

stdout = lambda *s: print(*s, file = sys.stdout, flush = True)
stderr = lambda *s: print(*s, file = sys.stderr, flush = True)

def exit(ret = 0, msg = None):
    if msg:
        stderr('{}: {}'.format(sys.argv[0], msg))
    sys.exit(ret)

def main():
    try:
        if len(sys.argv) > 1:
            src = open(sys.argv[1], 'rb')
        else:
            src = open(0, 'rb')
        dst = open(1, 'wb')
    except OSError as e:
        exit(1, 'open failed: %s' % e)

    try:
        root = etree.fromstring(src.read())
        tree = etree.ElementTree(root)
        tree.write(dst, xml_declaration = True, encoding = 'utf-8', pretty_print = True)
    except Exception as e:
        exit(2, e)

    return 0

if __name__ == '__main__':
    exit(main())
