Module: Expressir::Express::Formatters::RemarkFormatter
- Included in:
- Expressir::Express::Formatter
- Defined in:
- lib/expressir/express/formatters/remark_formatter.rb
Instance Method Summary collapse
- #format_end_scope_remark(node) ⇒ Object
- #format_inline_tail_remark(node) ⇒ Object
- #format_preamble_remark(remark, indent_str = "") ⇒ Object
- #format_preamble_remarks(node, indent_str = "") ⇒ Object
- #format_remark(node, remark) ⇒ Object
- #format_remarks(node) ⇒ Object
- #format_untagged_remark(remark) ⇒ Object
Instance Method Details
#format_end_scope_remark(node) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/expressir/express/formatters/remark_formatter.rb', line 68 def format_end_scope_remark(node) return "" if @no_remarks return "" unless node.is_a?(Model::ModelElement) return "" if node.untagged_remarks.nil? || node.untagged_remarks.empty? remark = node.untagged_remarks.last return "" unless remark.is_a?(Model::RemarkInfo) text = remark.text return "" if text.nil? || text.empty? # Only output if it's a tail remark (END_* scope remarks are always tail) return "" unless remark.tail? formatted_text = remark.tagged? ? "\"#{remark.tag}\" #{text}" : text " -- #{formatted_text}" end |
#format_inline_tail_remark(node) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/expressir/express/formatters/remark_formatter.rb', line 53 def format_inline_tail_remark(node) return "" if @no_remarks return "" unless node.is_a?(Model::ModelElement) return "" if node.untagged_remarks.nil? || node.untagged_remarks.empty? remark = node.untagged_remarks.first return "" unless remark.is_a?(Model::RemarkInfo) text = remark.text return "" if text.nil? || text.empty? formatted_text = remark.tagged? ? "\"#{remark.tag}\" #{text}" : text remark.tail? ? " -- #{formatted_text}" : " (* #{formatted_text} *)" end |
#format_preamble_remark(remark, indent_str = "") ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/expressir/express/formatters/remark_formatter.rb', line 86 def format_preamble_remark(remark, indent_str = "") return "" unless remark.is_a?(Model::RemarkInfo) text = remark.text text = "\"#{remark.tag}\" #{text}" if remark.tagged? if remark.tail? "#{indent_str}-- #{text}" elsif text.include?("\n") lines = text.split("\n") [ "#{indent_str}(*", *lines.map { |line| "#{indent_str} #{line.strip}" }, "#{indent_str}*)", ].join("\n") else "#{indent_str}(* #{text} *)" end end |
#format_preamble_remarks(node, indent_str = "") ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/expressir/express/formatters/remark_formatter.rb', line 106 def format_preamble_remarks(node, indent_str = "") return nil if @no_remarks return nil unless node.is_a?(Model::ModelElement) return nil if node.untagged_remarks.nil? || node.untagged_remarks.empty? # For scope containers, exclude the last tail remark as it's the END_* remark # but keep all embedded remarks is_scope_container = node.is_a?(Model::Declarations::Schema) || node.is_a?(Model::Declarations::Entity) || node.is_a?(Model::Declarations::Type) || node.is_a?(Model::Declarations::Function) || node.is_a?(Model::Declarations::Procedure) || node.is_a?(Model::Declarations::Rule) preamble_remarks = node.untagged_remarks.select do |remark| remark.is_a?(Model::RemarkInfo) && !remark.text.nil? && !remark.text.empty? end # For scope containers: exclude last remark ONLY if it's a tail remark (END_* remark) # Keep all embedded remarks if is_scope_container && preamble_remarks.length > 1 last_remark = preamble_remarks.last # Only exclude if it's a tail remark preamble_remarks = preamble_remarks[0..-2] if last_remark.tail? end return nil if preamble_remarks.empty? preamble_remarks.map do |remark| format_preamble_remark(remark, indent_str) end.join("\n") end |
#format_remark(node, remark) ⇒ Object
5 6 7 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/expressir/express/formatters/remark_formatter.rb', line 5 def format_remark(node, remark) # Handle embedded remarks if remark.include?("\n") [ [ "(*\"", node.path || node.id, "\"", ].join, remark, "*)", ].join("\n") elsif node.path.nil? && node.id.include?("IP") # Handle immediate informal propositions [ "--", node.id, " ", remark, ].join else # Handle tail remarks [ "--\"", node.path || node.id, "\" ", remark, ].join end end |
#format_remarks(node) ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/expressir/express/formatters/remark_formatter.rb', line 139 def format_remarks(node) remarks = [] # Add tagged remarks if node.is_a?(Model::HasRemarks) && !@no_remarks && !node.remarks.nil? remarks.concat(node.remarks.compact.map do |remark| format_remark(node, remark) end) end # Skip untagged remarks for nodes that handle them separately skip_untagged = node.is_a?(Model::Declarations::Attribute) || node.is_a?(Model::DataTypes::EnumerationItem) || node.is_a?(Model::Declarations::Schema) || node.is_a?(Model::Declarations::Entity) || node.is_a?(Model::Declarations::Type) || node.is_a?(Model::Declarations::Function) || node.is_a?(Model::Declarations::Procedure) || node.is_a?(Model::Declarations::Rule) # Add untagged remarks only for nodes that don't handle them specially if !skip_untagged && node.is_a?(Model::ModelElement) && !@no_remarks && !node.untagged_remarks.nil? remarks.concat(node.untagged_remarks.map do |remark| format_untagged_remark(remark) end) end remarks end |
#format_untagged_remark(remark) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/expressir/express/formatters/remark_formatter.rb', line 36 def format_untagged_remark(remark) return "" unless remark.is_a?(Model::RemarkInfo) text = remark.text return "" if text.nil? || text.empty? formatted_text = remark.tagged? ? "\"#{remark.tag}\" #{text}" : text if remark.tail? "-- #{formatted_text}" elsif text.include?("\n") ["(*", formatted_text, "*)"].join("\n") else "(* #{formatted_text} *)" end end |