Module: Coradoc::AsciiDoc::Transformer::ListRules
- Defined in:
- lib/coradoc/asciidoc/transformer/list_rules.rb
Overview
Module containing list transformation rules
Class Method Summary collapse
Class Method Details
.apply(transformer_class) ⇒ 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/coradoc/asciidoc/transformer/list_rules.rb', line 8 def self.apply(transformer_class) transformer_class.class_eval do # List item rule(list_item: subtree(:list_item)) do marker = list_item[:marker] id = list_item[:id] text = list_item[:text] text = list_item[:text].to_s if list_item[:text].instance_of?(Parslet::Slice) attached = list_item[:attached] nested = list_item[:nested] line_break = list_item[:line_break] # Convert nested array to proper List object if needed if nested.is_a?(Array) && nested.any? first_marker = nested.first.is_a?(Model::List::Item) ? nested.first.marker : marker nested = if first_marker.to_s.start_with?('.', '1', 'a', 'A', 'i', 'I') Model::List::Ordered.new(items: nested) else Model::List::Unordered.new(items: nested) end end Model::List::Item.new( content: text, id:, marker:, attached:, nested:, line_break: ) end # List passthrough rule(list: simple(:list)) do list end # Unordered list rule(unordered: sequence(:list_items)) do Model::List::Unordered.new(items: list_items) end rule( attribute_list: simple(:attribute_list), unordered: sequence(:list_items) ) do Model::List::Unordered.new(items: list_items, attrs: attribute_list) end # Ordered list rule(ordered: sequence(:list_items)) do Model::List::Ordered.new(items: list_items) end rule( attribute_list: simple(:attribute_list), ordered: sequence(:list_items) ) do Model::List::Ordered.new(items: list_items, attrs: attribute_list) end # Definition list term rule(dlist_term: simple(:term), delimiter: simple(:_delim)) do term.to_s end # Definition list item rule( definition_list_item: { terms: sequence(:terms), definition: simple(:contents) } ) do Model::List::DefinitionItem.new(terms: terms, contents: contents) end # Definition list item with hash terms (single term case) rule( definition_list_item: subtree(:item_data) ) do terms_data = item_data[:terms] definition = item_data[:definition] # Extract terms terms = if terms_data.is_a?(Array) terms_data.map do |t| if t.is_a?(Hash) && t[:dlist_term] t[:dlist_term].to_s else t.to_s end end else [terms_data.to_s] end # Extract definition if definition.is_a?(Parslet::Slice) end contents = definition.to_s Model::List::DefinitionItem.new(terms: terms, contents: contents) end rule(definition_list: sequence(:list_items)) do Model::List::Definition.new(items: list_items) end # Definition list with attribute_list (e.g., [%key]) rule( attribute_list: simple(:attribute_list), definition_list: sequence(:list_items) ) do Model::List::Definition.new(items: list_items, attrs: attribute_list) end # List containing definition_list rule( attribute_list: simple(:attribute_list), definition_list: sequence(:list_items) ) do Model::List::Definition.new(items: list_items, attrs: attribute_list) end end end |