From: Ted Kremenek Date: Wed, 19 Mar 2008 23:55:53 +0000 (+0000) Subject: Added HTML highlighting for ranges. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0f1b67bc25058b71eacc0d9ef85075fff23e7b31;p=clang Added HTML highlighting for ranges. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48572 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/HTMLPrint.cpp b/Driver/HTMLPrint.cpp index a6b90fafdf..b30f1e80ef 100644 --- a/Driver/HTMLPrint.cpp +++ b/Driver/HTMLPrint.cpp @@ -154,10 +154,16 @@ void HTMLDiagnostic::HandleDiagnostic(Diagnostic &Diags, if (!Pos.isValid()) return; + SourceManager& SM = R.getSourceMgr(); + FullSourceLoc LPos = Pos.getLogicalLoc(); unsigned FileID = LPos.getLocation().getFileID(); - if (FileID != LPos.getManager().getMainFileID()) + assert (&LPos.getManager() == &SM && "SourceManagers are different!"); + + unsigned MainFileID = SM.getMainFileID(); + + if (FileID != MainFileID) return; @@ -202,9 +208,33 @@ void HTMLDiagnostic::HandleDiagnostic(Diagnostic &Diags, // Insert the new html. - const llvm::MemoryBuffer *Buf = R.getSourceMgr().getBuffer(FileID); + const llvm::MemoryBuffer *Buf = SM.getBuffer(FileID); const char* FileStart = Buf->getBufferStart(); R.InsertStrBefore(SourceLocation::getFileLoc(FileID, LineStart - FileStart), os.str()); + + // Now highlight the ranges. + + for (unsigned i = 0; i < NumRanges; ++i) { + + SourceLocation B = SM.getLogicalLoc(Ranges->getBegin()); + SourceLocation E = SM.getLogicalLoc(Ranges->getEnd()); + + // We do this because the position seems to point to the beginning of + // the last character. FIXME: Is this what is suppose to happen? + std::pair X = SM.getDecomposedFileLoc(E); + E = SourceLocation::getFileLoc(X.first, X.second+1); + + ++Ranges; + + if (B.getFileID() != MainFileID || E.getFileID() != MainFileID) + continue; + + // Highlight the range. Make the span tag the outermost tag for the + // selected range. + R.InsertCStrBefore(B, ""); + R.InsertCStrAfter(E, ""); + } + } diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp index 76c44b718c..788b41bd0e 100644 --- a/lib/Rewrite/HTMLRewrite.cpp +++ b/lib/Rewrite/HTMLRewrite.cpp @@ -143,6 +143,7 @@ void html::AddHeaderFooterInternalBuiltinCSS(Rewriter& R, unsigned FileID) { << " .code { line-height: 1.2em }\n" << " .num { width:2.5em; padding-right:2ex; background-color:#eeeeee }\n" << " .num { text-align:right; font-size: smaller }\n" + << " .num { color:#444444 }\n" << " .line { padding-left: 1ex; border-left: 3px solid #ccc }\n" << " .line { white-space: pre }\n" << " .msg { background-color:#ff8000; color:#000000 }\n" @@ -152,6 +153,8 @@ void html::AddHeaderFooterInternalBuiltinCSS(Rewriter& R, unsigned FileID) { << " .msg { float:left }\n" << " .msg { padding:0.5em 1ex 0.5em 1ex }\n" << " .msg { margin-top:10px; margin-bottom:10px }\n" + << " .mrange { color:#ff8000 }\n" + << " .mrange { border-bottom: 1px dotted #ff8000 }\n" << "\n\n"; R.InsertStrBefore(StartLoc, os.str());