~ubuntu-branches/ubuntu/natty/monodevelop/natty

« back to all changes in this revision

Viewing changes to src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/CodeTranslationFileDescriptionTemplate.cs

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Ebner
  • Date: 2008-03-29 23:36:33 UTC
  • mto: (1.5.1 sid)
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: james.westby@ubuntu.com-20080329233633-l550uuwvfh1e68at
Tags: upstream-1.0+dfsg
ImportĀ upstreamĀ versionĀ 1.0+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
                CodeDomProvider parserProvider;
52
52
                string tempSubstitutedContent;
53
53
                bool showAutogenerationNotice = false;
 
54
                string sourceLang;
54
55
                
55
56
                public override void Load (XmlElement filenode)
56
57
                {
57
58
                        base.Load (filenode);
58
59
                        content = filenode.InnerText;
59
60
                        
60
 
                        string sourceLang = filenode.GetAttribute ("SourceLanguage");
 
61
                        sourceLang = filenode.GetAttribute ("SourceLanguage");
61
62
                        if ((sourceLang == null) || (sourceLang.Length == 0))
62
63
                                sourceLang = "C#";
63
64
                        
74
75
                        if (string.IsNullOrEmpty (filenode.GetAttribute ("AddStandardHeader")))
75
76
                                AddStandardHeader = true;
76
77
                        
77
 
                        parserProvider = getProvider (sourceLang);
 
78
                        parserProvider = GetCodeDomProvider (sourceLang);
78
79
                }
79
80
                
80
81
                //Adapted from CodeDomFileDescriptionTemplate.cs
85
86
                        if (language == null || language == "")
86
87
                                throw new InvalidOperationException ("Language not defined in CodeDom based template.");
87
88
                        
88
 
                        CodeDomProvider provider = getProvider (language);
 
89
                        CodeDomProvider provider = GetCodeDomProvider (language);
89
90
                        
90
91
                        //parse the source code
91
92
                        if (tempSubstitutedContent == null)
127
128
                        return txt.Substring (i+1);
128
129
                }
129
130
                
130
 
                CodeDomProvider getProvider (string language)
131
 
                {
132
 
                        CodeDomProvider provider = null;
133
 
                        IDotNetLanguageBinding binding = GetLanguageBinding (language) as IDotNetLanguageBinding;
134
 
                        if (binding == null)
135
 
                                throw new InvalidOperationException ("No LanguageBinding was found for the language '" + language + "'.");
136
 
                        
137
 
                        provider = binding.GetCodeDomProvider ();
138
 
                        if (provider == null)
139
 
                                throw new InvalidOperationException ("No CodeDomProvider was found for the language '" + language + "'.");
140
 
                        return provider;
141
 
                }
142
 
                
143
131
                public override void ModifyTags (Project project, string language, string identifier, string fileName, ref Hashtable tags)
144
132
                {
145
133
                        //prevent parser breakage from missing tags, which SingleFile only provides for DotNetProject
148
136
                        
149
137
                        base.ModifyTags (project, language, identifier, fileName, ref tags);
150
138
                        
 
139
                        //swap out the escaped keyword identifiers for the target language with the source language
 
140
                        //CodeDOM should take care of handling it for the target language
 
141
                        System.CodeDom.Compiler.CodeDomProvider provider = GetCodeDomProvider (sourceLang);
 
142
                        tags ["EscapedIdentifier"] = provider.CreateEscapedIdentifier ((string) tags ["Name"]);
 
143
                        
151
144
                        //This is a bit hacky doing it here instead of in CreateContent, but need to
152
145
                        //substitute all tags in code before language is translated, because language
153
146
                        //translation gets confused by unsubstituted  substitution tokens.
154
147
                        string [,] tagsArr = HashtableToStringArray (tags);
155
148
                        tempSubstitutedContent = StringParserService.Parse (content, tagsArr);
156
149
                }
 
150
                
 
151
                private System.CodeDom.Compiler.CodeDomProvider GetCodeDomProvider (string language)
 
152
                {
 
153
                        System.CodeDom.Compiler.CodeDomProvider provider = null;
 
154
                        IDotNetLanguageBinding binding = GetLanguageBinding (language) as IDotNetLanguageBinding;
 
155
                        if (binding == null)
 
156
                                throw new InvalidOperationException ("No LanguageBinding was found for the language '" + language + "'.");
 
157
                        
 
158
                        provider = binding.GetCodeDomProvider ();
 
159
                        if (provider == null)
 
160
                                throw new InvalidOperationException ("No CodeDomProvider was found for the language '" + language + "'.");
 
161
                        return provider;
 
162
                }
 
163
                
 
164
                //CodeDOM escapes keywords for us, so escaped keywords are valid too. Need to override to allow this,
 
165
                //and also to check for validity in source language
 
166
                public override bool IsValidName (string name, string language)
 
167
                {
 
168
                        return base.IsValidName (name, language) && base.IsValidName (name, sourceLang);
 
169
                }
157
170
        }
158
171
}