thbar-hpricot 0.8.3.1

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 (50) hide show
  1. data/CHANGELOG +104 -0
  2. data/COPYING +18 -0
  3. data/README.md +276 -0
  4. data/Rakefile +234 -0
  5. data/ext/fast_xs/FastXsService.java +1123 -0
  6. data/ext/fast_xs/extconf.rb +4 -0
  7. data/ext/fast_xs/fast_xs.c +210 -0
  8. data/ext/hpricot_scan/HpricotCss.java +850 -0
  9. data/ext/hpricot_scan/HpricotScanService.java +2099 -0
  10. data/ext/hpricot_scan/extconf.rb +9 -0
  11. data/ext/hpricot_scan/hpricot_common.rl +76 -0
  12. data/ext/hpricot_scan/hpricot_css.c +3511 -0
  13. data/ext/hpricot_scan/hpricot_css.java.rl +155 -0
  14. data/ext/hpricot_scan/hpricot_css.rl +120 -0
  15. data/ext/hpricot_scan/hpricot_scan.c +7045 -0
  16. data/ext/hpricot_scan/hpricot_scan.h +79 -0
  17. data/ext/hpricot_scan/hpricot_scan.java.rl +1161 -0
  18. data/ext/hpricot_scan/hpricot_scan.rl +902 -0
  19. data/extras/hpricot.png +0 -0
  20. data/lib/hpricot.rb +26 -0
  21. data/lib/hpricot/blankslate.rb +63 -0
  22. data/lib/hpricot/builder.rb +216 -0
  23. data/lib/hpricot/elements.rb +514 -0
  24. data/lib/hpricot/htmlinfo.rb +691 -0
  25. data/lib/hpricot/inspect.rb +103 -0
  26. data/lib/hpricot/modules.rb +40 -0
  27. data/lib/hpricot/parse.rb +38 -0
  28. data/lib/hpricot/tag.rb +219 -0
  29. data/lib/hpricot/tags.rb +164 -0
  30. data/lib/hpricot/traverse.rb +839 -0
  31. data/lib/hpricot/xchar.rb +94 -0
  32. data/test/files/basic.xhtml +17 -0
  33. data/test/files/boingboing.html +2266 -0
  34. data/test/files/cy0.html +3653 -0
  35. data/test/files/immob.html +400 -0
  36. data/test/files/pace_application.html +1320 -0
  37. data/test/files/tenderlove.html +16 -0
  38. data/test/files/uswebgen.html +220 -0
  39. data/test/files/utf8.html +1054 -0
  40. data/test/files/week9.html +1723 -0
  41. data/test/files/why.xml +19 -0
  42. data/test/load_files.rb +7 -0
  43. data/test/nokogiri-bench.rb +64 -0
  44. data/test/test_alter.rb +96 -0
  45. data/test/test_builder.rb +37 -0
  46. data/test/test_parser.rb +457 -0
  47. data/test/test_paths.rb +25 -0
  48. data/test/test_preserved.rb +88 -0
  49. data/test/test_xml.rb +28 -0
  50. metadata +124 -0
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'hpricot'
5
+ require 'load_files'
6
+
7
+ class TestParser < Test::Unit::TestCase
8
+ def test_roundtrip
9
+ @basic = Hpricot.parse(TestFiles::BASIC)
10
+ %w[link link[2] body #link1 a p.ohmy].each do |css_sel|
11
+ ele = @basic.at(css_sel)
12
+ assert_equal ele, @basic.at(ele.css_path)
13
+ assert_equal ele, @basic.at(ele.xpath)
14
+ end
15
+ end
16
+ def test_attr_brackets
17
+ doc = Hpricot('<input name="vendor[porkpies]"/>')
18
+ assert_equal 1, (doc/'input[@name^="vendor[porkpies]"]').length
19
+ assert_equal 1, (doc/'input[@name="vendor[porkpies]"]').length
20
+ assert_equal 0, (doc/'input[@name$="]]]]]"]').length
21
+
22
+ doc = Hpricot('<input name="vendor[porkpies][meaty]"/>')
23
+ assert_equal 1, (doc/'input[@name^="vendor[porkpies][meaty]"]').length
24
+ end
25
+ end
@@ -0,0 +1,88 @@
1
+ # -*- coding: utf-8 -*-
2
+ #!/usr/bin/env ruby
3
+
4
+ require 'test/unit'
5
+ require 'hpricot'
6
+ require 'load_files'
7
+
8
+ unless "".respond_to?(:lines)
9
+ require 'enumerator'
10
+ class String
11
+ def lines
12
+ Enumerable::Enumerator.new(self, :each_line)
13
+ end
14
+ end
15
+ end
16
+
17
+ class TestPreserved < Test::Unit::TestCase
18
+ def assert_roundtrip str
19
+ doc = Hpricot(str)
20
+ yield doc if block_given?
21
+ str2 = doc.to_original_html
22
+ if RUBY_VERSION =~ /^1.9/
23
+ str2.force_encoding('UTF-8')
24
+ end
25
+ str.lines.zip(str2.lines).each do |s1, s2|
26
+ assert_equal s1, s2
27
+ end
28
+ end
29
+
30
+ def assert_html str1, str2
31
+ doc = Hpricot(str2)
32
+ yield doc if block_given?
33
+ assert_equal str1, doc.to_original_html
34
+ end
35
+
36
+ def test_simple
37
+ str = "<p>Hpricot is a <b>you know <i>uh</b> fine thing.</p>"
38
+ assert_html str, str
39
+ assert_html "<p class=\"new\">Hpricot is a <b>you know <i>uh</b> fine thing.</p>", str do |doc|
40
+ (doc/:p).set('class', 'new')
41
+ end
42
+ end
43
+
44
+ def test_parent
45
+ str = "<html><base href='/'><head><title>Test</title></head><body><div id='wrap'><p>Paragraph one.</p><p>Paragraph two.</p></div></body></html>"
46
+ assert_html str, str
47
+ assert_html "<html><base href='/'><body><div id=\"all\"><div><p>Paragraph one.</p></div><div><p>Paragraph two.</p></div></div></body></html>", str do |doc|
48
+ (doc/:head).remove
49
+ (doc/:div).set('id', 'all')
50
+ (doc/:p).wrap('<div></div>')
51
+ end
52
+ end
53
+
54
+ def test_escaping_of_contents
55
+ doc = Hpricot(TestFiles::BOINGBOING)
56
+ assert_equal "Fukuda’s Automatic Door opens around your body as you pass through it. The idea is to save energy and keep the room clean.", doc.at("img[@alt='200606131240']").next.to_s.strip
57
+ end
58
+
59
+ def test_files
60
+ assert_roundtrip TestFiles::BASIC
61
+ assert_roundtrip TestFiles::BOINGBOING
62
+ assert_roundtrip TestFiles::CY0
63
+ end
64
+
65
+ def test_fixup_link
66
+ doc = %{<?xml version="1.0" encoding="UTF-8"?><rss><channel><link>ht</link></channel></rss>}
67
+ assert_roundtrip doc
68
+ assert_equal Hpricot(doc).to_s,
69
+ %{<?xml version="1.0" encoding="UTF-8"?><rss><channel><link />ht</channel></rss>}
70
+ assert_equal Hpricot.XML(doc).to_s,
71
+ %{<?xml version="1.0" encoding="UTF-8"?><rss><channel><link>ht</link></channel></rss>}
72
+ end
73
+
74
+ def test_escaping_of_attrs
75
+ # ampersands in URLs
76
+ str = %{<a href="http://google.com/search?q=hpricot&amp;l=en">Google</a>}
77
+ link = (doc = Hpricot(str)).at(:a)
78
+ assert_equal "http://google.com/search?q=hpricot&l=en", link['href']
79
+ assert_equal "http://google.com/search?q=hpricot&l=en", link.attributes['href']
80
+ assert_equal "http://google.com/search?q=hpricot&l=en", link.get_attribute('href')
81
+ assert_equal "http://google.com/search?q=hpricot&amp;l=en", link.raw_attributes['href']
82
+ assert_equal str, doc.to_html
83
+
84
+ # alter the url
85
+ link['href'] = "javascript:alert(\"AGGA-KA-BOO!\")"
86
+ assert_equal %{<a href="javascript:alert(&quot;AGGA-KA-BOO!&quot;)">Google</a>}, doc.to_html
87
+ end
88
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'hpricot'
5
+ require 'load_files'
6
+
7
+ class TestParser < Test::Unit::TestCase
8
+ # normally, the link tags are empty HTML tags.
9
+ # contributed by laudney.
10
+ def test_normally_empty
11
+ doc = Hpricot::XML("<rss><channel><title>this is title</title><link>http://fake.com</link></channel></rss>")
12
+ assert_equal "this is title", (doc/:rss/:channel/:title).text
13
+ assert_equal "http://fake.com", (doc/:rss/:channel/:link).text
14
+ end
15
+
16
+ # make sure XML doesn't get downcased
17
+ def test_casing
18
+ doc = Hpricot::XML(TestFiles::WHY)
19
+ assert_equal "hourly", (doc.at "sy:updatePeriod").inner_html
20
+ assert_equal 1, (doc/"guid[@isPermaLink]").length
21
+ end
22
+
23
+ # be sure tags named "text" are ok
24
+ def test_text_tags
25
+ doc = Hpricot::XML("<feed><title>City Poisoned</title><text>Rita Lee has poisoned Brazil.</text></feed>")
26
+ assert_equal "City Poisoned", (doc/"title").text
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: thbar-hpricot
3
+ version: !ruby/object:Gem::Version
4
+ hash: 1
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 8
9
+ - 3
10
+ - 1
11
+ version: 0.8.3.1
12
+ platform: ruby
13
+ authors:
14
+ - why the lucky stiff
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-02-16 00:00:00 -08:00
20
+ default_executable:
21
+ dependencies: []
22
+
23
+ description: a swift, liberal HTML parser with a fantastic library
24
+ email: why@ruby-lang.org
25
+ executables: []
26
+
27
+ extensions:
28
+ - ext/hpricot_scan/extconf.rb
29
+ - ext/fast_xs/extconf.rb
30
+ extra_rdoc_files:
31
+ - README.md
32
+ - CHANGELOG
33
+ - COPYING
34
+ files:
35
+ - CHANGELOG
36
+ - COPYING
37
+ - README.md
38
+ - Rakefile
39
+ - test/test_preserved.rb
40
+ - test/test_paths.rb
41
+ - test/test_alter.rb
42
+ - test/load_files.rb
43
+ - test/test_parser.rb
44
+ - test/files/cy0.html
45
+ - test/files/tenderlove.html
46
+ - test/files/uswebgen.html
47
+ - test/files/immob.html
48
+ - test/files/boingboing.html
49
+ - test/files/pace_application.html
50
+ - test/files/basic.xhtml
51
+ - test/files/utf8.html
52
+ - test/files/why.xml
53
+ - test/files/week9.html
54
+ - test/nokogiri-bench.rb
55
+ - test/test_builder.rb
56
+ - test/test_xml.rb
57
+ - extras/hpricot.png
58
+ - lib/hpricot.rb
59
+ - lib/hpricot/tags.rb
60
+ - lib/hpricot/traverse.rb
61
+ - lib/hpricot/htmlinfo.rb
62
+ - lib/hpricot/elements.rb
63
+ - lib/hpricot/inspect.rb
64
+ - lib/hpricot/blankslate.rb
65
+ - lib/hpricot/tag.rb
66
+ - lib/hpricot/parse.rb
67
+ - lib/hpricot/builder.rb
68
+ - lib/hpricot/xchar.rb
69
+ - lib/hpricot/modules.rb
70
+ - ext/hpricot_scan/hpricot_scan.h
71
+ - ext/hpricot_scan/HpricotScanService.java
72
+ - ext/hpricot_scan/HpricotCss.java
73
+ - ext/fast_xs/FastXsService.java
74
+ - ext/hpricot_scan/hpricot_css.c
75
+ - ext/hpricot_scan/hpricot_scan.c
76
+ - ext/fast_xs/fast_xs.c
77
+ - ext/hpricot_scan/extconf.rb
78
+ - ext/fast_xs/extconf.rb
79
+ - ext/hpricot_scan/hpricot_css.java.rl
80
+ - ext/hpricot_scan/hpricot_scan.rl
81
+ - ext/hpricot_scan/hpricot_scan.java.rl
82
+ - ext/hpricot_scan/hpricot_common.rl
83
+ - ext/hpricot_scan/hpricot_css.rl
84
+ has_rdoc: true
85
+ homepage: http://code.whytheluckystiff.net/hpricot/
86
+ licenses: []
87
+
88
+ post_install_message:
89
+ rdoc_options:
90
+ - --quiet
91
+ - --title
92
+ - The Hpricot Reference
93
+ - --main
94
+ - README.md
95
+ - --inline-source
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
106
+ version: "0"
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ requirements: []
117
+
118
+ rubyforge_project: hobix
119
+ rubygems_version: 1.4.1
120
+ signing_key:
121
+ specification_version: 3
122
+ summary: a swift, liberal HTML parser with a fantastic library
123
+ test_files: []
124
+