コード例 #1
0
        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));
                    }
                }
            }
        }
コード例 #2
0
        public void Analyze(InkFileInfo info)
        {
            if (m_TodoCollectionKeys.Count != m_TodoCollections.Count)
            {
                m_TodoCollectionKeys.Clear();
                m_TodoCollections.Clear();
            }

            AnalyzeFile(info);
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public Todo(InkFileInfo file, int line, string text)
 {
     FileInfo = file;
     Line     = line;
     Text     = text.Trim();
 }
コード例 #6
0
 protected abstract void AnalyzeFile(InkFileInfo inkFileInfo);