// Generate all code snippet and get all editable part private void CreateCodeSnippet(string sourcePath, RectTransform contentParent) { if (string.IsNullOrEmpty(sourcePath)) { return; } TextAsset source = Resources.Load <TextAsset>(sourcePath); List <string> sourceContent = source.text.Split('\n').ToList(); Stack <CodeBlockController> blockStack = new Stack <CodeBlockController>(); CodeBlockController mainBlock = GameObject.Instantiate(codeBlock_prefab).GetComponent_AutoAdd <CodeBlockController>(); mainBlock.transform.SetParent(contentParent, false); blockStack.Push(mainBlock); sourceContent.ForEach(sentence => { if (sentence.Contains("[`")) { CodeBlockController codeBlock = GameObject.Instantiate(codeBlock_prefab).GetComponent_AutoAdd <CodeBlockController>(); codeBlock.LoadTitle(sentence); blockStack.Peek().AddBlock(codeBlock); blockStack.Push(codeBlock); } else if (sentence.Contains("`]")) { CodeBlockController codeBlock = blockStack.Pop(); } else { CodeSentenceController sentenceController = GameObject.Instantiate(codeSentence_prefab).GetComponent <CodeSentenceController>(); sentenceController.LoadSentence(sentence); snippetEditablePart.AddRange(sentenceController.sentenceEditablePart); snippetTag2EditablePart.AddRange(sentenceController.tag2EditablePart); blockStack.Peek().AddSentence(sentenceController); } }); mainBlock.UnFoldBlock(); UpdateWindowResolution(); }