TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Mithgol the Webmaster

9 Jul 2025, 03:23

Открыть в Telegram Поделиться Пожаловаться

raiseNumbersInEnclosedAlphanumerics.jsee
1.1Кб
lowerNumbersInEnclosedAlphanumerics.jsee
1.1Кб
Какъ извѣстно, кодировка ASCII и ряд послѣдующихъ кодировок (в частности, Unicode) устроены очень логично по отношению к латинским буквам алфавита английского языка: код каждой слѣдующей буквы на единицу больше кода предыдущей (напримѣръ, код «S» на единицу больше кода «R»), код каждой строчной буквы на 32 больше кода заглавной (напримѣръ, код «w» на 32 больше кода «W»).

Ужé по отношению к русским буквам это не всегда столь же логично работает (не повезло букве «Ё», не говоря уж про «Ѣ» и «Ѳ», а также про «І» и «Ѵ», про «Ѿ» и «Ѽ», и такъ далѣе).

Что же касается тѣхъ натуральных чисел в кружкáх, которыми я пользуюсь (с февраля 2021 года) для нумерации пунктов в списках (с недавних пор это происходит прежде всего в кратцах), то для них в Unicode отводится три интервала:

• во блоке «Enclosed Alphanumerics» послѣдовательно располагаются сѵмволы диапазона ①〜⑳,

• во блоке «Enclosed CJK Letters and Months» послѣдовательно располагаются сѵмволы диапазона ㉑〜㉟ и ㊱〜㊿, но вот между кодами сѵмволовъ «㉟» и «㊱» дистанция не единична.

Поэтому, если кому-нибудь вздумается получать код слѣдующаго кружкá прибавлением единицы, а код предшествующаго кружкá — вычитанием единицы, то тогда поневоле придётся прописывать два исключения на краях послѣдовательностей. Напримѣръ, та версия языка JavaScript, которая используется макросами текстового редактора EmEditor, позволяет достичь наращивания чисел в кружкáх на единицу вот таким кодом:

document.selection.Text = document.selection.Text.replace(
/[㊱-㊾]/g, function(nextMatch){
return String.fromCharCode(
nextMatch.charCodeAt(0) + 1
);
}
).replace(/㉟/g, '㊱').replace(
/[㉑-㉞]/g, function(nextMatch){
return String.fromCharCode(
nextMatch.charCodeAt(0) + 1
);
}
).replace(/⑳/g, '㉑').replace(
/[①-⑲]/g, function(nextMatch){
return String.fromCharCode(
nextMatch.charCodeAt(0) + 1
);
}
);

Уменьшение чисел в кружкáх на единицу, в свою очередь, может быть достигнуто вот как:

document.selection.Text = document.selection.Text.replace(
/[②-⑳]/g, function(nextMatch){
return String.fromCharCode(
nextMatch.charCodeAt(0) - 1
);
}
).replace(/㉑/g, '⑳').replace(
/[㉒-㉟]/g, function(nextMatch){
return String.fromCharCode(
nextMatch.charCodeAt(0) - 1
);
}
).replace(/㊱/g, '㉟').replace(
/[㊲-㊿]/g, function(nextMatch){
return String.fromCharCode(
nextMatch.charCodeAt(0) - 1
);
}
);

Кажется ясно видным, что такой подход вредит обозримости и оттого быстроте понимания смысла исходного кода.

Логичность же и обозримость этому коду могло бы придать использование функции strtr из языка PHP — в JavaScript нѣтъ готового аналога ея, но можно сочинить (на основе совѣтовъ @askplexbot) нѣкій аналогъ трёхаргументнаго варіанта ея:

var strtrAsInPHP = function(input, fromStr, toStr){
var result = '';
var i, nextChar, nextIndex;
for( i = 0; i < input.length; i++) {
nextChar = input.charAt(i);
nextIndex = fromStr.indexOf(nextChar);
if( nextIndex < 0 ){
result += nextChar;
} else result += toStr.charAt(nextIndex);
}
return result;
};

Основная часть кода, наращивающего на единицу числа в кружкáх, приобретает с использованием этой функции простой и краткий (пятистрочный) вид:

document.selection.Text = strtrAsInPHP(
document.selection.Text,
'①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾',
'②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿'
);

Также и основная часть кода, убавляющего на единицу числа в кружкáх, приобретает с использованием функции strtr вид, сильно похожий на предыдущий:

document.selection.Text = strtrAsInPHP(
document.selection.Text,
'②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿',
'①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾'
);

Полный код того и другого макроса прилагаю к сообщению для наглядности.

Скриптование в используемой мною версии EmEditor полагается на WSH, поэтому код strtr не пользуется ни стрѣлочными функциями, ни вызовом split('') и затѣмъ map(…) для обхода строки.

1.1k 4 10 11
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot