Пример #1
0
        private Node readArgumentUnit(XmlNodeList xnl, Node.ArgumentNodeType nt)
        {
            //	An argument unit, composed of a proposition (a conclusion)
            //	followed, optionally, by a single refutation, followed,
            //	optionally, by premises arranged in either convergent or
            //	linked structures.
            //	<!ELEMENT AU (PROP, REFUTATION?, (CA | LA)*)>

            XmlNode xn;
            Node    n = new Node();

            n.nodeType = nt;
            xn         = (XmlNode)xnl[0];
            while (xn != null)
            {
                if (xn.Name.Equals("PROP"))
                {
                    n.EditorText = this.getAnyTag("PROPTEXT", xn.ChildNodes[0]);
                }
                else if (xn.Name.Equals("REFUTATION"))
                {
                    readRefutation(xn.ChildNodes, n);
                }
                else if (xn.Name.Equals("CA"))
                {
                    readConvergentArgument(xn.ChildNodes, n);
                }
                else if (xn.Name.Equals("LA"))
                {
                    readLinkedArgument(xn.ChildNodes, n);
                }
                xn = xn.NextSibling;
            }
            return(n);
        }
Пример #2
0
        /// <summary>
        /// Add a node to the node selected in the tree
        /// </summary>
        /// <param name="nodeType">Type of node (reason, objection or helper</param>
        /// <param name="text">Text for the node</param>
        public void addNodeToTree(Node.ArgumentNodeType nodeType, string text)
        {
            TreeNode tn;

            tn = theTV.SelectedNode;
            addNodeToTree(tn, nodeType, text);
        }
Пример #3
0
        private void addNodeToTree(TreeNode where, Node.ArgumentNodeType nt, string text)
        {
            TreeNode newtn;
            Node     n, newNode;

            System.Diagnostics.Debug.Assert(nt != Node.ArgumentNodeType.premise, "Cannot add a premise");

            if (where == null)
            {
                return;
            }
            n = (Node) where.Tag;                       // get node
            if (n.nodeType == Node.ArgumentNodeType.helper & nt == Node.ArgumentNodeType.helper)
            {
                MessageBox.Show("Sorry, You cannot have a helper for a helper");                  // Duplicated
                return;
            }
            newtn = new TreeNode(text);
            where.Nodes.Add(newtn);
            newNode            = new Node();
            newNode.EditorText = text;
            newNode.nodeType   = nt;
            n.addKid(newNode, true);             // allow the adding of an empty node
            newtn.Tag = newNode;
            setImageIndex(newtn, newNode);
            // newtn.EnsureVisible();
            theTV.SelectedNode = newtn;
        }
Пример #4
0
        /// <summary>
        /// Can the current node be changed to the specified node type?
        /// </summary>
        /// <param name="newNodeType"></param>
        /// <returns></returns>
        private bool canChangeNode(Node.ArgumentNodeType newNodeType)
        {
            bool b;

            b = canChangeNodeReason(newNodeType) == null;
            return(b);
        }
Пример #5
0
        /// <summary>
        /// Change current node type
        /// </summary>
        /// <param name="newNodeType"></param>
        /// <returns></returns>
        public bool changeNodeto(Node.ArgumentNodeType newNodeType)
        {
            if (!this.canChangeNode(newNodeType))
            {
                return(false);
            }
            Node n = getSelectedNode(this.theTV);

            n.nodeType = newNodeType;
            setImageIndex(theTV.SelectedNode, n);
            modifiedCount++;
            return(true);
        }
Пример #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="newNodeType"></param>
        /// <returns>null if node can be changed</returns>
        public string canChangeNodeReason(Node.ArgumentNodeType newNodeType)
        {
            int    f;
            Node   kn;
            string returnReason;

            returnReason = I18N.getString("ChangeNode-Null", "Node not changed");
            Node n = getSelectedNode(this.theTV);

            if (n == null)
            {
                return(returnReason);
            }

            if (n.nodeType == newNodeType)
            {
                return(returnReason);                        // Not changed
            }
            if (n.nodeType == Node.ArgumentNodeType.premise) // Premise not changed so easily
            {
                returnReason = I18N.getString("ChangeNode-MainPremise", "Cannot change Main Premise");
                return(returnReason);
            }
            if (newNodeType != Node.ArgumentNodeType.helper)          // only keep checking if changing to a helper
            {
                returnReason = "";
                return(null);
            }
            kn = (Node)this.theTV.SelectedNode.Parent.Tag;               // get parent node
            if (kn.nodeType == Node.ArgumentNodeType.helper)             // is it a helper?
            {
                return(I18N.getString("ChangeNode-HelperHelper", "Cannot have a Helper for a Helper"));
            }
            if (n.countKids() == 0)           // only keep checking
            {
                return(null);
            }
            // if any kids are helpers

            for (f = 0; f < n.countKids(); f++)
            {
                kn = (Node)n.kids[f];
                if (kn.nodeType == Node.ArgumentNodeType.helper)
                {
                    return(I18N.getString("ChangeNode-HelperHelper", "Cannot have a Helper for a Helper"));
                }
                ;
            }
            return(null);
        }
Пример #7
0
        // manipulation routines

        /// <summary>
        /// Adds a Node (element) to the argument
        /// </summary>
        /// <param name="argType">Node type</param>
        /// <param name="text">Element text</param>
        /// <param name="parent"></param>
        /// <returns></returns>
        public Node addNode(Node.ArgumentNodeType argType, string text, Node parent)
        {
            Node n = new Node();

            n.EditorText = text;
            n.nodeType   = argType;
            n.fromNode   = parent;
            if (parent == null)
            {
                System.Diagnostics.Debug.Assert(argType == Node.ArgumentNodeType.premise |
                                                argType == Node.ArgumentNodeType.unknown,
                                                "Incorrect node type given as " + argType.ToString());
                head = n;
                return(n);
            }
            parent.addKid(n);
            return(n);
        }
Пример #8
0
        /// <summary>
        /// Writes the argument to a TextWriter file.
        /// </summary>
        /// <param name="file">TextWriter file</param>
        /// <param name="n">Top Argument Node</param>
        /// <param name="addTags">Add tags used in XSL Transforms</param>
        /// <param name="makePremise"></param>
        private void writeArgumentXML(System.IO.TextWriter file, Node n, bool makePremise, bool addTags)
        {
            bool saveSubArgument = false;

            Node.ArgumentNodeType temp = Node.ArgumentNodeType.unknown;

            Options.OptionsData d = Options.OptionsData.Instance;

            if (n == null)
            {
                n = findHead();
            }
            if (addTags)
            {
                referenceTree();                  // Reference tree for <ref> tag
            }
            if (makePremise & (n.nodeType != Node.ArgumentNodeType.premise))
            {
                saveSubArgument = true;
                temp            = n.nodeType;
                n.nodeType      = Node.ArgumentNodeType.premise;
            }

            file.WriteLine("<argument>");
            if (!(author.Equals("") & d.Author.Equals("")))           // Add author if defined
            {
                file.Write("<author>");
                if (author.Equals(""))                 // does the argument not have an author
                {
                    file.Write(d.Author);
                }
                else
                {
                    file.Write(author);
                }
                file.WriteLine("</author>");
            }
            if (creationDateDefined)
            {
                file.Write("<created>");
                file.Write(DateTimetoString(creationDate));
                file.WriteLine("</created>");
            }
            file.Write("<modified>");
            file.Write(DateTimetoString(this.modifiedDate));
            file.WriteLine("</modified>");

            if (addTags)             // add tags used for XSLT
            {
                // Title
                file.Write("<title>");
                file.Write(Title);
                file.WriteLine("</title>");
                // Todays date - difficult to format with XSLT
                file.Write("<day>");
                file.Write(DateTime.Today.DayOfWeek.ToString());
                file.Write("</day>");
                file.Write("<dayNum>");
                file.Write(DateTime.Today.Day.ToString());
                file.Write("</dayNum>");
                file.Write("<month>");
                file.Write(DateTime.Today.Month.ToString());
                file.Write("</month>");
                file.Write("<year>");
                file.Write(DateTime.Today.Year.ToString());
                file.Write("</year>");

                file.Write("<shortDate>");
                file.Write(DateTime.Today.ToShortDateString());
                file.Write("</shortDate>");
                file.Write("<shortTime>");
                file.Write(DateTime.Now.ToShortTimeString());
                file.Write("</shortTime>");

                file.Write("<longDate>");
                file.Write(DateTime.Today.ToLongDateString());
                file.Write("</longDate>");
                file.Write("<longTime>");
                file.Write(DateTime.Now.ToLongTimeString());
                file.Write("</longTime>");
            }
            writeNode(file, n, addTags);
            file.WriteLine("</argument>");
            file.Close();
            if (saveSubArgument)
            {
                n.nodeType = temp;
            }
        }