diff options
-rw-r--r-- | clang/Driver/HTMLPrint.cpp | 21 | ||||
-rw-r--r-- | clang/lib/Rewrite/HTMLRewrite.cpp | 34 |
2 files changed, 40 insertions, 15 deletions
diff --git a/clang/Driver/HTMLPrint.cpp b/clang/Driver/HTMLPrint.cpp index acb011c2160..93e544fc966 100644 --- a/clang/Driver/HTMLPrint.cpp +++ b/clang/Driver/HTMLPrint.cpp @@ -57,14 +57,21 @@ HTMLPrinter::~HTMLPrinter() { std::ostringstream os; os << "<html>\n<head>\n" - << " <style type=\"text/css\">\n" - << " .nums, .lines { vertical-align:top }\n" - << " .nums { padding-right:.5em; width:2.5em }\n" + << " <style type=\"text/css\">\n" + << " .codeblock { width:100% }\n" + << " .codeline { font-family: \"Monaco\", fixed; font-size:11pt }\n" + << " .codeline { height:1.5em; line-height:1.5em }\n" + << " .nums, .lines { float:left; height:100% }\n" + << " .nums { background-color: #eeeeee }\n" + << " .nums { font-family: \"Andale Mono\", fixed; font-size:smaller }\n" + << " .nums { width:2.5em; padding-right:2ex; text-align:right }\n" + << " .lines { padding-left: 1ex; border-left: 3px solid #ccc }\n" + << " .lines { white-space: pre }\n" << " </style>\n" << "</head>\n" - << "<body>\n<pre>"; + << "<body>"; - R.InsertTextBefore(StartLoc, os.str().c_str(), os.str().size()); + R.InsertStrBefore(StartLoc, os.str()); } // Generate footer @@ -72,8 +79,8 @@ HTMLPrinter::~HTMLPrinter() { { std::ostringstream os; - os << "</pre>\n</body></html>\n"; - R.InsertTextAfter(EndLoc, os.str().c_str(), os.str().size()); + os << "</body></html>\n"; + R.InsertStrAfter(EndLoc, os.str()); } diff --git a/clang/lib/Rewrite/HTMLRewrite.cpp b/clang/lib/Rewrite/HTMLRewrite.cpp index ddf427f1ad7..9bd18109bbb 100644 --- a/clang/lib/Rewrite/HTMLRewrite.cpp +++ b/clang/lib/Rewrite/HTMLRewrite.cpp @@ -49,16 +49,26 @@ void html::EscapeText(Rewriter& R, unsigned FileID, bool EscapeSpaces) { static void AddLineNumber(Rewriter& R, unsigned LineNo, SourceLocation B, SourceLocation E) { - // Surround the line with a span tag. + // Surround the line text with a div tag. - R.InsertTextBefore(E, "</span>", 7); - R.InsertTextBefore(B, "<span class=lines>", 18); + if (B == E) // Handle empty lines. + R.InsertCStrBefore(B, "<div class=\"lines\"> </div>"); + else { + R.InsertCStrBefore(E, "</div>"); + R.InsertCStrBefore(B, "<div class=\"lines\">"); + } + + // Insert a div tag for the line number. - // Insert a span tag for the line number. - std::ostringstream os; - os << "<span class=nums>" << LineNo << "</span>"; - R.InsertTextBefore(B, os.str().c_str(), os.str().size()); + os << "<div class=\"nums\">" << LineNo << "</div>"; + + R.InsertStrBefore(B, os.str()); + + // Now surround the whole line with another div tag. + + R.InsertCStrBefore(B, "<div class=\"codeline\">"); + R.InsertCStrAfter(E, "</div>"); } void html::AddLineNumbers(Rewriter& R, unsigned FileID) { @@ -98,5 +108,13 @@ void html::AddLineNumbers(Rewriter& R, unsigned FileID) { ++C; ++FilePos; } - } + } + + // Add one big div tag that surrounds all of the code. + + R.InsertCStrBefore(SourceLocation::getFileLoc(FileID, 0), + "<div id=\"codeblock\">"); + + R.InsertCStrAfter(SourceLocation::getFileLoc(FileID, FileEnd - FileBeg), + "</div>"); } |