eim_xml 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,123 +1,122 @@
1
- require "eim_xml"
1
+ require 'eim_xml'
2
2
 
3
3
  module EimXML
4
- class Formatter
5
- attr_reader :out
4
+ class Formatter
5
+ attr_reader :out
6
6
 
7
- def self.write(element, opt={})
8
- opt = {:out=>""}.merge(opt)
9
- new(opt).write(element)
10
- opt[:out]
11
- end
7
+ def self.write(element, opt = {})
8
+ opt = { out: '' }.merge(opt)
9
+ new(opt).write(element)
10
+ opt[:out]
11
+ end
12
12
 
13
- def initialize(opt)
14
- @out = opt[:out]
15
- @preservers = opt[:preservers]
16
- @preserve_space = false
17
- @indent_string = " "
18
- @indent_depth = 0
19
- @option = opt.dup.tap{|h| [:out, :preservers].each{|k| h.delete(k)}}
20
- end
13
+ def initialize(opt)
14
+ @out = opt[:out]
15
+ @preservers = opt[:preservers]
16
+ @preserve_space = false
17
+ @indent_string = ' '
18
+ @indent_depth = 0
19
+ @option = opt.dup.tap { |h| %i[out preservers].each { |k| h.delete(k) } }
20
+ end
21
21
 
22
- def write(src)
23
- case src
24
- when ElementWrapper
25
- write_wrapper(src)
26
- when Comment
27
- write_comment(src)
28
- when Element
29
- write_element(src)
30
- when PCString
31
- write_pcstring(src)
32
- else
33
- write_string(src.to_s)
34
- end
35
- end
22
+ def write(src)
23
+ case src
24
+ when ElementWrapper
25
+ write_wrapper(src)
26
+ when Comment
27
+ write_comment(src)
28
+ when Element
29
+ write_element(src)
30
+ when PCString
31
+ write_pcstring(src)
32
+ else
33
+ write_string(src.to_s)
34
+ end
35
+ end
36
36
 
37
- def indent(&proc)
38
- @indent_depth += 1
39
- proc.call
40
- ensure
41
- @indent_depth -= 1
42
- end
37
+ def indent(&proc)
38
+ @indent_depth += 1
39
+ proc.call
40
+ ensure
41
+ @indent_depth -= 1
42
+ end
43
43
 
44
- def preserve_space_element?(elm)
45
- @preservers && @preservers.any? do |e|
46
- case e
47
- when Symbol
48
- e==elm.name
49
- when Class
50
- e===elm
51
- end
52
- end
53
- end
44
+ def preserve_space_element?(elm)
45
+ @preservers&.any? do |e|
46
+ case e
47
+ when Symbol
48
+ e == elm.name
49
+ when Class
50
+ elm.is_a?(e)
51
+ end
52
+ end
53
+ end
54
54
 
55
- def write_indent
56
- out << @indent_string*@indent_depth unless @preserve_space
57
- end
55
+ def write_indent
56
+ out << (@indent_string * @indent_depth) unless @preserve_space
57
+ end
58
58
 
59
- def write_newline
60
- out << "\n" unless @preserve_space
61
- end
59
+ def write_newline
60
+ out << "\n" unless @preserve_space
61
+ end
62
62
 
63
- def write_comment(c)
64
- write_indent
65
- c.write_to(out)
66
- write_newline
67
- end
63
+ def write_comment(commend)
64
+ write_indent
65
+ commend.write_to(out)
66
+ write_newline
67
+ end
68
68
 
69
- def write_contents_of(elm)
70
- flag = @preserve_space
71
- @preserve_space = true if preserve_space_element?(elm)
72
- write_newline
73
- indent do
74
- elm.contents.each do |c|
75
- write(c)
76
- end
77
- end
78
- write_indent
79
- ensure
80
- @preserve_space = flag
81
- end
69
+ def write_contents_of(elm)
70
+ flag = @preserve_space
71
+ @preserve_space = true if preserve_space_element?(elm)
72
+ write_newline
73
+ indent do
74
+ elm.contents.each do |c|
75
+ write(c)
76
+ end
77
+ end
78
+ write_indent
79
+ ensure
80
+ @preserve_space = flag
81
+ end
82
82
 
83
- def write_element(elm)
84
- write_indent
85
- out << "<"
86
- elm.name_and_attributes(out)
87
- case elm.contents.size
88
- when 0
89
- out << " />"
90
- write_newline
91
- else
92
- out << ">"
93
- write_contents_of(elm)
94
- out << "</#{elm.name}>"
95
- write_newline
96
- end
97
- end
83
+ def write_element(elm)
84
+ write_indent
85
+ out << '<'
86
+ elm.name_and_attributes(out)
87
+ case elm.contents.size
88
+ when 0
89
+ out << ' />'
90
+ else
91
+ out << '>'
92
+ write_contents_of(elm)
93
+ out << "</#{elm.name}>"
94
+ end
95
+ write_newline
96
+ end
98
97
 
99
- def write_pcstring(pcs)
100
- pcs.encoded_string.each_line do |l|
101
- write_indent
102
- out << l
103
- end
104
- write_newline
105
- end
98
+ def write_pcstring(pcs)
99
+ pcs.encoded_string.each_line do |l|
100
+ write_indent
101
+ out << l
102
+ end
103
+ write_newline
104
+ end
106
105
 
107
- def write_string(str)
108
- PCString.encode(str).each_line do |l|
109
- write_indent
110
- out << l
111
- end
112
- write_newline
113
- end
106
+ def write_string(str)
107
+ PCString.encode(str).each_line do |l|
108
+ write_indent
109
+ out << l
110
+ end
111
+ write_newline
112
+ end
114
113
 
115
- def write_wrapper(wrapper)
116
- wrapper.each(@option) do |i|
117
- write(i)
118
- end
119
- end
120
- end
114
+ def write_wrapper(wrapper)
115
+ wrapper.each(@option) do |i|
116
+ write(i)
117
+ end
118
+ end
119
+ end
121
120
  end
122
121
 
123
- require "eim_xml/formatter/element_wrapper"
122
+ require 'eim_xml/formatter/element_wrapper'
@@ -1,25 +1,28 @@
1
- require "eim_xml"
2
- module EimXML::Matchers
3
- class HaveContent
4
- def initialize(expected)
5
- @expected = expected
6
- end
1
+ require 'eim_xml'
7
2
 
8
- def matches?(target)
9
- @target = target
10
- @target.has?(@expected)
11
- end
3
+ module EimXML
4
+ module Matchers
5
+ class HaveContent
6
+ def initialize(expected)
7
+ @expected = expected
8
+ end
12
9
 
13
- def failure_message
14
- "expected #{@target.inspect} must have #{@expected}, but not."
15
- end
10
+ def matches?(target)
11
+ @target = target
12
+ @target.has?(@expected)
13
+ end
16
14
 
17
- def negative_failure_message
18
- "expected #{@target.inspect} must not have #{@expected}, but has."
19
- end
20
- end
15
+ def failure_message
16
+ "expected #{@target.inspect} must have #{@expected}, but not."
17
+ end
21
18
 
22
- def have(expected)
23
- HaveContent.new(expected)
24
- end
19
+ def negative_failure_message
20
+ "expected #{@target.inspect} must not have #{@expected}, but has."
21
+ end
22
+ end
23
+
24
+ def have(expected)
25
+ HaveContent.new(expected)
26
+ end
27
+ end
25
28
  end
@@ -4,84 +4,82 @@
4
4
  # You can redistribute it and/or modify it under GPL2.
5
5
  #
6
6
 
7
- require "eim_xml"
8
- require "strscan"
7
+ require 'eim_xml'
8
+ require 'strscan'
9
9
 
10
10
  module EimXML
11
- class ParseError < StandardError
12
- end
11
+ class ParseError < StandardError
12
+ end
13
13
 
14
- class Parser
15
- attr_reader :scanner
16
- module RE
17
- EMPTY_ELEMENT = /<([^>]*?)\/>/
18
- START_TAG = /<([^>]*?([^\/>]\s*))>/
19
- END_TAG = /<\/(\S+?)\s*>/
20
- ATTRIBUTE = /\s+([^=\s]+)\s*=\s*('(.*?)'|"(.*?)")/m
21
- STRING = /[^<]+/
22
- end
14
+ class Parser
15
+ attr_reader :scanner
23
16
 
24
- def initialize(src)
25
- @scanner = StringScanner.new(src)
26
- @scanner.scan(/\s*<\?.*?\?>\s*/)
27
- end
17
+ module RE
18
+ EMPTY_ELEMENT = %r{<([^>]*?)/>}
19
+ START_TAG = %r{<([^>]*?([^/>]\s*))>}
20
+ END_TAG = %r{</(\S+?)\s*>}
21
+ ATTRIBUTE = /\s+([^=\s]+)\s*=\s*('(.*?)'|"(.*?)")/m
22
+ STRING = /[^<]+/
23
+ end
28
24
 
29
- def parse
30
- if @scanner.scan(RE::EMPTY_ELEMENT)
31
- parse_empty_element
32
- elsif @scanner.scan(RE::START_TAG)
33
- parse_start_tag
34
- elsif @scanner.scan(RE::STRING)
35
- parse_string
36
- else
37
- nil
38
- end
39
- end
25
+ PARSING_MAP = {
26
+ 'amp' => '&',
27
+ 'quot' => '"',
28
+ 'apos' => "'",
29
+ 'lt' => '<',
30
+ 'gt' => '>'
31
+ }
40
32
 
41
- def parse_tag
42
- s = StringScanner.new(@scanner[1])
43
- e = Element.new(s.scan(/\S+/))
44
- e[s[1]] = s[3] ? s[3] : s[4] while s.scan(RE::ATTRIBUTE)
45
- e
46
- end
47
- protected :parse_tag
33
+ def initialize(src)
34
+ @scanner = StringScanner.new(src)
35
+ @scanner.scan(/\s*<\?.*?\?>\s*/)
36
+ end
48
37
 
49
- def parse_empty_element
50
- parse_tag
51
- end
52
- protected :parse_empty_element
38
+ def parse
39
+ if @scanner.scan(RE::EMPTY_ELEMENT)
40
+ parse_empty_element
41
+ elsif @scanner.scan(RE::START_TAG)
42
+ parse_start_tag
43
+ elsif @scanner.scan(RE::STRING)
44
+ parse_string
45
+ end
46
+ end
53
47
 
54
- def parse_start_tag
55
- e = parse_tag
48
+ def parse_tag
49
+ s = StringScanner.new(@scanner[1])
50
+ e = Element.new(s.scan(/\S+/))
51
+ e[s[1]] = s[3] || s[4] while s.scan(RE::ATTRIBUTE)
52
+ e
53
+ end
54
+ protected :parse_tag
56
55
 
57
- until @scanner.scan(RE::END_TAG)
58
- c = parse
59
- raise ParseError.new("Syntax error.") unless c
60
- e << c
61
- end
62
- raise ParseError.new("End tag mismatched.") unless @scanner[1].to_sym==e.name
63
- e
64
- end
65
- protected :parse_start_tag
56
+ def parse_empty_element
57
+ parse_tag
58
+ end
59
+ protected :parse_empty_element
66
60
 
67
- def parse_string
68
- s = @scanner[0]
69
- s = s.gsub(/&(amp|quot|apos|lt|gt);/) do
70
- case $1
71
- when "amp"
72
- "&"
73
- when "quot"
74
- '"'
75
- when "apos"
76
- "'"
77
- when "lt"
78
- "<"
79
- when "gt"
80
- ">"
81
- end
82
- end
83
- PCString.new(s)
84
- end
85
- protected :parse_string
86
- end
61
+ def parse_start_tag
62
+ e = parse_tag
63
+
64
+ until @scanner.scan(RE::END_TAG)
65
+ c = parse
66
+ raise ParseError, 'Syntax error.' unless c
67
+
68
+ e << c
69
+ end
70
+ raise ParseError, 'End tag mismatched.' unless @scanner[1].to_sym == e.name
71
+
72
+ e
73
+ end
74
+ protected :parse_start_tag
75
+
76
+ def parse_string
77
+ s = @scanner[0]
78
+ s = s.gsub(/&(amp|quot|apos|lt|gt);/) do
79
+ PARSING_MAP[Regexp.last_match(1)]
80
+ end
81
+ PCString.new(s)
82
+ end
83
+ protected :parse_string
84
+ end
87
85
  end
@@ -1,18 +1,20 @@
1
- require "eim_xml/dsl"
2
- require "eim_xml/xhtml"
1
+ require 'eim_xml/dsl'
2
+ require 'eim_xml/xhtml'
3
3
 
4
- module EimXML::XHTML
5
- class DSL < EimXML::BaseDSL
6
- end
4
+ module EimXML
5
+ module XHTML
6
+ class DSL < EimXML::BaseDSL
7
+ end
7
8
 
8
- class OpenDSL < EimXML::OpenDSL
9
- end
9
+ class OpenDSL < EimXML::OpenDSL
10
+ end
10
11
 
11
- constants.each do |c|
12
- v = const_get(c)
13
- if v.is_a?(Class) && /_$/ !~ v.name
14
- DSL.register v
15
- OpenDSL.register v
16
- end
17
- end
12
+ constants.each do |c|
13
+ v = const_get(c)
14
+ if v.is_a?(Class) && /_$/ !~ v.name
15
+ DSL.register v
16
+ OpenDSL.register v
17
+ end
18
+ end
19
+ end
18
20
  end