GoLang wordwrap

is this article helpful? yes | no
GoLang replacement for PHP's wordwrap [edit | history]
func Wordwrap(str string, width uint, br string) string {
	if br == "" {
		br = "\n"
	}
	init := make([]byte, 0, len(str))
	buf := bytes.NewBuffer(init)
	var current uint
	var wordbuf, spacebuf bytes.Buffer
	for _, char := range str {
		if char == '\n' {
			if wordbuf.Len() == 0 {
				if current+uint(spacebuf.Len()) > width {
					current = 0
				} else {
					current += uint(spacebuf.Len())
					spacebuf.WriteTo(buf)
				}
				spacebuf.Reset()
			} else {
				current += uint(spacebuf.Len() + wordbuf.Len())
				spacebuf.WriteTo(buf)
				spacebuf.Reset()
				wordbuf.WriteTo(buf)
				wordbuf.Reset()
			}
			buf.WriteRune(char)
			current = 0
		} else if unicode.IsSpace(char) {
			if spacebuf.Len() == 0 || wordbuf.Len() > 0 {
				current += uint(spacebuf.Len() + wordbuf.Len())
				spacebuf.WriteTo(buf)
				spacebuf.Reset()
				wordbuf.WriteTo(buf)
				wordbuf.Reset()
			}
			spacebuf.WriteRune(char)
		} else {
			wordbuf.WriteRune(char)
			if current+uint(spacebuf.Len()+wordbuf.Len()) > width && uint(wordbuf.Len()) < width {
				buf.WriteString(br)
				current = 0
				spacebuf.Reset()
			}
		}
	}

	if wordbuf.Len() == 0 {
		if current+uint(spacebuf.Len()) <= width {
			spacebuf.WriteTo(buf)
		}
	} else {
		spacebuf.WriteTo(buf)
		wordbuf.WriteTo(buf)
	}
	return buf.String()
}

PHP wordwrap

PHP original manual for wordwrap [ show | php.net ]

wordwrap

(PHP 4 >= 4.0.2, PHP 5, PHP 7)

wordwrapWraps a string to a given number of characters

Description

string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = FALSE ]]] )

Wraps a string to a given number of characters using a string break character.

Parameters

str

The input string.

width

The number of characters at which the string will be wrapped.

break

The line is broken using the optional break parameter.

cut

If the cut is set to TRUE, the string is always wrapped at or before the specified width. So if you have a word that is larger than the given width, it is broken apart. (See second example). When FALSE the function does not split the word even if the width is smaller than the word width.

Return Values

Returns the given string wrapped at the specified length.

Examples

Example #1 wordwrap() example

<?php
$text 
"The quick brown fox jumped over the lazy dog.";
$newtext wordwrap($text20"<br />\n");

echo 
$newtext;
?>

The above example will output:

The quick brown fox<br />
jumped over the lazy<br />
dog.

Example #2 wordwrap() example

<?php
$text 
"A very long woooooooooooord.";
$newtext wordwrap($text8"\n"true);

echo 
"$newtext\n";
?>

The above example will output:

A very
long
wooooooo
ooooord.

Example #3 wordwrap() example

<?php
$text 
"A very long woooooooooooooooooord. and something";
$newtext wordwrap($text8"\n"false);

echo 
"$newtext\n";
?>

The above example will output:

A very
long
woooooooooooooooooord.
and
something

See Also

  • nl2br() - Inserts HTML line breaks before all newlines in a string
  • chunk_split() - Split a string into smaller chunks