OberonCore
https://forum.oberoncore.ru/

omcSearch - DevSearch, режим поиска по всем текстовым док-м
https://forum.oberoncore.ru/viewtopic.php?f=90&t=4615
Страница 1 из 1

Автор:  Пётр Кушнир [ Пятница, 08 Ноябрь, 2013 22:38 ]
Заголовок сообщения:  omcSearch - DevSearch, режим поиска по всем текстовым док-м

В меню ББ есть пункты поиска по всяким местам, однако я заметил, что часто надо найти ключевую фразу в документах из каталога Rsrc или других. Модифицировал стандартный перебор каталогов внутри DevSearch, может кому пригодится.
Код:
   (* выполняет поиск во всех текстовых документах внутри каталога ББ *)
   PROCEDURE SearchEverywhere*;
         VAR pat: Pattern; t, log: TextModels.Model; v: Views.View; title: Views.Title; c: Containers.Controller;
         files: Files.FileInfo; dirs, subs: Files.LocInfo;
         loc, sloc: Files.Locator; path, p: Files.Name; list: Text;
   BEGIN
      (*TextCmds.InitFindDialog; *)
      pat := TextCmds.find.find$;
      IF pat # "" THEN
         Dialog.ShowStatus(searchingKey);
         TextCmds.find.find := pat$;
         log := TextModels.dir.New();
         w.ConnectTo(log); w.SetPos(0);
         list := NIL;
         loc := Files.dir.This("");
         subs:=Files.dir.LocList(loc);   
         WHILE subs#NIL DO
            path := subs.name$;
            sloc:=loc.This(subs.name);
            files := Files.dir.FileList(sloc);
            WHILE files # NIL DO
               IF files.type = Kernel.docType THEN
                  p := path + "/" + files.name;
                  t := ThisText(sloc, files.name);
                  IF t # NIL THEN
                     Find(t, pat, p, list, TRUE)
                  END
               END;
               files := files.next
            END;
            subs:=subs.next
         END;
         loc := Files.dir.This("");
         dirs := Files.dir.LocList(loc);
         WHILE dirs # NIL DO
            loc := Files.dir.This(dirs.name);
            subs:=Files.dir.LocList(loc);
            WHILE subs#NIL DO
               path := dirs.name + "/"+subs.name;
               sloc:=loc.This(subs.name);
               files := Files.dir.FileList(sloc);
               WHILE files # NIL DO
                  IF files.type = Kernel.docType THEN
                     p := path + "/" + files.name;
                     t := ThisText(sloc, files.name);
                     IF t # NIL THEN
                        Find(t, pat, p, list, TRUE)
                     END
                  END;
                  files := files.next
               END;
               subs:=subs.next;
            END;
            dirs := dirs.next
         END;
         List(list, pat, TRUE, TRUE);
         v := TextViews.dir.New(log);
         title := 'Search for "' + pat + '"';
         v(TextViews.View).SetDefaults(NewRuler(), TextViews.dir.defAttr);
         Views.OpenAux(v, title);
         c := v(Containers.View).ThisController();
         c.SetOpts(c.opts + {Containers.noCaret});
         w.ConnectTo(NIL);
         Dialog.ShowStatus("")
      END
   END SearchEverywhere;

Автор:  Евгений Темиргалеев [ Пятница, 15 Ноябрь, 2013 15:22 ]
Заголовок сообщения:  Re: DevSearch, режим поиска по всем текстовым документам

Карточка в коллекции: http://oberoncore.ru/bbcc/subs/omc/search

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/