SilkTagBase ParseRawTag(string inputRawTag, TagFactory tFactory) { RawTag newRawTag = new RawTag(); string[] rawArguments; //string inputRawTag = rawTag.Replace(" ", String.Empty); for (int i = 0; i < inputRawTag.Length; i++) { if (i == 2) { //inputRawTag.Replace(" ", ""); for (int j = i; j < inputRawTag.Length; j++) { //Debug.Log(inputRawTag[j]); if (!inputRawTag.Contains("=")) { if (inputRawTag[j] != '>') { newRawTag.RawTagName += inputRawTag[j]; } else { break; } } else if (inputRawTag[j] == '=') { rawArguments = inputRawTag.Substring(j + 1).Split(','); for (int r = 0; r < rawArguments.Length; r++) { string rawArgument = rawArguments[r].Replace("\"", "").Replace(">>", String.Empty); newRawTag.AddArgument(rawArgument); } break; } else { newRawTag.RawTagName += inputRawTag[j]; } } } } return(tFactory.SetTag(newRawTag.RawTagName, newRawTag.TagArgs)); //return newRawTag; }
void InitializeSilk() { tagFactory = new TagFactory(); importer = GetComponent <Silk.Importer>(); List <string> filenames = new List <string>(); mother = new SilkMotherStory(); foreach (TextAsset currentTweeFile in importer.rawTweeFiles) { SilkStory newSilkStory = new SilkStory(); TextAsset tweeFile = currentTweeFile; string fileName = currentTweeFile.name; //this works for single file //textToParse = testText.text; textToParse = tweeFile.text; tweeNodesToInterpret = textToParse.Split(delim, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < tweeNodesToInterpret.Length; i++) { string storyTitle = ""; StringBuilder promptContainer = new StringBuilder(tweeNodesToInterpret[i]); if (tweeNodesToInterpret[i].Contains("|")) { promptContainer.Replace("|", string.Empty); } if (tweeNodesToInterpret[i].Contains(ReturnTitle(tweeNodesToInterpret[i]))) { string storyTitleCheck = ReturnTitle(tweeNodesToInterpret[i]).TrimStart().TrimEnd(); if (storyTitleCheck == "StoryTitle") { newSilkStory.SetStoryName(ReturnStoryTitle(tweeNodesToInterpret[i])); } else { promptContainer.Replace(ReturnTitle(tweeNodesToInterpret[i]), string.Empty, 0, ReturnTitle(tweeNodesToInterpret[i]).Length); } } foreach (KeyValuePair <string, string> entry in ReturnLinks(tweeNodesToInterpret[i])) { if (tweeNodesToInterpret[i].Contains("[[" + entry.Key) || tweeNodesToInterpret[i].Contains("[[" + entry.Value)) { promptContainer.Replace("[[" + entry.Key, string.Empty).Replace(entry.Value + "]]", string.Empty); promptContainer.Replace("]]", string.Empty); } } SilkNode newNode = new SilkNode(); //TODO Switch type from SilkG--- to SilkStory in AssignDataToNodes AssignDataToNodes(newSilkStory, newNode, tweeNodesToInterpret[i], promptContainer.ToString(), fileName); //Debug.Log(newNode.nodeName); } mother.AddToMother(fileName, newSilkStory); foreach (KeyValuePair <string, SilkStory> story in mother.MotherStory) { foreach (KeyValuePair <string, SilkNode> node in story.Value.Story) { //for testing //Debug.Log("ON NODE: " + node.) } } } //TODO Break This Out into its own method foreach (KeyValuePair <string, SilkStory> silkStory in mother.MotherStory) { filenames.Add(silkStory.Key); } // //have to search the mother to do it to ALL the gr---??? //TODO in mother or in story, make a method that allows for easier searching //TODO Make this its own method foreach (KeyValuePair <string, SilkStory> story in mother.MotherStory) { foreach (KeyValuePair <string, SilkNode> node in story.Value.Story) { foreach (KeyValuePair <string, string> link in node.Value.links) { StringBuilder linkNameBuilder = new StringBuilder(); string linkName; linkNameBuilder.Append(link.Value); linkName = linkNameBuilder.ToString().TrimStart().TrimEnd(); foreach (KeyValuePair <string, SilkNode> linkedNode in story.Value.Story) { string nodeName = ""; StringBuilder nodeNameBuilder = new StringBuilder(); for (int a = 0; a < filenames.Count; a++) { if (linkedNode.Value.nodeName.Contains(filenames[a])) { nodeNameBuilder.Append(linkedNode.Value.nodeName.Remove(0, filenames[a].Length + 1)); nodeName = nodeNameBuilder.ToString().TrimEnd(); } } if (linkName.ToString() == nodeName) { SilkLink newSilkLink = new SilkLink(node.Value, linkedNode.Value, link.Key); node.Value.silkLinks.Add(newSilkLink); Debug.Log("SilkLink " + newSilkLink.LinkText); } } } } } //TODO break this into its own method (TESTING) foreach (KeyValuePair <string, SilkStory> story in mother.MotherStory) { //for testing foreach (KeyValuePair <string, SilkNode> node in story.Value.Story) { //for testing Debug.Log("NODE IS CALLED " + node.Value.nodeName); //Debug.Log(node.Value.silkTags[0]); //Debug.Log(node.Value.silkTags.Count); foreach (KeyValuePair <string, string[]> tagName in node.Value.tags) { //Debug.Log(tagName.Key); } foreach (SilkTagBase _tag in node.Value.silkTags) { Debug.Log(_tag.TagName); } foreach (SilkLink _link in node.Value.silkLinks) { Debug.Log(node.Value.nodeName + " " + " " + _link.LinkText); } } } }
//TODO extract new methods from all of this void InitializeSilk() { tagFactory = new TagFactory(); importer = GetComponent <Silk.Importer>(); List <string> filenames = new List <string>(); mother = new SilkMotherStory(); foreach (TextAsset currentTweeFile in importer.rawTweeFiles) { SilkStory newSilkStory = new SilkStory(); TextAsset tweeFile = currentTweeFile; string fileName = currentTweeFile.name; //Debug.LogWarning(currentTweeFile.name); //this works for single file //textToParse = testText.text; textToParse = tweeFile.text; tweeNodesToInterpret = textToParse.Split(delim, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < tweeNodesToInterpret.Length; i++) { string storyTitle = ""; //this is where prompt parsing was supposed to go //TODO move to it's own method--everything that deals in extracting the prompt SilkNode newNode = new SilkNode(); AssignDataToNodes(newSilkStory, newNode, tweeNodesToInterpret[i], GetPrompt(i, newSilkStory, newNode), fileName); } //newSilkStory.StoryName mother.AddToMother(fileName, newSilkStory); } //TODO Break This Out into its own method foreach (KeyValuePair <string, SilkStory> silkStory in mother.MotherStory) { filenames.Add(silkStory.Key); } // //TODO Make this its own method foreach (KeyValuePair <string, SilkStory> story in mother.MotherStory) { foreach (KeyValuePair <string, SilkNode> node in story.Value.Story) { foreach (KeyValuePair <string, string> link in node.Value.links) { //somewhere in here, fix linkname parsing to allow for structure that's like [[hello|hello]] StringBuilder linkNameBuilder = new StringBuilder(); string linkName; linkNameBuilder.Append(link.Value); linkName = linkNameBuilder.ToString().TrimStart().TrimEnd(); foreach (KeyValuePair <string, SilkNode> linkedNode in story.Value.Story) { string nodeName = ""; StringBuilder nodeNameBuilder = new StringBuilder(); for (int a = 0; a < filenames.Count; a++) { if (linkedNode.Value.nodeName.Contains(filenames[a] + "_")) { nodeNameBuilder.Append(linkedNode.Value.nodeName.Remove(0, filenames[a].Length + 1)); nodeName = nodeNameBuilder.ToString().TrimEnd(); } } if (linkName.ToString() == nodeName) { SilkLink newSilkLink = new SilkLink(node.Value, linkedNode.Value, link.Key); node.Value.silkLinks.Add(newSilkLink); //Debug.Log("SilkLink " + newSilkLink.LinkText + " " + newSilkLink.LinkedNode.nodeName); } } } } } }