Javascript.RU

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