textwrap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/README.txt +19 -0
  2. data/lib/textwrap.rb +130 -0
  3. metadata +48 -0
@@ -0,0 +1,19 @@
1
+ = testwrap.rb
2
+
3
+ Copyright (c) 2007 SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
4
+
5
+ == Example
6
+
7
+ require 'textwrap'
8
+ include Textwrap
9
+ puts Textwrap.fill(<<EOS, 40)
10
+ The wrap() method is just like fill() except that it returns
11
+ a list of strings instead of one big string with newlines to separate
12
+ the wrapped lines.
13
+ EOS
14
+
15
+ # The wrap() method is just like fill()
16
+ # except that it returns a list of strings
17
+ # instead of one big string with newlines
18
+ # to separate the wrapped lines.
19
+
@@ -0,0 +1,130 @@
1
+ #
2
+ # = testwrap.rb
3
+ #
4
+ # Copyright (c) 2007 SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
5
+ #
6
+ # == Example
7
+ #
8
+ # require 'textwrap'
9
+ # include Textwrap
10
+ # puts Textwrap.fill(<<EOS, 40)
11
+ # The wrap() method is just like fill() except that it returns
12
+ # a list of strings instead of one big string with newlines to separate
13
+ # the wrapped lines.
14
+ # EOS
15
+ #
16
+ # # The wrap() method is just like fill()
17
+ # # except that it returns a list of strings
18
+ # # instead of one big string with newlines
19
+ # # to separate the wrapped lines.
20
+ #
21
+
22
+ require 'strscan'
23
+
24
+ module Textwrap
25
+ def wrap(text, width = 70, options = {})
26
+ if width.kind_of?(Hash)
27
+ options = width
28
+ width = options.fetch(:width, 70)
29
+ end
30
+
31
+ initial_indent = options.fetch(:initial_indent, '')
32
+ subsequent_indent = options.fetch(:subsequent_indent, '')
33
+
34
+ if options.fetch(:expand_tabs, true)
35
+ text = text.gsub(/\t/, ' ') # SP x 8
36
+ end
37
+
38
+ if options.fetch(:replace_whitespace, true)
39
+ text = text.gsub(/\s/, ' ')
40
+ end
41
+
42
+ if options.fetch(:break_long_words, true)
43
+ regexps = [/\s{1,#{width}}/, /\S{1,#{width}}/]
44
+ else
45
+ regexps = [/\s+/, /\S+/]
46
+ end
47
+
48
+ s = StringScanner.new(text.split($/).join)
49
+ lines = []
50
+ indent = initial_indent
51
+ words = [s.scan(regexps.reverse!.first) || s.scan(regexps.reverse!.first) || '']
52
+
53
+ until s.eos?
54
+ word = s.scan(regexps.reverse!.first) or next
55
+ line = indent + words.join.strip
56
+
57
+ if (line + word).length > width
58
+ lines << line
59
+ words.clear
60
+ indent = subsequent_indent
61
+ end
62
+
63
+ words << word
64
+ end
65
+
66
+ unless words.empty?
67
+ lines << indent + words.join.strip
68
+ end
69
+
70
+ return lines
71
+ end # wrap
72
+
73
+ def fill(text, width = 70, options = {})
74
+ wrap(text, width, options).join($/)
75
+ end
76
+
77
+ module_function :wrap, :fill
78
+ end
79
+
80
+ class TextWrapper
81
+ @@kwargs = {
82
+ :width => 70,
83
+ :expand_tabs => true,
84
+ :replace_whitespace => true,
85
+ :initial_indent => '',
86
+ :subsequent_indent => '',
87
+ :break_long_words => true
88
+ }
89
+
90
+ attr_accessor *@@kwargs.keys
91
+
92
+ def initialize(options = {})
93
+ @@kwargs.each do |kw, defval|
94
+ self.instance_variable_set("@#{kw}", options.fetch(kw, defval))
95
+ end
96
+ end
97
+
98
+ def wrap(text, width = nil, options = {})
99
+ prepare(text, width, options) do |t, w, o|
100
+ Textwrap.wrap(t, w, o)
101
+ end
102
+ end
103
+
104
+ def fill(text, width = nil, options = {})
105
+ prepare(text, width, options) do |t, w, o|
106
+ Textwrap.fill(t, w, o)
107
+ end
108
+ end
109
+
110
+ private
111
+ def prepare(text, width, options)
112
+ if width.kind_of?(Hash)
113
+ options = width
114
+ end
115
+
116
+ instance_options = {}
117
+
118
+ @@kwargs.each do |kw, defval|
119
+ instance_options[kw] = self.instance_variable_get("@#{kw}")
120
+ end
121
+
122
+ options = instance_options.merge(options)
123
+
124
+ unless width
125
+ width = options[:width]
126
+ end
127
+
128
+ yield(text, width, options)
129
+ end
130
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: textwrap
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.0
7
+ date: 2007-10-20 00:00:00 +09:00
8
+ summary: Text wrapping and filling library like Python textwrap module.
9
+ require_paths:
10
+ - lib
11
+ email: sgwr_dts@yahoo.co.jp
12
+ homepage: http://textwrap.rubyforge.org
13
+ rubyforge_project: textwrap
14
+ description: Text wrapping and filling library like Python textwrap module.
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - winebarrel
31
+ files:
32
+ - README.txt
33
+ - lib/textwrap.rb
34
+ test_files: []
35
+
36
+ rdoc_options:
37
+ - --main
38
+ - README.txt
39
+ extra_rdoc_files:
40
+ - README.txt
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ requirements: []
46
+
47
+ dependencies: []
48
+