textwrap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+