5
// Lluis Sanchez Gual <lluis@novell.com>
7
// Copyright (c) 2010 Novell, Inc (http://www.novell.com)
9
// Permission is hereby granted, free of charge, to any person obtaining a copy
10
// of this software and associated documentation files (the "Software"), to deal
11
// in the Software without restriction, including without limitation the rights
12
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
// copies of the Software, and to permit persons to whom the Software is
14
// furnished to do so, subject to the following conditions:
16
// The above copyright notice and this permission notice shall be included in
17
// all copies or substantial portions of the Software.
19
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28
using MonoDevelop.Projects.Policies;
29
using MonoDevelop.Projects.Dom;
30
using MonoDevelop.Projects.Dom.Parser;
31
using Mono.TextEditor;
32
using System.Collections.Generic;
34
namespace MonoDevelop.Ide.CodeFormatting
36
public sealed class CodeFormatter
38
ICodeFormatter formatter;
39
IList<string> mimeTypeChain;
41
internal CodeFormatter (IList<string> mimeTypeChain, ICodeFormatter formatter)
43
this.mimeTypeChain = mimeTypeChain;
44
this.formatter = formatter;
47
public string FormatText (PolicyContainer policyParent, string input)
49
return formatter.FormatText (policyParent ?? PolicyService.DefaultPolicies, mimeTypeChain, input);
52
/// <summary>Formats a subrange of the input text.
53
/// <returns>The formatted text of the range.</returns>
54
public string FormatText (PolicyContainer policyParent, string input, int fromOffset, int toOffset)
56
return formatter.FormatText (policyParent ?? PolicyService.DefaultPolicies, mimeTypeChain,
57
input, fromOffset, toOffset);
60
public bool SupportsOnTheFlyFormatting {
62
var adv = formatter as IAdvancedCodeFormatter;
63
return adv != null && adv.SupportsOnTheFlyFormatting;
67
public bool SupportsCorrectingIndent {
69
var adv = formatter as IAdvancedCodeFormatter;
70
return adv != null && adv.SupportsCorrectingIndent;
74
public bool IsDefault {
76
return formatter is DefaultCodeFormatter;
81
/// Formats a text document directly with insert/remove operations.
83
/// <param name="textEditorData">
84
/// A <see cref="System.Object"/> that must be from type Mono.TextEditorData.
86
/// <param name="dom">
87
/// A <see cref="ProjectDom"/>
89
/// <param name="unit">
90
/// A <see cref="ICompilationUnit"/>
92
/// <param name="caretLocation">
93
/// A <see cref="DomLocation"/> that should be the end location to which the parsing should occur.
95
public void OnTheFlyFormat (PolicyContainer policyParent, TextEditorData data,
96
IType callingType, IMember callingMember, ProjectDom dom, ICompilationUnit unit,
97
DomLocation endLocation)
99
var adv = formatter as IAdvancedCodeFormatter;
100
if (adv == null || !adv.SupportsOnTheFlyFormatting)
101
throw new InvalidOperationException ("On the fly formatting not supported");
103
adv.OnTheFlyFormat (policyParent ?? PolicyService.DefaultPolicies, mimeTypeChain,
104
data, callingType, callingMember, dom, unit, endLocation);
107
public void OnTheFlyFormat (PolicyContainer policyParent, TextEditorData data,
108
int startOffset, int endOffset)
110
var adv = formatter as IAdvancedCodeFormatter;
111
if (adv == null || !adv.SupportsOnTheFlyFormatting)
112
throw new InvalidOperationException ("On the fly formatting not supported");
113
adv.OnTheFlyFormat (policyParent ?? PolicyService.DefaultPolicies, mimeTypeChain,
114
data, startOffset, endOffset);
117
public void CorrectIndenting (PolicyContainer policyParent, TextEditorData data, int line)
119
var adv = formatter as IAdvancedCodeFormatter;
120
if (adv == null || !adv.SupportsCorrectingIndent)
121
throw new InvalidOperationException ("Indent correction not supported");
122
adv.CorrectIndenting (policyParent ?? PolicyService.DefaultPolicies, mimeTypeChain, data, line);