hiroiyomi 0.1.4 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c40131f96944ffda2afcaf2c4a413e6719ab6997e0e0041420bb98abaf1954c
4
- data.tar.gz: 7c20258c54e60515b3a32f9ff4faa15f52a14e0017cd0f2d3a15ab41c030c6c7
3
+ metadata.gz: '093ee4e6312f8b8ef777c12c4f2473d702df03b0779e701b5887ecdf32476317'
4
+ data.tar.gz: 7be8f26a39596b98a2c6c4852a5deff92745bdd12f88f914c900ae413aac8af1
5
5
  SHA512:
6
- metadata.gz: adce8140b2ab4867340977c82dd6980212b0cd258f21d65be1394a17384982d39bd1a4a592fb0ead9cb95d5b4c3919a6bc6e6bf4ab592759aa450a0df1b5bc19
7
- data.tar.gz: d4f40e1010658f0caffb481ae75bb53169e9bec4afe5e2e2b923ed749345d0e1351625c324e60a046f6382094fba1c8687e019db7ee06d2834210dcabafabf3b
6
+ metadata.gz: 86844f324ff5f2cb7f52559d83d994f51c8fc2ee14594d6d2ae51a1f99c9145588cc8a946d911209c035dec0b660df9de5f3c8200ea908aa90423ebf064f5f82
7
+ data.tar.gz: 10683cf58337624c22a5fbe455ec5048aeff9126e90a968ed5be211aa13570fbdb464c5f7133df9ea1b828d282b119fc8bbaf1c19cb2a2c0c1738c80ca137106
@@ -18,6 +18,7 @@ module Hiroiyomi
18
18
 
19
19
  private
20
20
 
21
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
21
22
  # name=value
22
23
  # Check spaces and > whether value is end
23
24
  # name="value"
@@ -53,6 +54,7 @@ module Hiroiyomi
53
54
  end
54
55
  value
55
56
  end
57
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
56
58
  end
57
59
 
58
60
  def initialize(name, value = nil)
@@ -5,8 +5,8 @@ module Hiroiyomi
5
5
  # DOMParserHelper
6
6
  class DOMParserHelper
7
7
  class << self
8
- def cur_pos(file, c)
9
- file.ungetc(c) # In order to get current position correctly
8
+ def cur_pos(file, char)
9
+ file.ungetc(char) # In order to get current position correctly
10
10
  cur_pos = file.pos
11
11
  file.getc # drop <
12
12
  cur_pos
@@ -21,6 +21,7 @@ module Hiroiyomi
21
21
  end
22
22
  end
23
23
 
24
+ # rubocop:disable Metrics/MethodLength
24
25
  # string of <.+ or ".+"
25
26
  def extract_string(file)
26
27
  skip_ignore_chars(file)
@@ -36,7 +37,9 @@ module Hiroiyomi
36
37
  end
37
38
  string.gsub(/[\t\r\n]/, '').strip
38
39
  end
40
+ # rubocop:enable Metrics/MethodLength
39
41
 
42
+ # rubocop:disable Metrics/MethodLength
40
43
  def extract_text_with_symbols(file, char_before_last_char = ']', last_char = '>')
41
44
  string = ''
42
45
  while (c = file.getc)
@@ -50,17 +53,22 @@ module Hiroiyomi
50
53
  end
51
54
  string
52
55
  end
56
+ # rubocop:enable Metrics/MethodLength
53
57
 
54
- # after <!
55
- def extract_bang_text(file)
58
+ # after <![
59
+ def extract_cddata(file)
56
60
  cur_pos = file.pos
57
- case (c = file.getc)
58
- when '[' # CDDATA
59
- return "#{c}#{extract_text_with_symbols(file, ']')}"
60
- when '-' # Comment
61
- extract_text_with_symbols(file, '-')
62
- return '' # Drop comments
63
- end
61
+ c = file.getc
62
+ return "#{c}#{extract_text_with_symbols(file, ']')}" if c == '[' # CDDATA
63
+ file.pos = cur_pos
64
+ nil
65
+ end
66
+
67
+ # after <!-
68
+ def extract_comments(file)
69
+ cur_pos = file.pos
70
+ c = file.getc
71
+ return "#{c}#{extract_text_with_symbols(file, '-')}" if c == '-' # Comment
64
72
  file.pos = cur_pos
65
73
  nil
66
74
  end
@@ -6,6 +6,7 @@ require 'hiroiyomi/html/text'
6
6
 
7
7
  module Hiroiyomi
8
8
  module Html
9
+ # rubocop:disable Metrics/ClassLength
9
10
  # Element
10
11
  class Element
11
12
  include Enumerable
@@ -16,6 +17,7 @@ module Hiroiyomi
16
17
  class << self
17
18
  EXCEPTIONAL_ELEMENT_NAME_LIST = %w[script style].freeze
18
19
 
20
+ # rubocop:disable Metrics/MethodLength
19
21
  def value_of(file, parent_element = nil)
20
22
  # name
21
23
  name = extract_element_name(file)
@@ -44,14 +46,16 @@ module Hiroiyomi
44
46
  Text.add_text_to_element_or_parse(file, element)
45
47
 
46
48
  # close check. move element children to parent element if not closed. e.g. <img ...>
47
- element.move_children_to(parent_element) unless validate_closing_element?(element, file)
49
+ element.move_children_to(parent_element) unless validate_closing_element?(file, element)
48
50
 
49
51
  parent_element
50
52
  end
53
+ # rubocop:enable Metrics/MethodLength
51
54
 
52
55
  private
53
56
 
54
- def validate_closing_element?(element, file)
57
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
58
+ def validate_closing_element?(file, element)
55
59
  open = false
56
60
 
57
61
  while (c = file.getc)
@@ -77,6 +81,7 @@ module Hiroiyomi
77
81
  file.pos = cur_pos
78
82
  return false
79
83
  elsif c == '<' # case of </
84
+ Text.add_text_to_element_or_parse(file, element)
80
85
  open = true
81
86
  elsif open
82
87
  file.ungetc(c)
@@ -85,8 +90,10 @@ module Hiroiyomi
85
90
  end
86
91
  false
87
92
  end
93
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
88
94
 
89
- # Start from > after attributes
95
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
96
+ # For script, style. First char must be > after attributes
90
97
  def extract_exceptional_element_text(file, name)
91
98
  DOMParserHelper.skip_ignore_chars(file)
92
99
  file.getc # drop >
@@ -106,17 +113,23 @@ module Hiroiyomi
106
113
  return Text.new(string) unless string.empty?
107
114
  nil
108
115
  end
116
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
117
+
118
+ def skip_comments(file)
119
+ cur_pos = file.pos
120
+ if file.getc == '!'
121
+ # Skip like <!document html>, <!--
122
+ DOMParserHelper.extract_comments(file)
123
+ return true
124
+ end
125
+ file.pos = cur_pos
126
+ false
127
+ end
109
128
 
110
129
  def extract_element_name(file)
111
130
  while (c = file.getc)
112
131
  next unless c == '<'
113
- cur_pos = file.pos
114
- if file.getc == '!'
115
- # Skip like <!document html>, <!--
116
- DOMParserHelper.extract_bang_text(file)
117
- next
118
- end
119
- file.pos = cur_pos
132
+ next if skip_comments(file)
120
133
  return DOMParserHelper.extract_string(file)
121
134
  end
122
135
  ''
@@ -184,5 +197,6 @@ module Hiroiyomi
184
197
  "<#{name}#{attrs}>#{inner_html}</#{name}>"
185
198
  end
186
199
  end
200
+ # rubocop:enable Metrics/ClassLength
187
201
  end
188
202
  end
@@ -11,6 +11,8 @@ module Hiroiyomi
11
11
  attr_accessor :value
12
12
 
13
13
  class << self
14
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
15
+
14
16
  # Start from > after attributes
15
17
  def add_text_to_element_or_parse(file, element)
16
18
  close = false
@@ -44,14 +46,19 @@ module Hiroiyomi
44
46
  when '<'
45
47
  cur_pos = DOMParserHelper.cur_pos(file, c)
46
48
  next_c = file.getc
49
+ # rubocop:disable Metrics/BlockNesting
47
50
  if next_c == '!'
48
- bang_string = DOMParserHelper.extract_bang_text(file)
49
- unless bang_string.nil?
50
- # empty if comment
51
- add_text_to_element.call "#{c}#{next_c}#{bang_string}" unless bang_string.empty?
51
+ cddata = DOMParserHelper.extract_cddata(file)
52
+ unless cddata.nil?
53
+ add_text_to_element.call "#{c}#{next_c}#{cddata}" unless cddata.empty?
52
54
  next
53
55
  end
56
+ # Drop comment
57
+ comment = DOMParserHelper.extract_comments(file)
58
+ next unless comment.nil?
54
59
  end
60
+ # rubocop:enable Metrics/BlockNesting
61
+
55
62
  file.pos = cur_pos
56
63
 
57
64
  add_text_to_element.call
@@ -71,6 +78,7 @@ module Hiroiyomi
71
78
  element
72
79
  end
73
80
  end
81
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
74
82
 
75
83
  def initialize(value)
76
84
  @value = value
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Hiroiyomi
4
4
  module Hiroiyomi
5
- VERSION = '0.1.4'
5
+ VERSION = '0.1.5'
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiroiyomi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomonori Murakami