56 lines
1.2 KiB
Plaintext
56 lines
1.2 KiB
Plaintext
|
#!/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))
|