/DetectorDescription/RegressionTest/interface/DDHtmlFormatter.h

https://github.com/aivanov-cern/cmssw · C Header · 189 lines · 127 code · 54 blank · 8 comment · 0 complexity · 81879ec316dbadd6c518ff1ed84efb33 MD5 · raw file

  1. #ifndef DDHtmlFormatter_h
  2. #define DDHtmlFormatter_h
  3. #include <iostream>
  4. #include <string>
  5. #include <sstream>
  6. #include <map>
  7. #include <set>
  8. #include <vector>
  9. #include "DetectorDescription/RegressionTest/interface/DDErrorDetection.h"
  10. class DDHtmlFormatter;
  11. std::ostream & operator<<(std::ostream & o, const DDHtmlFormatter & f);
  12. class DDHtmlFormatter
  13. {
  14. public:
  15. typedef std::map<std::string,std::set<std::string> > ns_type;
  16. explicit DDHtmlFormatter() { }
  17. DDHtmlFormatter(const DDHtmlFormatter & f) : os_(f.os_.str()) { }
  18. DDHtmlFormatter header(const std::string & text, const std::string & style="../../style.css");
  19. DDHtmlFormatter footer();
  20. DDHtmlFormatter br() { pre(); os_ << "<br>" << std::endl; return *this; }
  21. DDHtmlFormatter p(const std::string & content) { pre(); os_ << "<p>" << std::endl << content << std::endl << "</p>" << std::endl; return *this; }
  22. DDHtmlFormatter ul() { pre(); os_ << "<ul>" << std::endl; return *this;}
  23. DDHtmlFormatter li(const std::string & content) { pre(); os_ << "<li>" << content << "</li>" << std::endl; return *this;}
  24. DDHtmlFormatter ulEnd() { pre(); os_ << "</ul>" << std::endl; return *this;}
  25. DDHtmlFormatter h1(const std::string & content) { pre(); os_ << "<h1>" << content << "</h1>" << std::endl; return *this;}
  26. DDHtmlFormatter h2(const std::string & content) { pre(); os_ << "<h2>" << content << "</h2>" << std::endl; return *this;}
  27. DDHtmlFormatter h3(const std::string & content) { pre(); os_ << "<h3>" << content << "</h3>" << std::endl; return *this;}
  28. DDHtmlFormatter link(const std::string & url, const std::string & text, const std::string & target="_self");
  29. std::string lnk(const std::string & url, const std::string & text, const std::string & target="_self");
  30. DDHtmlFormatter table(int border=0){ pre(); os_ << "<table border=\"" << border << "\">" << std::endl; return *this;}
  31. DDHtmlFormatter tableEnd() { pre(); os_ << "</table>" << std::endl; return *this;}
  32. DDHtmlFormatter tr() { pre(); os_ << " <tr>" << std::endl; return *this;}
  33. DDHtmlFormatter trEnd() { pre(); os_ << " </tr>" << std::endl; return *this;}
  34. DDHtmlFormatter td(const std::string & content) { pre(); os_ << " <td>" << content << std::endl << " </td>" << std::endl; return *this;}
  35. DDHtmlFormatter color(int red, int green, int blue){return *this;};
  36. void pre() { os_.str(""); }
  37. // std::string operator<<(std::string o) { o << os_; }
  38. mutable std::stringstream os_;
  39. private:
  40. DDHtmlFormatter& operator= ( const DDHtmlFormatter& );
  41. };
  42. /**
  43. Generates HTML for DD-namespaces
  44. */
  45. class DDNsGenerator
  46. {
  47. public:
  48. DDNsGenerator(std::ostream & os,
  49. const std::string & title,
  50. const std::string & target,
  51. const ns_type & n,
  52. const std::string & text="")
  53. : os_(os), title_(title), text_(text), target_(target), n_(n){ }
  54. void doit();
  55. private:
  56. std::ostream & os_;
  57. std::string title_, text_, target_;
  58. const ns_type & n_;
  59. };
  60. class DDFrameGenerator
  61. {
  62. public:
  63. DDFrameGenerator(std::ostream & os,
  64. const std::string & title,
  65. const std::string & n1 = "_ns", //frame names
  66. const std::string & n2 = "_list",
  67. const std::string & n3 = "_details",
  68. const std::string & u1 = "ns.html", //url to be displayed in each frame
  69. const std::string & u2 = "list.html",
  70. const std::string & u3 = "details.html")
  71. : t_(title), n1_(n1), n2_(n2), n3_(n3), u1_(u1), u2_(u2), u3_(u3), os_(os) { }
  72. void doit();
  73. private:
  74. std::string t_, n1_, n2_, n3_, u1_, u2_, u3_;
  75. std::ostream & os_;
  76. };
  77. // =============================================================================================================
  78. // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  79. class DDHtmlDetails
  80. {
  81. public:
  82. DDHtmlDetails(const std::string & cat, const std::string & txt);
  83. virtual bool details(std::ostream & os, const DDName &) = 0;
  84. virtual ns_type & names() = 0;
  85. virtual ~DDHtmlDetails(){};
  86. const std::string & category() { return cat_; }
  87. const std::string & text() {return txt_; }
  88. protected:
  89. mutable ns_type names_;
  90. std::string cat_, txt_;
  91. DDHtmlFormatter f_;
  92. };
  93. class DDHtmlLpDetails : public DDHtmlDetails
  94. {
  95. public:
  96. DDHtmlLpDetails(const std::string & cat, const std::string & txt) : DDHtmlDetails(cat,txt) {}
  97. bool details(std::ostream & os, const DDName &);
  98. ns_type & names();
  99. };
  100. class DDHtmlMaDetails : public DDHtmlDetails
  101. {
  102. public:
  103. DDHtmlMaDetails(const std::string & cat, const std::string & txt) : DDHtmlDetails(cat,txt) {}
  104. bool details(std::ostream & os, const DDName &);
  105. ns_type & names();
  106. };
  107. class DDHtmlSoDetails : public DDHtmlDetails
  108. {
  109. public:
  110. DDHtmlSoDetails(const std::string & cat, const std::string & txt) : DDHtmlDetails(cat,txt) {}
  111. bool details(std::ostream & os, const DDName &);
  112. ns_type & names();
  113. };
  114. class DDHtmlRoDetails : public DDHtmlDetails
  115. {
  116. public:
  117. DDHtmlRoDetails(const std::string & cat, const std::string & txt) : DDHtmlDetails(cat,txt) {}
  118. bool details(std::ostream & os, const DDName &);
  119. ns_type & names();
  120. };
  121. class DDHtmlSpDetails : public DDHtmlDetails
  122. {
  123. public:
  124. DDHtmlSpDetails(const std::string & cat, const std::string & txt) : DDHtmlDetails(cat,txt) {}
  125. bool details(std::ostream & os, const DDName &);
  126. ns_type & names();
  127. };
  128. // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  129. // =============================================================================================================
  130. void dd_to_html(DDHtmlDetails & det);
  131. void dd_html_frameset(std::ostream & os);
  132. void dd_html_menu_frameset(std::ostream & os);
  133. void dd_html_menu(std::ostream & os);
  134. void dd_html_ro();
  135. #endif