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 +4 -4
- data/lib/hiroiyomi/html/attribute.rb +2 -0
- data/lib/hiroiyomi/html/dom_parser_helper.rb +19 -11
- data/lib/hiroiyomi/html/element.rb +24 -10
- data/lib/hiroiyomi/html/text.rb +12 -4
- data/lib/hiroiyomi/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '093ee4e6312f8b8ef777c12c4f2473d702df03b0779e701b5887ecdf32476317'
|
|
4
|
+
data.tar.gz: 7be8f26a39596b98a2c6c4852a5deff92745bdd12f88f914c900ae413aac8af1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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,
|
|
9
|
-
file.ungetc(
|
|
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
|
|
58
|
+
# after <![
|
|
59
|
+
def extract_cddata(file)
|
|
56
60
|
cur_pos = file.pos
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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?(
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
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
|
data/lib/hiroiyomi/html/text.rb
CHANGED
|
@@ -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
|
-
|
|
49
|
-
unless
|
|
50
|
-
# empty
|
|
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
|
data/lib/hiroiyomi/version.rb
CHANGED