Реализовал то, до чего Google так и не дошёл за 7 лет
Есть платформа под названием Flutter - сейчас это один из самых перспективных фреймворков Google. Многие крупные компании уже переходят на него, но у него есть одна проблема, из-за которой он совершенно не подходит для читалок.
С 2018 года Flutter так и не научился корректно отображать мягкие переносы, даже если их заранее расставить в словах. Слово действительно разрывается там, где стоит мягкий перенос, но визуально он никак не отображается. Попытки заменить его на обычный дефис или другой символ не решают задачу: в таком случае слово может просто перенестись целиком на новую строку, и на её начале уже будет стоять дефис - что выглядит стремно.
К тому же это приводит к расхождениям с расчётами TextPainter, который используется для вычисления метрик текста. А это критично, если нужно корректно разбивать текст на страницы.
Это на телефоне
Пришлось, по сути, написать собственный текстовый движок, который сам токенизирует текст, а затем заново расставляет токены (слова) так, чтобы строки отображались без разрывов и с нормальными переносами в конце. Гугловский рендер я использовал только для отрисовки отдельного слова - я ещё не настолько поехал, чтобы просчитывать каждый глиф по пикселям с учётом железа.
Чтобы понять, насколько эта задача нетривиальна, представьте, что у вас есть куча кирпичей, и каждый кирпич имеет уникальный размер. Ваша задача - придумать алгоритм, который сам разложит эти кирпичи в идеальную стенку, причём уложиться нужно в строго заданные размеры этой стены.
Ещё из интересного: собственный hyphenator, реализация красных строк, поддержка различных inline-блоков, автопочинка XML и прочие вещи, без которых нормальное восприятие текста было бы затруднительным.
Пока кодом делиться не буду - иначе на меня сразу ляжет бремя его поддержки. Просто хотел показать и немного похвастаться штукой, над которой начал работать ещё в школе. Сейчас мне 24. И то, что я всё-таки смог это сделать - для меня настоящий праздник и одновременно настоящее опустошение.
За быдло-формат - извините.
Пихну без темы, что-то похожее на IT не нашел, я глупенький