From c228ac3da0c0b70e62bf2cb09ab5e9c9ff9a4895 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sun, 22 Mar 2026 11:22:27 +0000 Subject: [PATCH] Initial upload: snippet-manager with CI/CD workflow --- snip/search/engine.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 snip/search/engine.py diff --git a/snip/search/engine.py b/snip/search/engine.py new file mode 100644 index 0000000..9a6ebe1 --- /dev/null +++ b/snip/search/engine.py @@ -0,0 +1,28 @@ +"""FTS5 search engine for snippets.""" + +from typing import Any + +from snip.db.database import Database + + +class SearchEngine: + def __init__(self, db: Database): + self.db = db + + def search( + self, + query: str, + limit: int = 50, + language: str | None = None, + tag: str | None = None, + ) -> list[dict[str, Any]]: + """Search snippets using FTS5.""" + return self.db.search_snippets(query, limit=limit, language=language, tag=tag) + + def highlight(self, text: str, query: str) -> str: + """Add highlighting markers around matched terms.""" + terms = query.split() + result = text + for term in terms: + result = result.replace(term, f"**{term}**") + return result