Module: Metanorma::Mirror::Handlers::Inline::TextExtractor
- Defined in:
- lib/metanorma/mirror/handlers/inline/text_extractor.rb
Class Method Summary collapse
- .extract_bibdata_title(bibdata) ⇒ Object
- .extract_element_text(element) ⇒ Object
- .extract_fn_label(element) ⇒ Object
- .extract_formatted_text(element) ⇒ Object
- .extract_name_text(name) ⇒ Object
- .extract_span_text(element) ⇒ Object
- .extract_stem_text(element) ⇒ Object
- .extract_text_from_model(node) ⇒ Object
Class Method Details
.extract_bibdata_title(bibdata) ⇒ Object
109 110 111 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 109 def self.extract_bibdata_title(bibdata) Metadata.title_from_bibdata(bibdata) end |
.extract_element_text(element) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 8 def self.extract_element_text(element) return "" unless element.is_a?(Lutaml::Model::Serializable) text = SafeAttr.read(element, :text) if text.is_a?(Array) joined = text.join.strip return joined unless joined.empty? elsif text.is_a?(String) && !text.strip.empty? return text end content = SafeAttr.read(element, :content) if content.is_a?(Array) parts = content.filter_map do |c| next c.to_s if c.is_a?(String) next extract_element_text(c) if c.is_a?(Lutaml::Model::Serializable) nil end joined = parts.join.strip return joined unless joined.empty? elsif content.is_a?(String) && !content.strip.empty? return content end "" end |
.extract_fn_label(element) ⇒ Object
66 67 68 69 70 71 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 66 def self.extract_fn_label(element) label = SafeAttr.read(element, :fmt_fn_label) return extract_element_text(element) unless label extract_formatted_text(label) end |
.extract_formatted_text(element) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 36 def self.extract_formatted_text(element) return "" unless element return element.to_s unless element.is_a?(Lutaml::Model::Serializable) parts = [] element.each_mixed_content do |node| case node when String parts << node when Lutaml::Model::Serializable inner = extract_formatted_text(node) parts << inner if inner && !inner.empty? end end result = parts.join.strip result.empty? ? extract_element_text(element) : result end |
.extract_name_text(name) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 87 def self.extract_name_text(name) return name if name.is_a?(String) text = SafeAttr.read(name, :text) return text.to_s if text.is_a?(String) && !text.strip.empty? stems = SafeAttr.read(name, :stem) if stems.is_a?(Array) && !stems.empty? parts = Array(text).dup stems.each_with_index do |s, i| stem_text = MathUtil.text_from_stem(s) parts.insert(i + 1, stem_text) if stem_text && !stem_text.empty? end joined = parts.join.strip return joined unless joined.empty? end return Array(text).join if text.is_a?(Array) && !text.empty? "" end |
.extract_span_text(element) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 80 def self.extract_span_text(element) text = extract_element_text(element) return text unless text.strip.empty? extract_formatted_text(element) end |
.extract_stem_text(element) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 73 def self.extract_stem_text(element) asciimath = MathUtil.asciimath_from_stem(element) return asciimath if asciimath extract_element_text(element) end |
.extract_text_from_model(node) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/metanorma/mirror/handlers/inline/text_extractor.rb', line 54 def self.extract_text_from_model(node) case node when Metanorma::Document::Components::Inline::TabElement " " when Metanorma::Document::Components::Inline::BrElement "\n" else text = extract_formatted_text(node) text.empty? ? extract_element_text(node) : text end end |