Hilfe:Werkzeuge

aus Wiki Aventurica, dem DSA-Fanprojekt
Version vom 12. Mai 2006, 16:31 Uhr von Schwarzmagier (Diskussion | Beiträge) (→‎HTTP-Echtzeitmanipulation: so bastelt man sich sein eigenes Favicon auf die Seite, so lange die Sysops es nicht anpassen, grr ^o^)

Auf dieser Seite sollen alle möglichen Werkzeuge zusammengestellt werden, die das Erstellen von Seiten erleichtern oder ermöglichen.

Programme

Umwandlungsskript für Belohnungen für Abenteuer

Keiichi war so nett und hat eine Umwandlungsroutine entworfen, mit der einfach einzugebende Daten praktisch in eine Wiki-Tabelle umgewandelt werden können. Der Sourcecode liegt in Python vor.

#!/usr/bin/python
# -*- coding: utf-8  -*-

u"""Ad hoc übersetzer für das Wiki Aventurica
------------------------------------------
gedacht zur Übertragung der Daten von
[[Belohnungen für Abenteuer]] in eine Tabelle

von Keiichi
----
In eine Klasse umgesetzt von Alrik"""

__version__='$Id: bel2tab.py,v 0.35 2005/05/10 09:40:00 Keiichi Exp $'

import re, Tkinter
from tkFileDialog import *
from tkSimpleDialog import *

class Belohnung2Wikitabelle:
    u"""Eine Ad-hoc-Übersetzerklasse, um einfacher zu editierende Daten
    in eine Wiki-Tabelle umzuformen"""

    def __init__(self, meister=None):
        pass
    
    # Einzelteile in Wiki-Tabellenzeile übertragen
    def __towiki(self, p1, p2, p3, p4, p5, design):
        if design==1:
            return u' |'+p1+'\n |'+p2+'\n |'+p3+'\n |'+p4+'\n |'+p5+'\n |-\n'
        else:
            return u'|'+p1+' ||'+p2+' ||'+p3+' ||'+p4+' ||'+p5+'\n|-\n'

    # Das eigentliche Programm
    def text2tab(self, text, design):
        outstring = u"""{{Achtung|Text=<center>Die Daten auf dieser Seite werden automatisch erzeugt.</center><br/>
Bitte hier keine Änderungen durchführen, sondern stattdessen auf der Seite: [[Belohnungen für Abenteuer]]. Danke!}}\n\n"""

     # Tabellenanfang
        if design==1:
            outstring+=u'{| border=1\n !Abenteuer\n !Abenteuerpunkte\n !Geld\n !Erfahrung\n !Sonstiges\n |-\n'
        else:
            outstring+=u'{| border=1\n!Abenteuer !!Abenteuerpunkte !!Geld !!Erfahrung !!Sonstiges\n |-\n'   

        ## Regelwerk, also eine Schablone herstellen, die dann auf den gesamten Text angewandt wird
        ## damit sind dann alle Textbestandteile dazwischen ausgeblendet
        
        # head variante 1, z.B.  [[Der Inquisitor|E4 Der Inquisitor]]
        head1 = ('^\[\[.+\|(.+)\]\]')

        # head variante 2, z.B.  [[Rückkehr der Finsternis]] 7GI.1 - [[Alptraum ohne Ende, 7GI]]
        head2 = ('^\[\[.+\]\].+\[\[(.+)\]\]')

        # Sind für beide Heads gleich
        rule2 = ('^\*Abenteuerpunkte:(.+)')
        rule3 = ('^\*Geld:(.+)')
        rule4 = ('^\*Erfahrung:(.+)')
        rule5 = ('^\*Sonstiges \(Waffen/Artefakte/etc\.\):(.+)')

        # Mit dieser Regel kommen die Regexps besser mit dem Wikilayout klar. Matcht entweder ein Newline oder alles mögliche bis zum nächsten Match
        flexrule = '(?:\n*?|[\s\S]*?)'

        # komplette Regel zusammenbauen
        crule1 = head1+flexrule+rule2+flexrule+rule3+flexrule+rule4+flexrule+rule5
        crule2 = head2+flexrule+rule2+flexrule+rule3+flexrule+rule4+flexrule+rule5
        crule = (crule1+'|'+crule2)

        # Regel compilieren und im text matchen, Problem: siehe oben
        p = re.compile(crule,re.MULTILINE)
        x = p.findall(text)

        # Fallunterscheidung für beide Heads. 
        for i in x:
            if i[0]=='': outstring=outstring+self.__towiki(i[5],i[6],i[7],i[8],i[9], design)
            else: outstring=outstring+self.__towiki(i[0],i[1],i[2],i[3],i[4], design)

        #tabellenende
        if design==1: outstring+=u' '
        outstring+=u'|}\n\n[[Kategorie:Listen]]'

        return outstring


#zum Testen:
if __name__=="__main__":
    fenster=Tkinter.Tk()

    design=askinteger(u"Design",u"""Wie soll das Design aussehen?
    Tabellenspalten zeilenweise darstellen (=1) oder
    alle Spalten in jeweils einer Zeile (=sonstige Zahl) ?""") 
    quelldatei=u"Belohnung für Abenteuer.wiki.txt"
    quelldatei = askopenfilename(defaultextension='*.txt', filetypes=[('Alle Dateien','*.*'),
                                      ('Textdateien','*.txt'),('Wikidateien','*.wiki.txt')],
                                 initialfile=quelldatei)
    zieldatei=u'Belohnung für Abenteuer(Tabelle).wiki.txt'
    
    try: t=open(quelldatei,'r')
    except IOError: print u"Dateifehler, die Datei '%s' gibts vermutlich nicht. ->Abbruch" % quelldatei
    else:    
        txt = t.read()
        t.close()
        b2t = Belohnung2Wikitabelle()
        try: vvv = b2t.text2tab(txt,design)
        except UnicodeDecodeError:  ##ohne Fehlerabfrage hängt das Tk-Fenster abgestürzt herum
            print "Fehler: UnicodeDecodeError aufgetreten! Es wird CP1252 probiert..."
            txt=txt.decode("CP1252")
            try: vvv = b2t.text2tab(txt,design)
            except UnicodeDecodeError:  ##ohne Fehlerabfrage hängt das Tk-Fenster abgestürzt herum
                print "Fehler: UnicodeDecodeError aufgetreten! Es wird CP1252 probiert..."    
            else:
                print vvv
                zieldatei = asksaveasfile(defaultextension='*.txt', filetypes=[('Alle Dateien','*.*'),
                                              ('Textdateien','*.txt'),('Wikidateien','*.wiki.txt')],
                                         initialfile=zieldatei).name
                try: t=open(zieldatei,'w')
                except IOError:
                    print u"Fehler: '%s' konnte nicht zum Schreiben geöffnet werden. ->Abbruch" % zieldatei
                else:
                    t.write(vvv)
                    t.flush()
                    t.close()
    fenster.destroy()

Robotskripten

Siehe Wiki Aventurica:Robots

TeX Environment

Für Leute die TeX verwenden, ein Paar Hilfen, die einem Dokument das Aussehen eines DSA-Abenteuers verschaffen. Noch nicht perfekt, aber immerhin ein Anfang.

%% v0.1 -- erste Version -- Keiichi
\usepackage{framed}

\geometry{verbose,a4paper,tmargin=2cm,bmargin=2cm,lmargin=2cm,rmargin=2cm,headheight=1cm,headsep=1cm,footskip=1cm}
\setlength\parskip{\medskipamount}
\setlength\parindent{0pt}

\twocolumn

\newenvironment{Meisterinfo}{%
{\it Meisterinformationen:}\hfill\hfill\begin{leftbar}
}{%
\end{leftbar}
}

\newenvironment{Spezinfo}{%
{\it Spezielle Informationen:}\hfill\hfill\linebreak                
}{%
}

\newenvironment{Allginfo}{%
{\it Allgemeine Informationen:}\hfill\hfill\linebreak
}{%
}

%% wir erneuern das Kommando um den Text ein wenig mehr an die die schwarze Linie ranzuholen
\renewenvironment{leftbar}{%
  \def\FrameCommand{\vrule width 3pt \hspace{5pt}}%
  \MakeFramed {\advance\hsize-\width\FrameRestore}}%
 {\endMakeFramed}

Beispiel :

\begin{Meisterinfo}Es war einmal vor langer, langer Zeit eine Meisterinformation. Sie hatte einen schwarzen 
Balken neben sich und sah einfach toll aus ;) 
\end{Meisterinfo}

Geeignete Browser

  • FireFox oder Mozilla
  • jeder andere Browser, der CSS beherrscht (sonst werden manche Informationen überhaupt nicht angezeigt)

Browser-Addons

  • WebDeveloper-Extensions, hervorragend geeignet, um in Echtzeit CSS-Styles zu verändern und zu Betrachten und damit um längen besser geeignet als einen eigenen Benutzerdefinierten Style auszuprobieren
Leider scheinen die Extensions nur beim FireFox zu funktionieren. Bei Mozilla (1.8b1) ist "Edit CSS" nicht möglich.

HTTP-Echtzeitmanipulation

Mit Hilfe von einem Filter-Proxy kann man Seiten in Echtzeit manipulieren. Sehr schön geeignet, wenn auch nicht ganz einfach zu bedienen ist der ProxoMitron, zu dem es noch dazu eine aktuell gehaltene Filterdatenbank von einer deutschen Supportseite gibt: Deutsche ProxoMitron-Website. Um es kurz gefasst zu sagen: Man startet den ProxoMitron, gibt ihn ggf. auf der Firewall HTTP-Zugriff (TCP:80,8080,20,21,443, UDP:53). Dann wird in jedem Programm, das in den Nutzen der Filterfunktionen kommen soll (Werbung ausfiltern, JavaScript-Spionage entschärfen, die unteren Filter nutzen) der Proxy auf dem lokalen Port "localhost:8080" eingestellt (ggf. Firewall anpassen). Nun kann normal weitergesurft werden, wobei alle Webdaten erst durch den Filter gejagt, entsprechend mannigfaltig (in Echtzeit !) manipuliert und dann erst (mit allen Verädnerungen) angezeigt werden.

Hier jetzt 2 Filter, um den Sysops ein wenig unter die Arme zu greifen.

  • Der erste Filter setzt hinter jeden Link, der normalerweise einen Benutzerlink anzeigt 2 weitere Links in Klammer (B, ?). Der eine führt zur Benutzerdiskussionsseite, der andere zeigt die Benutzerbeiträge an. Natürlich bietet sich hier das Tabbing-System von Mozilla/Firefox an, d.h. immer mit der mittleren Maustaste anklicken, dann später die Tabs durchgehen.
  • Der zweite Filter erzeugt hinter jedem Benutzernamen der nur aus einer IP-Adresse besteht (!) einen Link namens LUp, der zu einer DNS-Auflösungsseite (exyst.de) führt. So kann man mit einem Klick sofort sehen, wo der gute Beitragende herkommt. Auch hier mit mittlerer Maustaste unter Mozilla/Firefox das Tabbing ausnutzen.

Anleitung:Einfach mit der Maus inkl. Patterns alles markieren, ins Clipboard kopieren STRG+Einf, dann im ProxoMitron-Webfilter-Dialog mit rechter Maustaste Filter importieren):


[Patterns]
Name = "{wiki} Benutzer mit Beiträgen+Diskussion"
Active = TRUE
Multi = TRUE
URL = "dsa4.de/wiki/index.php\?title\="
Bounds = "$NEST(<a\s,</a>)"
Limit = 500
Match = "(<a href=(\"|\')/wiki/index.php\?title=Benutzer:([^&]++)\1"
        "( (\&action=edit|)(\"|\') (class="new"|))\2 "
        "title=(\"|\')Benutzer:[^>]++>[^<]++</a> "
        "(\( <a href=[^<]++</a> \)|)"
        ")\0"
Replace = "\0 (<a href="/wiki/index.php?title=Spezial:Contributions&target=\1"\2"
          "title="Benutzerbeiträge von \1">B</a>, "
          "<a href="/wiki/index.php?title=Benutzer_Diskussion:\1" "
          "title="Diskussion zu \1">?</a>) </li>"

Name = "{wiki} Wiki IPs mit Lookup versehen"
Active = TRUE
URL = "dsa4.de/wiki"
Bounds = "$NEST(<a\shref="/wiki/index.php\?title=*",</a>)"
Limit = 500
Match = "(<a\shref\="/wiki/index.php\?title="
        "(Benutzer:|Spezial:Contributions\&(amp;|)target\=)"
        "([0-9]++.[0-9]++.[0-9]++.[0-9]+)\1[^>]++(class="new"|) "
        "title=[^>]++>"
        "[^>]++</a>)\0"
Replace = "<small><a href="http://www.exyst.de/hostname.php?inp_name=&inp_ip=\1">"
          "<font color="green">LUp</font><a/></small>\0"

Das ganze kann natürlich noch zu zahlreichen anderen Spielereien ausgebaut werden. Man könnte z.B. Teile der Homepage umbauen, das Navigationsmenü ergänzen bzw. verändern, etc.

Ich hatte z.B. ein neues Favicon http://dsa4.de/wiki/images/4/43/Favicon2.gif vorgeschlagen. Bisher kam aber keine Reaktion von Seiten der Sysops. Nun lasse ich es mir eben (durch den Filter verändert) selbst anzeigen, ätsch! Soll nur ein kleines Beispiel sein, was man sonst noch so damit basteln kann, alles nämlich ^^


[Patterns]
Name = "{wiki} Anderes Favicon statt dsa4.de-Icon anzeigen"
Active = TRUE
Multi = TRUE
URL = "dsa4.de/wiki"
Bounds = "<link[^>]++/>"
Limit = 80
Match = "<link rel="shortcut icon" href="/favicon.ico" />"
Replace = "<link rel="shortcut icon" href="http://dsa4.de/wiki/images/4/43/Favicon2.gif" />"