xmlt xml(const locationt &location) { xmlt xml_location; xml_location.name="location"; if(location.get_file()!="") xml_location.set_attribute("file", id2string(location.get_file())); if(location.get_line()!="") xml_location.set_attribute("line", id2string(location.get_line())); return xml_location; }
xmlt xml(const locationt &location) { xmlt result; result.name="location"; // these will go away result.new_element("file").data=id2string(location.get_file()); result.new_element("line").data=id2string(location.get_line()); result.new_element("function").data=id2string(location.get_function()); // these are to stay if(location.get_file()!="") result.set_attribute("file", id2string(location.get_file())); if(location.get_line()!="") result.set_attribute("line", id2string(location.get_line())); if(location.get_function()!="") result.set_attribute("function", id2string(location.get_function())); return result; }
void message_handlert::print( unsigned level, const std::string &message, int sequence_number, const locationt &location) { std::string dest; const irep_idt &file=location.get_file(); const irep_idt &line=location.get_line(); const irep_idt &column=location.get_column(); const irep_idt &function=location.get_function(); if(file!="") { if(dest!="") dest+=" "; dest+="file "+id2string(file); } if(line!="") { if(dest!="") dest+=" "; dest+="line "+id2string(line); } if(column!="") { if(dest!="") dest+=" "; dest+="column "+id2string(column); } if(function!="") { if(dest!="") dest+=" "; dest+="function "+id2string(function); } if(dest!="") dest+=": "; dest+=message; print(level, dest); }
void document_claimst::get_code( const locationt &location, std::string &dest) { dest=""; const irep_idt &file=location.get_file(); const irep_idt &line=location.get_line(); if(file=="" || line=="") return; std::ifstream in(file.c_str()); if(!in) { dest+="ERROR: unable to open "; dest+=id2string(file); dest+="\n"; return; } int line_int=atoi(line.c_str()); int line_start=line_int-3, line_end=line_int+3; if(line_start<=1) line_start=1; // skip line_start-1 lines for(int l=0; l<line_start-1; l++) { std::string tmp; std::getline(in, tmp); } // read till line_end std::list<linet> lines; for(int l=line_start; l<=line_end && in; l++) { lines.push_back(linet()); std::string &line=lines.back().text; std::getline(in, line); if(!line.empty() && line[line.size()-1]=='\r') line.resize(line.size()-1); lines.back().line_number=l; } // remove empty lines at the end and at the beginning for(std::list<linet>::iterator it=lines.begin(); it!=lines.end();) { if(is_empty(it->text)) it=lines.erase(it); else break; } for(std::list<linet>::iterator it=lines.end(); it!=lines.begin();) { it--; if(is_empty(it->text)) it=lines.erase(it); else break; } // strip space strip_space(lines); // build dest for(std::list<linet>::iterator it=lines.begin(); it!=lines.end(); it++) { std::string line_no=i2string(it->line_number); std::string tmp; switch(format) { case LATEX: while(line_no.size()<4) line_no=" "+line_no; line_no+" "; tmp+=escape_latex(it->text, true); if(it->line_number==line_int) tmp="{\\ttb{}"+tmp+"}"; break; case HTML: while(line_no.size()<4) line_no=" "+line_no; line_no+" "; tmp+=escape_html(it->text); if(it->line_number==line_int) tmp="<em>"+tmp+"</em>"; break; } dest+=tmp+"\n"; } }