Пример #1
0
        public Line NewLine(Line line, bool after)
        {
            if (_lstLineText != null && _lstLineText.Contains(line))
            {
                int iIndex = _lstLineText.FindIndex(delegate(Line ln)
                {
                    if (ln == line)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
                if (iIndex > -1)
                {
                    Line newLine = new Line(this);
                    newLine.AddSegment(new LineSegment(SegType.Text, ""));
                    if (after)
                    {
                        _lstLineText.Insert(iIndex + 1, newLine);
                    }
                    else
                    {
                        _lstLineText.Insert(iIndex, newLine);
                    }

                    return(newLine);
                }
            }
            else if ((line == _lineFirst && _lineLast == null) || (line != _lineFirst && _lineLast != null && line == _lineLast))
            {
                //Line newLine = new Line(this);
                if (this.Parent != null)
                {
                    VXmlNode node = this.Parent.AddChildNode();
                    if (node != null)
                    {
                        return(node.FirstLine);
                    }
                }
                else
                {
                    VXmlNode nodeRoot = new VXmlNode("", Document);
                    nodeRoot.Layer = 0;
                    nodeRoot.CreateTextLine();

                    Document.NodeRoot = nodeRoot;

                    return(nodeRoot.FirstLine);
                }
            }

            return(null);
        }
Пример #2
0
        public virtual void Init(System.Xml.XmlNode node)
        {
            try
            {
                Name = node.Name;
                foreach (System.Xml.XmlAttribute xmlattr in node.Attributes)
                {
                    VXmlAttribute attr = new VXmlAttribute(this);
                    attr.Name  = xmlattr.Name;
                    attr.Value = xmlattr.Value;
                }

                foreach (System.Xml.XmlNode xmlNode in node.ChildNodes)
                {
                    if (xmlNode.NodeType == System.Xml.XmlNodeType.Text)
                    {
                        this.Value = (xmlNode as System.Xml.XmlText).Value;
                    }
                    else
                    {
                        VXmlNode nodeChild = null;
                        switch (xmlNode.NodeType)
                        {
                        case System.Xml.XmlNodeType.Comment:
                            nodeChild       = new VXmlComment(Document);
                            nodeChild.Layer = Layer + 1;
                            nodeChild.Init(xmlNode);
                            break;

                        case System.Xml.XmlNodeType.CDATA:
                            nodeChild       = new VXmlCDataSection(Document);
                            nodeChild.Layer = Layer + 1;
                            nodeChild.Init(xmlNode);
                            break;

                        default:
                            nodeChild       = new VXmlNode(Document);
                            nodeChild.Layer = Layer + 1;
                            nodeChild.Init(xmlNode);
                            break;
                        }

                        //nodeChild.Layer = Layer + 1;
                        nodeChild.Parent = this;
                        _lstChildNode.Add(nodeChild);
                    }
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + node.OuterXml);
            }


            CreateTextLine();
        }
Пример #3
0
        /// <summary>
        /// 添加子节点
        /// </summary>
        public VXmlNode InsertChildNode(int index)
        {
            VXmlNode nodeChild = null;

            nodeChild       = new VXmlNode(Document);
            nodeChild.Layer = Layer + 1;

            nodeChild.Parent = this;

            _lstChildNode.Insert(index, nodeChild);

            return(nodeChild);
        }
Пример #4
0
        public VXmlNode AddChildNode(string name = "")
        {
            VXmlNode nodeChild = null;

            nodeChild       = new VXmlNode(name, Document);
            nodeChild.Layer = Layer + 1;

            nodeChild.Parent = this;

            nodeChild.CreateTextLine();
            _lstChildNode.Add(nodeChild);

            return(nodeChild);
        }
Пример #5
0
        public virtual void AddChildNode(System.Xml.XmlNode node)
        {
            try
            {
                VXmlNode childNode = new VXmlNode(Document);

                childNode.Init(node);
                this._lstChildNode.Add(childNode);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + node.OuterXml);
            }
        }
Пример #6
0
        public void LoadXml(string xml)
        {
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

            try
            {
                doc.LoadXml(xml);
                XmlHeader = new VXmlHeader(this, doc.FirstChild);

                NodeRoot = new VXmlNode(this);
                NodeRoot.Init(doc.DocumentElement);

                m_sFile = "";

                NCalc = true;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("读取XML字符串失败,请确认xml字符串是否正确。\n" + ex.Message);
            }
        }
Пример #7
0
        public void InsertXml(string xml)
        {
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

            try
            {
                doc.LoadXml(xml);

                if (NodeRoot == null)
                {
                    NodeRoot = new VXmlNode(this);

                    NodeRoot.Init(doc.DocumentElement);
                }
                else if (_editor.Caret.Line > 1)
                {
                    Line line = this.GetLineByLineCount(_editor.Caret.Line);
                    if (line.Node != null)
                    {
                        if (line == line.Node.FirstLine)
                        {
                            line.Node.Init(doc.DocumentElement);
                        }
                        else
                        {
                            VXmlNode node = line.Node;
                            node.AddChildNode(doc.DocumentElement);
                        }
                    }
                }

                NCalc = true;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("读取XML字符串失败,请确认xml字符串是否正确。\n" + ex.Message);
            }
        }
Пример #8
0
        public void Load(string file)
        {
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

            try
            {
                _bookmarkManager.Clear();

                doc.Load(file);
                XmlHeader = new VXmlHeader(this, doc.FirstChild);

                NodeRoot = new VXmlNode(this);
                NodeRoot.Init(doc.DocumentElement);

                m_sFile = file;

                NCalc = true;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("打开XML文件失败,请确认文件是否正确。\n" + ex.Message);
            }
        }
Пример #9
0
 public VXmlAttribute(VXmlNode node)
 {
     Node = node;
     node.Attributes.Add(this);
 }
Пример #10
0
        /// <summary>
        /// 在当前行下插入新行
        /// </summary>
        public Line InsertLine(Line line, ref int caretCol)
        {
            Line newLine = null;

            if (_lstLineText != null && _lstLineText.Contains(line))
            {
                newLine = new Line(this);
                int index = _lstLineText.IndexOf(line);
                _lstLineText.Insert(index + 1, newLine);
            }
            else if (this is VXmlHeader)
            {
                if (Document.NodeRoot == null)
                {
                    VXmlNode nodeRoot = new VXmlNode("", Document);
                    nodeRoot.Layer = 0;
                    nodeRoot.CreateTextLine();

                    Document.NodeRoot = nodeRoot;

                    return(nodeRoot.FirstLine);
                }
                return(Document.NodeRoot.FirstLine);
            }
            else if (FirstLine == line)
            {
                if (_lstLineText == null)
                {
                    newLine      = new Line(this);
                    _lstLineText = new List <Line>();
                    _lstLineText.Add(newLine);
                }
                else
                {
                    newLine = new Line(this);
                    _lstLineText.Insert(0, newLine);
                }
            }
            if (newLine == null)
            {
                return(newLine);
            }

            List <LineSegment> segmentList = new List <LineSegment>();

            foreach (LineSegment seg in line.Segments)
            {
                if (seg.SegType == SegType.Space)
                {
                    segmentList.Add(seg);
                    caretCol += 1;
                }
                else if (seg.SegType == SegType.Tab)
                {
                    segmentList.Add(seg);
                    caretCol += 4;
                }
                else
                {
                    newLine.AddSegment(segmentList);
                    return(newLine);
                }
            }

            return(newLine);
        }