private void scan(string text)
        {
            var file = new FakeFubuFile(text);
            var reader = new SnippetReader(file, new CLangSnippetScanner("cs"), theSnippets.Add);

            reader.Start();
        }
Пример #2
0
        private static ISnippetCache buildCache(string directory)
        {
            var files = new SnippetApplicationFiles(".".ToFullPath().AppendPath("src"), directory);

            var cache = new SnippetCache();

            var scanners = new ISnippetScanner[]
            {
                new CLangSnippetScanner("cs"),
                new CLangSnippetScanner("js"),
                new BlockCommentScanner("<!--", "-->", "spark", "lang-html"),
                new BlockCommentScanner("<!--", "-->", "htm", "lang-html"),
                new BlockCommentScanner("<!--", "-->", "html", "lang-html"),
                new BlockCommentScanner("<!--", "-->", "xml", "lang-xml"),
                new BlockCommentScanner("/*", "*/", "css", "lang-css"),
                new RazorSnippetScanner(),
                new RubySnippetScanner(),
            };

            scanners.Each(finder => {
                files.FindFiles(finder.MatchingFileSet).Each(file => {
                    var scanner = new SnippetReader(file, finder, snippet => {
                        snippet.File = file.Path;
                        cache.Add(snippet);
                    });

                    scanner.Start();
                });
            });


            return(cache);
        }
Пример #3
0
    private static List <SnippetLine> GetSnippet(SnippetRequest request)
    {
        Queryable      queryable = QueryDriver.GetQueryable(request.Hit.Source);
        ISnippetReader snippet_reader;
        bool           full_text  = request.FullText;
        int            ctx_length = request.ContextLength;
        int            snp_length = request.SnippetLength;

        if (queryable == null)
        {
            Console.WriteLine("SnippetExecutor: No queryable object matches '{0}'", request.Hit.Source);
            snippet_reader = new SnippetReader(null, null, false, -1, -1);
            full_text      = false;
        }
        else
        {
            snippet_reader = queryable.GetSnippet(request.QueryTerms, request.Hit, full_text, ctx_length, snp_length);
        }

        List <SnippetLine> snippetlines = new List <SnippetLine> ();

        if (snippet_reader == null)
        {
            return(snippetlines);
        }

        if (!full_text)
        {
            foreach (SnippetLine snippet_line in snippet_reader.GetSnippet())
            {
                snippetlines.Add(snippet_line);
            }
        }
        else
        {
            SnippetLine snippet_line = new SnippetLine();
            snippet_line.Line = 1;

            Fragment fragment = new Fragment();
            fragment.QueryTermIndex = -1;
            StringBuilder sb = new StringBuilder();

            string line;
            // Read data from snippet_reader and write
            while ((line = snippet_reader.ReadLine()) != null)
            {
                sb.Append(StringFu.CleanupInvalidXmlCharacters(line));
                sb.Append("\n");
            }

            fragment.Text          = sb.ToString();
            snippet_line.Fragments = new ArrayList();
            snippet_line.Fragments.Add(fragment);
            snippetlines.Add(snippet_line);
        }

        snippet_reader.Close();

        return(snippetlines);
    }
        public ISnippetReader GetSnippet(string[] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
        {
            string source = hit ["beagle:Source"];

            hit ["beagle:Source"] = hit ["beagle:OrigSource"];

            string        network_node   = hit ["beagle:NetworkNode"];
            SnippetReader snippet_reader = null;

            // FIXME: Creating a snippet request, registering transports, all of this
            // doing everytime for hundreds of hits may become quite expensive.
            // In that case, pre generate one snippetrequest and use it over and over.

            // Form a correct snippet request
            SnippetRequest sreq = new SnippetRequest();

            sreq.Hit           = hit;
            sreq.QueryTerms    = query_terms;
            sreq.FullText      = full_text;
            sreq.ContextLength = ctx_length;
            sreq.SnippetLength = snp_length;

            // fake a blocking snippet retrieval
            sreq.RegisterAsyncResponseHandler(typeof(SnippetResponse),
                                              delegate(ResponseMessage response) {
                if (response is ErrorResponse)
                {
                    Log.Error("Error retrieval snippet for {0} from network node {1}", hit.Uri, network_node);
                    return;
                }

                snippet_reader = new SnippetReader((SnippetResponse)response);
            });

            List <string[]> network_services = Conf.Networking.GetListOptionValues(Conf.Names.NetworkServices);

            foreach (string[] service in network_services)
            {
                if (network_node != service [0])
                {
                    continue;
                }

                sreq.Transports.Clear();
                sreq.RegisterTransport(new HttpTransport(service [1]));

                // fake a blocking snippet retrieval
                try {
                    sreq.SendAsyncBlocking();
                } catch (Exception e) {
                    Log.Debug(e, "Error while requesting snippet from {0} for {1}", service [1], hit.Uri);
                }
                break;
            }

            hit ["beagle:Source"] = source;             // reset source
            return(snippet_reader);
        }
		public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
		{
			string source = hit ["beagle:Source"];
			hit ["beagle:Source"] = hit ["beagle:OrigSource"];

			string network_node = hit ["beagle:NetworkNode"];
			SnippetReader snippet_reader = null;

			// FIXME: Creating a snippet request, registering transports, all of this
			// doing everytime for hundreds of hits may become quite expensive.
			// In that case, pre generate one snippetrequest and use it over and over.

			// Form a correct snippet request
			SnippetRequest sreq = new SnippetRequest ();
			sreq.Hit = hit;
			sreq.QueryTerms = query_terms;
			sreq.FullText = full_text;
			sreq.ContextLength = ctx_length;
			sreq.SnippetLength = snp_length;

			// fake a blocking snippet retrieval
			sreq.RegisterAsyncResponseHandler (typeof (SnippetResponse),
							   delegate (ResponseMessage response) {
				if (response is ErrorResponse) {
					Log.Error ("Error retrieval snippet for {0} from network node {1}", hit.Uri, network_node);
					return;
				}

				snippet_reader = new SnippetReader ((SnippetResponse) response);
			});

			List<string[]> network_services = Conf.Networking.GetListOptionValues (Conf.Names.NetworkServices);
			foreach (string[] service in network_services) {
				if (network_node != service [0])
					continue;

				sreq.Transports.Clear ();
				sreq.RegisterTransport (new HttpTransport (service [1]));

				// fake a blocking snippet retrieval
				try {
					sreq.SendAsyncBlocking ();
				} catch (Exception e) {
					Log.Debug (e, "Error while requesting snippet from {0} for {1}", service [1], hit.Uri);
				}
				break;
			}

			hit ["beagle:Source"] = source; // reset source
			return snippet_reader;
		}