]> granicus.if.org Git - clang/commitdiff
Added HTML pretty-printer.
authorTed Kremenek <kremenek@apple.com>
Tue, 18 Mar 2008 22:21:07 +0000 (22:21 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 18 Mar 2008 22:21:07 +0000 (22:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48507 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/HTMLPrint.cpp [new file with mode: 0644]

diff --git a/Driver/HTMLPrint.cpp b/Driver/HTMLPrint.cpp
new file mode 100644 (file)
index 0000000..d347901
--- /dev/null
@@ -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());
+  }
+}