Home | History | Annotate | Download | only in Core
      1 //==- HTMLRewrite.h - Translate source code into prettified HTML ---*- C++ -*-//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 //  This file defines a set of functions used for translating source code
     11 //  into beautified HTML.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef LLVM_CLANG_REWRITE_CORE_HTMLREWRITE_H
     16 #define LLVM_CLANG_REWRITE_CORE_HTMLREWRITE_H
     17 
     18 #include "clang/Basic/SourceLocation.h"
     19 #include <string>
     20 
     21 namespace clang {
     22 
     23 class Rewriter;
     24 class RewriteBuffer;
     25 class Preprocessor;
     26 
     27 namespace html {
     28 
     29   /// HighlightRange - Highlight a range in the source code with the specified
     30   /// start/end tags.  B/E must be in the same file.  This ensures that
     31   /// start/end tags are placed at the start/end of each line if the range is
     32   /// multiline.
     33   void HighlightRange(Rewriter &R, SourceLocation B, SourceLocation E,
     34                       const char *StartTag, const char *EndTag);
     35 
     36   /// HighlightRange - Highlight a range in the source code with the specified
     37   /// start/end tags.  The Start/end of the range must be in the same file.
     38   /// This ensures that start/end tags are placed at the start/end of each line
     39   /// if the range is multiline.
     40   inline void HighlightRange(Rewriter &R, SourceRange Range,
     41                              const char *StartTag, const char *EndTag) {
     42     HighlightRange(R, Range.getBegin(), Range.getEnd(), StartTag, EndTag);
     43   }
     44 
     45   /// HighlightRange - This is the same as the above method, but takes
     46   /// decomposed file locations.
     47   void HighlightRange(RewriteBuffer &RB, unsigned B, unsigned E,
     48                       const char *BufferStart,
     49                       const char *StartTag, const char *EndTag);
     50 
     51   /// EscapeText - HTMLize a specified file so that special characters are
     52   /// are translated so that they are not interpreted as HTML tags.
     53   void EscapeText(Rewriter& R, FileID FID,
     54                   bool EscapeSpaces = false, bool ReplaceTabs = false);
     55 
     56   /// EscapeText - HTMLized the provided string so that special characters
     57   ///  in 's' are not interpreted as HTML tags.  Unlike the version of
     58   ///  EscapeText that rewrites a file, this version by default replaces tabs
     59   ///  with spaces.
     60   std::string EscapeText(StringRef s,
     61                          bool EscapeSpaces = false, bool ReplaceTabs = false);
     62 
     63   void AddLineNumbers(Rewriter& R, FileID FID);
     64 
     65   void AddHeaderFooterInternalBuiltinCSS(Rewriter& R, FileID FID,
     66                                          const char *title = nullptr);
     67 
     68   /// SyntaxHighlight - Relex the specified FileID and annotate the HTML with
     69   /// information about keywords, comments, etc.
     70   void SyntaxHighlight(Rewriter &R, FileID FID, const Preprocessor &PP);
     71 
     72   /// HighlightMacros - This uses the macro table state from the end of the
     73   /// file, to reexpand macros and insert (into the HTML) information about the
     74   /// macro expansions.  This won't be perfectly perfect, but it will be
     75   /// reasonably close.
     76   void HighlightMacros(Rewriter &R, FileID FID, const Preprocessor &PP);
     77 
     78 } // end html namespace
     79 } // end clang namespace
     80 
     81 #endif
     82