Created
October 28, 2024 21:41
-
-
Save mwgamera/861ed67500ca685d3c97e3a7dfc7034a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
# ๐๐ป๐ฏ ๐๐ฑ๐๐พ๐ฏ ๐ข๐ป๐๐ ๐ณ๐๐๐ฒ๐ ๐๐ฌ๐ฏ | |
# klg, ๐ช๐๐ 2024 | |
use strict; | |
use utf8; | |
use open qw/:std :utf8/; | |
use Carp; | |
use Getopt::Std; | |
# 43-๐ค๐ง๐๐ผ ๐๐ฑ๐๐พ๐ฏ ๐จ๐ค๐๐ฉ๐๐ง๐: | |
# ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ก ๐ ๐ข ๐ ๐ฃ ๐ค ๐ฎ ๐ฅ ๐ฏ ๐ฆ ๐ฐ ๐ง ๐ฑ ๐จ ๐ฒ ๐ฉ ๐ณ ๐ช ๐ด ๐ซ ๐ต ๐ฌ ๐ถ ๐ญ ๐ท ๎ช ๎ซ ๐พ | |
# ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ - - ๐ ๐ ๐ก ๐ - - ๐ฃ ๐ ๐ฎ ๐ค ๐ฅ ๐ฏ ๐ฆ ๐ฐ ๐ช - ๐ฉ - ๐จ - ๐ง ๐ด ๐ต ๐ซ ๐ถ ๐ฌ ๐ญ ๐ท - - - | |
# ๐ ๐ ๐ ๐ข - ๐๐ฐ๐ 4 ๐๐๐ฑ ๐ ๐๐ฑ๐ฅ, ๐๐ณ๐ ๐ธ ๐ฅ๐ฆ๐๐๐ค๐ฑ๐๐ | |
# 48-๐ค๐ง๐๐ผ ยท๐จ๐ฏ๐๐ฎ๐ฉ๐๐ค๐ฐ๐ ๐๐ป๐ ๐ฉ๐ฏ (-a): | |
# ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ก ๐ ๐ข ๐ ๐ฃ ๐ค ๐ฎ ๐ฅ ๐ฏ ๐ฆ ๐ฐ ๐ง ๐ฑ ๐จ ๐ฒ ๐ฉ ๐ณ ๐ช ๐ด ๐ซ ๐ต ๐ฌ ๐ถ ๐ญ ๐ท ๐ธ ๐น ๐บ ๐ป ๐ผ ๐ฝ ๐พ ๐ฟ | |
# ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ - - ๐ ๐ ๐ก ๐ - - ๐ฃ ๐ ๐ฎ ๐ค ๐ฅ ๐ฏ ๐ฆ ๐ฐ ๐ช - ๐ฉ - ๐จ - ๐ง ๐ด ๐ต ๐ซ ๐ถ ๐ฌ ๐ญ ๐ท - - - - - - - - | |
my %flip = map {((split//)[0,-1,-1,0])} ' ', | |
qw(๐๐ ๐๐ ๐๐ ๐๐ ๐๐ ๐๐ ๐๐ก ๐๐ฃ ๐ค๐ฎ ๐ฅ ๐ฏ ๐ฆ ๐ฐ ๐ง๐ช ๐จ๐ฉ ๐ด ๐ต๐ซ ๐ถ๐ฌ ๐ญ ๐ท - /); | |
my %misplaced = qw(๐ ๐ ๐ ๐ ๐ ๐ ๐ข ๐ข); | |
return 1 unless __FILE__ eq $0; | |
getopts('aehmiq', \our %opt) or die; | |
exit print << "END" if $opt{h}; | |
$0 [๐ช๐๐๐ฉ๐ฏ๐] ... | |
-a ๐๐ด๐ฏ๐ ๐๐๐ค๐ฆ๐ ยท๐จ๐ฏ๐๐ฎ๐ฉ๐๐ค๐ฐ๐ ๐๐ฉ๐ฅ๐๐ฌ๐ฏ๐๐ | |
-e ๐๐ฎ๐ฆ๐ฏ๐ ๐ด๐ฏ๐ค๐ฆ ๐ข๐ป๐๐ ๐๐จ๐ ๐ฎ๐ฐ๐ ๐ ๐๐ฑ๐ฅ | |
-h ๐๐ด ๐๐ฆ๐ ๐ฃ๐ง๐ค๐ | |
-m ๐ฅ๐ฆ๐๐๐ค๐ฑ๐๐ ๐ด๐๐ฑ | |
-i ๐ฟ๐ ยท๐ฆ๐ฏ๐๐ผ ๐ฑ๐ค๐พ ๐ฆ๐ฏ๐๐ด๐๐ฆ๐ | |
-q ๐๐ข๐ฒ๐ฉ๐ | |
END | |
while (<<>>) { | |
chomp; | |
eval { | |
my $ft = shaw_flip($_, %opt); | |
printf "%s\n", $ft if $ft eq $_ or not $opt{e}; | |
}; | |
warn $@ if $@ and not $opt{q}; | |
} | |
sub shaw_flip { | |
my ($str, %opt) = @_; | |
my %f = %flip; | |
%f= (%f, %misplaced) if $opt{m}; | |
$str = ucs_denorm($str) unless $opt{a}; | |
$str = join('', reverse | |
map {$f{$_} // croak "๐ฏ๐ช๐ ๐ฆ๐ฏ๐๐ป๐๐ฉ๐๐ฉ๐ค: $_"} | |
split //, $str); | |
return ucs_norm($str, %opt); | |
} | |
sub ucs_norm { | |
(local $_, my %opt) = @_; | |
s/๎ช๐ฎ/๐บ/g; s/๎ซ๐ฎ/๐ป/g; | |
s/๐ญ๐ฎ/๐ธ/g; s/๐ท๐ฎ/๐น/g; | |
s/๐พ๐ฎ/๐ฝ/g; s/๐ฉ๐ฎ/๐ผ/g; | |
s/๐๐ต/๐ฟ/g; | |
s/๎ช/๐บ\x{fe00}/g, s/๎ซ/๐ป\x{fe00}/g if $opt{i}; | |
croak "๐ณ๐ฏ๐ฆ๐๐๐๐ง๐๐๐ฉ๐ ๐๐ฎ๐ฒ๐๐ฉ๐-๐ฟ๐ ๐๐จ๐ฎ๐ฉ๐๐๐ผ" if /[\x{e000}-\x{f8ff}]/; | |
return $_; | |
} | |
sub ucs_denorm { | |
local $_ = shift; | |
s/๐บ/๎ช๐ฎ/g; s/๐ป/๎ซ๐ฎ/g; | |
s/๐ธ/๐ญ๐ฎ/g; s/๐น/๐ท๐ฎ/g; | |
s/๐ฝ/๐พ๐ฎ/g; s/๐ผ/๐ฉ๐ฎ/g; | |
s/๐ฟ/๐๐ต/g; | |
s/๐บ\x{fe00}/๎ช/g; # ยท๐ฆ๐ฏ๐๐ผ ๐ฑ๐ค๐พ ๐ฆ๐๐๐๐ง๐ฏ๐๐ฉ๐ฏ๐ | |
s/๐ป\x{fe00}/๎ซ/g; | |
croak "๐ณ๐ฏ๐ฆ๐๐๐๐ง๐๐๐ฉ๐ ๐๐บ๐พ๐ฏ๐ ๐๐ฆ๐ค๐ง๐๐๐ผ" if /\x{fe00}/; | |
return $_; | |
} | |
1; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment