Ejemplo n.º 1
0
Archivo: ESS.cs Proyecto: yhn531/AMS
            private static SearchItem ProcessLine(string line, string searchQuery, SearchProvider provider)
            {
                line = line.Trim();

                var m        = essRx.Match(line);
                var filePath = m.Groups[1].Value.Replace("\\", "/");
                var essmi    = new ESSMatchInfo
                {
                    path       = filePath.Replace(Application.dataPath, "Assets").Replace("\\", "/"),
                    lineNumber = int.Parse(m.Groups[2].Value),
                    content    = m.Groups[3].Value
                };
                var fsq         = searchQuery.Replace("*", "");
                var content     = Regex.Replace(essmi.content, fsq, "<color=#FFFF00>" + fsq + "</color>", RegexOptions.IgnoreCase);
                var description = $"{essmi.path} (<b>{essmi.lineNumber}</b>)";

                return(provider.CreateItem(essmi.content.GetHashCode().ToString(), content, description, null, essmi));
            }
Ejemplo n.º 2
0
            internal static SearchProvider CreateProvider()
            {
                if (!File.Exists(ess_exe))
                {
                    return(null);
                }

                return(new SearchProvider(type, displayName)
                {
                    priority = 7000,
                    filterId = "ess:",
                    fetchItems = (context, items, provider) =>
                    {
                        if (s_BuildingIndex)
                        {
                            return;
                        }

                        if (context.sendAsyncItems == null)
                        {
                            return;
                        }

                        if (s_SearchThread != null && s_SearchThread.IsAlive)
                        {
                            s_StopEvent.Set();
                            if (!s_SearchThread.Join(100))
                            {
                                s_SearchThread.Abort();
                            }
                        }

                        var localSearchId = context.searchId;
                        var localSearchQuery = context.searchQuery;
                        var localIndexPath = indexPath;
                        var localDataPath = Application.dataPath;
                        var localSendItemsCallback = context.sendAsyncItems;
                        s_StopEvent.Reset();
                        s_SearchThread = new Thread(() =>
                        {
                            var result = RunESS("search", ParamValueString("index", localIndexPath), localSearchQuery);
                            if (result.code != 0)
                            {
                                return;
                            }
                            var entries = result.output.Split('\n').Where(line => line.Trim().Length > 0);
                            var asyncItems = entries.Select(line =>
                            {
                                var m = essRx.Match(line);
                                var filePath = m.Groups[1].Value.Replace("\\", "/");
                                var essmi = new ESSMatchInfo
                                {
                                    path = filePath.Replace(localDataPath, "Assets").Replace("\\", "/"),
                                    lineNumber = int.Parse(m.Groups[2].Value),
                                    content = m.Groups[3].Value
                                };
                                var fsq = localSearchQuery.Replace("*", "");
                                var content = Regex.Replace(essmi.content, fsq, "<color=#FFFF00>" + fsq + "</color>", RegexOptions.IgnoreCase);
                                var description = $"{essmi.path} (<b>{essmi.lineNumber}</b>)";
                                return provider.CreateItem(essmi.content.GetHashCode().ToString(), content, description, null, essmi);
                            }).ToArray();

                            if (asyncItems.Length > 0)
                            {
                                localSendItemsCallback(localSearchId, asyncItems);
                            }
                        });
                        s_SearchThread.Start();
                    },

                    fetchThumbnail = (item, context) =>
                    {
                        if (item.data == null)
                        {
                            return null;
                        }

                        if (item.thumbnail)
                        {
                            return item.thumbnail;
                        }

                        var essmi = (ESSMatchInfo)item.data;
                        item.thumbnail = UnityEditorInternal.InternalEditorUtility.FindIconForFile(essmi.path);
                        return item.thumbnail;
                    }
                });
            }