Упрощения викитекста

Подстановки в тексте

Есть ряд замен, которые вы увидите сразу же, на предварительном просмотре текста.

Баланс знаков = в заголовках

Можете теперь обозначать заголовки знаками равно только в начале:

 ==Первый уровень
 ===Второй уровень

Знаки равно в конце заголовка могут и быть но игнорируются. Вики автоматически проставит столько же равно в конце сколько было в начале.

Выделения исходников

Вместо того чтобы каждый раз писать

   <source lang="cpp">
   ...
   </source>

перед началом кода пишите

   с

в конце

   сс

То есть просто одна или две буквы с на отдельной строке.

Мелочи

Лишние пробелы в концах строк удаляются.

Code

Правка там, где уже приходилось править так что с плугином возится мотивации нет.

		if ( $request->wasPosted() ) {
			# These fields need to be checked for encoding.
			# Also remove trailing whitespace, but don't remove _initial_
			# whitespace from the text boxes. This may be significant formatting.
			$this->textbox1 = $this->safeUnicodeInput( $request, 'wpTextbox1' );
			$this->textbox2 = $this->safeUnicodeInput( $request, 'wpTextbox2' );
			$this->mMetaData = rtrim( $request->getText( 'metadata' ) );
			# Truncate for whole multibyte characters. +5 bytes for ellipsis
			$this->summary = $wgLang->truncate( $request->getText( 'wpSummary' ),
//VL: 2010-08-08
                // summary limit (blob in DB)
                2000,
                //250,
                '' );
//VL.
//VL: 2010-09-12
            //
            // Preprse Posteed
            //
            $sPost = $this->textbox1;
 
            //
            // Kill hanging spaces
            //
            $sPost =
                preg_replace(
                    '/[ \t]+$/m',
                    '',
                    $sPost);
 
            //
            // Balance ==Titles==
            //
            $sPost =
                preg_replace(
                    '/^(=+)(.+?)=*$/m',
                    '\1\2\1',
                    $sPost);
 
            //
            // Source CODE shortcut
            //
            $sPost =
                preg_replace(
                    '/^(c|' . GToUtf8("с") . ')$/m',
                    ---openining-source-tag---,
                    $sPost);
            $sPost =
                preg_replace(
                    '/^(cc|' . GToUtf8("сс") . ')$/m',
                    ---closing-source-tag---,
                    $sPost);
 
            //GDump($sPost); exit;
 
            // done
            $this->textbox1 = $sPost;
//VL.
Ссылки
Ссылки на категории и участников

На категории теперь можно ссылаться как на обычные статьи без указания префикса :Category:. (У нас не может быть статей и категорий с одним и тем же названием)

И если пройти в категорию по ссылке, не включающей префикс то вики сама его подставит, например: http://www.biosoft-m.ru/Site

То же самое и для участника. Канонически MediaWiki требует писать [[User:VL]], но ведь лень (и потом чего вообще VL "юзер"???). Можете писать просто [[Shef]] это станет ссылкой на http://www.biosoft-m.ru/Shef которая автоматически перенаправит в http://www.biosoft-m.ru/User:Shef.

Code

MediaWiki hook для автоматического перенаправления похоже можно сделать только в версии 1.16. Так что делаем хак.

				} elseif ( $this->mTitle->getNamespace() != NS_MEDIAWIKI ) {
					$text = wfMsgExt( 'noarticletext', 'parsemag' );
 
//VL: 2010-09-12
                    // if the category exists redirect them there
                    if (is_object($this->mTitle))
                    {
                        $oAsCat = Title::newFromText($this->mTitle->getText(), NS_CATEGORY);
                        //GDump($oAsCat);
                        //GDump($target->getDBkey() . " --- " . $oAsCat->getText() . " -- " . $oAsCat->exists());
 
                        if (is_object($oAsCat) &&
                            $oAsCat->exists())
                        {
                            global $std;
                    		$std->boink_it(
                                $oAsCat->getLinkUrl());
                            return;
                        }
                    }
//VL.

А сделать ссылки умнее, так что бы не существующие статьи были синонимами категорий и ссылка не выделялась как не существующая удалось официально.

//VL: 2010-09-12
//
// Hook linker and replace 'broken' article links with Category:
//   of the same name if it exists.
//   This requires an auto-redirect fix for missing-article page
//   to make a valid working synonym.
//
 
function GHookLinkBegin(
        $skin,
        $target,
        &$text,
        &$customAttribs,
        &$query,
        &$options,
        &$ret)
{
    //GDump(func_get_args());
 
    if (in_array( 'broken', $options ) &&
        is_object($target))
    {
        $oAsCat = Title::newFromText($target->getText(), NS_CATEGORY);
        //GDump($oAsCat);
        //GDump($target->getDBkey() . " --- " . $oAsCat->getText() . " -- " . $oAsCat->exists());
 
        if (is_object($oAsCat) &&
            $oAsCat->exists())
        {
            // remove 'broken' flag from the array
            $options = array_values(array_diff($options, array('broken')));
            $options[] = 'known';
 
            //return false;
        }
    }
 
    return true;
}
 
$wgHooks['LinkBegin'][] = 'GHookLinkBegin';
//VL.