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