Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
51 lines (42 sloc) 1.07 KB
#!/usr/bin/env ruby
require './utils.rb'
def fold(filename, max_width)
File.open(filename, 'r:utf-8') do |file|
# Words in this paragraph
paragraph = []
file.each_line do |line|
# If we encounter an empty line, we reformat and dump the current
# paragraph
if line.strip.empty?
puts fold_paragraph(paragraph, max_width)
puts
paragraph = []
# Otherwise, we append the words found in the line to the paragraph
else
paragraph.concat line.split
end
end
# Last paragraph
puts fold_paragraph(paragraph, max_width) unless paragraph.empty?
end
end
# Fold a single paragraph to the desired width
def fold_paragraph(paragraph, max_width)
# Gradually build our output
str, *rest = paragraph
width = str.length
rest.each do |word|
if width + word.length + 1 <= max_width
str << ' ' << word
width += word.length + 1
else
str << "\n" << word
width = word.length
end
end
str
end
ARGV.each do |f|
t = benchmark { fold(f, 80) }
STDERR.puts "#{f}: #{t}"
end
Something went wrong with that request. Please try again.