Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/addins/TextTemplating/Mono.TextTemplating')
-rw-r--r--main/src/addins/TextTemplating/Mono.TextTemplating/Microsoft.VisualStudio.TextTemplating/TextTransformation.cs9
-rw-r--r--main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/RecyclableAppDomain.cs6
-rw-r--r--main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs49
3 files changed, 54 insertions, 10 deletions
diff --git a/main/src/addins/TextTemplating/Mono.TextTemplating/Microsoft.VisualStudio.TextTemplating/TextTransformation.cs b/main/src/addins/TextTemplating/Mono.TextTemplating/Microsoft.VisualStudio.TextTemplating/TextTransformation.cs
index 409a36a9a6..f6a597752d 100644
--- a/main/src/addins/TextTemplating/Mono.TextTemplating/Microsoft.VisualStudio.TextTemplating/TextTransformation.cs
+++ b/main/src/addins/TextTemplating/Mono.TextTemplating/Microsoft.VisualStudio.TextTemplating/TextTransformation.cs
@@ -43,7 +43,7 @@ namespace Microsoft.VisualStudio.TextTemplating
{
}
- protected internal virtual void Initialize ()
+ public virtual void Initialize ()
{
}
@@ -55,15 +55,12 @@ namespace Microsoft.VisualStudio.TextTemplating
public void Error (string message)
{
- Errors.Add (new CompilerError (null, -1, -1, null, message));
+ Errors.Add (new CompilerError ("", 0, 0, "", message));
}
public void Warning (string message)
{
- var err = new CompilerError (null, -1, -1, null, message) {
- IsWarning = true,
- };
- Errors.Add (err);
+ Errors.Add (new CompilerError ("", 0, 0, "", message) { IsWarning = true });
}
protected internal CompilerErrorCollection Errors {
diff --git a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/RecyclableAppDomain.cs b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/RecyclableAppDomain.cs
index 51934e42e3..8ef80cddc1 100644
--- a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/RecyclableAppDomain.cs
+++ b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/RecyclableAppDomain.cs
@@ -201,6 +201,12 @@ namespace Mono.TextTemplating
{
map[name] = location;
}
+
+ //keep this alive as long as the app domain is alive
+ public override object InitializeLifetimeService ()
+ {
+ return null;
+ }
}
}
} \ No newline at end of file
diff --git a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs
index 24394ff826..bdecf05e34 100644
--- a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs
+++ b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs
@@ -500,7 +500,7 @@ namespace Mono.TextTemplating
case SegmentType.Block:
if (helperMode)
//TODO: are blocks permitted after helpers?
- throw new ParserException ("Blocks are not permitted after helpers", seg.StartLocation);
+ pt.LogError ("Blocks are not permitted after helpers", seg.TagStartLocation);
st = new CodeSnippetStatement (seg.Text);
break;
case SegmentType.Expression:
@@ -512,7 +512,8 @@ namespace Mono.TextTemplating
st = new CodeExpressionStatement (new CodeMethodInvokeExpression (writeMeth, new CodePrimitiveExpression (seg.Text)));
break;
case SegmentType.Helper:
- type.Members.Add (CreateSnippetMember (seg.Text, location));
+ if (!string.IsNullOrEmpty (seg.Text))
+ type.Members.Add (CreateSnippetMember (seg.Text, location));
helperMode = true;
break;
default:
@@ -524,7 +525,9 @@ namespace Mono.TextTemplating
//TODO: is there a way to do this for languages that use indentation for blocks, e.g. python?
using (var writer = new StringWriter ()) {
settings.Provider.GenerateCodeFromStatement (st, writer, null);
- type.Members.Add (CreateSnippetMember (writer.ToString (), location ));
+ var text = writer.ToString ();
+ if (!string.IsNullOrEmpty (text))
+ type.Members.Add (CreateSnippetMember (text, location));
}
} else {
st.LinePragma = location;
@@ -546,7 +549,7 @@ namespace Mono.TextTemplating
//class code and attributes from processors
foreach (var processor in settings.DirectiveProcessors.Values) {
string classCode = processor.GetClassCodeForProcessingRun ();
- if (classCode != null)
+ if (!string.IsNullOrEmpty (classCode))
type.Members.Add (CreateSnippetMember (classCode));
var atts = processor.GetTemplateClassCustomAttributes ();
if (atts != null) {
@@ -605,6 +608,44 @@ namespace Mono.TextTemplating
};
if (!settings.IncludePreprocessingHelpers)
initializeMeth.Attributes |= MemberAttributes.Override;
+
+ //if preprocessed, pass the extension and encoding to the host
+ if (settings.IsPreprocessed && settings.HostSpecific) {
+ var hostProp = new CodePropertyReferenceExpression (new CodeThisReferenceExpression (), "Host");
+ var statements = new List<CodeStatement> ();
+
+ if (!string.IsNullOrEmpty (settings.Extension)) {
+ statements.Add (new CodeExpressionStatement (new CodeMethodInvokeExpression (
+ hostProp,
+ "SetFileExtension",
+ new CodePrimitiveExpression (settings.Extension)
+ )));
+ }
+
+ if (settings.Encoding != null) {
+ statements.Add (new CodeExpressionStatement (new CodeMethodInvokeExpression (
+ hostProp,
+ "SetOutputEncoding",
+ new CodeMethodInvokeExpression(
+ new CodeTypeReferenceExpression (typeof(Encoding)),
+ "GetEncoding",
+ new CodePrimitiveExpression (settings.Encoding.CodePage),
+ new CodePrimitiveExpression(true)
+ )
+ )));
+ }
+
+ if (statements.Count > 0) {
+ initializeMeth.Statements.Add (new CodeConditionStatement (
+ new CodeBinaryOperatorExpression (
+ hostProp,
+ CodeBinaryOperatorType.IdentityInequality,
+ new CodePrimitiveExpression (null)
+ ),
+ statements.ToArray()
+ ));
+ }
+ }
//pre-init code from processors
foreach (var processor in settings.DirectiveProcessors.Values) {