Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.10.2019, 21:56
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

j0hnik, а сочетанные буквы?

Последний раз редактировалось Malleys, 11.10.2019 в 03:59.
Ответить с цитированием
  #12 (permalink)  
Старый 11.10.2019, 03:20
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Malleys,
сочетанные?
хочется взять букварь свернуть его в трубку... но...
не сегодня!
Ответить с цитированием
  #13 (permalink)  
Старый 11.10.2019, 03:58
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

j0hnik, а сочетанные буквы? Вы вбросили свой пример на форум даже не проверив его работоспособность!

Ваш пример неправильно разбивает на графемы! Вот пример...

Неправильная разбивка текста
<div id="text" style="font-size: 2em;">안녕하세요 &#128514; </div>

<script>
	text.innerHTML = text.innerHTML.replace(/./gi, '<span>$&</span>');
	setInterval(() => text.appendChild(document.querySelector('span')), 50);
</script>


В данном случае нужна нормализация!

Немного более правильная разбивка текста
<div id="text" style="font-size: 2em;">안녕하세요 &#128514; </div>

<script>
	text.innerHTML = text.innerHTML.normalize().replace(/./gi, '<span>$&</span>');
	setInterval(() => text.appendChild(document.querySelector('span')), 50);
</script>
Хотя метод normalize не может обработать все случаи, он достаточно хорошо работает с большинством старых текстов. Современные тексты, которые содержат новые символы, эмоджи, флаги и пр. не могут быть правильно обработаны при помощи этого метода.

Для правильного разбиения текста используйте Grapheme Splitter.

Правильная разбивка текста
<script src="https://unpkg.com/grapheme-splitter@1.0.4/index.js"></script>
<div id="text" style="font-size: 2em;">안녕하세요 &#128514; </div>

<script>
	var splitter = new GraphemeSplitter();
	text.innerHTML = splitter.splitGraphemes(text.innerHTML).map(g => `<span>${g}</span>`).join("");
	setInterval(() => text.appendChild(text.querySelector('span')), 50);
</script>
Ответить с цитированием
  #14 (permalink)  
Старый 11.10.2019, 05:14
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Malleys,
Grapheme Splitter будет работать с древнеегипетским????
Если нет, то весь макет коту под хвост!
Ответить с цитированием
  #15 (permalink)  
Старый 11.10.2019, 18:36
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от j0hnik
с древнеегипетским????
Каждый египетский иероглиф занимает одну кодовую точку, также как это делают буквы русского алфавита в нормализованном (это касается букв Ё и Й) виде. Где вы вообще увидели проблему?

Речь идёт о составных символах, например, флаги, расы (негритянки, мулаты, белые и пр.), хангыль (чамо), причёски, буквы с диакритикой, профессии и пр., которые состоят из нескольких кодовых точек.

Например, рассмотрим флаг России 🇷🇺. Он состоит из двух региональных индикаторов (🇷 и 🇺 ), однако когда эти индикаторы стоят рядом, то они означают один флаг, соответственно только одну графему!

<style>
  @font-face {
    font-family: "Flags";
    src: url("https://cdn.glitch.com/348d485e-4ba6-4841-a41e-5865874b2d66%2FBabelStoneFlags.ttf");
    unicode-range: U+1F1E6-FF;
  }

  html {
    font: 300% "Flags";
    background: #ddd;
  }
</style>

&#127479; + &#127482; = &#127479;&#127482;


Это означает, что при разбиении текста нельзя делить флаги, поскольку тогда в бегущей строке возникнет момент, когда в конце строки окажется только один региональный индикатор, и флаг поломается!

Не говоря уже о ситуации, когда вы каждую кодовую точку оборачиваете в <span>, тем самым ломая текст! Нужно оборачивать каждую графему в <span>, тогда всё будет в порядке!

На самом деле это проблема в JavaScript, в котором нет способа перечислять графемы в строке. Или я что-то пропустил?

Последний раз редактировалось Malleys, 11.10.2019 в 18:39.
Ответить с цитированием
  #16 (permalink)  
Старый 12.10.2019, 02:54
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Malleys
Или я что-то пропустил?
а если еще немножечко глубже вникнуть
Ответить с цитированием
  #17 (permalink)  
Старый 23.10.2019, 14:00
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от j0hnik
а если еще немножечко глубже вникнуть
Вникнул, ничего не нашёл! Пожалуйста, поделитесь вашим способом перечислять графемы в строке.
Ответить с цитированием
  #18 (permalink)  
Старый 24.10.2019, 13:22
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Malleys,
https://github.com/orling/grapheme-splitter
Ответить с цитированием
  #19 (permalink)  
Старый 24.10.2019, 14:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от SuperZen
grapheme-splitter
Сообщение от Malleys
grapheme-splitter@1.0.4/index.js
пост #13
SuperZen, это разве не одно и тоже?
Ответить с цитированием
  #20 (permalink)  
Старый 24.10.2019, 14:41
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Сообщение от рони Посмотреть сообщение
пост #13
SuperZen, это разве не одно и тоже?
если этот сплиттер не работает, надо руками его допилить, в исходном коде дописать ) недостающие условия определения графемы...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS удаление буквы из слова PeNgViN213 Общие вопросы Javascript 1 14.12.2017 23:43
Удаление всех &nbsp; из текста (поиск и удаление любого слова из текста) Stenli jQuery 5 28.06.2017 19:47
Ext.ux.ajax.SimManager - добавление и удаление записей khusamov ExtJS 6 09.06.2015 13:15
не работает скрипт по изменению регстра первой буквы слова Huruffus Общие вопросы Javascript 3 02.06.2012 20:50
Добавление и удаление полей в форму anoth3r Events/DOM/Window 1 11.09.2009 15:10