protected override Snippet PostProcess(Snippet snippet)
        {
            LiteralCollection literals = snippet.Literals;

            Literal typeLiteral = literals[LiteralIdentifiers.Type];

            if (typeLiteral != null)
            {
                if (snippet.HasTag(KnownTags.GenerateVoidType))
                {
                    typeLiteral.DefaultValue = "void";
                }
                else
                {
                    typeLiteral.DefaultValue = "T";
                }
            }

            base.PostProcess(snippet);

            return(snippet);
        }
Exemplo n.º 2
0
        private static string GetTextMateBody(Snippet snippet)
        {
            snippet = (Snippet)snippet.Clone();

            snippet.RemoveLiteralAndReplacePlaceholders(XmlSnippetGenerator.CDataIdentifier, "]]>");

            LiteralCollection literals = snippet.Literals;

            string s = snippet.CodeText;

            var sb = new StringBuilder(s.Length);

            int pos = 0;

            PlaceholderCollection placeholders = snippet.Code.Placeholders;

            Dictionary <Literal, int> literalIndexes = literals
                                                       .OrderBy(f => FindMinIndex(f, placeholders))
                                                       .Select((literal, i) => new { Literal = literal, Index = i })
                                                       .ToDictionary(f => f.Literal, f => f.Index + 1);

            var processedIds = new List <string>();

            foreach (Placeholder placeholder in placeholders.OrderBy(f => f.Index))
            {
                sb.Append(s, pos, placeholder.Index - 1 - pos);

                if (placeholder.IsEndPlaceholder)
                {
                    sb.Append("${0}");
                }
                else if (placeholder.IsSelectedPlaceholder)
                {
                    sb.Append("${TM_SELECTED_TEXT}");
                }
                else
                {
                    string id = placeholder.Identifier;

                    Literal literal = literals[id];

                    sb.Append("${");
                    sb.Append(literalIndexes[literal]);

                    if (!processedIds.Contains(id))
                    {
                        sb.Append(":");
                        sb.Append(literal.DefaultValue);
                        processedIds.Add(id);
                    }

                    sb.Append("}");
                }

                pos = placeholder.EndIndex + 1;
            }

            sb.Append(s, pos, s.Length - pos);

            return(sb.ToString());
        }
        protected override IEnumerable <Snippet> PostProcess(IEnumerable <Snippet> snippets)
        {
            foreach (Snippet snippet in base.PostProcess(snippets))
            {
                if (snippet.HasTag(KnownTags.ExcludeFromVisualStudioCode))
                {
                    continue;
                }

                LiteralCollection literals = snippet.Literals;

                for (int i = literals.Count - 1; i >= 0; i--)
                {
                    Literal literal = literals[i];

                    if (!literal.IsEditable &&
                        !string.IsNullOrEmpty(literal.Function))
                    {
                        literal.IsEditable = true;
                        literal.Function   = null;
                    }
                }

                if (snippet.HasTag(KnownTags.TitleStartsWithShortcut))
                {
                    string shortcut = Regex.Match(snippet.Title, @"^\S+\s+").Value;

                    snippet.Title = snippet.Title.Substring(shortcut.Length);

                    shortcut = shortcut.TrimEnd();

                    if (shortcut != "-")
                    {
                        if (snippet.Shortcut.Last() != '_')
                        {
                            snippet.Shortcut += "_";
                        }

                        snippet.Shortcut += shortcut.TrimEnd();
                    }

                    snippet.RemoveTag(KnownTags.TitleStartsWithShortcut);
                }

                if (snippet.HasTag(KnownTags.NonUniqueShortcut))
                {
                    if (snippet.TryGetTag(KnownTags.ShortcutSuffix, out TagInfo info))
                    {
                        if (snippet.Shortcut.Last() != '_')
                        {
                            snippet.Shortcut += "_";
                        }

                        snippet.Shortcut += info.Value;

                        snippet.Keywords.RemoveAt(info.KeywordIndex);

                        snippet.AddTag(KnownTags.ExcludeFromReadme);
                    }

                    snippet.RemoveTag(KnownTags.NonUniqueShortcut);
                }

                yield return(snippet);
            }
        }