#!/usr/bin/env python3
# Encode/decode HTML entities in stdin or given file(s).
import getopt
import sys
import os
import fileinput
import html
from html.entities import entitydefs
ENTITIES = {value: key for key, value in entitydefs.items()}
def encode(text):
t = ""
for c in text:
if c in ENTITIES:
t += "&" + ENTITIES[c] + ";"
else:
t += c
return t
def decode(text):
return html.unescape(text)
def usage():
# TODO Improve this
print("Usage: {} [-edh] file1[ file2[ ...]]".format(os.path.basename(sys.argv[0])))
if __name__ == '__main__':
COMMANDS = {
"-e": encode,
"-d": decode
}
try:
optlist, args = getopt.getopt(sys.argv[1:], 'edh')
sys.argv = [sys.argv[0]] + args
except getopt.GetoptError as err:
print(err)
sys.exit(1)
action = encode
for o, a in optlist:
if o in COMMANDS:
action = COMMANDS[o]
elif o == '-h':
usage()
sys.exit()
else:
assert False, "unhandled option"
input = "\n".join([line for line in fileinput.input()]).strip()
print(action(input))