37 lines
		
	
	
		
			924 B
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			924 B
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| """
 | |
| Encode/decode HTML entities in stdin or given file(s).
 | |
| """
 | |
| 
 | |
| import argparse
 | |
| 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)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     opts = argparse.ArgumentParser(description="Encodes (or decodes) HTML entities in text.")
 | |
|     opts.add_argument('file', type=str, nargs="*", help="File to encode/decode")
 | |
|     opts.add_argument('-d', '--decode', action='store_true', help="Decode the given files/input")
 | |
|     args = opts.parse_args()
 | |
| 
 | |
|     text = [line for line in fileinput.input(args.file)]
 | |
|     action = decode if args.decode else encode
 | |
|     print(action("\n".join(text).strip()))
 |