protected override void AnalyzeFile(InkFileInfo info) { if (m_Search.IsNullOrEmpty()) { return; } CheckChanges(); for (int i = 0; i < info.Lines.Length; i++) { string line = info.Lines[i]; if (m_SearchRegex.IsMatch(line)) { string[] results = m_SearchRegex.Replace(line, m_Result).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); foreach (string result in results) { if (result == null) { Debug.LogWarning($"Missing item found in {m_Bucket.name}.", m_Bucket); continue; } InkTodoCollection collection = GetOrAddCollection(result); collection.Add(new Todo(info, i + 1, line)); } } } }
public void Analyze(InkFileInfo info) { if (m_TodoCollectionKeys.Count != m_TodoCollections.Count) { m_TodoCollectionKeys.Clear(); m_TodoCollections.Clear(); } AnalyzeFile(info); }
public void Analyze() { if (m_InkFileAssets == null || m_InkFileAssets.Count == 0) { Debug.LogWarningFormat(this, "No ink file found."); return; } string rootDirectory = FindCommonDirectory(m_InkFileAssets.Select(AssetDatabase.GetAssetPath).ToArray()); Queue <InkFileInfo> queue = new Queue <InkFileInfo>(m_InkFileAssets.Select(a => new InkFileInfo(a))); List <InkFileInfo> inkFiles = new List <InkFileInfo>(); m_Searches.ForEach(s => s.Reset()); while (queue.Count > 0) { InkFileInfo info = queue.Dequeue(); inkFiles.Add(info); foreach (string includePath in info.Includes) { if (inkFiles.Any(f => f.Path.Equals(includePath, StringComparison.OrdinalIgnoreCase))) { continue; } m_InkFileAssets.Add(AssetDatabase.LoadAssetAtPath <DefaultAsset>(includePath)); queue.Enqueue(new InkFileInfo(includePath, rootDirectory)); } foreach (RegexTodoSearch search in m_Searches) { search.Analyze(info); } } foreach (RegexTodoSearch search in m_Searches) { search.FinishAnalysis(); } }
public static InkTodoPrefs Load(DefaultAsset inkFile) { string inkPath = AssetDatabase.GetAssetPath(inkFile); string directory = Path.GetDirectoryName(inkPath); string prefsName = Path.GetFileNameWithoutExtension(inkPath) + ".asset"; string prefsPath = Path.Combine(directory, prefsName); InkTodoPrefs prefs = AssetDatabase.LoadAssetAtPath <InkTodoPrefs>(prefsPath); if (!prefs) { prefs = CreateInstance <InkTodoPrefs>(); AssetDatabase.CreateAsset(prefs, prefsPath); InkFileInfo inkInfo = new InkFileInfo(inkFile); prefs.m_InkFileAssets = new List <DefaultAsset> { inkFile }; foreach (string includePath in inkInfo.Includes) { DefaultAsset includeAsset = AssetDatabase.LoadAssetAtPath <DefaultAsset>(includePath); if (includeAsset) { prefs.m_InkFileAssets.Add(includeAsset); } } prefs.m_Searches = new List <RegexTodoSearch> { new RegexTodoSearch() }; } prefs.Analyze(); return(prefs); }
public Todo(InkFileInfo file, int line, string text) { FileInfo = file; Line = line; Text = text.Trim(); }
protected abstract void AnalyzeFile(InkFileInfo inkFileInfo);