Class: Plurimath::Html::Parse
- Inherits:
-
Parslet::Parser
- Object
- Parslet::Parser
- Plurimath::Html::Parse
- Includes:
- BaseNumberPrefix::Parser
- Defined in:
- lib/plurimath/html/parse.rb
Instance Method Summary collapse
- #array_to_expression(array, name = nil) ⇒ Object
- #case_insensitive_string(value) ⇒ Object
- #decimal_marker ⇒ Object
- #html_entity ⇒ Object
- #html_tag_name(tag_name) ⇒ Object
- #matching_close_tag ⇒ Object
- #parse_sub_sup_tags(tag_names, transform_name = tag_names) ⇒ Object
- #parse_tag(opts, tag_name = nil, capture_name: nil) ⇒ Object
- #parse_void_tag(tag_name) ⇒ Object
- #quoted_attribute_value ⇒ Object
- #str_to_expression(string, name) ⇒ Object
- #tag_attributes ⇒ Object
- #tag_name_boundary ⇒ Object
- #wrapped_tag(expression) ⇒ Object
Methods included from BaseNumberPrefix::Parser
Instance Method Details
#array_to_expression(array, name = nil) ⇒ Object
133 134 135 136 137 138 139 |
# File 'lib/plurimath/html/parse.rb', line 133 def array_to_expression(array, name = nil) initial_type = array.first.class array.reduce do |expr, tag| expr = str_to_expression(expr, name) if expr.is_a?(initial_type) expr | str_to_expression(tag, name) end end |
#case_insensitive_string(value) ⇒ Object
212 213 214 215 216 |
# File 'lib/plurimath/html/parse.rb', line 212 def case_insensitive_string(value) value.chars .map { |char| char.match?(/[A-Za-z]/) ? match["#{char.downcase}#{char.upcase}"] : str(char) } .reduce(:>>) end |
#decimal_marker ⇒ Object
147 148 149 |
# File 'lib/plurimath/html/parse.rb', line 147 def decimal_marker str(Plurimath.configuration.decimal) end |
#html_entity ⇒ Object
165 166 167 168 169 |
# File 'lib/plurimath/html/parse.rb', line 165 def html_entity (str("&#x") >> match["0-9a-fA-F"].repeat(1) >> str(";")) | (str("&#") >> match["0-9"].repeat(1) >> str(";")) | (str("&") >> match["a-zA-Z"] >> match["a-zA-Z0-9"].repeat >> str(";")) end |
#html_tag_name(tag_name) ⇒ Object
193 194 195 196 197 |
# File 'lib/plurimath/html/parse.rb', line 193 def html_tag_name(tag_name) return match["a-zA-Z"] >> match["a-zA-Z0-9:._-"].repeat unless tag_name case_insensitive_string(tag_name) >> tag_name_boundary end |
#matching_close_tag ⇒ Object
187 188 189 190 191 |
# File 'lib/plurimath/html/parse.rb', line 187 def matching_close_tag dynamic do |_source, context| parse_tag(:close, context.captures[:html_tag_name].to_s) end end |
#parse_sub_sup_tags(tag_names, transform_name = tag_names) ⇒ Object
171 172 173 174 175 176 177 |
# File 'lib/plurimath/html/parse.rb', line 171 def (tag_names, transform_name = tag_names) Array(tag_names).map do |tag_name| parse_tag(:open, tag_name) >> sequence.as(:"#{transform_name}_value") >> parse_tag(:close, tag_name) end.reduce(:|) end |
#parse_tag(opts, tag_name = nil, capture_name: nil) ⇒ Object
151 152 153 154 155 156 157 158 159 |
# File 'lib/plurimath/html/parse.rb', line 151 def parse_tag(opts, tag_name = nil, capture_name: nil) tag = str("<") tag = tag >> str("/") if opts == :close name_expression = html_tag_name(tag_name) name_expression = name_expression.capture(capture_name) if capture_name tag = tag >> name_expression tag = tag >> tag_attributes if opts == :open tag >> str(">") end |
#parse_void_tag(tag_name) ⇒ Object
161 162 163 |
# File 'lib/plurimath/html/parse.rb', line 161 def parse_void_tag(tag_name) str("<") >> html_tag_name(tag_name) >> tag_attributes >> str(">") end |
#quoted_attribute_value ⇒ Object
207 208 209 210 |
# File 'lib/plurimath/html/parse.rb', line 207 def quoted_attribute_value (str('"') >> match['^"'].repeat >> str('"')) | (str("'") >> match["^'"].repeat >> str("'")) end |
#str_to_expression(string, name) ⇒ Object
141 142 143 144 145 |
# File 'lib/plurimath/html/parse.rb', line 141 def str_to_expression(string, name) return str(string) if name.nil? str(string).as(name) end |
#tag_attributes ⇒ Object
203 204 205 |
# File 'lib/plurimath/html/parse.rb', line 203 def tag_attributes (quoted_attribute_value | match["^<>"]).repeat end |
#tag_name_boundary ⇒ Object
199 200 201 |
# File 'lib/plurimath/html/parse.rb', line 199 def tag_name_boundary match["\\s/>"].present? end |
#wrapped_tag(expression) ⇒ Object
179 180 181 182 183 184 185 |
# File 'lib/plurimath/html/parse.rb', line 179 def wrapped_tag(expression) scope do parse_tag(:open, capture_name: :html_tag_name) >> expression >> matching_close_tag end end |