-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCodeColorizer.cs
More file actions
100 lines (85 loc) · 4.25 KB
/
CodeColorizer.cs
File metadata and controls
100 lines (85 loc) · 4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Copyright (c) Microsoft Corporation. All rights reserved.
using System.IO;
using System.Text;
using ColorCode.Common;
using ColorCode.Compilation;
using ColorCode.Formatting;
using ColorCode.Parsing;
namespace ColorCode
{
/// <summary>
/// Colorizes source code.
/// </summary>
public class CodeColorizer : ICodeColorizer
{
private readonly ILanguageParser languageParser;
/// <summary>
/// Initializes a new instance of the <see cref="CodeColorizer"/> class.
/// </summary>
public CodeColorizer()
{
languageParser = new LanguageParser(new LanguageCompiler(Languages.CompiledLanguages), Languages.LanguageRepository);
}
/// <summary>
/// Initializes a new instance of the <see cref="CodeColorizer"/> class.
/// </summary>
/// <param name="languageParser">The language parser that the <see cref="CodeColorizer"/> instance will use for its lifetime.</param>
public CodeColorizer(ILanguageParser languageParser)
{
Guard.ArgNotNull(languageParser, "languageParser");
this.languageParser = languageParser;
}
/// <summary>
/// Colorizes source code using the specified language, the default formatter, and the default style sheet.
/// </summary>
/// <param name="sourceCode">The source code to colorize.</param>
/// <param name="language">The language to use to colorize the source code.</param>
/// <returns>The colorized source code.</returns>
public string Colorize(string sourceCode, ILanguage language)
{
return Colorize(sourceCode, language, Formatters.Default, StyleSheets.Default);
}
public string Colorize(string sourceCode, ILanguage language, IFormatter formatter, IStyleSheet styleSheet)
{
var buffer = new StringBuilder(sourceCode.Length * 2);
using (TextWriter writer = new StringWriter(buffer))
{
Colorize(sourceCode, language, formatter, styleSheet, writer);
writer.Flush();
}
return buffer.ToString();
}
/// <summary>
/// Colorizes source code using the specified language, the default formatter, and the default style sheet.
/// </summary>
/// <param name="sourceCode">The source code to colorize.</param>
/// <param name="language">The language to use to colorize the source code.</param>
/// <param name="textWriter">The text writer to which the colorized source code will be written.</param>
public void Colorize(string sourceCode, ILanguage language, TextWriter textWriter)
{
Colorize(sourceCode, language, Formatters.Default, StyleSheets.Default, textWriter);
}
/// <summary>
/// Colorizes source code using the specified language, formatter, and style sheet.
/// </summary>
/// <param name="sourceCode">The source code to colorize.</param>
/// <param name="language">The language to use to colorize the source code.</param>
/// <param name="formatter">The formatter to use to colorize the source code.</param>
/// <param name="styleSheet">The style sheet to use to colorize the source code.</param>
/// <param name="textWriter">The text writer to which the colorized source code will be written.</param>
public void Colorize(string sourceCode,
ILanguage language,
IFormatter formatter,
IStyleSheet styleSheet,
TextWriter textWriter)
{
Guard.ArgNotNull(language, "language");
Guard.ArgNotNull(formatter, "formatter");
Guard.ArgNotNull(styleSheet, "styleSheet");
Guard.ArgNotNull(textWriter, "textWriter");
formatter.WriteHeader(styleSheet, language, textWriter);
languageParser.Parse(sourceCode, language, (parsedSourceCode, captures) => formatter.Write(parsedSourceCode, captures, styleSheet, textWriter));
formatter.WriteFooter(styleSheet, language, textWriter);
}
}
}