Ejemplo n.º 1
0
Archivo: Sr.cs Proyecto: rlebowitz/ai
        public override string ProcessChange()
        {
            if (Template.Name.ToLower() == "sr")
            {
                XmlNode starNode = GetNode("<star/>");
                Star recursiveStar = new Star(Query, Request, starNode);
                string starContent = recursiveStar.ProcessChange();

                XmlNode sraiNode = GetNode("<srai>" + starContent + "</srai>");
                Srai sraiHandler = new Srai(ChatBot, User, Request, sraiNode);
                return sraiHandler.ProcessChange();
            }
            return string.Empty;
        }
Ejemplo n.º 2
0
 public void TestSRAIWithValidInput()
 {
     var testNode = StaticHelpers.GetNode("<srai>sraisucceeded</srai>");
     _tagHandler = new Srai(_chatBot, _user, _request, testNode);
     Assert.AreEqual("Test passed.", _tagHandler.ProcessChange());
 }
Ejemplo n.º 3
0
 public void TestSRAIRecursion()
 {
     var testNode = StaticHelpers.GetNode("<srai>srainested</srai>");
     _tagHandler = new Srai(_chatBot, _user, _request, testNode);
     Assert.AreEqual("Test passed.", _tagHandler.ProcessChange());
 }
Ejemplo n.º 4
0
 public void TestSRAIEmpty()
 {
     var testNode = StaticHelpers.GetNode("<srai/>");
     _tagHandler = new Srai(_chatBot, _user, _request, testNode);
     Assert.AreEqual("", _tagHandler.ProcessChange());
 }
Ejemplo n.º 5
0
 /// <summary>
 ///     Recursively evaluates the template nodes returned from the ChatBot
 /// </summary>
 /// <param name="node">the node to evaluate</param>
 /// <param name="query">the query that produced this node</param>
 /// <param name="request">the request from the user</param>
 /// <param name="user">the user who originated the request</param>
 /// <returns>the output string</returns>
 private string ProcessNode(XmlNode node, SubQuery query, Request request, User user)
 {
     // process the node
     var tagName = node.Name.ToLower();
     if (tagName == "template")
     {
         var templateResult = new StringBuilder();
         if (node.HasChildNodes)
         {
             // recursively check
             foreach (XmlNode childNode in node.ChildNodes)
             {
                 templateResult.Append(ProcessNode(childNode, query, request, user));
             }
         }
         return templateResult.ToString();
     }
     AIMLTagHandler tagHandler = null;
     switch (tagName)
     {
         case "bot":
             tagHandler = new Bot(node);
             break;
         case "condition":
             tagHandler = new Condition(user, node);
             break;
         case "date":
             tagHandler = new Date(node);
             break;
         case "formal":
             tagHandler = new Formal(node);
             break;
         case "gender":
             tagHandler = new AIMLTagHandlers.Gender(query, request, node);
             break;
         case "get":
             tagHandler = new Get(user, node);
             break;
         case "gossip":
             tagHandler = new Gossip(user, node);
             break;
         case "id":
             tagHandler = new Id(user, node);
             break;
         case "input":
             tagHandler = new Input(user, request, node);
             break;
         case "javascript":
             tagHandler = new Javascript(node);
             break;
         case "learn":
             tagHandler = new Learn(node);
             break;
         case "lowercase":
             tagHandler = new Lowercase(node);
             break;
         case "person":
             tagHandler = new Person(query, request, node);
             break;
         case "person2":
             tagHandler = new Person2(query, request, node);
             break;
         case "random":
             tagHandler = new Random(node);
             break;
         case "sentence":
             tagHandler = new Sentence(query, request, node);
             break;
         case "set":
             tagHandler = new Set(user, node);
             break;
         case "size":
             tagHandler = new Size(node);
             break;
         case "sr":
             tagHandler = new Sr(this, user, query, request, node);
             break;
         case "srai":
             tagHandler = new Srai(this, user, request, node);
             break;
         case "star":
             tagHandler = new Star(query, request, node);
             break;
         case "system":
             tagHandler = new SystemTag(node);
             break;
         case "that":
             tagHandler = new That(user, request, node);
             break;
         case "thatstar":
             tagHandler = new ThatStar(query, request, node);
             break;
         case "think":
             tagHandler = new Think(node);
             break;
         case "topicstar":
             tagHandler = new Topicstar(query, request, node);
             break;
         case "uppercase":
             tagHandler = new Uppercase(node);
             break;
         case "version":
             tagHandler = new Version(node);
             break;
         default:
             Log.ErrorFormat("Unknown AIML tag: {0}", tagName);
             break;
     }
     if (Equals(null, tagHandler))
     {
         return node.InnerText;
     }
     if (tagHandler.IsRecursive)
     {
         if (node.HasChildNodes)
         {
             // recursively check
             foreach (XmlNode childNode in node.ChildNodes)
             {
                 if (childNode.NodeType != XmlNodeType.Text)
                 {
                     childNode.InnerXml = ProcessNode(childNode, query, request, user);
                 }
             }
         }
         return tagHandler.ProcessChange();
     }
     var resultNodeInnerXML = tagHandler.ProcessChange();
     var resultNode = AIMLTagHandler.GetNode("<node>" + resultNodeInnerXML + "</node>");
     if (resultNode.HasChildNodes)
     {
         var recursiveResult = new StringBuilder();
         // recursively check
         foreach (XmlNode childNode in resultNode.ChildNodes)
         {
             recursiveResult.Append(ProcessNode(childNode, query, request, user));
         }
         return recursiveResult.ToString();
     }
     return resultNode.InnerXml;
 }