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(); }
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(); }
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)); } } }
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); }
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); } }
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); }
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); }
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); } }
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); } }
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); }