Word wrap: Difference between revisions

Content added Content deleted
(→‎{{header|C}}: Add a simple in-place method)
Line 5,883: Line 5,883:
<syntaxhighlight lang="ruby">class String {
<syntaxhighlight lang="ruby">class String {
method wrap(width) {
method wrap(width) {
var txt = self.gsub(/\s+/, " ");
var txt = self.gsub(/\s+/, " ")
var len = txt.len;
var len = txt.len
var para = [];
var para = []
var i = 0;
var i = 0
while (i < len) {
while (i < len) {
var j = (i + width);
var j = (i + width)
while ((j < len) && (txt.char_at(j) != ' ')) { --j };
while ((j < len) && (txt.char_at(j) != ' ')) { --j }
para.append(txt.substr(i, j-i));
para.append(txt.substr(i, j-i))
i = j+1;
i = j+1
};
}
return para.join("\n");
return para.join("\n")
}
}
}
}


var text = 'aaa bb cc ddddd';
var text = 'aaa bb cc ddddd'
say text.wrap(6);</syntaxhighlight>
say text.wrap(6)</syntaxhighlight>


{{out}}
{{out}}
Line 5,934: Line 5,934:
root << [
root << [
array.first(i+1).join(' '),
array.first(i+1).join(' '),
self.prepare_words(array.ft(i+1), depth+1, callback)
self.prepare_words(array.slice(i+1), depth+1, callback)
]
]


Line 5,977: Line 5,977:
self.combine([], path, { |combination|
self.combine([], path, { |combination|
var score = 0
var score = 0
combination.ft(0, -2).each { |line|
combination.first(-1).each { |line|
score += (width - line.len -> sqr)
score += (width - line.len -> sqr)
}
}
Line 5,991: Line 5,991:
}
}
}
}

var sww = SmartWordWrap();
var sww = SmartWordWrap()

var words = %w(aaa bb cc ddddd);
var words = %w(aaa bb cc ddddd)
var wrapped = sww.wrap(words, 6);
var wrapped = sww.wrap(words, 6)

say wrapped;</syntaxhighlight>
say wrapped</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>