private void ReadDeclarations(XElement?declarations) { if (declarations == null) { return; } foreach (var declarationElement in declarations.Elements()) { var editableAttribute = declarationElement.Attribute("Editable"); var functionElement = CodeSnippet.GetElementWithoutNamespace(declarationElement, "Function"); SnippetFunctionService.TryGetSnippetFunctionInfo(functionElement?.Value, out var functionName, out var functionParam); _tokens.Add(new ExpansionField( CodeSnippet.GetElementInnerText(declarationElement, "ID"), CodeSnippet.GetElementInnerText(declarationElement, "Default") ?? " ", functionName, functionParam, editableAttribute == null || string.Equals(editableAttribute.Value, "true", StringComparison.Ordinal) || string.Equals(editableAttribute.Value, "1", StringComparison.Ordinal))); } }
public ExpansionTemplate(CodeSnippet snippet) { var snippetElement = CodeSnippet.GetElementWithoutNamespace(snippet.CodeSnippetElement, "Snippet"); var declarationsElement = CodeSnippet.GetElementWithoutNamespace(snippetElement, "Declarations"); ReadDeclarations(declarationsElement); var code = CodeSnippet.GetElementWithoutNamespace(snippetElement, "Code"); if (code == null) { throw new InvalidOperationException("snippet is missing code element."); } _code = Regex.Replace(code.Value, "(?<!\r)\n", "\r\n"); var delimiterAttribute = code.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("Delimiter", StringComparison.OrdinalIgnoreCase)); if (delimiterAttribute != null) { _delimiter = delimiterAttribute.Value; } }