Switch wiki markup from Trac to Gitea.
parent
1d9c829c40
commit
64edbc294d
@ -0,0 +1,116 @@
|
||||
#!/usr/bin/perl -Tw
|
||||
#-
|
||||
# Copyright (c) 2021 Dag-Erling Smørgrav
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
|
||||
use utf8;
|
||||
use strict;
|
||||
use warnings;
|
||||
use open qw(:locale);
|
||||
use LWP;
|
||||
|
||||
our $TRACBASE = "https://openpam.org/wiki";
|
||||
|
||||
our %pages;
|
||||
|
||||
sub _p { "trac/$_[0].trac" }
|
||||
|
||||
sub mkparent {
|
||||
my ($path) = @_;
|
||||
|
||||
return unless $path =~ s@/[^/]+$@@;
|
||||
return if -d $path;
|
||||
mkparent($path);
|
||||
mkdir($path) or die("$path: $!\n");
|
||||
}
|
||||
|
||||
sub save {
|
||||
my ($path, $text) = @_;
|
||||
|
||||
mkparent($path);
|
||||
open(my $fh, ">", "$path")
|
||||
or die("$path: $!\n");
|
||||
print($fh $text);
|
||||
close($fh);
|
||||
}
|
||||
|
||||
sub tracpull {
|
||||
my ($tracbase, @queue) = @_;
|
||||
@queue = qw(WikiStart) unless @queue;
|
||||
my $ua = new LWP::UserAgent();
|
||||
$ua->agent("trac2gitea/0.20211020");
|
||||
while (@queue) {
|
||||
my $page = shift(@queue);
|
||||
next if $pages{$page};
|
||||
if (open(my $fh, "<", _p($page))) {
|
||||
local $/;
|
||||
$pages{$page} = <$fh>;
|
||||
close($fh);
|
||||
} else {
|
||||
my $req = new HTTP::Request(GET => "$tracbase/wiki/$page?format=txt");
|
||||
my $res = $ua->request($req);
|
||||
if (!$res->is_success) {
|
||||
warn(sprintf("%s: %s\n", $page, $res->status_line));
|
||||
next;
|
||||
}
|
||||
$pages{$page} = $res->decoded_content;
|
||||
save(_p($page), $pages{$page});
|
||||
}
|
||||
foreach my $link ($pages{$page} =~ m@\[\[([\w/-]+)(?:\|[^|]+)?\]\]@g) {
|
||||
next if $pages{$link};
|
||||
push(@queue, $link);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub convert {
|
||||
my ($page, $text) = @_;
|
||||
|
||||
my $path = "$page.md";
|
||||
$path =~ s/\bWikiStart\b/Home/;
|
||||
$path =~ y@/@-@;
|
||||
$text =~ y/\r//d;
|
||||
$text =~ s/^= (.*) =$/# $1/gm;
|
||||
$text =~ s/^== (.*) ==$/## $1/gm;
|
||||
$text =~ s/^=== (.*) ===$/### $1/gm;
|
||||
$text .= "\n" unless $text =~ m/\n$/s;
|
||||
$text =~ s/'''/**/g;
|
||||
$text =~ s/\n/\r\n/gs;
|
||||
$text =~ s/\[([^\[\|\]\s]+) ([^\[\|\]\s][^\[\|\]]*)\]/[$2]($1)/gm;
|
||||
$text =~ s/\[\[([^\[\|\]]+)\|([^\[\|\]]+)\]\]/[$2]($1)/gm;
|
||||
$text =~ s/\| ([^\|]+) \|/| $1 |/gm;
|
||||
$text =~ s/\|= ([^\|]+) =\|/| **$1** |/gm;
|
||||
$text =~ s/\|\|/|/gm;
|
||||
$text =~ s/!([A-Z]\w+)/$1/gm;
|
||||
$text =~ s/\]\(([^\)\/]+)\/([^\)\/]+)\)/]($1-$2)/gm;
|
||||
save($path, $text);
|
||||
}
|
||||
|
||||
MAIN:{
|
||||
tracpull("https://openpam.org");
|
||||
while (my ($page, $text) = each %pages) {
|
||||
convert($page, $text);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue