[cfe-commits] r48507 - /cfe/trunk/Driver/HTMLPrint.cpp

Ted Kremenek kremenek at apple.com
Tue Mar 18 15:21:07 PDT 2008


Author: kremenek
Date: Tue Mar 18 17:21:07 2008
New Revision: 48507

URL: http://llvm.org/viewvc/llvm-project?rev=48507&view=rev
Log:
Added HTML pretty-printer.

Added:
    cfe/trunk/Driver/HTMLPrint.cpp

Added: cfe/trunk/Driver/HTMLPrint.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/HTMLPrint.cpp?rev=48507&view=auto

==============================================================================
--- cfe/trunk/Driver/HTMLPrint.cpp (added)
+++ cfe/trunk/Driver/HTMLPrint.cpp Tue Mar 18 17:21:07 2008
@@ -0,0 +1,62 @@
+//===--- RewriteTest.cpp - Playground for the code rewriter ---------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Hacks and fun related to the code rewriter.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ASTConsumers.h"
+#include "clang/AST/ASTConsumer.h"
+#include "clang/Rewrite/Rewriter.h"
+#include "clang/Rewrite/HTMLRewrite.h"
+#include "clang/Basic/SourceManager.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "clang/AST/ASTContext.h"
+
+using namespace clang;
+
+namespace {
+  class HTMLPrinter : public ASTConsumer {
+    Rewriter R;
+  public:
+    HTMLPrinter() {}
+    virtual ~HTMLPrinter();
+    
+    void Initialize(ASTContext &context);
+  };
+}
+
+ASTConsumer* clang::CreateHTMLPrinter() { return new HTMLPrinter(); }
+
+void HTMLPrinter::Initialize(ASTContext &context) {
+  R.setSourceMgr(context.getSourceManager());
+}
+
+HTMLPrinter::~HTMLPrinter() {
+  unsigned FileID = R.getSourceMgr().getMainFileID();
+
+  const llvm::MemoryBuffer *Buf = R.getSourceMgr().getBuffer(FileID);
+  const char* FileStart = Buf->getBufferStart();
+  const char* FileEnd = Buf->getBufferEnd();
+  SourceLocation StartLoc = SourceLocation::getFileLoc(FileID, 0);
+  SourceLocation EndLoc = SourceLocation::getFileLoc(FileID, FileEnd-FileStart);
+  
+  html::EscapeText(R, FileID);
+  html::AddLineNumbers(R, FileID);
+//  html::InsertTag(R, html::HEAD, StartLoc, EndLoc, true);  
+//  html::InsertTag(R, html::BODY, StartLoc, EndLoc, true);
+//  html::InsertTag(R, html::PRE, StartLoc, EndLoc);
+  
+  // Emit the HTML.
+  
+  if (const RewriteBuffer *RewriteBuf = R.getRewriteBufferFor(FileID)) {
+    std::string S(RewriteBuf->begin(), RewriteBuf->end());
+    printf("%s\n", S.c_str());
+  }
+}





More information about the cfe-commits mailing list