Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

List spells #184

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 93 additions & 0 deletions scripts/spelllist/csv2mediawikicmplt.perl
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
##### convert extracted list to full list
sub strip {
$_[0] =~ s/#(.*)#/\1/g

}

$, = "\t"; # set output field separator
$\ = "\n"; # set output record separator

$n = "<br />"; # in-field newline character

$textdelim = "#"; # text delimiter

$lastgebiet="none";
$lastletter="0";

$lettersorted=1;

while (<>){
if (!($_ =~ /^#/)) {
chomp;
($gebiet, $name, $beschreibung, $art, $stufe, $rang, $komponenten, $modifikationen, $syntax, $runde) = split($, , $_);


strip($gebiet);
if ($schoolsorted){
if ("$lastgebiet" ne "$gebiet"){
print "";
print "== " . $gebiet . " ==";
print "";
}
}
if ($lettersorted) {
$letter = substr $name, 0, 1;
if ("$lastletter" ne "$letter"){
print "";
print "== " . $letter . ".. ==";
print "";
}
$lastletter = $letter
}

$lastgebiet=$gebiet;

strip($name);

strip($beschreibung);
$kurzbeschreibung = $beschreibung;
$kurzbeschreibung =~ s/^([^.]*.).*$/\1/;

strip($art);
if ("$art" eq "Kampfzauber"){
$kart="Kampf";
}
if ("$art" eq "Präkampfzauber"){
$kart="K-Prä";
}
if ("$art" eq "Postkampfzauber"){
$kart="K-Post";
}
if ("$art" eq "Normaler Zauber"){
$kart="Normal";
}

strip($stufe);
strip($rang);
strip($komponenten);

strip($modifikationen);
# $modifikationen =~ s/Fernzauber/Fern/;
# $modifikationen =~ s/Schiffszauber/Schiff/;
# $modifikationen =~ s/Seezauber/See/;

strip($syntax);
$syntax =~ s/\\"/"/g;


print "=== " . $name . " ===";
print "";
print "'''Beschreibung''':<br />$beschreibung<br />";
print "'''Art''': $art<br />";
print "'''Stufe''': $stufe<br />";
print "'''Rang''': $rang<br />";
print "'''Komponenten''': $komponenten<br />";
print "'''Modifikationen''': $modifikationen<br />";
print "'''Syntax''': $syntax<br /> ";
print "";
}
}

# von Hand:
# Nebel der Verwirrung und Schleier der Verwirrung:
# :!: Diesen Zauber gibt es nicht mehr.
122 changes: 122 additions & 0 deletions scripts/spelllist/csv2mediawikitable.perl
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
##### convert extracted list to table (dokuwiki syntax)
sub strip {
$_[0] =~ s/#(.*)#/\1/g

}

$, = "\t"; # set output field separator
#$\ = "\n"; # set output record separator

$n = "<br />"; # in-field newline character

$textdelim = "#"; # text delimiter

$lastgebiet="none";

$separate = 0;

my %spells = ();

%Gebiete = ('Cerddor' => 'C', 'Draig' => 'D', 'Gwyrrd' => 'G', 'Illaun' => 'I', 'Tybied' => 'T',
'Gemein' => 'A', 'Kein Magiegebiet' => 'N');

$suffix ="_E3";

while (<>) {
chomp;
if (!($_ =~ /^#/)) {
($gebiet, $name, $beschreibung, $art, $stufe, $rang, $komponenten, $modifikationen, $syntax, $runde) = split($, , $_);

strip($gebiet);
$gebiet = $Gebiete{$gebiet};

strip($name);

strip($beschreibung);
$kurzbeschreibung = $beschreibung;
$kurzbeschreibung =~ s/^([^.]*.).*$/\1/;

strip($art);
if ("$art" eq "Kampfzauber") {
$kart="Kampf";
}
if ("$art" eq "Präkampfzauber") {
$kart="K-Prä";
}
if ("$art" eq "Postkampfzauber") {
$kart="K-Post";
}
if ("$art" eq "Normaler Zauber") {
$kart="Normal";
}

strip($stufe);
strip($rang);
strip($komponenten);

strip($modifikationen);
$modifikationen =~ s/Fernzauber/Fern/;
$modifikationen =~ s/Schiffszauber/Schiff/;
$modifikationen =~ s/Seezauber/See/;
$modifikationen =~ s/Kann nicht vom Vertrauten gezaubert werden/<sup>V<\/sup>/;

strip($syntax);
$syntax =~ s/\\"/"/g;

if (not exists $spells{$name}) {
$spells{$name} = {};
foreach my $v (values %Gebiete) {
$spells{$name}{$v} = 'N';
}
}

$spells{$name}{$gebiet} = 'J';
$spells{$name}{'name'} = $name;
$spells{$name}{'beschreibung'} = $kurzbeschreibung;
$spells{$name}{'art'} = $kart;
$spells{$name}{'stufe'} = $stufe;
$spells{$name}{'rang'} = $rang;
$spells{$name}{'komponenten'} = $komponenten;
$spells{$name}{'modifikationen'} = $modifikationen;
$spells{$name}{'syntax'} = $syntax;
$spells{$name}{'runde'} = $runde;
}
}

print "== Alle Zauber ==\n\n";
print "{| class=\"wikitable sortable\"\n";
print "! ";
foreach my $v (values %Gebiete) {
print "$v !! ";
}
print "Name !! Kurzbeschreibung !! Art !! Stufe !! Rang !! Komponenten !! Modifikationen\n";


foreach my $name (sort { $spells{$a}{'name'} cmp $spells{$b}{'name'} } keys %spells ) {

$name = $spells{$name}{'name'};
$beschreibung = $spells{$name}{'beschreibung'};
$art = $spells{$name}{'art'};
$stufe = $spells{$name}{'stufe'};
$rang = $spells{$name}{'rang'};
$komponenten = $spells{$name}{'komponenten'};
$modifikationen = $spells{$name}{'modifikationen'};
$syntax = $spells{$name}{'syntax'};
$runde = $spells{$name}{'runde'};


print "|-\n| ";
foreach my $v (values %Gebiete) {
print "$spells{$name}{$v} || ";
}
print "[[Zauberbeschreibungen$suffix#$name|$name]] || $beschreibung || $art || $stufe || $rang || $komponenten || $modifikationen\n";
}

$\ = "\n"; # set output record separator

print "|}";
foreach my $k (keys %Gebiete) {
print "<sup>$Gebiete{$k}</sup> $k<br />";
}
print "<sup>V</sup> Kann nicht vom Vertrauten gezaubert werden<br />";
print "";
5 changes: 5 additions & 0 deletions scripts/spelllist/extract.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# run list-spells-e3.lua, e.g. build-x86_64-gcc-Debug/eressea/eressea -v0 list-spells-e3.lua
# cp ../reports/*nr e3
cat e3/*nr | perl extractzauber.perl > spells.csv
cat spells.csv | perl csv2mediawikitable.perl > spelltable.mwiki
cat spells.csv | perl csv2mediawikicmplt.perl > spelldescriptions.mwiki
157 changes: 157 additions & 0 deletions scripts/spelllist/extractzauber.perl
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;
# this emulates #! processing on NIH machines.
# (remove #! line above if indigestible)

eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
# process any FOO=bar switches

############ EXTRACTZAUBER
############ Author: stm
############ Datum 04/09
############
############ Filtert Zauberbeschreibung aus NRs nach CSV-Format
############
$, = "\t"; # set output field separator
$\ = "\n"; # set output record separator

$n = "\\\\"; # in-field newline character

$textdelim = "#"; # text delimiter
$interdelim = ", "; # delimiter inside a record

$zauber = 0;

# Magiegebiet filtern

$runde = $ARGV[0];
$runde =~ s/^(.*[^0-9])*([0-9]+)-.*[.]nr/\2/;


while (<>) {
chomp; # strip record separator
if (/.*\/(Gwyrrd|Illaun|Cerddor|Tybied|Draig|Gemein|Kein Magiegebiet)/) {
$gebiet = $_;
$gebiet =~ s/.*\/(Gwyrrd|Illaun|Cerddor|Tybied|Draig|Gemein|Kein Magiegebiet).*$/\1/g;
# $gebiet = ($s = '.*/([^ ]*).*', s/$s/\1/g);
}
# Abschnitt Tränke beendet Abschnitt Zauber
# Ausgabe des letzen Zaubers
if ($zauber==1 && /Neue Tränke/) {
if ($name ne '') { #???
print $gebiet . $, . $name . $, . $textdelim . $beschreibung . $textdelim . $, . $art .

$, . $stufe . $, . $rang . $, . $textdelim . $komponenten . $textdelim . $, .

$modifikationen . $, . $textdelim . $syntax . $textdelim . $, . $runde;
}
$zauber = 0;
}
# Abschnitt Aktueller Status beendet Abschnitt Zauber
# Ausgabe des letzen Zaubers
if ($zauber==1 && /Aktueller Status/) {
$zauber = 0;
}
if (zauber==0 && $_ =~ /.*Neue Zauber.*/) {
$zauber = 1;
print "#Gebiet" . $, . "Name" . $, . "Beschreibung" . $, . "Art" . $, . "Stufe" . $, . "Rang" . $, . "Komponenten" . $, . "Modifikationen" . $, . "Syntax" . $, . "Runde";
print "# Textdelimiter: #" . $, . "" . $, . "" . $, . "" . $, . "" . $, . "" . $, . "" . $, . "" . $, . "" . $, . "";
}

#Beginn eines Zaubers durch Name des Zaubers; beendet Syntaxmodus
# Ausgabe letzter Zauber
if ($zauber == 1 && $_ =~ /^ *.*$/ && !($_ =~ / *Neue Zauber/)) {
$syntaxstart = 0;
if ($name ne '') { #???
print $gebiet . $, . $name . $, . $textdelim . $beschreibung . $textdelim . $, . $art
. $, . $stufe . $, . $rang . $, . $textdelim . $komponenten . $textdelim . $, .
$modifikationen . $, . $textdelim . $syntax . $textdelim . $, . $runde;
}
$name = $_;
$name =~ s/^ *([A-Z])/\1/g;
# $name = ($s = '^ *([A-Z])', s/$s/\1/g);
}

# Art; beendet Beschreibungsmodus
if ($zauber==1 && $beschreibungstart==1 && $_ =~ /^ *Art:.*$/) {
$beschreibungstart = 0;
$art = $_;
$art =~ s/ *Art: ([A-Za-z ]*)/\1/;
}

# Wenn in Beschreibungsmodus: Anhägen an Beschreibung
if ($zauber==1 && $beschreibungstart == 1) {
$line = $_;
$line =~ s/^ *//;
# Escaping von Sonderzeichen
$line =~ s/"/\\\"/g;
if ($beschreibung eq '') {
$beschreibung = $line;
}
else {
$beschreibung = $beschreibung . ' ' . $line;
}
}
# Start von Beschreibungsmodus
if ($zauber == 1 && $_ =~ /^ *Beschreibung:.*$/) {
$beschreibungstart = 1;
$beschreibung = '';
}

# Stufe
if ($zauber == 1 && $_ =~ /^ *Stufe:.*$/) {
$stufe = $_;
$stufe =~ s/ *Stufe: ([A-Za-z ]*)/\1/;
}

# Rang
if ($zauber == 1 && $_ =~ /^ *Rang:.*$/) {
$rang = $_;
$rang =~ s/ *Rang: ([A-Za-z ]*)/\1/;
}

# Modifikationen; beendet Komponentenmodus
if ($zauber==1 && $komponentenstart == 1 && $_ =~ /^ *Modifikationen:.*$/) {
$komponentenstart = 0;
$modifikationen = $_;
$modifikationen =~ s/ *Modifikationen: *([A-Za-z ]*)/\1/;
}

# Komponente hinzufügen
if ($zauber==1 && $komponentenstart == 1) {
$komp = $_;
$komp =~ s/^ *- *//;
if ($komponenten eq '') {
$komponenten = $komp;
}
else {
$komponenten = $komponenten . $interdelim . $komp;
}
}
# Start Komponentenmodus
if ($zauber == 1 && $_ =~ /^ *Komponenten:.*$/) {
$komponentenstart = 1;
$komponenten = '';
}

# Syntaxzeile hinzufügen mit Escaping
if ($zauber==1 && $syntaxstart == 1) {
$line = $_;
$line =~ s/"/\\\"/g;
if ($line ne '') { #???
if ($syntax eq '') {
$syntax = $line;
}
else {
$syntax = $syntax . $line;
}
}
}
# Begin Syntaxmodus
if ($zauber == 1 && $_ =~ /^ *Syntax:.*$/) {
$syntaxstart = 1;
$syntax = '';
}

}
Loading