Inhaltsverzeichnis

zurück

Entwicklung des Leetify Plugins

Diese Seite dokumentiert die schrittweise Erstellung des 'Leetify Plugins' für DokuWiki.

Ziel

Ein einfaches Plugin, das Text im Tag <leet> in Leetspeak umwandelt. Die Ausgabe soll optisch hervorgehoben dargestellt werden.

Plugin-Struktur

Das Plugin besteht aus folgenden Dateien:

Schritt-für-Schritt-Anleitung

1. Plugin-Ordner erstellen

Erstelle den Plugin-Ordner unter:

mkdir -p dokuwiki/lib/plugins/leetify

2. Datei: plugin.info.txt

Erstelle die Datei plugin.info.txt mit folgendem Inhalt:

base   leetify
author Lars mit freundlicher Unterstützung von ChatGPT
email  dummy@example.org
date   2025-05-21
name   Leetify Plugin
desc   Wandelt Wörter im <leet>-Tag in Leetspeak um.
url    https://github.com/dein-repo/leetify

3. Datei: syntax.php

Erstelle syntax.php im gleichen Ordner. Dies ist der Kern des Plugins.

<?php
if (!defined('DOKU_INC')) die();
if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
require_once(DOKU_PLUGIN . 'syntax.php');

class syntax_plugin_leetify extends DokuWiki_Syntax_Plugin {
    public function getType() { return 'formatting'; }
    public function getPType() { return 'normal'; }
    public function getSort() { return 195; }

    public function connectTo($mode) {
        $this->Lexer->addEntryPattern('<leet>(?=.*?</leet>)', $mode, 'plugin_leetify');
    }

    public function postConnect() {
        $this->Lexer->addExitPattern('</leet>', 'plugin_leetify');
    }

    public function handle($match, $state, $pos, Doku_Handler $handler) {
        return array($state, $match);
    }

    public function render($mode, Doku_Renderer $renderer, $data) {
        if ($mode !== 'xhtml') return false;
        list($state, $match) = $data;
        if ($state === DOKU_LEXER_UNMATCHED) {
            $leet = $this->toLeet($match);
            $renderer->doc .= '<span class="leetify">' . hsc($leet) . '</span>';
        }
        return true;
    }

    private function toLeet($text) {
        $search  = ['s','e','a','o','i','l'];
        $replace = ['5','3','4','0','1','1'];
        return str_ireplace($search, $replace, strtolower($text));
    }
}

4. Plugin testen

Füge auf einer beliebigen Wiki-Seite folgenden Code ein:

<leet>Herzlich Willkommen</leet>

Erwartete Ausgabe:

h3rz11ch w111k0mm3n

5. Optional: CSS hinzufügen

Zur besseren Darstellung:

.leetify {
    font-family: monospace;
    background: #222;
    color: #0f0;
    padding: 2px 6px;
    border-radius: 4px;
}

Weiterentwicklungsideen

Lizenz

Dieses Plugin steht unter der MIT-Lizenz.