PHP-функция: wordwrap

Javascript:

function wordwrap( str, int_width, str_break, cut ) {	// Wraps a string to a given number of characters
	// 
	// + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// + improved by: Nick Callen
	var i, j, s, r = str.split("\n");
	if(int_width > 0) for(i in r){
		for(s = r[i], r[i] = ""; s.length > int_width;
			j = cut ? int_width : (j = s.substr(0, int_width).match(/\S*$/)).input.length - j[0].length || int_width,
			r[i] += s.substr(0, j) + ((s = s.substr(j)).length ? str_break : "")
		);
		r[i] += s;
	}
	return r.join("\n");
}

Примеры:

wordwrap('Kevin van Zonneveld', 6, '|', true);
'Kevin |van Zo|nnevel|d'


Автор: GayCoder, дата: 23 ноября, 2016 - 19:15
#permalink

Мало того, что cut отключить нельзя

wordwrap(" \t abc \r\t\t\tc b c bab\r \r\nbacabc", 3, '\n', false)
 .replace(/[\t\n\r]/g, m => {
 return {'\t': '\\t', '\n': '\\n\n', '\r': '\\r'}[m];
 });

Так и вывод


\t \n
\n
\n
abc\n
\r\t\n
\t\t\n
c \n
b \n
c \n
\n
bab\n
\r \r\n
bac\n
abc

отличается от выхлопа похапешной функции:

$s = " \t abc \r\t\t\tc b c bab\r \r\nbacabc";
$s = WordWrap($s, 3);
$s = str_replace(["\t", "\n", "\r"], ["\\t", "\\n\n", "\\r"], $s);
echo($s);

Для проверки:


\t \n
\n
abc\n
\r\t\t\tc\n
b \n
c \n
bab\r\n
\r\n
bacabc


Автор: GayCoder, дата: 24 ноября, 2016 - 06:04
#permalink

Вот рабочая функция:

function wordwrap(text, width = 80, br = '\n', cut = false) {
 // Приводим к uint
 width >>>= 0;
 return text.split('\n').map(line => {
 if (!width && line.length <= width) {
 return line;
 }
 // Так бы можно было сделать, если бы не было cut
 // const words = line.split(' ');
 const words = [];
 let start = 0;
 for (;;) {
 let pos = text.indexOf(' ', start);
 let end = pos === -1 ? text.length : pos;
 if (cut && end - start > width) {
 while (start < end) {
 words.push(text.slice(start, Math.min(start + width, end)));
 start += width;
 }
 } else {
 words.push(text.slice(start, end));
 }
 if (pos === -1) {
 break;
 }
 start = end + 1;
 }
 // console.log(words);
 let wrapped = words[0];
 let spaceLeft = width - wrapped.length;
 for (let i = 1, length = words.length; i < length; ++i) {
 if (words[i].length + 1 > spaceLeft) {
 wrapped += br + words[i];
 spaceLeft = width - words[i].length;
 } else {
 wrapped += ' ' + words[i];
 spaceLeft -= 1 + words[i].length;
 }
 }
 return wrapped;
 }).join('\n');
}

Лежать она будет тут, если модифицию, то сможете найти более свежую версию по ссылке:

https://github.com/tz4678/Advanced-JavaScript/blob/master/wordwrap.js


Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum

© Илья Кантор, 2007-2021 О проекте - Обратная связь - Вверх

AltStyle によって変換されたページ (->オリジナル) /