htmlize 1.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 (3) hide show
  1. data/README +4 -0
  2. data/lib/htmlize.rb +38 -0
  3. metadata +80 -0
data/README ADDED
@@ -0,0 +1,4 @@
1
+ HTMLize
2
+ =======
3
+
4
+ Converts an HTML-like wiki document to a valid HTML5 document.
data/lib/htmlize.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'nokogiri'
2
+
3
+
4
+ class Htmlize
5
+ def self.htmlize(content)
6
+ return nil if content.nil?
7
+ return '' if content.empty?
8
+
9
+ document = Nokogiri::HTML(content)
10
+ body = document.xpath('html/body').first
11
+
12
+ contents = tree_as_set(body){ |node| node.text? && !node.content.match(/^\s+$/) }
13
+ contents.each do |node|
14
+ texts = node.content.split("\n\n")
15
+ tag = node.parent.name
16
+ node.parent.replace(texts.map{ |text| "<#{tag}>" + text.gsub("\n", "<br>\n") + "</#{tag}>" }.join("\n\n"))
17
+ end
18
+
19
+ body.children.to_html
20
+ end
21
+
22
+ private
23
+
24
+ def self.tree(node, &block)
25
+ yield node
26
+ node.children.each do |child|
27
+ self.tree(child, &block)
28
+ end
29
+ end
30
+
31
+ def self.tree_as_set(node, &block)
32
+ set = Nokogiri::XML::NodeSet.new(node.document)
33
+ tree(node) do |node|
34
+ set << node if block.call(node)
35
+ end
36
+ set
37
+ end
38
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: htmlize
3
+ version: !ruby/object:Gem::Version
4
+ hash: 13
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 1
9
+ version: "1.1"
10
+ platform: ruby
11
+ authors:
12
+ - Vincent Robert
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-04-03 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: nokogiri
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: No description yet
35
+ email: vincent.robert@genezys.net
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - lib/htmlize.rb
44
+ - README
45
+ has_rdoc: true
46
+ homepage: https://bitbucket.org/genezys/htmlize
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ hash: 3
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ requirements: []
73
+
74
+ rubyforge_project:
75
+ rubygems_version: 1.6.2
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: Transform an HTML-like wiki content to valid HTML5
79
+ test_files: []
80
+