# # this mixin represents the TeX specific methods of Traceable # #require 'ruby-debug' if not RUBY_PLATFORM=="i386-mingw32" require 'treetop' require File.dirname(__FILE__) + "/class.treetopHelper" require File.dirname(__FILE__) + "/class.Traceable" require File.dirname(__FILE__) + "/class.Traceable.md" Treetop.load File.dirname(__FILE__) + "/mdTraceParser.treetop" class TraceableSet def mk_hyperlink(id) idm = id.gsub("_","-") "[\[#{id}\]](#RT-#{idm})" end # this generates a synopsis of traces in markdown Format # @param [Symbol] selectedCategory the the category of the Traceables # which shall be reported. def reqtraceSynopsis(selectedCategory) all_traces(selectedCategory). sort_by{|x| trace_order_index(x.id) }. map{|t| tidm=t.id.gsub("_","-") lContributes = t.contributes_to. map { |c| mk_hyperlink(c) } luptraces = [uptrace_ids[t.id]].flatten.compact.map{|x| self[x]} luptraces=luptraces. sort_by{|x| trace_order_index(x.id)}. map{|u| " - #{mk_hyperlink(u.id)} #{u.header_orig}" } ["- #{mk_hyperlink(t.id)} <!-- --> <a id=\"RT-#{tidm}\"/>**#{t.header_orig}**" + # " (#{t.contributes_to.join(', ')})", "", " (#{lContributes.join(', ')})", "", luptraces ].flatten.join("\n") }.join("\n\n") end # this generates the downstream_tracefile def to_downstream_tracefile(selectedCategory) all_traces(selectedCategory). sort_by{|x| trace_order_index(x.id) }. map{|t| "\n\n\\[#{t.id}\\] **#{t.header_orig}** { }()" }.join("\n\n") end # # This factory method processes all traces in a particular markdown file # and returns a TraceableSet # # @param mdFile [String] name of the markdown File which shall be scanned # # @return [TraceableSet] The set of traceables found in the markdown file def self.processTracesInMdFile(mdFile) parser=TraceInMarkdownParser.new parser.consume_all_input = true raw_md_code_file=File.open(mdFile, "r:bom|utf-8") raw_md_code = raw_md_code_file.readlines.join raw_md_code_file.close # print mdFile result = parser.parse(raw_md_code) # print " ... parsed\n" todo: use logger here result_set = TraceableSet.new if result result.descendant.select{|x| x.getLabel==="trace"}.each{|c| id = c.traceId.payload.text_value uptraces = c.uptraces.payload.text_value header = c.traceHead.payload.text_value bodytext = c.traceBody.payload.text_value uptraces = c.uptraces.payload.text_value # Populate the Traceable entry theTrace = Traceable.new theTrace.info = mdFile theTrace.id = id theTrace.header_orig = header theTrace.body_orig = bodytext theTrace.trace_orig = c.text_value theTrace.contributes_to = uptraces.gsub!(/\s*/, "").split(",") theTrace.category = :SPECIFICATION_ITEM result_set.add(theTrace) } # puts " .... finished" else puts ["","-----------", texFile, parser.failure_reason].join("\n") end result_set end end