您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replaces hyphens and quotation marks. Works only in the <textarea>. If you select a part of the text, only that part will be processed.
当前为
- // ==UserScript==
- // @name Textarea Typograf
- // @namespace https://github.com/glebkema/tampermonkey-textarea-typograf
- // @description Replaces hyphens and quotation marks. Works only in the <textarea>. If you select a part of the text, only that part will be processed.
- // @author glebkema
- // @copyright 2020, glebkema (https://github.com/glebkema)
- // @license MIT
- // @version 0.3.4
- // @match http://*/*
- // @match https://*/*
- // @grant none
- // @run-at context-menu
- // ==/UserScript==
- // ==OpenUserJS==
- // @author glebkema
- // ==/OpenUserJS==
- (function() {
- 'use strict';
- var element = document.activeElement;
- if (element && 'textarea' == element.tagName.toLowerCase() && element.value) {
- var start = element.selectionStart;
- var end = element.selectionEnd;
- if (start == end) {
- element.value = typograf(element.value);
- } else {
- var selected = element.value.substring(start, end);
- var length = element.value.length;
- element.value = element.value.substring(0, start) + typograf(selected) + element.value.substring(end, length);
- }
- } else {
- // console.info('Start editing a non-empty textarea before calling the script');
- }
- // console.log(typograf('Еще она - не очень еще "еще" любила (Еще и еще). Еще вот еще, еще. И еще'));
- // console.log(typograf('Нее ее. Длиннее еен нее.'));
- function typograf(text) {
- if (text) {
- // dash
- text = text.replace(/ - /gi, ' — ');
- // quotes
- text = text.replace(/^"/gi, '«');
- text = text.replace(/"$/gi, '»');
- text = text.replace(/([\(\s])"/gi, '$1«');
- text = text.replace(/"([.,;\s\)])/gi, '»$1');
- // words with a capital letter and yo
- text = checkWords(text, 'Ещё,Её,Моё,Неё,Своё,Твоё');
- text = checkWords(text, 'Объём,Остриём,Приём,Причём,Огнём,Своём,Твоём');
- text = checkWords(text, 'Василёк,Мотылёк,Огонёк,Пенёк,Ручеёк');
- text = checkWords(text, 'Затёк,Натёк,Потёк');
- text = checkWords(text, 'Грёза,Грёзы,Слёзы');
- }
- return text;
- }
- function checkWords(text, words) {
- if ('string' === typeof words) {
- words = words.split(',');
- }
- for (var i = 0; i < words.length; i++) {
- let word = words[i].trim();
- if (word) {
- let find = word.replace('ё', 'е').replace('Ё', 'Е');
- text = replaceWords(text, find, word);
- }
- }
- return text;
- }
- function replaceWords(text, find, replace) {
- // NB: \b doesn't work for russian words
- // 1) word starts with a capital letter
- var regex = new RegExp('(' + find + ')(?=[^а-яё]|$)', 'g');
- text = text.replace(regex, replace);
- // 2) word in lowercase
- regex = new RegExp('(?<=[^А-Яа-яЁё]|^)(' + find.toLowerCase() + ')(?=[^а-яё]|$)', 'g');
- return text.replace(regex, replace.toLowerCase());
- }
- })();