Skip to content
Snippets Groups Projects
StudipTransformFormat.php 3 KiB
Newer Older
<?php
/**
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * @author      <mlunzena@uos.de
 * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
 * @category    Stud.IP
 */

/**
 * Format class to transform text before it is saved into the database.
 * @deprecated since Stud.IP 5.3
 */
class StudipTransformFormat extends TextFormat
{
    /**
     * list of global Stud.IP transform markup rules
     */
    private static $studip_rules = [
        'signature' => [
            'start'    => '(?<!~)~~~(?!~)',
            'callback' => 'StudipTransformFormat::markupSignature'
        ]
        ,'nop' => [
            'start'    => '\[nop\](.*?)\[\/nop\]',
            'callback' => 'StudipTransformFormat::markupNoFormat'
        ],        
    ];

    /**
     * Returns the list of global Stud.IP markup rules as an array.
     * Each entry has the following attributes: 'start', 'end' and
     * 'callback'. The rule name is used as the entry's array key.
     *
     * @return array list of all markup rules
     */
    public static function getStudipMarkups()
    {
        return self::$studip_rules;
    }

    /**
     * Adds a new markup rule to the global Stud.IP markup set. This can
     * also be used to replace an existing markup rule. The end regular
     * expression is optional (i.e. may be NULL) to indicate that this
     * rule has an empty content model. The callback is called whenever
     * the rule matches and is passed the following arguments:
     *
     * - $markup    the markup parser object
     * - $matches   match results of preg_match for $start
     * - $contents  (parsed) contents of this markup rule
     *
     * @param string $name      name of this rule
     * @param string $start     start regular expression
     * @param string $end       end regular expression (optional)
     * @param callback $callback function generating output of this rule
     */
    public static function addStudipMarkup($name, $start, $end, $callback)
    {
        self::$studip_rules[$name] = compact('start', 'end', 'callback');
    }

    /**
     * Removes a markup rule from the global Stud.IP markup set.
     *
     * @param string $name      name of the rule
     */
    public static function removeStudipMarkup($name)
    {
        unset(self::$studip_rules[$name]);
    }

    /**
     * Initializes a new StudipFormat instance.
     */
    public function __construct()
    {
        parent::__construct(self::getStudipMarkups());
    }

    /**
     * Stud.IP markup for signatures
     */
    protected static function markupSignature($markup, $matches)
    {
        return get_fullname();
    }

    /**
     * Stud.IP markup for unformatted text
     */
    protected static function markupNoFormat($markup, $matches)
    {
        return '[nop]' . $markup->quote($matches[1]) . '[/nop]';
    }
}