Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name 0ch autotypographer
- // @name:ru Автотипографика на Нульче
- // @namespace 0ch culture
- // @author AHOHNMYC
- // @description Автоматическая замена минуса на тире, кавычек на ёлочки, etc
- // @homepage https://pastebin.com/u/AHOHNMYC
- // @include https://0chan.hk/*
- // @grant none
- // @supportURL https://0chan.hk/0x59f3c84d
- // @version v0.1.9
- // ==/UserScript==
- /* TODO
- 0. Выполнить этот TODO
- 1. Сделать какие-никакие настройки. Хотя бы кнопку отключения.
- 2. Попробовать внедрить MutationObserver; провести тесты. Выбрать лучшую кандидатуру. Захватить мир.
- Не буду этого делать. Обработчик кликов логичнее с точки зрения основной функции скрипта, да и по производительности тоже должно быть получше.
- Хотя, надо бы его запилить в самый начальный этап загрузки
- 3. Замена первой буквы на заглавную, буквы после точки на заглавную. Опционально
- 4. Коррекция самых уёбищных ошибок в постах:
- мелкобуква
- -то|-либо|-нибудь
- неумение отделять знаки препинания пробелом справа
- то же самое несчастное тире (точнее, дефис вместо него)
- пустая строка после цитирования
- отсутствие пробела после >
- короткое тире не трогать. Из-за хуёвого парсера ссылок могут поехать остатки того, что отобразилось
- Реализовать опционально.
- Сделать исключение для блоков с кодом, а также кодача в целом (по уровню грамотности можно примерно оценить и качество кода. Amiright?)
- 5. Кнопка "Трифорснуть" с ползунком регулирования высоты. Для поехавших олдфагов
- 6. Лекарство от рака
- 7. Эликсир бессмертия
- */
- /* TODONE
- Авторасстановка:
- * тире
- * тире короткое
- * кавычки-ёлочки
- * неразрывный пробел
- * плюс-минус
- * многоточие
- * ударение
- Спецсимволы:
- (C) — © (регистрозавсимо)
- (R) — ® (регистрозавсимо)
- (tm) — ™ (регистроНЕзавсимо)
- */
- // Сделано по рекомендациям Тёмочки
- // https://artlebedev.ru/kovodstvo/62
- // Лэйн по-прежнему в памяти улья.
- // Создаём Self-Invoking Function, чтобы не срать в глобальный объект
- (function () {
- // Собственно, горячее и материальное сердце скрипта
- // Замена текста в активном элементе страницы
- var replacer = function() {
- var replacer = function(tmp) {
- var replacer = function(regex, replacement, shift = 0) {
- while ( regex.test(tmp) ) {
- tmp = tmp.replace(regex, replacement);
- selSt -= shift;
- selEn -= shift;
- }
- };
- // Тире (с неразрывным пробелом ( \xa0 ) )
- replacer(/ +-(?= )/, '\xa0—');
- // Короткое тире (между датами)
- replacer(/(\d{4})-(?=\d{1,4}($| | ?г+))/, '$1–');
- // Неразрывный дефис. Спорная замена
- // replacer(/([A-яё]|\d)-(?=[A-яё])/, '$1\u2011');
- // Кавычки
- replacer(/(^|\s)"/, '$1«');
- replacer(/"(?=\s|$)/, '»');
- // Знак охраны авторского права
- replacer(/\(C\)/, '©', 2);
- // Символ зарегистрированного товарного знака
- replacer(/\(R\)/, '®', 2);
- // Символ товарного знака
- replacer(/\(tm\)/i, '™', 3);
- // Плюс-минус
- replacer(/\+-/, '±', 1);
- // Многоточие
- replacer(/\.\.\./, '…', 2);
- // Ударение
- replacer(/([А-я])'/, '$1\u0301');
- // Неразрывный пробел 1. Единицы измерения (в теории, на деле же просто прикрепление чисел к стоящим далее коротким словам)
- replacer(/(\d+) (?=[A-я]{1,3}[^A-я])/, "$1\xa0");
- // Неразрывный пробел 2. Предлоги
- replacer(/(^|\s)(а-ля|безо?|вне|во?|для|до|за|из(-за|-под|о)?|ко?|меж|мимо|на(до?)?|не|об?|ото?|по(до?)?|пр(и|о)|ради|со?|у|as|at|but|by|for|in|off?|on|out|per|to|up|via) (?=[A-яё]+)/, "$1$2\xa0");
- return tmp;
- };
- const el = document.activeElement;
- let selSt = el.selectionStart,
- selEn = el.selectionEnd,
- replaced = replacer(el.value);
- if (el.value != replaced) {
- el.value = replaced;
- el.setSelectionRange(selSt, selEn);
- }
- };
- // Ждём появления #content и вешаем обработчик нажатий клавиш.
- // Оказывается, что keyup на элементе срабатывает только при нажатии клавиш в элементе, допускающем ввод текста. Охуенно.
- const retryTime = 1 *1000;
- setTimeout(function(){
- let el = document.getElementById('content');
- if ( !el ) return setTimeout(arguments.callee, retryTime);
- el.addEventListener('keyup', replacer);
- }, retryTime);
- // Отсюда идёт обработка содержимого постов. Чтобы всякие неграмотные пидоры не так выделялись.
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement