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