App-digitdemog
view release on metacpan or search on metacpan
sub main_normal ( ) {
my %freq ; # åãè¡ãæ¥ããã©ããã®å¤å®ã«ä½¿ããæ°ãéè¨ãããã
my %S1 ; # $S1{$v}{$pos} ã®ããã«ä½¿ãã åºç¾åæ°ã®éè¨è¡¨ ; # ããã® $v 㯠æåã¨è¨ããããã¿ã¼ã³ã示ãã'a'ã¨ã [1-3]ã¨ããããã§ã¯ãæåãã¨å¼ã¶ã
my %S2 ; # $S2{$v}{$pos} = "è¡çªå·+è¡çªå·+...è¡çªå·+" (Lã¨ãã); $vãåºç¾ããæ¡$posã«å¯¾å¿ããè¡çªå·ãèããã
my %S3 ; # @ { $S3{ F } } ã«ãã£ã¦ãåå²è¡¨ã§é »åº¦ F åç¾ãã è¡çªå·éåã®å¤ L (%S2ã®æã¤å¤)ãåç
§ã§ããããã«ããã
my %mark ; # $mark{ L } ãããªãªããããªãªãä»ããã ( -. ã§ä½¿ãã)
my %Gs ; # @{ $G { $v } { $pos } [ 0 or 1 ] } ã§ è¡ã®å
·ä½ä¾ãæ ¼ç´ã ( -g ã§ä½¿ãã)
my $maxlen = 0 ; # æååã®æå¤§é·
my $eol = "EOL" . int rand 8 ; # åè¡ã®çµããã示ãã## saikoro -g10,3 ã§ãããã試ããã
@e = map { decode_utf8 $_ } @e unless $optu0 ;
unshift @e , "$eol\$" ; # æ£è¦è¡¨ç¾ãã¿ã¼ã³ç¾¤ã« $eol ã æå㫠追å ã # ãè¡æ«ãã¯é »åº¦ãå¤ãã®ã§æåã«æã£ã¦ããã
#push @e , "$eol\$" ; # æ£è¦è¡¨ç¾ãã¿ã¼ã³ç¾¤ã« $eol ã æå¾ã« 追å ã# ããã¯ãunshift ã§ã push ã§ãè¯ãã
my @eqr ; # ãe ãqrããã ãã«ããåä»ããã
my @exu ; # ãeã«ããã¦ãã¨ã¹ã±ã¼ã(escape)ãã¦ã¦ãã³ã¼ã(unicode)ã§è¡¨ããé¨åããããã«ããåä»ãã
for ( 0 .. $#e ) {
my $eout = $e[$_] =~ s/#.*$//r ; # æ£è¦è¡¨ç¾ã§ãã³ã¡ã³ã#ã®é¨åã¯é¤å»ããã
my @F = split /([[:^ascii:]])/o , $eout , 0 ; # ãã¿ã¼ã³ã§åã£ãæå¾ã¯ç©ºæååãªãåãè½ã¨ãããã®0
grep { $_ = (sprintf '\x{%02X}', ord $_ ) if m/[[:^ascii:]]/ } @F ;
my $p = join '' , @F ;
$eqr [ $_ ] = qr/$p/ ; # ãããããæ£è¦è¡¨ç¾ã¨ãã¦å
ã«ã³ã³ãã¤ã«ãããã¨ã§é«éåã
push @exu , $p ;
}
my $piecePattern = @e ? do{ my$t=join'|',@exu,'.','\n';qr/$t/o} : qr//o ; # @exuã«1æå(.)ã¨æ¹è¡æåã追å ããã
$header = <> if $o{'='} ;
while ( <> ) {
chomp if 0 eq ($o{n}//'') ; #-n0 ã§æ¹è¡æåãé¤å»ã
next if $freq{$_} ++ && $o{1} ; # && ã®åå¾ã®é åºã«æ³¨æ
s/\r$// unless $optw0 ;
$_ = decode_utf8 $_ unless $optu0 ;
# â½ ãã¿ã¼ã³ã«æååãåè§£ã
my @vvec = m/$piecePattern/go ;
push @vvec , $eol ; # åè¡ããã©ãã©ã«ããå¾ã«ã$eolãæå¾ã«è¿½å ã
splice @vvec , $width, if defined $width ;
$maxlen = @vvec if $maxlen < @vvec ; # æå¤§é·ã®ä¿ç®¡
for my $pos ( 0 .. $#vvec ) {
my $char = $vvec [ $pos ] ; # å®éã®æå(å)ã (ãã¿ã¼ã³ã«ã¯ã¾ã åé¡ãã¦ããªãã)
my $v ; # ã©ã®ãã¿ã¼ã³ã¾ãã¯æåã¨ãã¦èªèãããã(åé¡ããããã¿ã¼ã³ãªã®ã§ããã)
# â½ ã©ã®ãã¿ã¼ã³ã«ããããããã$vã«æ ¼ç´ãããæ¬¡ã®2è¡ã®ã³ã¼ãã§ã
$char =~ $eqr[$_] and do { $v = $e[$_] ; last } for 0 .. $#e ; # æå®ãããã¿ã¼ã³ã®æ°ãå¤ãã¨é
ããªãã§ããããé »åº¦ã®é«ããã¿ã¼ã³ãå
ã«ç½®ãã¨æ©ããªãã
$v //= "'$vvec[$pos]'" ; # åè¡ã®å¦çã§å½ã¦ã¯ã¾ããªãå ´åãã¯ã©ã¼ãã¼ã·ã§ã³ãä»å ããããã«ããã
$S1 { $v } { $pos } ++ ;
$S2 { $v } { $pos } .= "$.+" if $o{'.'} ; # <-- $S2{..}ã§ããã®ãæåãããã®æ¡ã§ç¾ããããè¡çªå·éåãL ãçµæçã«çæãããã
for my $v ( @vset ){ # <-- ã½ã¼ãé ã«ã¯æ³¨æããã
my @out = map { $S1{$v}{$_} // 0 } 0 .. ( $maxlen - 1 ) ;
my @pvec = grep { $out[$_] } $o{g}=~/\.$/o ? reverse 0..$#out : 0..$#out ; # 使¡ç®ãè¦ãããããã¦ãåªå
çã«ã©ãããè¦ããã
my @pv = map { [ grep { $out[$_] } @{$_} ] } [0..$#out] , [reverse 0..$#out] ; # 使¡ç®ãè¦ãããããã¦ãåªå
çã«ã©ãããè¦ããã
my @example = $take2 -> ( $o{g} , map { my $way = $_ ; [ map{ @{$Gs{$v}{$_}[ $way ]} } @{$pv[$way]} ] } 0,1 ) if $o{g} ;
@example = map{ backslash $_ , q['] } @example unless 0 eq ($o{b}//'') ; # -b0ã®æå®ãç¡ããã°ãæ¹è¡ãªã©ã®æåãã¨ã¹ã±ã¼ãããã
my $subtotal = sum0 @out ; # ãã®æåã®åºç¾åæ° -- @out ãããã«å å·¥ããåã«ããã§åå¾ã
next until y_filter ( $subtotal ) ;
do { $out[$_] .= $mark{ $S2{$v}{$_} // '' } // '' if $out[$_] } for 0 .. $#out ; # æ°åã®å¾ãã«ããªãªãä»å
@out = map { $_ eq 0 ? $o{0} : $_ } @out if defined $o{0} ; # é »åº¦å¤ãã¼ãã®å ´åã®ç½®æ
my $code = do { my $c = substr $v,1,1 ; $v eq "$eol\$" ? 'end' : $vcate{$v} ? '---' : $ucd -> ($c) } ; # æåã³ã¼ãåå¾ã$vã®å å·¥åã«ããã§å¦çã
$v = $o{'$'} if $v eq "$eol\$" ;
$v = backslash $v , q["] ;
push @out , (YELLOW BOLD $v) , $code , (YELLOW $subtotal) ;
push @out, join $sep , @example ;
say join "\t" , @out ;
}
}
## ãã«ãã®æ±ã
sub VERSION_MESSAGE { } # --version ã§ãã®é¢æ°ã使ãããã
sub HELP_MESSAGE {
( run in 2.496 seconds using v1.01-cache-2.11-cpan-98e64b0badf )