Как пояснялось на About page for the project, генератор должен получить форму глифа, чтобы иметь возможность вычислить, где он «безопасен», чтобы поместить другие слова. Страница о объясняет процесс в гораздо более подробно, но вот то, что мы заботимся о:
- глифы визуализируются по отдельности к скрытому
<canvas>
элемента.
- пиксельные данные извлекаются
- обрамлению коробки являются производными
- Слово генерируется облако.
Теперь критическое понимание заключается в том, что в западных (и многих других) скриптах глифы не меняют форму, основанную на контексте часто. Да, есть такие вещи, как лигатуры, но они, как правило, редки, и определенно не необходимо для скрипта.
На персидском языке, однако, форма глифа будет меняться в зависимости от контекста. Для неперсидских читателей посмотрите на ی и س, которые в сочетании становятся یس. Да, последний номер два глифов!
Алгоритм на самом деле не имеет никаких проблем дело с персидскими персонажей, как вы можете видеть, путем взлома демо на странице о, поставив точку останова только после того, как d.code
генерируется, чтобы быть в состоянии изменить его:
Замена его с 1740
, который является charCode
для первого персидского глифа выше, и дать алгоритм перспективе, показывает красивые и совершенно правильные ограничительные коробки вокруг глифа:
Проблема в том, что когда слово облако фактически отображается, глиф помещается в контекст и ... меняет форму. Однако генератор этого не знает и продолжает использовать старые ограничивающие данные для размещения других слов, тем самым создавая перекрытие, которое вы видели. Кроме того, вероятно, есть проблема с обработкой текста справа налево, что, конечно же, не поможет.
Я бы посоветовал вам принять это автору генератора напрямую. Проект имеет страницу GitHub: https://github.com/jasondavies/d3-cloud, поэтому открытие проблемы там (и, возможно, обратная ссылка на этот ответ) поможет!
@Paul R, спасибо за редактирование. –