public void Load(string RawString, MarkDownDoc doc) { this.doc = doc; if (RawString.IsNullOrEmpty()) { return; } if (RawString.Replace(Environment.NewLine, "") == "***") { this.type = KeyType.separator; } else if (RawString[0] == '*') { this.type = KeyType.font; if (RawString.IndexOf("***") == 0) { //斜体加粗 keyValue = "BI"; Data = RawString.Substring(3, RawString.Length - 6); } else if (RawString.IndexOf("**") == 0) { //加粗 keyValue = "B"; Data = RawString.Substring(2, RawString.Length - 4); } else if (RawString.IndexOf("*") == 0) { //斜体 keyValue = "I"; Data = RawString.Substring(1, RawString.Length - 2); } } else if (RawString[0] == '#') { this.type = KeyType.title; if (RawString.IndexOf("###") == 0) { //1号标题 keyValue = "1"; Data = RawString.Substring(3, RawString.Length - 3); } else if (RawString.IndexOf("##") == 0) { //3级标题 keyValue = "2"; Data = RawString.Substring(2, RawString.Length - 2); } else if (RawString.IndexOf("#") == 0) { //3级标题 keyValue = "3"; Data = RawString.Substring(1, RawString.Length - 1); } } else if (RawString[0] == '!') { this.type = KeyType.image; int start = RawString.IndexOf("(") + 1; int end = RawString.LastIndexOf(")"); Data = RawString.Substring(start, RawString.Length - start - (RawString.Length - end)); var ImgAssetPath = doc.AssetDir + "/" + Data; if (Path.GetExtension(ImgAssetPath) == ".gif") { gifDrawer = new GUIGifDrawer(); gifDrawer.LoadGIF(PathTools.Asset2File(ImgAssetPath)); if (EditorUserSettings.GetConfigValue("DocAutoPlayGif") != "true") { gifDrawer.Controller = true; } gifDrawer.Play(); } else { if (PathTools.IsAssetPath(ImgAssetPath)) { this.texture = AssetDatabase.LoadAssetAtPath(ImgAssetPath, typeof(Texture2D)) as Texture2D; } else if (File.Exists(ImgAssetPath)) { byte[] img = File.ReadAllBytes(ImgAssetPath); this.texture = new Texture2D(1024, 1024); texture.LoadImage(img); } } } else if (RawString[0] == '(') { this.type = KeyType.link; int start = RawString.IndexOf("(") + 1; int end = RawString.LastIndexOf(")"); Data = RawString.Substring(start, RawString.Length - start - (RawString.Length - end)); } else if (RawString.IndexOf(">>") == 0) { this.type = KeyType.doc; Data = RawString.Remove(0, 2); } else if (RawString[0] == '>') { this.type = KeyType.page; Data = RawString.Remove(0, 1); } else if (RawString[0] == '|') { this.type = KeyType.table; string[] datas = RawString.Split('|'); for (int i = 1; i < datas.Length; i++) { if (datas[i] == "--:") { this.type = KeyType.separator; break; } MarkDownData subdata = new MarkDownData(); subdata.Load(datas[i], this.doc); this.subdatas.Add(subdata); } } else if (RawString.IndexOf("```") == 0) { this.type = KeyType.code; keyValue = RawString.Substring(3, RawString.Length - 3); } else if (RawString.IndexOf("QA") == 0) { this.type = KeyType.qa; keyValue = RawString.Substring(2, RawString.Length - 2); } else if (RawString.IndexOf("/{") == 0) { this.type = KeyType.foldin; keyValue = RawString.Substring(2, RawString.Length - 2); } else if (RawString.IndexOf("/}") == 0) { this.type = KeyType.foldout; keyValue = RawString.Substring(2, RawString.Length - 2); } else { Data = RawString; } }
/// <summary> /// 加载并生成数据 /// </summary> public void Load() { if (datas.Count > 0) { Release(); } string[] lines = rawDoc.Split(Environment.NewLine.ToCharArray()); foreach (var line in lines) { if (string.IsNullOrEmpty(line)) { continue; } MarkDownData data = new MarkDownData() { doc = this }; KeyType stackKey = stackData == null ? KeyType.text : stackData.type; switch (stackKey) { case KeyType.code: { data.Load(line, this); if (data.type == KeyType.code) { stackData = null; } else { //补上换行符 stackData.Data += data.Data + Environment.NewLine; } } break; case KeyType.qa: { data.Load(line, this); if (data.type == KeyType.qa) { stackData = null; } else { //补上换行符 stackData.Data += data.Data + Environment.NewLine; } } break; default: data.Load(line, this); datas.Add(data); switch (data.type) { case KeyType.code: stackData = data; break; case KeyType.qa: stackData = data; break; } break; } } }