Перайсці да зместу

Удзельнік:Ssvb/Gadget-PageCleanUp.js

З пляцоўкі Вікікрыніцы

Заўвага: Пасля апублікавання, вам можа спатрэбіцца ачыстка кэшу браўзера, каб убачыць унесеныя змены.

  • Firefox / Safari: націсніце Reload, утрымліваючы Shift, або націсніце Ctrl-F5 ці Ctrl-R (⌘-R на Макінтошах)
  • Google Chrome: Націсніце Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Edge: націсніце Refresh, утрымліваючы Ctrl, або націсніце Ctrl-F5.
// Адаптацыя https://en.wikisource.org/wiki/User:Samwilson/PageCleanUp.js
// для патрэб беларускіх Вікікрыніц.

(function(mw, $) {

    // Апрацоўка пасля вычыткі (каб дадаткова выправіць разрывы радкоў і заўвагі)
    function pageCleanUp2(text) {
        // Разрывы радкоў
        text = text.replace(/([^\s])\n([^\s])/g, '$1 $2');

        // Заўвагі
        function zamena_aposzniaj_zauvahi(text) {
            refid = '';
            reftext = '';
            text2 = text.replace(/\{\{Водступ\|2\|em\}\}\s*(\d+|\*+)\)\s*([^\{]*)$/g, function(match0, match1, match2) {
                refid = match1.replace(/\*/g, '\\*');
                reftext = '<ref>' + match2.trim() + '</ref>';
                return '';
            });
            if (refid === '')
                return text;
            count = 0;
            text3 = text2.replace(new RegExp('\\s*' + refid + '\\)', 'g'), function() {
                count += 1;
                return reftext;
            });
            if (count === 1)
                return text3;
            return text;
        }

        while (true) {
            text2 = zamena_aposzniaj_zauvahi(text);
            if (text2 === text)
                break;
            text = text2;
        }

        return text.replace(/\s*$/g, '');
    }

    // Апрацоўка пасля аблічбоўкі (працяжнікі, пераносы і інш.)
    function pageCleanUp(text) {
        if (text.indexOf( "{{" ) !== -1) {
            return pageCleanUp2(text);
        }

        // Выдаленне нумару старонкі (лічбы ў сваім асобным першым ці апошнім радку)
        text = text.replace(/^\s*\d+[ ]*\n/, '');
        text = text.replace(/\n\s*\d+\s*$/, '\n');

        // Працяжнікі
        text = text.replace(/\-\-+/g, '—');

        // Тры кропкі і болей
        text = text.replace(/\.\.[\.]+/g, '…');

        // Пасля знака прыпынку не дэфіс, а працяжнік
        text = text.replace(/([\.\…\,\!\?\:\;])\s*-/g, '$1 —');

        // Пераносы словаў на наступны радок
        text = text.replace(/\-\s*\n\s*([^\s]+)\s*/g, '$1\n');

        // Працяжнік паміж лічбамі - https://be.wikisource.org/wiki/Закон_Рэспублікі_Беларусь_«Аб_Правілах_беларускай_арфаграфіі_і_пунктуацыі»#§_37._Лічэбнікі
        text = text.replace(/(\d+)\s*[\-\—]\s*\n\s*(\d+[^\s]*)\s*/g, '$1 — $2\n');
        text = text.replace(/(\d+)\s*[\-\—]\s*(\d+)/g, '$1 — $2');

        // Дэфіс паміж лічбай і канчаткам (7-мы, 19-га стагоддзя)
        text = text.replace(/(\d+)\s*[\-\—]\s*\n\s*([^\d\s][^\s]+)\s*/g, '$1-$2\n');
        text = text.replace(/(\d+)\s*[\-\—]\s*([^\d\s][^\s]+)/g, '$1-$2');

        // у -> ў (але толькі напачатку слова, бо іншыя памылкі знойдзе spellchecker)
        text = text.replace(/([аоуіэяёюы])\s+у([^\.\…\,\!\?\:\;\s]*)/, '$1 {{Абмылка|у$2|ў$2}}');

        // ů -> ŭ (для Google OCR)
        text = text.replace(/[ůüň]/g, 'ŭ');

        // Апостраф U+2019
        text = text.replace(/[\x27\‘\ʼ]/g, '’');

        // Прабелы вакол працяжнікаў
        text = text.replace(/—/g, ' — ');

        // Выдаленне залішніх пустых радкоў і прабелаў
        text = text.replace(/[ ]+\n/g, '\n');
        text = text.replace(/\n[\n]+/g, '\n\n');

        // Выдаленне прабелаў перад знакамі прыпынку
        text = text.replace(/ [ ]+/g, ' ');
        text = text.replace(/[ ]+([\,\:\;\.\…\!\?])/g, '$1');

        // Водступы ў пачатку абзацаў
        text = text.replace(/\n\n\s*([^\s])/g, '\n\n{{Водступ|2|em}}$1');

        return text;
    }

    mw.hook('wikiEditor.toolbarReady').add(function($textarea) {
       if (mw.config.get('wgPageContentModel') !== 'proofread-page')
           return;
        $textarea.wikiEditor('addToToolbar', {
            section: 'main',
            group: 'gadgets',
            tools: {
                'Belarusian-PageCleanUp': {
                    label: 'Выправіць заганы OCR',
                    type: 'button',
                    icon: 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Text-x-generic-apply.svg/22px-Text-x-generic-apply.svg.png',
                    action: {
                        type: 'callback',
                        execute: function () {
                            $textarea.val(pageCleanUp($textarea.val()));
                        }
                    }
                }
            }
        });
    });
}(mediaWiki, jQuery));