clang  19.0.0git
HTMLRewrite.h
Go to the documentation of this file.
1 //==- HTMLRewrite.h - Translate source code into prettified HTML ---*- C++ -*-//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines a set of functions used for translating source code
10 // into beautified HTML.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CLANG_REWRITE_CORE_HTMLREWRITE_H
15 #define LLVM_CLANG_REWRITE_CORE_HTMLREWRITE_H
16 
18 #include <string>
19 
20 namespace clang {
21 
22 class Rewriter;
23 class RewriteBuffer;
24 class Preprocessor;
25 
26 namespace html {
27  struct RelexRewriteCache;
28  using RelexRewriteCacheRef = std::shared_ptr<RelexRewriteCache>;
29 
30  /// If you need to rewrite the same file multiple times, you can instantiate
31  /// a RelexRewriteCache and refer functions such as SyntaxHighlight()
32  /// and HighlightMacros() to it so that to avoid re-lexing the file each time.
33  /// The cache may outlive the rewriter as long as cached FileIDs and source
34  /// locations continue to make sense for the translation unit as a whole.
36 
37  /// HighlightRange - Highlight a range in the source code with the specified
38  /// start/end tags. B/E must be in the same file. This ensures that
39  /// start/end tags are placed at the start/end of each line if the range is
40  /// multiline.
42  const char *StartTag, const char *EndTag,
43  bool IsTokenRange = true);
44 
45  /// HighlightRange - Highlight a range in the source code with the specified
46  /// start/end tags. The Start/end of the range must be in the same file.
47  /// This ensures that start/end tags are placed at the start/end of each line
48  /// if the range is multiline.
50  const char *StartTag, const char *EndTag) {
51  HighlightRange(R, Range.getBegin(), Range.getEnd(), StartTag, EndTag);
52  }
53 
54  /// HighlightRange - This is the same as the above method, but takes
55  /// decomposed file locations.
56  void HighlightRange(RewriteBuffer &RB, unsigned B, unsigned E,
57  const char *BufferStart,
58  const char *StartTag, const char *EndTag);
59 
60  /// EscapeText - HTMLize a specified file so that special characters are
61  /// are translated so that they are not interpreted as HTML tags.
62  void EscapeText(Rewriter& R, FileID FID,
63  bool EscapeSpaces = false, bool ReplaceTabs = false);
64 
65  /// EscapeText - HTMLized the provided string so that special characters
66  /// in 's' are not interpreted as HTML tags. Unlike the version of
67  /// EscapeText that rewrites a file, this version by default replaces tabs
68  /// with spaces.
69  std::string EscapeText(StringRef s,
70  bool EscapeSpaces = false, bool ReplaceTabs = false);
71 
72  void AddLineNumbers(Rewriter& R, FileID FID);
73 
75  StringRef title);
76 
77  /// SyntaxHighlight - Relex the specified FileID and annotate the HTML with
78  /// information about keywords, comments, etc.
79  void SyntaxHighlight(Rewriter &R, FileID FID, const Preprocessor &PP,
80  RelexRewriteCacheRef Cache = nullptr);
81 
82  /// HighlightMacros - This uses the macro table state from the end of the
83  /// file, to reexpand macros and insert (into the HTML) information about the
84  /// macro expansions. This won't be perfectly perfect, but it will be
85  /// reasonably close.
86  void HighlightMacros(Rewriter &R, FileID FID, const Preprocessor &PP,
87  RelexRewriteCacheRef Cache = nullptr);
88 
89 } // end html namespace
90 } // end clang namespace
91 
92 #endif
SourceRange Range
Definition: SemaObjC.cpp:754
Defines the clang::SourceLocation class and associated facilities.
TypePropertyCache< Private > Cache
Definition: Type.cpp:4438
__device__ __2f16 float __ockl_bool s
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Definition: Preprocessor.h:128
RewriteBuffer - As code is rewritten, SourceBuffer's from the original input with modifications get a...
Definition: RewriteBuffer.h:25
Rewriter - This is the main interface to the rewrite buffers.
Definition: Rewriter.h:32
Encodes a location in the source.
A trivial tuple used to represent a source range.
void AddHeaderFooterInternalBuiltinCSS(Rewriter &R, FileID FID, StringRef title)
void HighlightRange(Rewriter &R, SourceLocation B, SourceLocation E, const char *StartTag, const char *EndTag, bool IsTokenRange=true)
HighlightRange - Highlight a range in the source code with the specified start/end tags.
Definition: HTMLRewrite.cpp:33
RelexRewriteCacheRef instantiateRelexRewriteCache()
If you need to rewrite the same file multiple times, you can instantiate a RelexRewriteCache and refe...
void AddLineNumbers(Rewriter &R, FileID FID)
void SyntaxHighlight(Rewriter &R, FileID FID, const Preprocessor &PP, RelexRewriteCacheRef Cache=nullptr)
SyntaxHighlight - Relex the specified FileID and annotate the HTML with information about keywords,...
void HighlightMacros(Rewriter &R, FileID FID, const Preprocessor &PP, RelexRewriteCacheRef Cache=nullptr)
HighlightMacros - This uses the macro table state from the end of the file, to reexpand macros and in...
void EscapeText(Rewriter &R, FileID FID, bool EscapeSpaces=false, bool ReplaceTabs=false)
EscapeText - HTMLize a specified file so that special characters are are translated so that they are ...
std::shared_ptr< RelexRewriteCache > RelexRewriteCacheRef
Definition: HTMLRewrite.h:28
The JSON file list parser is used to communicate input to InstallAPI.