Какая-то страшная грусть эта текстовая графика на компьютерах...
Вот простая проблема, померить размер надписи, да? Допустим, нужно взять надпись, разделить её по символам, посчитать сколько каждый символ занимает места и выдать ответ, верно? Нет! Во первых есть непечатные символы, переносы строк всех мастей и табуляции у которых все вообще по особенному (это именно что табличный сдвиг до следующей позиции а не n пробелов, как гласит популярное заблуждение). Допустим мы это учли, мы обработали все странные и необычные виды переноса строк (там параграфовые, заголовочные, простые). Теперь нам нужно обернуть строку, экран же у нас не бесконечный, верно? При обороте строки нужно учитывать, что строка оборачивается вокруг некоторых символов (запятые, дефисы почти всех видов, слеши, пробелы, но только не неразрывный пробел!) некоторые символы пропадают при переносе, как, например пробел, некоторые, как дефис остаются. Этот алгоритм уже тянет на строчек 100 - 150 зависит от того как широко вы поддерживаете наборы символов, но это все фигня! Как вообще вытащить размер глифа из шрифта? Я знаю как, нужно попарсить бинарный файл, найти там таблицу htmx (в некоторых редакциях стандарта, но не во всех и не всегда) и прочитать у позиции advanceWidth, верно? Кто вам вообще сказал, что символы у вас находятся в одном конкретном шрифте? Что если в вашей строке рядом с кириллическими буквами и иероглифы, а шрифт для них подбирается системой по принципу фоллбеков? А слыхали про "широкие символы"? Ща, ща, даже это все еще херня! Слыхали про кернинг? Ну это когда определенные пары глифов печатаются чуть чуть ближе друк к другу потому что так визуально приятнее? У нас получается что ширина двух символов уже не равна сумме ширин этих сиволов! А ведь есть же еще сумасшедшие символы которые рисуются не на своем месте, а, допустим, над предыдущим символом, для строки с диакритикой и определенными значками над символами типа унляутов германских (когда они именно написанны не символом "а с унляутом", а 2 символами а + унляут, например) все наши расчеты вообще в корне не верны! Кстати про диакритику! Тут на сцену выходит лево-на-право стороннее письмо, для него вообще все по другому, там есть еще одна механика, для арабского семейства языков, например, глифы после определенных глифов вообще по другому выглядят потому что у них появляются соединения с предыдущей буквой которые модифицируют глиф почти до неузнаваемости! И ведь это я только начал, есть же еще хинтинг, это когда что бы глиф почетче отпечатался компьютер его немножечко сдвигает, что бы он поровнее в пиксельную сетку попал. Понимаю, тут погрешности не высоки, но текст эта штука такая, она может быть крупной, а любая крупная штука имеет особенность накапливать ошибку... Короче, когда кто-то будет при вас восторгаться Стивом Джобсом и его любовью к типографии, благодарить его за компьютерные шрифты - плюнье ему в лицу и заставьте учить спецификации ttf/otf, там столько всего увлекательного внутри, целый мир