You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaWiki扩展正则替换功能失效求助(InternalParseBeforeLinks钩子)

MediaWiki扩展EnhanceMarkup正则替换功能失效求助

我的MediaWiki扩展EnhanceMarkup中,通过InternalParseBeforeLinks钩子实现的正则替换功能未生效。按预期,输入[* texts]应生成对应脚注、输入hello[br]world应实现换行,但实际内容均原样输出。

以下是扩展的配置文件及钩子处理代码:

extension.json

{
    "name": "EnhanceMarkup",
    "description": "Provides enhanced markup functionalities",
    "version": "1.0",
    "author": [
        "Jeong Gaon"
    ],
    "url": "https://www.gaon.xyz/mw_extensions",
    "type": "other",
    "license-name": "Apache-2.0",
    "AutoloadClasses": {
        "EnhanceMarkupHooks": "includes/EnhanceMarkupHooks.php"
    },
    "ResourceModules": {
        "ext.EnhanceMarkup.styles": {
            "styles": "resources/ext.EnhanceMarkup.styles.css",
            "localBasePath": "",
            "remoteExtPath": "EnhanceMarkup"
        },
        "ext.EnhanceMarkup.scripts": {
            "scripts": ["resources/ext.EnhanceMarkup.scripts.js", "resources/lib/math.js"],
            "localBasePath": "",
            "remoteExtPath": "EnhanceMarkup"
        }
    },
    "Hooks": {
        "InternalParseBeforeLinks": "EnhanceMarkupHooks::onInternalParseBeforeLinks",
        "ParserFirstCallInit": "EnhanceMarkupHooks::onParserFirstCallInit",
        "BeforePageDisplay": "EnhanceMarkupHooks::onBeforePageDisplay"
    },
    "manifest_version": 2
}

includes/EnhanceMarkupHooks.php

<?php
class EnhanceMarkupHooks
{
    public static function onBeforePageDisplay(OutputPage &$out, Skin &$skin)
    {
        $out->addModules("ext.EnhanceMarkup.styles");
        $out->addModules("ext.EnhanceMarkup.scripts");
        return true;
    }

    public static function onParserFirstCallInit(Parser $parser)
    {
        $parser->setHook("random", [self::class, "randomRender"]);
        return true;
    }

    public static function onInternalParseBeforeLinks(Parser &$parser, &$text)
    {
        $text = preg_replace('/^([-]{3,9})$/m', "<hr>", $text);
        $text = preg_replace_callback(
            "/\[pagecount\]/",
            function ($matches) use ($parser) {
                $dbr = wfGetDB(DB_REPLICA);
                $count = $dbr->selectRowCount("page");
                return $count;
            },
            $text
        );
        $text = preg_replace(
            "/\[\*\s+([^ ]+)\s+(.*?)\]/",
            '<ref group="$1">$2</ref>',
            $text
        );
        $text = preg_replace(
            "/\[\*\s+([^ ]+)\s*\]/",
            '<ref group="$1" />',
            $text
        );
        $text = preg_replace("/\[\*\s+(.*?)\]/", '<ref>$1</ref>', $text);
        $text = preg_replace("/\[\include\s+(.*?)\]/", '{{$1}}', $text);
        $text = str_replace("[br]", "<br>", $text);
        $text = preg_replace_callback('/\{\{\{\+([1-5])\s*(.*?)\s*\}\}\}/s', function($matches) {
            return '<span style="font-size:'.(1 + $matches[1]).'em;">'.$matches[2].'</span>';
        }, $text);
        $text = preg_replace_callback('/\{\{\{-([1-5])\s*(.*?)\s*\}\}\}/s', function($matches) {
            return '<span style="font-size:'.(1 - $matches[1]/10).'em;">'.$matches[2].'</span>';
        }, $text);
        return true;
    }

    public static function randomRender(
        $input,
        array $args,
        Parser $parser,
        PPFrame $frame
    ) {
        $parser->getOutput()->updateCacheExpiry(0);
        $parts = explode("|", $input);
        $range = isset($args["range"]) ? $args["range"] : 2;
        $randomNumber = mt_rand(1, $range);
        if ($randomNumber <= $range / 2) {
            return $parts[0];
        } else {
            return isset($parts[1]) ? $parts[1] : $parts[0];
        }
    }
}

我的MediaWiki站点地址为https://www.gaonwiki.com,如需更多信息可随时提供,恳请帮忙排查问题。


内容的提问来源于stack exchange,提问作者Gaon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:07:23