#!/usr/bin/perl

#  Copyright 2008 Michael J. Micek  Freely redistribute
#  under the GNU Public License  (GPL v2 or later)

# written for perl 5.8.8

use strict;
use utf8;

use Getopt::Long;
use Pod::Usage;

our $TRANS;

{ 
	# Joey Hess'
	# $FORWARD = q*[]{}<>()a-y1-9,!.?`'*;
	# $REVERSE = q*][}{><)(eq)paj6y!fk7wuodbjsfn^mxhl2Eh59L86`i'%,*;

	# from Enterprise_Cat
	# $FORWARD = q*abcdefghijklmnopqrstuvwxyz?!.(),'*;
	# $REVERSE = q*ɐqɔpəɟɓɥɪʆʞʅɯuodbɹsʇnʌʍxʎz¿¡·)(',*;

	my $all_ups = '';
	my $all_sdn = '';

	##########################
	#
	# IMPROVE THIS SECTION
	#


	#
	# Basic Latin (ASCII)
	#

	# ASCII rotationally symmetric
	# 	#$%+-=/
	# 	0258
	# 	:|
	# 	HINOSXZ
	#	osxz
	#	\

	# ASCII lowercase
	$all_ups .= q*abcdefghijklmnrtvwy*;	# osxz↑ pqu↓
	$all_sdn .= q*ɐqɔpǝɟɓɥᴉʆʞʅɯuɹʇʌʍʎ*;	# əᵷ

	# ASCII punctuation
	$all_ups .= q/!"'&(*,.;<?@[^`{~/;	# #$%*+=/:-↑ )>↓
	$all_sdn .= q/¡ˮˌ⅋)⁎‘·؛>¿Ͽ]⌄˛}˷/;	# ǀǁǃB˸˯ⓔӘ

	# ASCII numbers
	$all_ups .= q*13467*;			# 0258↑ 
	$all_sdn .= q*ƮƐի9∠*;			# L

	# ASCII Uppercase
	$all_ups .= q*ABCDEFGJKLMPQRTUVY*;		# EHILNOSXZ↑ W↓
	$all_sdn .= q*∀ᗺƆᗭƎℲ⅁ՐЯ⅂WԀÒᴚ⊥ȠΛ⅄*;		# ᗺϽᗡɧɘƜ∩Ո⋂

	# Unresolved ASCII
	#	[none]


	#
	# Latin-1 Supplement
	#

	# Latin1 rotationally symmetric
	#	¤¦§­
	#	×Ø÷ø

	# Latin1 punctuation

	$all_ups .= q*«¬¯°±´*;			# ¡¤¦§­¿·↑ ¸»↓
	$all_sdn .= q*»˾ˍₒ∓¸*;			# ˳∘⎔ˏ

	# Latin1
	$all_ups .= q**;			# Ò↑
	$all_sdn .= q**;			# 

	# Unresolved Latin1 
	# 	¢£¥¨©ª®²³µ¶¹º¼½¾
	#	ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖÙÚÛÜÝÞß
	#	àáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿ


	#
	# Latin Extended-A
	#

	# Unresolved Latin+A
	#	ĀāĂăĄąĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ
	#	ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıĲĳĴĵĶķĸĹĺĻļĽľĿ
	#	ŀŁłŃńŅņŇňŉŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş
	#	ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ


	#
	# Latin Extended-B
	# 
						# ƆƎƮ↑
	# Unresolved Latin+B
	#	ƀƁƂƃƄƅƇƈƉƊƋƌƍƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟ
	#	ƠơƢƣƤƥƦƧƨƩƪƫƬƭƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ
	#	ǀǁǂǃǄǅǆǇǈǉǊǋǌǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ
	#	ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰǱǲǳǴǵǶǷǸǹǺǻǼǽǾǿ
	#	ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ
	#	ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ
	#	ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ


	#
	# IPA Extensions
	#

	# IPA rotationally symmetric
	#	ɪʘʜ
	
	# IPA lowercase
						# ɐɔəɟɓɥʆʞʅɯɹʇʌʍʎ↑
	# Unresolved IPA
	# 5	ɑɒɕɖɗɘɚɛɜɝɞ
	# 6	ɠɡɢɣɤɦɨɩɫɬɭɮ
	# 7	ɰɱɲɳɴɵɶɷɸɺɻɼɽɾɿ
	# 8	ʀʁʂʃʄʆʈʉʊʋʏ
	# 9	ʐʑʒʓʔʕʖʗʙʚʛʝʞʟ
	# A	ʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯ


	#
	# Spacing [non-combining] Modifier Letters
	# 

	# Modifiers
	 					# ˳↑
	# Unresolved Modifiers
	# 	ʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʿ
	# 	ˀˁ˂˃˄˅ˆˇˈˉˊˋˍˎˏːˑ˒˓˔˕˖˗˘˙˚˛˜˝˞˟
	# 	ˠˡˢˣˤ˥˦˧˨˩˪˫ˬ˭ˮ˰˱˲˴˵˶˸˹˺˻˼˽˾˿


	#
	# Greek and Coptic
	#
	# Unresolved Greek
	#	ʹ͵ͺͻͼͽ;
	#	΄΅Ά·ΈΉΊΌΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟ
	#	ΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξο
	#	πρςστυφχψωϊϋόύώϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟ
	#	ϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿ


	#
	# Latin Extended Additional
	#
	# Unresolved Latin++
	#	ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟ
	#	ḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿ
	#	ṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟ
	#	ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿ
	#	ẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛ
	#	ẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾế
	#	ỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞở
	#	ỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ

	#
	# General Punctuation
	#

	# Punctuation rotationally symmetric
	# 	[spaces 2000-200a, 202f]
	# 	‐‑‒–—―‖‡•※⁐ ⁑ ⁓ ⁘ ⁙ ⁚ ⁛ ⁜ ⁝⁞
						# ⁎‘↑ ↓

	# Unresolved Punctuation
	#	‗’‚‛“”„‟†‣․‥…‧  ‰‱′″‴
	#	‵‶‷‸‹›‼‽‾‿
	#	⁀⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁏⁒⁔⁕⁖⁗ 
	#	⁠⁡⁢⁣⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ
	#	₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓₔ
	#	₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵


	#
	# END SECTION TO IMPROVE 
	#
	##########################

	my $FORWARD = $all_ups . $all_sdn;
	my $REVERSE = $all_sdn . $all_ups;

	$TRANS = eval <<"EOP"; warn $@ if $@;
		sub {
			# \$_ = lc;	# finding inverted upper case is hard
			# s/"/''/g;	# Joey Hess
			tr/$FORWARD/$REVERSE/;
			# s/k/>|/g;	# Joey Hess
		}
EOP

}


binmode STDOUT, ':utf8';
binmode STDIN,  ':utf8';

while (<>) {
	chomp;
	$_ = reverse;
	&$TRANS;
	print $_, "\n";
}
