textutils 0.6.8 → 0.7.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.
- data/Manifest.txt +6 -1
- data/README.markdown +5 -5
- data/Rakefile +1 -1
- data/lib/textutils.rb +4 -0
- data/lib/textutils/helper/address_helper.rb +1 -1
- data/lib/textutils/helper/date_helper.rb +48 -0
- data/lib/textutils/helper/hypertext_helper.rb +174 -0
- data/lib/textutils/helper/tag_helper.rb +6 -0
- data/lib/textutils/helper/title_helper.rb +5 -0
- data/lib/textutils/helper/xml_helper.rb +27 -0
- data/lib/textutils/version.rb +1 -1
- data/test/test_hypertext_helper.rb +85 -0
- data/test/test_title_helper.rb +27 -0
- data/test/test_unicode_helper.rb +21 -0
- metadata +28 -28
- checksums.yaml +0 -7
- data/test/test_helper.rb +0 -36
data/Manifest.txt
CHANGED
@@ -9,10 +9,13 @@ lib/textutils/filter/comment_filter.rb
|
|
9
9
|
lib/textutils/filter/erb_django_filter.rb
|
10
10
|
lib/textutils/filter/erb_filter.rb
|
11
11
|
lib/textutils/helper/address_helper.rb
|
12
|
+
lib/textutils/helper/date_helper.rb
|
13
|
+
lib/textutils/helper/hypertext_helper.rb
|
12
14
|
lib/textutils/helper/tag_helper.rb
|
13
15
|
lib/textutils/helper/title_helper.rb
|
14
16
|
lib/textutils/helper/unicode_helper.rb
|
15
17
|
lib/textutils/helper/value_helper.rb
|
18
|
+
lib/textutils/helper/xml_helper.rb
|
16
19
|
lib/textutils/reader/code_reader.rb
|
17
20
|
lib/textutils/reader/fixture_reader.rb
|
18
21
|
lib/textutils/reader/hash_reader.rb
|
@@ -21,4 +24,6 @@ lib/textutils/reader/values_reader.rb
|
|
21
24
|
lib/textutils/utils.rb
|
22
25
|
lib/textutils/version.rb
|
23
26
|
test/helper.rb
|
24
|
-
test/
|
27
|
+
test/test_hypertext_helper.rb
|
28
|
+
test/test_title_helper.rb
|
29
|
+
test/test_unicode_helper.rb
|
data/README.markdown
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# `textutils` - Text Filters, Helpers, Readers and More in Ruby
|
2
2
|
|
3
|
-
* home :: [github.com/
|
4
|
-
* bugs :: [github.com/
|
3
|
+
* home :: [github.com/rubylibs/textutils](https://github.com/rubylibs/textutils)
|
4
|
+
* bugs :: [github.com/rubylibs/textutils/issues](https://github.com/rubylibs/textutils/issues)
|
5
5
|
* gem :: [rubygems.org/gems/textutils](https://rubygems.org/gems/textutils)
|
6
6
|
* rdoc :: [rubydoc.info/gems/textutils](http://rubydoc.info/gems/textutils)
|
7
7
|
* forum :: [groups.google.com/group/webslideshow](https://groups.google.com/group/webslideshow)
|
@@ -84,11 +84,11 @@ Just install the gem:
|
|
84
84
|
|
85
85
|
## Real World Usage
|
86
86
|
|
87
|
-
The [`slideshow`](http://slideshow.
|
87
|
+
The [`slideshow`](http://slideshow-s9.github.io) gem (also known as Slide Show (S9))
|
88
88
|
that lets you create slide shows
|
89
89
|
and author slides in plain text using a wiki-style markup language that's easy-to-write and easy-to-read.
|
90
90
|
|
91
|
-
The [`markdown`](https://github.com/
|
91
|
+
The [`markdown`](https://github.com/rubylibs/markdown) gem that lets you use your markdown library
|
92
92
|
of choice.
|
93
93
|
|
94
94
|
The [`worlddb`](https://github.com/geraldb/world.db.ruby) gem that offers a command line tool for the open world database (`world.db`).
|
@@ -102,4 +102,4 @@ TBD
|
|
102
102
|
## License
|
103
103
|
|
104
104
|
The `textutils` scripts are dedicated to the public domain.
|
105
|
-
Use it as you please with no restrictions whatsoever.
|
105
|
+
Use it as you please with no restrictions whatsoever.
|
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ Hoe.spec 'textutils' do
|
|
8
8
|
self.summary = 'textutils - Text Filters, Helpers, Readers and More'
|
9
9
|
self.description = summary
|
10
10
|
|
11
|
-
self.urls = ['
|
11
|
+
self.urls = ['https://github.com/rubylibs/textutils']
|
12
12
|
|
13
13
|
self.author = 'Gerald Bauer'
|
14
14
|
self.email = 'webslideshow@googlegroups.com'
|
data/lib/textutils.rb
CHANGED
@@ -21,6 +21,10 @@ require 'textutils/filter/comment_filter'
|
|
21
21
|
require 'textutils/filter/erb_django_filter'
|
22
22
|
require 'textutils/filter/erb_filter'
|
23
23
|
|
24
|
+
require 'textutils/helper/date_helper'
|
25
|
+
require 'textutils/helper/hypertext_helper'
|
26
|
+
require 'textutils/helper/xml_helper'
|
27
|
+
|
24
28
|
require 'textutils/helper/unicode_helper'
|
25
29
|
require 'textutils/helper/tag_helper'
|
26
30
|
require 'textutils/helper/title_helper'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module TextUtils
|
4
|
+
module DateHelper
|
5
|
+
|
6
|
+
|
7
|
+
def time_ago_in_words( from_time )
|
8
|
+
## note:
|
9
|
+
# for code/source examples
|
10
|
+
# check rails helper or padrino(sinatra) helper
|
11
|
+
# for now this is just a simplified version e.g. no i18n
|
12
|
+
|
13
|
+
from_time = from_time.to_time
|
14
|
+
to_time = Time.now
|
15
|
+
|
16
|
+
### todo: will not handle future dates??
|
17
|
+
## what todo do??
|
18
|
+
## use -1..-50000000000 ?? "future"
|
19
|
+
|
20
|
+
## from_time, to_time = to_time, from_time if from_time > to_time
|
21
|
+
|
22
|
+
distance_in_minutes = ((to_time - from_time)/60.0).round
|
23
|
+
|
24
|
+
case distance_in_minutes
|
25
|
+
when 0..1 then "just now"
|
26
|
+
when 2...45 then "%d minutes ago" % distance_in_minutes
|
27
|
+
when 45...90 then "an hour ago" ## use one instead of 1 ?? why? why not?
|
28
|
+
# 90 mins up to 24 hours
|
29
|
+
when 90...1440 then "%d hours ago" % (distance_in_minutes.to_f / 60.0).round
|
30
|
+
# 24 hours up to 42 hours
|
31
|
+
when 1440...2520 then "a day ago" ## use one day ago - why? why not?
|
32
|
+
# 42 hours up to 30 days
|
33
|
+
when 2520...43200 then "%d days ago" % (distance_in_minutes.to_f / 1440.0).round
|
34
|
+
# 30 days up to 60 days
|
35
|
+
# fix: use pluralize for months - fix: change when - use just for a month ago
|
36
|
+
when 43200...86400 then "%d months ago" % (distance_in_minutes.to_f / 43200.0).round
|
37
|
+
# 60 days up to 365 days
|
38
|
+
when 86400...525600 then "%d months ago" % (distance_in_minutes.to_f / 43200.0).round
|
39
|
+
## fix - add number of years ago
|
40
|
+
else "over a year ago" #todo: use over a year ago???
|
41
|
+
# fix: split into two - use
|
42
|
+
# 1) a year ago
|
43
|
+
# 2) (x) years ago
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end # module DateHelper
|
48
|
+
end # module TextUtils
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module TextUtils
|
4
|
+
module HypertextHelper
|
5
|
+
|
6
|
+
|
7
|
+
def strip_tags( ht )
|
8
|
+
### to be done
|
9
|
+
## strip markup tags; return plain text; use brute force for now
|
10
|
+
# check at least for presence of required a-z+ tag names
|
11
|
+
|
12
|
+
### ht.gsub( /<[^>]+>/, '' ) - old simple
|
13
|
+
|
14
|
+
## todo: add strip comments e.g. <!-- xxxx --> ???
|
15
|
+
## or use new strip_comments( ht )
|
16
|
+
|
17
|
+
ht = ht.gsub( /<([a-z]+)\s*\/>/i, '' ) # remove xml-style empty tags eg. <br /> or <br/>
|
18
|
+
ht = ht.gsub( /<([a-z]+)(\s+[^>]*)?>/i, '' ) # opening tag <p>
|
19
|
+
ht = ht.gsub( /<\/([a-z]+)\s*>/i, '' ) # closing tag e.g. </p>
|
20
|
+
ht
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def whitelist( ht, tags, opts={} )
|
25
|
+
|
26
|
+
# note: assumes properly escaped <> in ht/hypertext
|
27
|
+
|
28
|
+
###############################################
|
29
|
+
# step one - save whitelisted tags use ‹tag›
|
30
|
+
tags.each do |tag|
|
31
|
+
# note: we strip all attribues
|
32
|
+
# note: match all tags case insensitive e.g. allow a,A or br,BR,bR etc.
|
33
|
+
# downcase all tags
|
34
|
+
|
35
|
+
# convert xml-style empty tags to simple html emtpty tags
|
36
|
+
# e.g. <br/> or <br /> becomses <br>
|
37
|
+
ht = ht.gsub( /<(#{tag})\s*\/>/i ) { |_| "‹#{$1.downcase}›" } # eg. <br /> or <br/> becomes ‹br›
|
38
|
+
|
39
|
+
# make sure we won't swall <br> for <b> for example, thus use \s+ before [^>]
|
40
|
+
ht = ht.gsub( /<(#{tag})(\s+[^>]*)?>/i ) { |_| "‹#{$1.downcase}›" } # opening tag <p>
|
41
|
+
ht = ht.gsub( /<\/(#{tag})\s*>/i ) { |_| "‹/#{$1.downcase}›" } # closing tag e.g. </p>
|
42
|
+
end
|
43
|
+
|
44
|
+
############################
|
45
|
+
# step two - clean tags
|
46
|
+
|
47
|
+
# strip images - special treatment for debugging
|
48
|
+
ht = ht.gsub( /<img[^>]*>/i, '♦' ) # for debugging use black diamond e.g. ♦
|
49
|
+
ht = ht.gsub( /<\/img>/i, '' ) # should not exists
|
50
|
+
|
51
|
+
# strip all remaining tags
|
52
|
+
# -- note: will NOT strip comments for now e.g. <!-- -->
|
53
|
+
ht = strip_tags( ht )
|
54
|
+
|
55
|
+
pp ht # fix: debugging indo - remove
|
56
|
+
|
57
|
+
############################################
|
58
|
+
# step three - restore whitelisted tags
|
59
|
+
|
60
|
+
return ht if opts[:skip_restore] # skip step 3 for debugging
|
61
|
+
|
62
|
+
tags.each do |tag|
|
63
|
+
# ht = ht.gsub( /‹(#{tag})›/, "<\1>" ) # opening tag e.g. <p>
|
64
|
+
# ht = ht.gsub( /‹\/(#{tag})›/, "<\/\1>" ) # closing tag e.g. </p>
|
65
|
+
ht = ht.gsub( /‹(#{tag})›/ ) { |_| "<#{$1}>" }
|
66
|
+
ht = ht.gsub( /‹\/(#{tag})›/ ) { |_| "<\/#{$1}>" } # closing tag e.g. </p>
|
67
|
+
end
|
68
|
+
|
69
|
+
ht
|
70
|
+
end # method whitelist
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
## change to simple_hypertext or
|
76
|
+
# hypertext_simple or
|
77
|
+
# sanitize ???
|
78
|
+
|
79
|
+
def sanitize( ht, opts={} ) # ht -> hypertext
|
80
|
+
# todo: add options for
|
81
|
+
# keep links, images, lists (?too), code, codeblocks
|
82
|
+
|
83
|
+
ht = whitelist( ht, [:br, :p, :ul, :ol, :li, :pre, :code, :blockquote, :q, :cite], opts )
|
84
|
+
|
85
|
+
# clean (prettify) literal urls (strip protocoll)
|
86
|
+
ht = ht.gsub( /(http|https):\/\//, '' )
|
87
|
+
ht
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
def textify( ht, opts={} ) # ht -> hypertext
|
92
|
+
## turn into plain (or markdown/wiki-style) text - to be done
|
93
|
+
|
94
|
+
sanitize( ht, opts ) # step 1 - sanitize html
|
95
|
+
# to be done
|
96
|
+
|
97
|
+
# strip bold
|
98
|
+
# ht = ht.gsub( /<b[^>]*>/, '**' ) # fix: will also swallow bxxx tags - add b space
|
99
|
+
# ht = ht.gsub( /<\/b>/, '**' )
|
100
|
+
|
101
|
+
# strip em
|
102
|
+
# ht = ht.gsub( /<em[^>]*>/, '__' )
|
103
|
+
# ht = ht.gsub( /<\/em>/, '__' )
|
104
|
+
|
105
|
+
# ht = ht.gsub( / /, ' ' )
|
106
|
+
|
107
|
+
# # try to cleanup whitespaces
|
108
|
+
# # -- keep no more than two spaces
|
109
|
+
# ht = ht.gsub( /[ \t]{3,}/, ' ' )
|
110
|
+
# # -- keep no more than two new lines
|
111
|
+
# ht = ht.gsub( /\n{2,}/m, "\n\n" )
|
112
|
+
# # -- remove all trailing spaces
|
113
|
+
# ht = ht.gsub( /[ \t\n]+$/m, '' )
|
114
|
+
# # -- remove all leading spaces
|
115
|
+
# ht = ht.gsub( /^[ \t\n]+/m, '' )
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
##############################
|
120
|
+
# rails-style asset, url tag helpers and friends
|
121
|
+
#
|
122
|
+
# todo: move into different helper module/modules?? why? why not?
|
123
|
+
|
124
|
+
def tag( tag, opts={} ) # empty tag (no content e.g. <br>, <img src=''> etc.)
|
125
|
+
attribs = []
|
126
|
+
opts.each do |key,value|
|
127
|
+
attribs << "#{key}='#{value}'"
|
128
|
+
end
|
129
|
+
|
130
|
+
if attribs.size > 0
|
131
|
+
"<#{tag} #{attribs.join(' ')}>"
|
132
|
+
else
|
133
|
+
"<#{tag}>"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def content_tag( tag, content, opts={} ) # content tag (e.g. <p>hello</p> - w/ opening and closing tag)
|
138
|
+
attribs = []
|
139
|
+
opts.each do |key,value|
|
140
|
+
attribs << "#{key}='#{value}'"
|
141
|
+
end
|
142
|
+
|
143
|
+
if attribs.size > 0
|
144
|
+
"<#{tag} #{attribs.join(' ')}>#{content}</#{tag}>"
|
145
|
+
else
|
146
|
+
"<#{tag}>#{content}</#{tag}>"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
def stylesheet_link_tag( href, opts={} )
|
152
|
+
href = "#{href}.css" unless href.end_with?( '.css' ) # auto-add .css if not present
|
153
|
+
attribs = { rel: 'stylesheet',
|
154
|
+
type: 'text/css',
|
155
|
+
href: href }
|
156
|
+
attribs = attribs.merge( opts ) ### fix/todo: use reverse merge e.g. overwrite only if not present
|
157
|
+
tag( :link, attribs )
|
158
|
+
end
|
159
|
+
|
160
|
+
def image_tag( src, opts={} )
|
161
|
+
attribs = { src: src }
|
162
|
+
attribs = attribs.merge( opts ) ### fix/todo: use reverse merge e.g. overwrite only if not present
|
163
|
+
tag( :img, attribs ) ### "<img src='#{src}' #{attributes}>"
|
164
|
+
end
|
165
|
+
|
166
|
+
def link_to( content, href, opts={} )
|
167
|
+
attribs = { href: href }
|
168
|
+
attribs = attribs.merge( opts ) ### fix/todo: use reverse merge e.g. overwrite only if not present
|
169
|
+
content_tag( :a, content, attribs ) ### "<a href='#{href}' #{attributes}>#{text}</a>"
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
end # module HypertextHelper
|
174
|
+
end # module TextUtils
|
@@ -3,6 +3,12 @@
|
|
3
3
|
module TextUtils
|
4
4
|
module TagHelper
|
5
5
|
|
6
|
+
####
|
7
|
+
# - todo: use new additional sub module ???
|
8
|
+
# e.g. TextUtils::Reader::TagHelper
|
9
|
+
# lets us use "classic" web helpers a la rails
|
10
|
+
# find a good name for sub module - Reader? Fixtures? Values? Parser?
|
11
|
+
|
6
12
|
|
7
13
|
def find_tags( value )
|
8
14
|
# logger.debug " found tags: >>#{value}<<"
|
@@ -4,6 +4,11 @@
|
|
4
4
|
module TextUtils
|
5
5
|
module TitleHelper
|
6
6
|
|
7
|
+
####
|
8
|
+
# - todo: use new additional sub module ???
|
9
|
+
# e.g. TextUtils::Reader::TagHelper
|
10
|
+
# lets us use "classic" web helpers a la rails
|
11
|
+
# find a good name for sub module - Reader? Fixtures? Values? Parser?
|
7
12
|
|
8
13
|
|
9
14
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module TextUtils
|
4
|
+
module XmlHelper
|
5
|
+
|
6
|
+
|
7
|
+
def prettify_xml( xml )
|
8
|
+
require 'rexml/document'
|
9
|
+
|
10
|
+
begin
|
11
|
+
d = REXML::Document.new( xml )
|
12
|
+
|
13
|
+
# d.write( pretty_xml="", 2 )
|
14
|
+
# pretty_xml # return prettified xml
|
15
|
+
|
16
|
+
formatter = REXML::Formatters::Pretty.new( 2 ) # indent=2
|
17
|
+
formatter.compact = true # This is the magic line that does what you need!
|
18
|
+
pretty_xml = formatter.write( d.root, "" ) # todo/checl: what's 2nd arg used for ??
|
19
|
+
pretty_xml
|
20
|
+
rescue Exception => ex
|
21
|
+
"warn: prettify_xml failed: #{ex}\n\n\n" + xml
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end # module XmlHelper
|
27
|
+
end # module TextUtils
|
data/lib/textutils/version.rb
CHANGED
@@ -0,0 +1,85 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_rss.rb
|
6
|
+
# or better
|
7
|
+
# rake test
|
8
|
+
|
9
|
+
require 'helper'
|
10
|
+
|
11
|
+
|
12
|
+
class TestHypertextHelper < MiniTest::Unit::TestCase
|
13
|
+
|
14
|
+
include TextUtils::HypertextHelper # lets us use textify, etc.
|
15
|
+
|
16
|
+
|
17
|
+
def test_stylesheet_link_tag
|
18
|
+
hyout = "<link rel='stylesheet' type='text/css' href='hello.css'>"
|
19
|
+
|
20
|
+
assert_equal( hyout, stylesheet_link_tag( 'hello' ))
|
21
|
+
assert_equal( hyout, stylesheet_link_tag( 'hello.css' ))
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def test_sanitize
|
26
|
+
hyin =<<EOS
|
27
|
+
<p><img style="float:left; margin-right:4px" src="http://photos1.meetupstatic.com/photos/event/7/c/b/2/event_244651922.jpeg" alt="photo" class="photo" />vienna.rb</p>
|
28
|
+
<p>
|
29
|
+
<p>The cool guys from <a href="http://platogo.com/">Platogo</a> will sponsor (y)our drinks. Which is awesome.</p>
|
30
|
+
<p><strong>Talks</strong>*</p>
|
31
|
+
<p>Jakob Sommerhuber - sponsor talk</p>
|
32
|
+
<p>Martin Schürrer - Erlang/OTP in production for highly-available, scalable systems</p>
|
33
|
+
<p>Markus Prinz - How to improve your code</p>
|
34
|
+
<p>Gerald Bauer - working with Sinatra</p>
|
35
|
+
<p>Kathrin Folkendt - 'Chapter one' (lightning talk on getting started with Rails, and building her first web app)</p>
|
36
|
+
<p><em>*preliminary program</em></p>
|
37
|
+
</p>
|
38
|
+
<p>Vienna - Austria</p>
|
39
|
+
<p>Friday, October 11 at 6:00 PM</p>
|
40
|
+
<p>Attending: 21</p>
|
41
|
+
<p>Details: http://www.meetup.com/vienna-rb/events/130346182/</p>
|
42
|
+
EOS
|
43
|
+
|
44
|
+
hystep1 = <<EOS
|
45
|
+
‹p›♦vienna.rb‹/p›
|
46
|
+
‹p›
|
47
|
+
‹p›The cool guys from Platogo will sponsor (y)our drinks. Which is awesome.‹/p›
|
48
|
+
‹p›Talks*‹/p›
|
49
|
+
‹p›Jakob Sommerhuber - sponsor talk‹/p›
|
50
|
+
‹p›Martin Schürrer - Erlang/OTP in production for highly-available, scalable systems‹/p›
|
51
|
+
‹p›Markus Prinz - How to improve your code‹/p›
|
52
|
+
‹p›Gerald Bauer - working with Sinatra‹/p›
|
53
|
+
‹p›Kathrin Folkendt - 'Chapter one' (lightning talk on getting started with Rails, and building her first web app)‹/p›
|
54
|
+
‹p›*preliminary program‹/p›
|
55
|
+
‹/p›
|
56
|
+
‹p›Vienna - Austria‹/p›
|
57
|
+
‹p›Friday, October 11 at 6:00 PM‹/p›
|
58
|
+
‹p›Attending: 21‹/p›
|
59
|
+
‹p›Details: www.meetup.com/vienna-rb/events/130346182/‹/p›
|
60
|
+
EOS
|
61
|
+
|
62
|
+
hyout = <<EOS
|
63
|
+
<p>♦vienna.rb</p>
|
64
|
+
<p>
|
65
|
+
<p>The cool guys from Platogo will sponsor (y)our drinks. Which is awesome.</p>
|
66
|
+
<p>Talks*</p>
|
67
|
+
<p>Jakob Sommerhuber - sponsor talk</p>
|
68
|
+
<p>Martin Schürrer - Erlang/OTP in production for highly-available, scalable systems</p>
|
69
|
+
<p>Markus Prinz - How to improve your code</p>
|
70
|
+
<p>Gerald Bauer - working with Sinatra</p>
|
71
|
+
<p>Kathrin Folkendt - 'Chapter one' (lightning talk on getting started with Rails, and building her first web app)</p>
|
72
|
+
<p>*preliminary program</p>
|
73
|
+
</p>
|
74
|
+
<p>Vienna - Austria</p>
|
75
|
+
<p>Friday, October 11 at 6:00 PM</p>
|
76
|
+
<p>Attending: 21</p>
|
77
|
+
<p>Details: www.meetup.com/vienna-rb/events/130346182/</p>
|
78
|
+
EOS
|
79
|
+
|
80
|
+
assert_equal( hyout, sanitize( hyin ) )
|
81
|
+
|
82
|
+
assert_equal( hystep1, sanitize( hyin, skip_restore: true ) )
|
83
|
+
end
|
84
|
+
|
85
|
+
end # class TestHypertextHelper
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_helper.rb
|
6
|
+
# or better
|
7
|
+
# rake test
|
8
|
+
|
9
|
+
require 'helper'
|
10
|
+
|
11
|
+
class TestTitleHelper < MiniTest::Unit::TestCase
|
12
|
+
|
13
|
+
def test_title_to_key
|
14
|
+
|
15
|
+
txt_io = [
|
16
|
+
[ 'São Paulo', 'saopaulo' ],
|
17
|
+
[ 'São Gonçalo', 'saogoncalo' ],
|
18
|
+
[ 'Výčepní', 'vycepni' ]
|
19
|
+
]
|
20
|
+
|
21
|
+
txt_io.each do |txt|
|
22
|
+
assert_equal txt[1], TextUtils.title_to_key( txt[0] )
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end # class TestTitleHelper
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_helper.rb
|
6
|
+
# or better
|
7
|
+
# rake test
|
8
|
+
|
9
|
+
require 'helper'
|
10
|
+
|
11
|
+
class TestUnicodeHelper < MiniTest::Unit::TestCase
|
12
|
+
|
13
|
+
def test_convert_unicode_dashes
|
14
|
+
|
15
|
+
txt_in = "\u2010 \u2011 \u2212 \u2013 \u2014" # NB: unicode chars require double quoted strings
|
16
|
+
txt_out = '- - - - -'
|
17
|
+
|
18
|
+
assert_equal txt_out, TextUtils.convert_unicode_dashes_to_plain_ascii( txt_in )
|
19
|
+
end
|
20
|
+
|
21
|
+
end # class TestUnicodeHelper
|
metadata
CHANGED
@@ -1,57 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: textutils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Gerald Bauer
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: logutils
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &72211900 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '0.5'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
|
-
version_requirements:
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.5'
|
24
|
+
version_requirements: *72211900
|
27
25
|
- !ruby/object:Gem::Dependency
|
28
26
|
name: rdoc
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &72228610 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
30
29
|
requirements:
|
31
30
|
- - ~>
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
32
|
+
version: '3.10'
|
34
33
|
type: :development
|
35
34
|
prerelease: false
|
36
|
-
version_requirements:
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '4.0'
|
35
|
+
version_requirements: *72228610
|
41
36
|
- !ruby/object:Gem::Dependency
|
42
37
|
name: hoe
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &72228310 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
44
40
|
requirements:
|
45
41
|
- - ~>
|
46
42
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
43
|
+
version: '3.3'
|
48
44
|
type: :development
|
49
45
|
prerelease: false
|
50
|
-
version_requirements:
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.6'
|
46
|
+
version_requirements: *72228310
|
55
47
|
description: textutils - Text Filters, Helpers, Readers and More
|
56
48
|
email: webslideshow@googlegroups.com
|
57
49
|
executables: []
|
@@ -70,10 +62,13 @@ files:
|
|
70
62
|
- lib/textutils/filter/erb_django_filter.rb
|
71
63
|
- lib/textutils/filter/erb_filter.rb
|
72
64
|
- lib/textutils/helper/address_helper.rb
|
65
|
+
- lib/textutils/helper/date_helper.rb
|
66
|
+
- lib/textutils/helper/hypertext_helper.rb
|
73
67
|
- lib/textutils/helper/tag_helper.rb
|
74
68
|
- lib/textutils/helper/title_helper.rb
|
75
69
|
- lib/textutils/helper/unicode_helper.rb
|
76
70
|
- lib/textutils/helper/value_helper.rb
|
71
|
+
- lib/textutils/helper/xml_helper.rb
|
77
72
|
- lib/textutils/reader/code_reader.rb
|
78
73
|
- lib/textutils/reader/fixture_reader.rb
|
79
74
|
- lib/textutils/reader/hash_reader.rb
|
@@ -82,12 +77,13 @@ files:
|
|
82
77
|
- lib/textutils/utils.rb
|
83
78
|
- lib/textutils/version.rb
|
84
79
|
- test/helper.rb
|
85
|
-
- test/
|
80
|
+
- test/test_hypertext_helper.rb
|
81
|
+
- test/test_title_helper.rb
|
82
|
+
- test/test_unicode_helper.rb
|
86
83
|
- .gemtest
|
87
|
-
homepage:
|
84
|
+
homepage: https://github.com/rubylibs/textutils
|
88
85
|
licenses:
|
89
86
|
- Public Domain
|
90
|
-
metadata: {}
|
91
87
|
post_install_message:
|
92
88
|
rdoc_options:
|
93
89
|
- --main
|
@@ -95,20 +91,24 @@ rdoc_options:
|
|
95
91
|
require_paths:
|
96
92
|
- lib
|
97
93
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
98
95
|
requirements:
|
99
96
|
- - ! '>='
|
100
97
|
- !ruby/object:Gem::Version
|
101
98
|
version: 1.9.2
|
102
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
103
101
|
requirements:
|
104
102
|
- - ! '>='
|
105
103
|
- !ruby/object:Gem::Version
|
106
104
|
version: '0'
|
107
105
|
requirements: []
|
108
106
|
rubyforge_project: textutils
|
109
|
-
rubygems_version:
|
107
|
+
rubygems_version: 1.8.17
|
110
108
|
signing_key:
|
111
|
-
specification_version:
|
109
|
+
specification_version: 3
|
112
110
|
summary: textutils - Text Filters, Helpers, Readers and More
|
113
111
|
test_files:
|
114
|
-
- test/
|
112
|
+
- test/test_unicode_helper.rb
|
113
|
+
- test/test_hypertext_helper.rb
|
114
|
+
- test/test_title_helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: c59b2415860e0f99e9f0a71f8a9ee90f53d62e50
|
4
|
-
data.tar.gz: 4bf60477e5056ecfa8c7c20c8fe9d5a93a0d93e1
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 1703cfd9dd7e0cef58d5e29e718ae2606dae35810b86687f56dc160f3903eb4f7bd6327a42ea51f91f0de51d38f5df062ad9002734c06798d16f4d24f963c748
|
7
|
-
data.tar.gz: 35d720818928c515babb1d3f9ea3a4c34bc793e5de1889b39d8ddad52ddcb3db7bf0b7bc9f19d4413fa457b10e4bc80bbc53097aeed2d755e7815e6b409bfe20
|
data/test/test_helper.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
###
|
4
|
-
# to run use
|
5
|
-
# ruby -I ./lib -I ./test test/test_helper.rb
|
6
|
-
# or better
|
7
|
-
# rake test
|
8
|
-
|
9
|
-
require 'helper'
|
10
|
-
|
11
|
-
class TestHelper < MiniTest::Unit::TestCase
|
12
|
-
|
13
|
-
def test_convert_unicode_dashes
|
14
|
-
|
15
|
-
txt_in = "\u2010 \u2011 \u2212 \u2013 \u2014" # NB: unicode chars require double quoted strings
|
16
|
-
txt_out = '- - - - -'
|
17
|
-
|
18
|
-
assert( txt_out == TextUtils.convert_unicode_dashes_to_plain_ascii( txt_in ) )
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
def test_title_to_key
|
23
|
-
|
24
|
-
txt_io = [
|
25
|
-
[ 'São Paulo', 'saopaulo' ],
|
26
|
-
[ 'São Gonçalo', 'saogoncalo' ],
|
27
|
-
[ 'Výčepní', 'vycepni' ]
|
28
|
-
]
|
29
|
-
|
30
|
-
txt_io.each do |txt|
|
31
|
-
assert( txt[1] == TextUtils.title_to_key( txt[0] ) )
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
end # class TestHelper
|