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