hparser 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,45 @@
1
+ # Author:: MIZUNO Hiroki (hiroki1124@gmail.com)
2
+ # Copyright:: Copyright (c) 2006 MIZUNO Hiroki
3
+ # License:: Distributes under the same terms as Ruby
4
+
5
+ require 'hparser/block/collectable'
6
+ module HParser
7
+ module Block
8
+ class Dl
9
+ include Collectable
10
+ class Item
11
+ attr_reader :title,:description
12
+ def initialize(title,description)
13
+ @title = title
14
+ @description = description
15
+ end
16
+
17
+ def ==(o)
18
+ self.class == o.class and
19
+ self.title == o.title and
20
+ self.description == o.description
21
+ end
22
+ end
23
+
24
+ def self.parse(scanner,inlines)
25
+ items = []
26
+ while scanner.scan(/\A:/)
27
+ i = scanner.matched.index(':',1)
28
+ title = inlines.parse scanner.matched[1...i]
29
+ description = inlines.parse scanner.matched[i+1..-1]
30
+ items.push Item.new(title,description)
31
+ end
32
+ items == [] ? nil : self.new(*items)
33
+ end
34
+
35
+ attr_reader :items
36
+ def initialize(*items)
37
+ @items = items
38
+ end
39
+
40
+ def ==(o)
41
+ o.class == self.class and o.items == self.items
42
+ end
43
+ end
44
+ end
45
+ end
data/lib/hparser/html.rb CHANGED
@@ -92,6 +92,26 @@ module HParser
92
92
  end
93
93
  end
94
94
 
95
+ class Dl
96
+ include Html
97
+
98
+ class Item
99
+ def to_html
100
+ dt = self.title.map{|x| x.to_html}.join
101
+ dd = self.description.map{|x| x.to_html}.join
102
+ "<dt>#{dt}</dt><dd>#{dd}</dd>"
103
+ end
104
+ end
105
+
106
+ def html_tag()
107
+ 'dl'
108
+ end
109
+
110
+ def html_content
111
+ @items
112
+ end
113
+ end
114
+
95
115
  class TableHeader
96
116
  include Html
97
117
  private
data/lib/hparser/text.rb CHANGED
@@ -84,6 +84,23 @@ module HParser
84
84
  end
85
85
  end
86
86
 
87
+ class Dl
88
+ class Item
89
+ def to_text
90
+ dt = self.title.map{|x| x.to_html}.join
91
+ dd = self.description.map{|x| x.to_html}.join.split("\n").map{|x|
92
+ ' '+x
93
+ }.join("\n")
94
+ "#{dt}\n#{dd}"
95
+ end
96
+ end
97
+
98
+ def to_text
99
+ @items.map{|x| x.to_text}.join("\n")
100
+ end
101
+ end
102
+
103
+
87
104
  class OrderList
88
105
  def to_text
89
106
  i = 0
data/test/test_dl.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'test/unit'
2
+ require 'hparser/parser'
3
+ require 'hparser/block/dl'
4
+
5
+ class DlTest < Test::Unit::TestCase
6
+ include HParser::Block
7
+ include HParser::Inline
8
+
9
+ def setup
10
+ @parser = HParser::Parser.new [Dl]
11
+ end
12
+
13
+ def parse str
14
+ @parser.parse str
15
+ end
16
+
17
+ def test_dl
18
+ first = Dl::Item.new([Text.new('foo')],[Text.new('foo is ...')])
19
+ second = Dl::Item.new([Text.new('bar')],[Text.new('bar is ...')])
20
+ assert_equal [Dl.new(first,second)],
21
+ parse(<<-END)
22
+ :foo:foo is ...
23
+ :bar:bar is ...
24
+ END
25
+ end
26
+ end
data/test/test_html.rb CHANGED
@@ -7,8 +7,9 @@ class HtmlTest < Test::Unit::TestCase
7
7
  include HParser::Block
8
8
  include HParser::Inline
9
9
  def setup
10
- @parser = HParser::Parser.new
10
+ # @parser = HParser::Parser.new
11
11
  end
12
+
12
13
  def assert_html expect,node
13
14
  assert_equal expect,node.to_html
14
15
  end
@@ -44,6 +45,13 @@ class HtmlTest < Test::Unit::TestCase
44
45
  Li.new([Text.new('bbb')]))
45
46
  end
46
47
 
48
+ def test_dl
49
+ expect = '<dl><dt>foo</dt><dd>foo is ...</dd><dt>bar</dt><dd>bar is ...</dd></dl>'
50
+ first = Dl::Item.new([Text.new('foo')],[Text.new('foo is ...')])
51
+ second = Dl::Item.new([Text.new('bar')],[Text.new('bar is ...')])
52
+ assert_html expect,Dl.new(first,second)
53
+ end
54
+
47
55
  def th str
48
56
  Th.new [Text.new(str)]
49
57
  end
data/test/test_text.rb CHANGED
@@ -35,6 +35,18 @@ class TextTest < Test::Unit::TestCase
35
35
  assert_text ' foobar',Quote.new([Text.new('foobar')])
36
36
  end
37
37
 
38
+ def test_dl
39
+ expect = <<-END.chomp
40
+ foo
41
+ foo is ...
42
+ bar
43
+ bar is ...
44
+ END
45
+ first = Dl::Item.new([Text.new('foo')],[Text.new('foo is ...')])
46
+ second = Dl::Item.new([Text.new('bar')],[Text.new('bar is ...')])
47
+ assert_text expect,Dl.new(first,second)
48
+ end
49
+
38
50
  def test_table
39
51
  assert_text "|foo|bar|\n|baz|xyzzy|",
40
52
  Table.new([th('foo'),th('bar')],
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: hparser
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.2
7
- date: 2006-08-15 00:00:00 +09:00
6
+ version: 0.3.0
7
+ date: 2006-08-17 00:00:00 +09:00
8
8
  summary: Hatena Format Parser
9
9
  require_paths:
10
10
  - lib
@@ -29,6 +29,7 @@ authors:
29
29
  - MIZUNO Hiroki
30
30
  files:
31
31
  - test/test_block.rb
32
+ - test/test_dl.rb
32
33
  - test/test_hatena.rb
33
34
  - test/test_head.rb
34
35
  - test/test_html.rb
@@ -47,6 +48,7 @@ files:
47
48
  - lib/hparser/text.rb
48
49
  - lib/hparser/block/all.rb
49
50
  - lib/hparser/block/collectable.rb
51
+ - lib/hparser/block/dl.rb
50
52
  - lib/hparser/block/head.rb
51
53
  - lib/hparser/block/list.rb
52
54
  - lib/hparser/block/p.rb
@@ -66,6 +68,7 @@ files:
66
68
  - README
67
69
  test_files:
68
70
  - test/test_block.rb
71
+ - test/test_dl.rb
69
72
  - test/test_hatena.rb
70
73
  - test/test_head.rb
71
74
  - test/test_html.rb