private void ProcessXmlBlock(XmlBlock xmlBlock, CodeContext parentContext) { var context = new CodeContext( xmlBlock.Name.Strip(), Split(xmlBlock.Tags), xmlBlock.Syntax.Strip(), xmlBlock.Description.Strip(), xmlBlock.Prerequisites.Strip(), parentContext); if (xmlBlock.CodeSnippets != null && xmlBlock.CodeSnippets.Length > 0) { foreach (var xmlChildCode in xmlBlock.CodeSnippets) { ProcessXmlCode(xmlChildCode, context); } } if (xmlBlock.Blocks != null && xmlBlock.Blocks.Length > 0) { foreach (var xmlChildBlock in xmlBlock.Blocks) { ProcessXmlBlock(xmlChildBlock, context); } } }
private IEnumerable <XmlBlock> ExtractInternal(TextReader textReader, string fileName = null) { var reader = new LineReader(textReader); while (reader.Read()) { if (!reader.Current.StartsWith("```")) { continue; } var location = new ConfigurationLocation(fileName, reader.LineNumber); var isXmlTyped = reader.Current.StartsWith("```xml", StringComparison.OrdinalIgnoreCase); var text = ReadBlock(reader); var block = new XmlBlock(text, location); try { var elements = block.GetElements(); if (!isXmlTyped && !elements.Any()) { continue; } } catch (XmlException) { if (!isXmlTyped) { continue; } } yield return(block); } }
public void CompositeCodeSnippetSourceTest() { var xmlBlock1 = new XmlBlock { Name = XmlBlockTestName, Syntax = XmlBlockTestSyntax, Tags = XmlBlockTestTags, Description = XmlBlockTestDescription, Prerequisites = XmlBlockTestPrerequisites, CodeSnippets = new[] { new XmlCode { Tags = XmlSubItem1TestTags, Code = XmlSubItem1TestCode } } }; var xmlBlock2 = new XmlBlock { Name = XmlBlockTestName, Syntax = XmlBlockTestSyntax, Tags = XmlBlockTestTags, Description = XmlBlockTestDescription, Prerequisites = XmlBlockTestPrerequisites, CodeSnippets = new[] { new XmlCode { Tags = XmlSubItem2TestTags, Code = XmlSubItem2TestCode } } }; var xmlCodeSnippetSource1 = new XmlCodeSnippetSource(xmlBlock1); var xmlCodeSnippetSource2 = new XmlCodeSnippetSource(xmlBlock2); var compositeCodeSnippetSource = new CompositeCodeSnippetSource( new List <CodeSnippetSourceBase> { xmlCodeSnippetSource1, xmlCodeSnippetSource2 }); var result = compositeCodeSnippetSource.Search(new SortedSet <string>(new[] { "constructor" })); Assert.AreEqual(result.Count, 1); Assert.AreEqual(result[0].Code, "datetime(2013, 5, 7, 12, 0, 0, 0)"); Assert.AreEqual(result[0].Syntax, "python"); Assert.AreEqual(result[0].SpecificTags, new SortedSet <string>(new[] { "constructor" })); Assert.AreEqual(result[0].AllTags, new SortedSet <string>(new[] { "constructor", "datetime", "python" })); Assert.AreEqual(result[0].Context.Name, "Date and Time Data Types and Tools"); Assert.AreEqual(result[0].Context.Prerequisites, "from datatime import datetime"); Assert.AreEqual(result[0].Context.Description, "http://pandas.pydata.org/"); Assert.AreEqual(result[0].Context.Syntax, "python"); Assert.AreEqual(result[0].Context.SpecificTags, new SortedSet <string>(new[] { "datetime", "python" })); Assert.AreEqual(result[0].Context.AllTags, new SortedSet <string>(new[] { "datetime", "python" })); }
public BlockItem(XmlBlock xmlBlock) { Name = xmlBlock.Name.Strip(); Description = xmlBlock.Description.Strip(); Syntax = xmlBlock.Syntax.Strip(); Tags = xmlBlock.Tags.Strip(); Prerequisites = xmlBlock.Prerequisites.Strip(); }
/// <summary> /// Creates a code snippet source from an xml block. /// </summary> /// <param name="xmlBlock">Xml representation of a block of code snippets.</param> public XmlCodeSnippetSource(XmlBlock xmlBlock) { _codeSnippets = new List <CodeSnippet>(); if (xmlBlock != null) { ProcessXmlBlock(xmlBlock, null); } }
private XmlNode GetXmlNodeBlock(XmlBlock xmlBlock) { XmlNode xmlNode = xmlDocument.CreateElement("block"); xmlNode.AppendChild(xmlDocument.CreateElement("name")).InnerText = xmlBlock.name.ToString(); xmlNode.AppendChild(xmlDocument.CreateElement("posX")).InnerText = xmlBlock.pos.X.ToString(); xmlNode.AppendChild(xmlDocument.CreateElement("posY")).InnerText = xmlBlock.pos.Y.ToString(); return(xmlNode); }
public void XmlCodeSnippetSourceTest() { var xmlBlock = new XmlBlock { Name = XmlBlockTestName, Syntax = XmlBlockTestSyntax, Tags = XmlBlockTestTags, Description = XmlBlockTestDescription, Prerequisites = XmlBlockTestPrerequisites, Blocks = new[] { new XmlBlock { Name = XmlSubBlockTestName, Tags = XmlSubBlockTestTags, Prerequisites = XmlSubBlockTestPrerequisites, CodeSnippets = new[] { new XmlCode { Tags = XmlSubItem1TestTags, Code = XmlSubItem1TestCode }, new XmlCode { Tags = XmlSubItem2TestTags, Code = XmlSubItem2TestCode } } } } }; var xmlCodeSnippetSource = new XmlCodeSnippetSource(xmlBlock); var result = xmlCodeSnippetSource.Search(new SortedSet <string>(new[] { "now" })); Assert.AreEqual(result.Count, 1); Assert.AreEqual(result[0].Code, "datetime.now()"); Assert.AreEqual(result[0].Syntax, "python"); Assert.AreEqual(result[0].SpecificTags, new SortedSet <string>(new[] { "now" })); Assert.AreEqual(result[0].AllTags, new SortedSet <string>(new[] { "datetime", "now", "pandas", "python" })); Assert.AreEqual(result[0].Context.Name, "Date and Time Data Types and Tools"); Assert.AreEqual(result[0].Context.Prerequisites, "from datatime import datetime"); Assert.AreEqual(result[0].Context.Description, string.Empty); Assert.AreEqual(result[0].Context.Syntax, "python"); Assert.AreEqual(result[0].Context.SpecificTags, new SortedSet <string>(new[] { "datetime" })); Assert.AreEqual(result[0].Context.AllTags, new SortedSet <string>(new[] { "datetime", "pandas", "python" })); }
public void LoadLevel() { if (!isLoadead) { XmlNode root = xmlDocument.DocumentElement; Func <XmlNode, bool> LoadBlocks = (XmlNode node) => { foreach (XmlNode xmlNode in node.ChildNodes) { XmlBlock xmlBlock = GetXmlBlock(xmlNode); SetBlock(xmlBlock.name, xmlBlock.pos); } return(true); }; Func <XmlNode, bool> LoadEntities = (XmlNode node) => { foreach (XmlNode xmlNode in node.ChildNodes) { XmlEntity xmlEntity = GetXmlEntity(xmlNode); SpawnEntity(xmlEntity.name, xmlEntity.pos); } return(true); }; foreach (XmlNode xmlNode in root) { if (xmlNode.Name == "blocks") { LoadBlocks(xmlNode); } if (xmlNode.Name == "entities") { LoadEntities(xmlNode); } } isLoadead = true; } }
private static XmlBlock GetXmlBlock(TreeNode node) { if (!(node.Tag is BlockItem)) { return(null); } var blockItem = node.Tag as BlockItem; var xmlBlock = new XmlBlock { Name = blockItem.Name.Strip(), Syntax = blockItem.Syntax.Strip(), Tags = blockItem.Tags.Strip(), Description = blockItem.Description.Strip(), Prerequisites = blockItem.Prerequisites.Strip() }; var xmlCodeList = new List <XmlCode>(); var xmlBlockList = new List <XmlBlock>(); if (node.Nodes.Count > 0) { foreach (TreeNode childNode in node.Nodes) { if (childNode.Tag is CodeItem) { xmlCodeList.Add(GetXmlCode(childNode)); } else if (childNode.Tag is BlockItem) { xmlBlockList.Add(GetXmlBlock(childNode)); } } if (xmlCodeList.Count > 0) { xmlBlock.CodeSnippets = xmlCodeList.ToArray(); } if (xmlBlockList.Count > 0) { xmlBlock.Blocks = xmlBlockList.ToArray(); } } return(xmlBlock); }
private void BuildFromXmlBlock(XmlBlock xmlBlock) { try { LockLayout = true; IsModified = false; treeView.Nodes.Clear(); var blockItem = new BlockItem(xmlBlock); var rootNode = treeView.Nodes.Add(blockItem.ToString()); rootNode.Tag = blockItem; BuildFromXmlBlock(rootNode, xmlBlock); treeView.SelectedNode = rootNode; LockLayout = false; } catch (Exception exception) { ErrorReport.Report(exception); NewDocument(); } }
private static void BuildFromXmlBlock(TreeNode node, XmlBlock xmlBlock) { if (xmlBlock.CodeSnippets != null && xmlBlock.CodeSnippets.Length > 0) { foreach (var xmlChildCode in xmlBlock.CodeSnippets) { var childCodeItem = new CodeItem(xmlChildCode); var childCodeNode = node.Nodes.Add(childCodeItem.ToString()); childCodeNode.Tag = childCodeItem; } } if (xmlBlock.Blocks != null && xmlBlock.Blocks.Length > 0) { foreach (var xmlChildBlock in xmlBlock.Blocks) { var childBlockItem = new BlockItem(xmlChildBlock); var childBlockNode = node.Nodes.Add(childBlockItem.ToString()); childBlockNode.Tag = childBlockItem; BuildFromXmlBlock(childBlockNode, xmlChildBlock); } } }
private XmlBlock GetXmlBlock(XmlNode xmlNode) { string name = ""; Vector2f pos = new Vector2f(); foreach (XmlNode node in xmlNode.ChildNodes) { if (node.Name == "name") { name = node.InnerText; } if (node.Name == "posX") { pos.X = float.Parse(node.InnerText); } if (node.Name == "posY") { pos.Y = float.Parse(node.InnerText); } } Block.BlockName blockName = Block.BlockName.grass; for (int i = 0; i < Block.BlockNameCount; ++i) { if (((Block.BlockName)i).ToString() == name) { blockName = (Block.BlockName)i; } } XmlBlock xmlBlock = new XmlBlock(blockName, pos); return(xmlBlock); }
public void XmlBlockSerializeTest() { var xmlBlock = new XmlBlock { Name = XmlBlockTestName, Syntax = XmlBlockTestSyntax, Tags = XmlBlockTestTags, Description = XmlBlockTestDescription, Prerequisites = XmlBlockTestPrerequisites, Blocks = new[] { new XmlBlock { Name = XmlSubBlockTestName, Tags = XmlSubBlockTestTags, Prerequisites = XmlSubBlockTestPrerequisites, CodeSnippets = new[] { new XmlCode { Tags = XmlSubItem1TestTags, Code = XmlSubItem1TestCode }, new XmlCode { Tags = XmlSubItem2TestTags, Code = XmlSubItem2TestCode } } } } }; var xmlBlockString = XmlHelper.SerializeToString(xmlBlock); Assert.AreEqual(xmlBlockString, XmlBlockTestString); }