public override void ModifyTags(SolutionFolderItem policyParent, Project project, string language, string identifier, string fileName, ref Dictionary <string, string> tags) { //prevent parser breakage from missing tags, which SingleFile only provides for DotNetProject //if ((project as DotNetProject) == null) // throw new InvalidOperationException ("CodeTranslationFileDescriptionTemplate can only be used with a DotNetProject"); base.ModifyTags(policyParent, project, language, identifier, fileName, ref tags); //swap out the escaped keyword identifiers for the target language with the source language //CodeDOM should take care of handling it for the target language System.CodeDom.Compiler.CodeDomProvider provider = GetCodeDomProvider(sourceLang); tags ["EscapedIdentifier"] = provider.CreateEscapedIdentifier((string)tags ["Name"]); //This is a bit hacky doing it here instead of in CreateContent, but need to //substitute all tags in code before language is translated, because language //translation gets confused by unsubstituted substitution tokens. tempSubstitutedContent = StringParserService.Parse(content, tags); }
private static void EscapeKeywords(string identifier, CodeDomProvider codeProvider, StringBuilder sb) { if ((identifier != null) && (identifier.Length != 0)) { int num = 0; while (identifier.EndsWith("[]", StringComparison.Ordinal)) { num++; identifier = identifier.Substring(0, identifier.Length - 2); } if (identifier.Length > 0) { CheckValidIdentifier(identifier); identifier = codeProvider.CreateEscapedIdentifier(identifier); sb.Append(identifier); } for (int i = 0; i < num; i++) { sb.Append("[]"); } } }
static void GenerateAction (CodeTypeReference exportAtt, CodeTypeDeclaration type, IBAction action, CodeDomProvider provider, CodeGeneratorOptions generatorOptions) { if (provider is Microsoft.CSharp.CSharpCodeProvider) { type.Members.Add (new CodeSnippetTypeMember ("[" + exportAtt.BaseType + "(\"" + action.GetObjcFullName () + "\")]")); var sb = new System.Text.StringBuilder (); sb.Append ("partial void "); sb.Append (provider.CreateEscapedIdentifier (action.CliName)); sb.Append (" ("); if (action.Parameters != null) { bool isFirst = true; foreach (var p in action.Parameters) { if (!isFirst) { sb.Append (", "); } else { isFirst = false; } sb.Append (p.CliType); sb.Append (" "); sb.Append (provider.CreateEscapedIdentifier (p.Name)); } } sb.Append (");"); type.Members.Add (new CodeSnippetTypeMember (sb.ToString ())); return; } var m = CreateEventMethod (exportAtt, action); type.Members.Add (m); if (provider.FileExtension == "pas") { m.UserData ["OxygenePartial"] = "YES"; m.UserData ["OxygeneEmpty"] = "YES"; } }
string SanitizeResourceName (CodeDomProvider provider, string name) { if (provider.IsValidIdentifier (name)) return provider.CreateEscapedIdentifier (name); var sb = new StringBuilder (); char ch = name [0]; if (is_identifier_start_character (ch)) sb.Append (ch); else { sb.Append ('_'); if (ch >= '0' && ch <= '9') sb.Append (ch); } for (int i = 1; i < name.Length; i++) { ch = name [i]; if (is_identifier_part_character (ch)) sb.Append (ch); else sb.Append ('_'); } return provider.CreateEscapedIdentifier (sb.ToString ()); }