コード例 #1
0
ファイル: AbstractNodeVisitor.cs プロジェクト: Eilon/spark
 public void Accept(Node node)
 {
     if (node is TextNode)
         Visit((TextNode)node);
     else if (node is EntityNode)
         Visit((EntityNode)node);
     else if (node is ExpressionNode)
         Visit((ExpressionNode)node);
     else if (node is ElementNode)
         Visit((ElementNode)node);
     else if (node is AttributeNode)
         Visit((AttributeNode)node);
     else if (node is EndElementNode)
         Visit((EndElementNode)node);
     else if (node is DoctypeNode)
         Visit((DoctypeNode)node);
     else if (node is CommentNode)
         Visit((CommentNode)node);
     else if (node is SpecialNode)
         Visit((SpecialNode)node);
     else if (node is ExtensionNode)
         Visit((ExtensionNode)node);
     else if (node is StatementNode)
         Visit((StatementNode)node);
     else if (node is ConditionNode)
         Visit((ConditionNode)node);
     else if (node is XMLDeclNode)
         Visit((XMLDeclNode) node);
     else if (node is ProcessingInstructionNode)
         Visit((ProcessingInstructionNode)node);
     else if (node is IndentationNode)
         Visit((IndentationNode)node);
     else
         throw new ArgumentException(string.Format("Unknown node type {0}", node.GetType()), "node");
 }
コード例 #2
0
ファイル: SparkSyntax.cs プロジェクト: rsmolnikov/spark
 public bool IsSparkElementNode(Node inputNode, out Node sparkNode)
 {
     var visitor = new SpecialNodeVisitor(new VisitorContext());
     visitor.Accept(inputNode);
     sparkNode = visitor.Nodes.Count > 0 ? visitor.Nodes[0] : null;
     return sparkNode != null && sparkNode is SpecialNode;
 }
コード例 #3
0
 public void CallVisitorToProcessNodes()
 {
     var nodes = new Node[] { new ElementNode("hello", new AttributeNode[0], true) };
     _visitor.Accept(nodes);
     Assert.That(_visitor.Nodes.Count, Is.EqualTo(1));
     Assert.That(_visitor.Nodes[0], Is.SameAs(nodes[0]));
 }
コード例 #4
0
		protected static void AddAttribute(ElementNode elementNode, string attributeName, Node childNode)
		{
			elementNode.RemoveAttributesByName(attributeName);
			elementNode.Attributes.Add(new AttributeNode(attributeName, new List<Node>
			                                                            	{
			                                                            		childNode
			                                                            	}));
		}
コード例 #5
0
 public static INode CreateWrapper(Node node)
 {
     if (node is ElementNode)
     {
         return new SparkElementWrapper((ElementNode)node);
     }
     if (node is AttributeNode)
     {
         return new SparkAttributeWrapper((AttributeNode)node);
     }
     return new UnrecognisedSparkNodeWrapper(node);
 }
コード例 #6
0
ファイル: SparkSyntax.cs プロジェクト: aloker/spark
 public static bool IsSpecialNode(Node currentNode, out Node sparkNode)
 {
     IList<Node> resultNodes = null;
     if (currentNode != null)
         foreach (var visitor in BuildNodeVisitors(new VisitorContext()))
         {
             visitor.Accept(currentNode);
             resultNodes = visitor.Nodes;
         }
     sparkNode = resultNodes != null && resultNodes.Count > 0 ? resultNodes[0] : null;
     return sparkNode != null && sparkNode is SpecialNode;
 }
コード例 #7
0
ファイル: ChunkBuilderVisitor.cs プロジェクト: otac0n/spark
        private Position LocateEnd(Node expressionNode)
        {
            Paint<Node> paint;
            Node scan = expressionNode;
            while (scan != null)
            {
                if (_nodePaint.TryGetValue(scan, out paint))
                    return paint.End;
                scan = scan.OriginalNode;
            }

            return null;
        }
コード例 #8
0
 private List<Node> SetNodeNameAndValue(ElementNode elementNode, Node valueNode, Node nameNode, IList<Node> body, AttributeNode originalForAttrib)
 {
     List<Node> result = new List<Node>();
     if(elementNode.IsTag("textarea"))
     {
         if (valueNode != null)
         {
             elementNode.IsEmptyElement = false;
             body.Add(valueNode);
         }
     }
     else
     {
         string inputType = elementNode.GetAttributeValue("type");
         switch (inputType.ToUpper())
         {
             case "CHECKBOX":
                 elementNode.Attributes.Add(new AttributeNode("value", "true"));
                 // DODGY sorry will figure something decent out soon
                 AddCheckedAttribute(elementNode, originalForAttrib);
                 break;
             default:
                 if (valueNode != null)
                     elementNode.Attributes.Add(new AttributeNode("value", new List<Node>()
                                                        	{
                                                        		valueNode
                                                        	}));
                 break;
         }
     }
     elementNode.Attributes.Add(new AttributeNode("name", new List<Node>()
                                                   	{
                                                   		nameNode
                                                   	}));
     return result;
 }
コード例 #9
0
 private void ThenRetrievedAttributeShouldWrap(Node attributeNode)
 {
     Context.GetAttributeResult.ShouldNotBeNull();
     Context.GetAttributeResult.Unwrap().ShouldEqual(attributeNode);
 }
コード例 #10
0
 private IEnumerable<Completion> GetForSpecialNode(Node specialNode)
 {
     var knownCompletions = new List<Completion>();
     var knownAttributes = GetKnownAttributesForSpecialNode((SpecialNode)specialNode);
     knownAttributes.ForEach(attribute => knownCompletions.Add(
         new Completion(
             attribute,
             GetInsertionTextForContext(attribute),
             String.Format("'{0}' attribute for '{1}' element", attribute, ((SpecialNode)specialNode).Element.Name),
             GetIcon(Constants.ICON_SparkAttribute), null)));
     return knownCompletions;
 }
コード例 #11
0
ファイル: SpecialNodeVisitor.cs プロジェクト: otac0n/spark
 private void Add(Node node)
 {
     Nodes.Add(node);
 }
コード例 #12
0
ファイル: CompletionSource.cs プロジェクト: rsmolnikov/spark
        private CompletionSet GetCompletionSetFor(Node node)
        {
            char currentCharacter = _textBuffer.CurrentSnapshot[_triggerPoint - 1];

            switch (currentCharacter)
            {
                case '<':
                    return SparkCompletionSetFactory.Create<SparkElementCompletionSet>(_viewExplorer, _trackingSpan);
                case '"':
                    return SparkCompletionSetFactory.Create<SparkAttributeCompletionSet>(_viewExplorer, _trackingSpan);
                default:
                    break;
            }

            if (node is ElementNode)
                return SparkCompletionSetFactory.Create<SparkElementCompletionSet>(_viewExplorer, _trackingSpan);
            if (node is AttributeNode)
                return SparkCompletionSetFactory.Create<SparkAttributeCompletionSet>(_viewExplorer, _trackingSpan);
            return null;
        }
コード例 #13
0
 public void Accept(Node node)
 {
     _nodes.Add(node);
 }
コード例 #14
0
 private void CodeExpressionResultShouldWrap(Node node)
 {
     Context.AddCodeExpressionNodeResult.Unwrap().ShouldEqual(node);
 }
コード例 #15
0
 private bool TryEvaluateSparkSyntax(int caretPosition, out Node sparkNode)
 {
     var sparkSyntax = new SparkSyntax();
     var currentNode = sparkSyntax.ParseNode(_textView.TextBuffer.CurrentSnapshot.GetText(), caretPosition);
     sparkNode = null;
     return _projectExplorer.IsCurrentDocumentASparkFile()
         ? sparkSyntax.IsSparkElementNode(currentNode, out sparkNode)
         : false;
 }