protected LanguageDefinition()
 {
     Modifiers = new ModifierDefinitionCollection();
     Types     = new TypeDefinitionCollection();
     Keywords  = new KeywordDefinitionCollection();
 }
Exemple #2
0
        private List <Snippet> GenerateSnippetsCore(SnippetDirectory directory, bool isDevelopment = false)
        {
            var snippets = new List <Snippet>();

            snippets.AddRange(EnumerateSnippets(directory.Path));

#if DEBUG
            foreach (Snippet snippet in snippets)
            {
                foreach (string keyword in snippet.Keywords)
                {
                    if (keyword.StartsWith(KnownTags.MetaPrefix + KnownTags.GeneratePrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        Debug.Fail(keyword + "\r\n" + snippet.FilePath);
                        break;
                    }
                }
            }
#endif

            snippets.AddRange(SnippetGenerator.GenerateAlternativeShortcuts(snippets));

            if (!isDevelopment &&
                directory.HasTag(KnownTags.GenerateXmlSnippets))
            {
                switch (directory.Language)
                {
                case Language.Xml:
                case Language.Xaml:
                case Language.Html:
                case Language.Markdown:
                {
                    snippets.AddRange(XmlSnippetGenerator.GenerateSnippets(directory.Language));
                    break;
                }
                }
            }

            KeywordDefinitionCollection keywords = LanguageDefinition.GetKeywords(directory.Language);

            if (keywords != null)
            {
                foreach (KeywordDefinition keyword in keywords)
                {
                    if (keyword.IsDevelopment == isDevelopment)
                    {
                        Snippet snippet = keyword.ToSnippet();
                        snippet.Language = directory.Language;
                        snippets.Add(snippet);
                    }
                }
            }

            string autoGenerationPath = Path.Combine(directory.Path, KnownNames.AutoGeneration);

            if (Directory.Exists(autoGenerationPath))
            {
                SnippetDirectory autoGenerationDirectory = directory.WithPath(autoGenerationPath);

                SnippetGenerator generator = CreateSnippetGenerator(autoGenerationDirectory);

                snippets.AddRange(generator.GenerateSnippets(autoGenerationDirectory.Path));
            }

            return(snippets);
        }