Code: [show] | [select all]
=info
Markdown Title 分级缩进,生成 BBCode
523066680@163.com / Code-By.Org
2017-05-12
=cut
use Encode;
use IO::Handle(1);
STDOUT->autoflush(1);
my @arr;
load("src.md", \@arr);
our @sizes = ( 100, 120, 140, 160, 180, 200 );
reset_sizes( \@sizes, \@arr ); #根据实际层级重设列表
format_title(\@arr); #转论坛格式
my $all = join("\n", @arr);
print encode('gbk', decode("utf8", $all));
sub format_title
{
my $arr = shift;
my $prev;
my $curv;
my $crlf;
for my $i ( 0 .. $#$arr )
{
$arr->[$i] =~s/(\r?\n)$//;
$crlf = $1;
if ( $arr->[$i]=~s/^(#+)// )
{
$curv = length($1);
$size = $sizes[$curv-1]; #下标从 0 开始
$arr->[$i] = "[size=$size][b]" .$arr->[$i] ."[/b][/size]";
$arr->[$i] .= "[list]";
if ( $prev )
{
if ( $curv <= $prev )
{
$arr->[$i] = "[/list]"x($prev - $curv + 1) .$arr->[$i];
}
elsif ( $curv > $prev ) { }
}
$prev = $curv;
}
# #遇到下一个标题时添加换行
# if ( $i < $#$arr
# and $arr->[$i+1]=~/^\#/
# and (not $arr->[$i] =~/^$/) )
# {
# $arr->[$i] .= $crlf;
# }
}
#缩进结束
$arr->[-1] .= '[/list]'x$prev if ( $prev > 0 );
}
sub reset_sizes
{
my ($sizes, $arr) = @_;
my $max = 0;
grep { /^(#+)/; $max = length($1) if (length($1) > $max) } @$arr;
@$sizes = reverse @{$sizes}[ 0 .. $max-1 ];
}
sub load
{
my ($f, $ref) = @_;
local $/=undef;
open READ,"<:", $f or warn "$!";
@$ref = <READ>;
close READ;
}
Code: [show] | [select all]
#T1
abc
##T20
abc
##T21
def
###T3
abc
abc
#T1
test
##T2
abc
#T1
abc
Code: [show] | [select all]
[size=140][b]T1[/b][/size][list]
abc
[size=120][b]T20[/b][/size][list]
abc
[/list][size=120][b]T21[/b][/size][list]
def
[size=100][b]T3[/b][/size][list]
abc
abc
[/list][/list][/list][size=140][b]T1[/b][/size][list]
test
[size=120][b]T2[/b][/size][list]
abc
[/list][/list][size=140][b]T1[/b][/size][list]
abc[/list][Finished in 0.1s]
T1
- abc
T20- abc
- def
T3- abc
abc
- abc
- test
T2- abc
- abc