Switch wiki markup from Trac to Gitea.

main
Dag-Erling Smørgrav 12 months ago
parent 1d9c829c40
commit 64edbc294d
  1. 34
      misc/history2wiki.pl
  2. 116
      misc/trac2gitea.pl

@ -1,6 +1,6 @@
#!/usr/bin/perl -Tw
#-
# Copyright (c) 2012-2014 Dag-Erling Smørgrav
# Copyright (c) 2012-2021 Dag-Erling Smørgrav
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@ -27,8 +27,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $Id$
#
use strict;
use warnings;
@ -43,22 +41,26 @@ while (<>) {
last if m/^=+$/;
$changes .= $_;
}
$changes =~ s/^ - ([A-Z]+): / - '''$1''' /gm;
$changes =~ s/([\w.-]+\(\d*\))/`$1`/gs;
$changes =~ s/([^'`])\b([A-Z_]{4,}(?:\s+[A-Z_]{4,})*)\b([^'`])/$1`$2`$3/gs;
$changes =~ s/(CVE-\d{4}-\d+)/[$CVEURL$1 $1]/gs;
$changes =~ s/\r//gs;
$changes =~ s/^ - ([A-Z]+): / - **$1** /gm;
$changes =~ s/([\w.-]+\(\d*\)|\S*[_{}<>#\\\/]\S*)/`$1`/gs;
$changes =~ s/([.,])`/`$1/gs;
$changes =~ s/([^'`*])\b([A-Z_]{4,}(?:\s+[A-Z_]{4,})*)\b([^'`*])/$1`$2`$3/gs;
$changes =~ s/`(PAM|XSSO|\/)`/$1/gs; # false positives above
$changes =~ s/(CVE-\d{4}-\d+)/[$1]($CVEURL$1)/gs;
$changes =~ s/([.!?])\n +(\w)/$1 $2/gs;
$changes =~ s/(\S)\n +(\S)/$1 $2/gs;
open(my $fh, ">", "$relname.txt")
or die("$relname.txt: $!\n");
print($fh "= OpenPAM $relname =\n",
"\n",
"OpenPAM $relname was released on $reldate.\n",
$changes =~ s/(\S)\n +([^ -])/$1 $2/gs;
$changes =~ s/\n/\r\n/gs;
open(my $fh, ">", "Releases-$relname.md")
or die("Releases-$relname.md: $!\n");
print($fh "# OpenPAM $relname\r\n",
"\r\n",
"OpenPAM $relname was released on $reldate.\r\n",
$changes,
"\n",
"[http://sourceforge.net/projects/openpam/files/openpam/$relname/ Download from Sourceforge]\n");
"\r\n",
"Download from [here](/downloads) or [Sourceforge](http://sourceforge.net/projects/openpam/files/openpam/$relname/)\r\n");
close($fh);
print("|| $reldate || [[Releases/$relname|$relname]] ||\n");
print("| $reldate | [$relname](Releases-$relname) |\r\n");
}
}

@ -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…
Cancel
Save