public XMLEditor(XMLRegelwerk regelwerk, Control zeichnungsSteuerelement)
 {
     this.Regelwerk = regelwerk;
     this._zeichnungsSteuerelement         = zeichnungsSteuerelement;
     this._zeichnungsSteuerelement.Enabled = false;
     this._cursor = new XMLCursor();
     this._cursor.ChangedEvent += this._cursor_ChangedEvent;
     this.MausEventsAnmelden();
     this.TastaturEventsAnmelden(zeichnungsSteuerelement);
     this.InitCursorBlink();
     this.InitScrolling();
 }
Exemplo n.º 2
0
        public bool InsertXMLNode(
            XmlNode node,
            XMLRegelwerk regelwerk,
            bool neueCursorPosAufJedenFallHinterDenEingefuegtenNodeSetzen)
        {
            XmlNode parentNode = this.AktNode.ParentNode;

            switch (this.PosAmNode)
            {
            case XMLCursorPositionen.CursorVorDemNode:
                parentNode.InsertBefore(node, this.AktNode);
                break;

            case XMLCursorPositionen.CursorAufNodeSelbstVorderesTag:
            case XMLCursorPositionen.CursorAufNodeSelbstHinteresTag:
                parentNode.ReplaceChild(node, this.AktNode);
                break;

            case XMLCursorPositionen.CursorInDemLeeremNode:
                this.AktNode.AppendChild(node);
                break;

            case XMLCursorPositionen.CursorInnerhalbDesTextNodes:
                string  text1     = this.AktNode.InnerText.Substring(0, this.PosImTextnode);
                XmlNode textNode1 = (XmlNode)parentNode.OwnerDocument.CreateTextNode(text1);
                string  text2     = this.AktNode.InnerText.Substring(this.PosImTextnode, this.AktNode.InnerText.Length - this.PosImTextnode);
                XmlNode textNode2 = (XmlNode)parentNode.OwnerDocument.CreateTextNode(text2);
                parentNode.ReplaceChild(textNode1, this.AktNode);
                parentNode.InsertAfter(node, textNode1);
                parentNode.InsertAfter(textNode2, node);
                break;

            case XMLCursorPositionen.CursorHinterDemNode:
                parentNode.InsertAfter(node, this.AktNode);
                break;

            default:
                throw new ApplicationException(string.Format("InsertElementAnCursorPos: Unbekannte PosAmNode {0}", (object)this.PosAmNode));
            }
            if (neueCursorPosAufJedenFallHinterDenEingefuegtenNodeSetzen)
            {
                this.CursorSetzen(node, XMLCursorPositionen.CursorHinterDemNode);
            }
            else if (regelwerk.IstSchliessendesTagSichtbar(node))
            {
                this.CursorSetzen(node, XMLCursorPositionen.CursorInDemLeeremNode);
            }
            else
            {
                this.CursorSetzen(node, XMLCursorPositionen.CursorHinterDemNode);
            }
            return(true);
        }
 public ucCategoryXMLEditor()
 {
     this.InitializeComponent();
     this._aimlRegelwerk    = new AimlXmlRegelwerk(AIMLDTD.GetAIMLDTD());
     this._startupRegelwerk = new StartupDatei_XmlRegelwerk(StartupDateiDtd.GetStartupDtd());
     this.XmlEditor         = new XMLEditor(this._aimlRegelwerk, this);
     base.SetStyle(ControlStyles.UserPaint, true);
     base.SetStyle(ControlStyles.DoubleBuffer, true);
     base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
     base.SetStyle(ControlStyles.ResizeRedraw, true);
     base.UpdateStyles();
 }
Exemplo n.º 4
0
        public void TextEinfuegen(string rohText, XMLRegelwerk regelwerk, out XmlNode ersatzNode)
        {
            string text = regelwerk.EinfuegeTextPreProcessing(rohText, this, out ersatzNode);

            if (ersatzNode == null)
            {
                switch (this.PosAmNode)
                {
                case XMLCursorPositionen.CursorAufNodeSelbstVorderesTag:
                case XMLCursorPositionen.CursorAufNodeSelbstHinteresTag:
                    if (regelwerk.IstDiesesTagAnDieserStelleErlaubt("#PCDATA", this))
                    {
                        XmlText xmlText2 = this.AktNode.OwnerDocument.CreateTextNode(text);
                        this.AktNode.ParentNode.ReplaceChild(this.AktNode, xmlText2);
                        this.CursorSetzen(xmlText2, XMLCursorPositionen.CursorHinterDemNode);
                    }
                    throw new ApplicationException(string.Format("TextEinfuegen: unbehandelte CursorPos {0}", this.PosAmNode));

                case XMLCursorPositionen.CursorHinterDemNode:
                    this.TextZwischenZweiNodesEinfuegen(this.AktNode, this.AktNode.NextSibling, text, regelwerk);
                    break;

                case XMLCursorPositionen.CursorVorDemNode:
                    this.TextZwischenZweiNodesEinfuegen(this.AktNode.PreviousSibling, this.AktNode, text, regelwerk);
                    break;

                case XMLCursorPositionen.CursorInDemLeeremNode:
                    if (regelwerk.IstDiesesTagAnDieserStelleErlaubt("#PCDATA", this))
                    {
                        XmlText xmlText = this.AktNode.OwnerDocument.CreateTextNode(text);
                        this.AktNode.AppendChild(xmlText);
                        this.CursorSetzen(xmlText, XMLCursorPositionen.CursorHinterDemNode);
                    }
                    break;

                case XMLCursorPositionen.CursorInnerhalbDesTextNodes:
                {
                    string str  = this.AktNode.InnerText.Substring(0, this.PosImTextnode);
                    string str2 = this.AktNode.InnerText.Substring(this.PosImTextnode, this.AktNode.InnerText.Length - this.PosImTextnode);
                    this.AktNode.InnerText = str + text + str2;
                    this.CursorSetzen(this.AktNode, this.PosAmNode, this.PosImTextnode + text.Length);
                    break;
                }

                default:
                    throw new ApplicationException(string.Format("TextEinfuegen: Unbekannte CursorPos {0}", this.PosAmNode));
                }
            }
        }
Exemplo n.º 5
0
        public void TextEinfuegen(string text, XMLRegelwerk regelwerk)
        {
            XMLCursor xmlCursor = this.Clone();

            xmlCursor.SelektionOptimieren();
            XMLCursorPos neueCursorPosNachLoeschen;
            XMLCursorPos xmlCursorPos = !xmlCursor.SelektionLoeschen(out neueCursorPosNachLoeschen) ? this.StartPos.Clone() : neueCursorPosNachLoeschen;
            XmlNode      ersatzNode   = (XmlNode)null;

            xmlCursorPos.TextEinfuegen(text, regelwerk, out ersatzNode);
            if (ersatzNode != null)
            {
                xmlCursorPos.InsertXMLNode(ersatzNode, regelwerk, false);
            }
            this.BeideCursorPosSetzen(xmlCursorPos.AktNode, xmlCursorPos.PosAmNode, xmlCursorPos.PosImTextnode);
        }
Exemplo n.º 6
0
        public void XMLNodeEinfuegen(XmlNode node, XMLRegelwerk regelwerk, bool neueCursorPosAufJedenFallHinterDenEingefuegtenNodeSetzen)
        {
            XMLCursor xMLCursor = this.Clone();

            xMLCursor.SelektionOptimieren();
            XMLCursorPos xMLCursorPos = default(XMLCursorPos);

            if (xMLCursor.SelektionLoeschen(out xMLCursorPos))
            {
                this.BeideCursorPosSetzen(xMLCursorPos.AktNode, xMLCursorPos.PosAmNode, xMLCursorPos.PosImTextnode);
            }
            if (this._startPos.InsertXMLNode(node, regelwerk, neueCursorPosAufJedenFallHinterDenEingefuegtenNodeSetzen))
            {
                this.EndPos.CursorSetzen(this.StartPos.AktNode, this.StartPos.PosAmNode, this.StartPos.PosImTextnode);
            }
        }
Exemplo n.º 7
0
        public void TextEinfuegen(string text, XMLRegelwerk regelwerk)
        {
            XMLCursor xMLCursor = this.Clone();

            xMLCursor.SelektionOptimieren();
            XMLCursorPos xMLCursorPos  = default(XMLCursorPos);
            XMLCursorPos xMLCursorPos2 = (!xMLCursor.SelektionLoeschen(out xMLCursorPos)) ? this.StartPos.Clone() : xMLCursorPos;
            XmlNode      xmlNode       = null;

            xMLCursorPos2.TextEinfuegen(text, regelwerk, out xmlNode);
            if (xmlNode != null)
            {
                xMLCursorPos2.InsertXMLNode(xmlNode, regelwerk, false);
            }
            this.BeideCursorPosSetzen(xMLCursorPos2.AktNode, xMLCursorPos2.PosAmNode, xMLCursorPos2.PosImTextnode);
        }
Exemplo n.º 8
0
        public void XMLNodeEinfuegen(
            XmlNode node,
            XMLRegelwerk regelwerk,
            bool neueCursorPosAufJedenFallHinterDenEingefuegtenNodeSetzen)
        {
            XMLCursor xmlCursor = this.Clone();

            xmlCursor.SelektionOptimieren();
            XMLCursorPos neueCursorPosNachLoeschen;

            if (xmlCursor.SelektionLoeschen(out neueCursorPosNachLoeschen))
            {
                this.BeideCursorPosSetzen(neueCursorPosNachLoeschen.AktNode, neueCursorPosNachLoeschen.PosAmNode, neueCursorPosNachLoeschen.PosImTextnode);
            }
            if (!this._startPos.InsertXMLNode(node, regelwerk, neueCursorPosAufJedenFallHinterDenEingefuegtenNodeSetzen))
            {
                return;
            }
            this.EndPos.CursorSetzen(this.StartPos.AktNode, this.StartPos.PosAmNode, this.StartPos.PosImTextnode);
        }
Exemplo n.º 9
0
 private void TextZwischenZweiNodesEinfuegen(
     XmlNode nodeVorher,
     XmlNode nodeNachher,
     string text,
     XMLRegelwerk regelwerk)
 {
     if (ToolboxXML.IstTextOderKommentarNode(nodeVorher))
     {
         nodeVorher.InnerText += text;
         this.CursorSetzen(nodeVorher, XMLCursorPositionen.CursorInnerhalbDesTextNodes, nodeVorher.InnerText.Length);
     }
     else if (ToolboxXML.IstTextOderKommentarNode(nodeNachher))
     {
         nodeNachher.InnerText = text + nodeNachher.InnerText;
         this.CursorSetzen(nodeNachher, XMLCursorPositionen.CursorInnerhalbDesTextNodes, text.Length);
     }
     else if (regelwerk.IstDiesesTagAnDieserStelleErlaubt("#PCDATA", this))
     {
         this.InsertXMLNode((XmlNode)this.AktNode.OwnerDocument.CreateTextNode(text), regelwerk, false);
     }
 }
Exemplo n.º 10
0
        public bool MoveRight(XmlNode rootnode, XMLRegelwerk regelwerk)
        {
            XmlNode aktNode = this.AktNode;

            switch (this.PosAmNode)
            {
            case XMLCursorPositionen.CursorAufNodeSelbstVorderesTag:
            case XMLCursorPositionen.CursorAufNodeSelbstHinteresTag:
                this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorHinterDemNode);
                goto IL_0208;

            case XMLCursorPositionen.CursorHinterDemNode:
                if (aktNode.NextSibling != null)
                {
                    this.CursorSetzen(aktNode.NextSibling, XMLCursorPositionen.CursorVorDemNode);
                    this.MoveRight(rootnode, regelwerk);
                    goto IL_0208;
                }
                if (aktNode.ParentNode != rootnode)
                {
                    this.CursorSetzen(aktNode.ParentNode, XMLCursorPositionen.CursorHinterDemNode);
                    if (!regelwerk.IstSchliessendesTagSichtbar(aktNode.ParentNode))
                    {
                        this.MoveRight(rootnode, regelwerk);
                    }
                    goto IL_0208;
                }
                return(false);

            case XMLCursorPositionen.CursorInDemLeeremNode:
                this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorHinterDemNode);
                goto IL_0208;

            case XMLCursorPositionen.CursorVorDemNode:
                if (ToolboxXML.IstTextOderKommentarNode(aktNode))
                {
                    if (ToolboxXML.TextAusTextNodeBereinigt(aktNode).Length > 1)
                    {
                        this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorInnerhalbDesTextNodes, 1);
                    }
                    else
                    {
                        this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorHinterDemNode);
                    }
                }
                else if (aktNode.ChildNodes.Count < 1)
                {
                    if (!regelwerk.IstSchliessendesTagSichtbar(aktNode))
                    {
                        this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorHinterDemNode);
                    }
                    else
                    {
                        this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorInDemLeeremNode);
                    }
                }
                else
                {
                    this.CursorSetzen(aktNode.FirstChild, XMLCursorPositionen.CursorVorDemNode);
                }
                goto IL_0208;

            case XMLCursorPositionen.CursorInnerhalbDesTextNodes:
                if (ToolboxXML.IstTextOderKommentarNode(aktNode))
                {
                    if (ToolboxXML.TextAusTextNodeBereinigt(aktNode).Length > this.PosImTextnode + 1)
                    {
                        this.CursorSetzen(this.AktNode, this.PosAmNode, this.PosImTextnode + 1);
                    }
                    else
                    {
                        this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorHinterDemNode);
                    }
                    goto IL_0208;
                }
                throw new ApplicationException(string.Format("XMLCurorPos.MoveRight: CursorPos ist XMLCursorPositionen.CursorInnerhalbDesTextNodes, es ist aber kein Textnode gewählt, sondern der Node {0}", aktNode.OuterXml));

            default:
            {
                throw new ApplicationException(string.Format("XMLCurorPos.MoveRight: Unbekannte CursorPos {0}", this.PosAmNode));
            }
IL_0208:
                return(true);
            }
        }
Exemplo n.º 11
0
        public bool MoveLeft(XmlNode rootnode, XMLRegelwerk regelwerk)
        {
            XmlNode aktNode = this.AktNode;

            switch (this.PosAmNode)
            {
            case XMLCursorPositionen.CursorVorDemNode:
                if (aktNode == rootnode)
                {
                    return(false);
                }
                if (aktNode.PreviousSibling != null)
                {
                    this.CursorSetzen(aktNode.PreviousSibling, XMLCursorPositionen.CursorHinterDemNode);
                    this.MoveLeft(rootnode, regelwerk);
                    break;
                }
                this.CursorSetzen(aktNode.ParentNode, XMLCursorPositionen.CursorVorDemNode);
                break;

            case XMLCursorPositionen.CursorAufNodeSelbstVorderesTag:
            case XMLCursorPositionen.CursorAufNodeSelbstHinteresTag:
                this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorVorDemNode);
                break;

            case XMLCursorPositionen.CursorInDemLeeremNode:
                this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorVorDemNode);
                break;

            case XMLCursorPositionen.CursorInnerhalbDesTextNodes:
                if (!ToolboxXML.IstTextOderKommentarNode(aktNode))
                {
                    throw new ApplicationException(string.Format("XMLCursorPos.MoveLeft: CursorPos ist XMLCursorPositionen.CursorInnerhalbDesTextNodes, es ist aber kein Textnode gewählt, sondern der Node {0}", (object)aktNode.OuterXml));
                }
                if (this.PosImTextnode > 1)
                {
                    this.CursorSetzen(this.AktNode, this.PosAmNode, this.PosImTextnode - 1);
                    break;
                }
                this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorVorDemNode);
                break;

            case XMLCursorPositionen.CursorHinterDemNode:
                if (ToolboxXML.IstTextOderKommentarNode(aktNode))
                {
                    this.CursorSetzen(aktNode, XMLCursorPositionen.CursorInnerhalbDesTextNodes, Math.Max(0, ToolboxXML.TextAusTextNodeBereinigt(aktNode).Length - 1));
                    break;
                }
                if (aktNode.ChildNodes.Count < 1)
                {
                    if (regelwerk.IstSchliessendesTagSichtbar(aktNode))
                    {
                        this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorInDemLeeremNode);
                    }
                    else
                    {
                        this.CursorSetzen(this.AktNode, XMLCursorPositionen.CursorVorDemNode);
                    }
                }
                else
                {
                    this.CursorSetzen(aktNode.LastChild, XMLCursorPositionen.CursorHinterDemNode);
                }
                break;

            default:
                throw new ApplicationException(string.Format("XMLCursorPos.MoveLeft: Unbekannte CursorPos {0}", (object)this.PosAmNode));
            }
            return(true);
        }