65 lines
2.2 KiB
Perl
Executable File
65 lines
2.2 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
|
|
use strict;
|
|
use warnings;
|
|
use FileHandle;
|
|
|
|
my $in_tabpane = 0;
|
|
my $in_tab = 0;
|
|
my $tab_title = '';
|
|
my $lang = '';
|
|
my $langIsHeader = 0;
|
|
|
|
for my $filename (@ARGV) {
|
|
my $fh = FileHandle->new("< $filename") or die "Can't open $filename: $!";
|
|
my @lines = <$fh>;
|
|
$fh->close;
|
|
|
|
for (my $i = 0; $i < @lines; $i++) {
|
|
if ($lines[$i] =~ /\{\{<\s*tabpane(.*?)>\}\}\s*$/) {
|
|
$in_tabpane = 1;
|
|
my $args = $1;
|
|
$langIsHeader = $args =~ /langEqualsHeader="?true"?/;
|
|
($lang) = $args =~ /\blang="?(.*?)"?\b/;
|
|
$lang =~ s/^shell$/sh/ if $lang;
|
|
$lines[$i] =~ s/tabpane /tabpane text=true /;
|
|
# Remove comment lines before tabpane and optional blank line
|
|
while (($i > 0 && $lines[$i-1] =~ /<!-- (prettier|\w+lint).*? -->/)
|
|
|| ($i > 1 && $lines[$i-2] =~ /<!-- (prettier|\w+lint).*? -->/)) {
|
|
splice @lines, --$i, 1;
|
|
}
|
|
} elsif ($in_tabpane && $lines[$i] =~ /\{\{<\s*tab\s+([^>]*\S)\s*>\}\}/) {
|
|
$in_tab = 1;
|
|
$tab_title = $1;
|
|
# Remove blank line before end tag if present
|
|
splice @lines, --$i, 1 if $i > 1 && ($lines[$i-1] =~ /^\s*$/);
|
|
$lang = $tab_title if $langIsHeader;
|
|
$lang = 'js' if $lang eq 'JavaScript';
|
|
$lang = 'ts' if $lang eq 'TypeScript';
|
|
if ($lang) {
|
|
$lang = lc($lang);
|
|
} else {
|
|
printf STDERR "$filename:$i - no language specified\n";
|
|
}
|
|
$lines[$i] = "{{% tab $tab_title %}}\n\n```$lang\n";
|
|
} elsif ($in_tab && $lines[$i] =~ /\{\{<\s*\/tab\s*>\}\}/) {
|
|
$in_tab = 0;
|
|
$lines[$i] = "```\n\n{{% /tab %}}\n";
|
|
} elsif ($in_tabpane && $lines[$i] =~ /\{\{<\s*\/tabpane\s*>\}\}/) {
|
|
$in_tabpane = 0;
|
|
$langIsHeader = 0;
|
|
# Remove blank line before end tag if present
|
|
splice @lines, --$i, 1 if $i > 2 && ($lines[$i-1] =~ /^\s*$/) && ($lines[$i-2] =~ /\/tab/);
|
|
# Remove comment lines after tabpane and optional blank line
|
|
while (($i + 0 < $#lines && $lines[$i+1] =~ /<!-- (prettier|\w+lint).*? -->/)
|
|
|| ($i + 1 < $#lines && $lines[$i+2] =~ /<!-- (prettier|\w+lint).*? -->/)) {
|
|
splice @lines, $i+1, 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
$fh = FileHandle->new("> $filename") or die "Can't open $filename: $!";
|
|
print $fh @lines;
|
|
$fh->close;
|
|
}
|