Создание массива из строки по ширине
Функция возвращает массив строк с заданной максимальной шириной, кастомные переносы и опциональная разбивка по словам.
- class Main {
- static function main() {
- var text = "Два друга, поднимаясь в горы, застряли на вершине из-за бурана.\nИсикура при подъеме получил ранение и, думая, что умирает, рассказал Асаи свою самую страшную тайну.\n\n";
- var lines = parseText(text, 300, true);
- for (line in lines) trace(line);
- var text = "Но рядом оказалось убежище и, добравшись до туда, они смогли вызвать помощь. Буран не прекращался, и теперь они вдвоем в пустом доме должны ждать спасение.\n\nУ Исикуры есть шанс выжить. Есть ли он у Асаи?";
- var lines = parseText(text, 200, false);
- for (line in lines) trace(line);
- }
- static function parseText(text:String, width:Float, wordWrap:Bool):Array<String> {
- var lines:Array<String> = [];
- var lastChance = -1;
- var lastBreak = 0;
- var i = 0;
- while (i < text.length) {
- var line = text.substring(lastBreak, i + 1);
- var w = line.length * 10; //достаточно заменить на получение длины строки в пикселях
- if (w > width) {
- if (lastChance < 0 || !wordWrap) lastChance = i - 1;
- lines.push(text.substring(lastBreak, lastChance + 1));
- i = lastBreak = lastChance + 1;
- lastChance = -1;
- }
- var char = text.substring(i, i + 1);
- if (char == " ") lastChance = i;
- else if (char == "\n") {
- lines.push(text.substring(lastBreak, i + 1));
- lastBreak = i + 1;
- lastChance = -1;
- }
- i++;
- }
- var end = text.substring(lastBreak);
- if (end != "" && end != " ") lines.push(end);
- return lines;
- }
- }
Исходник/результат при исполнении в консоли: https://try.haxe.org/#D314F989