From 8516e5d0f5b64c681d31efa2944bb9a9de32dbbc Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Sun, 29 Jan 2023 16:23:45 +0000 Subject: document: Inter snippet source text into the xapian index. We store snippet source text in a slot of the class thus interring into the xapian index. This allows us to render search snippets using only the xapian index without referring back to the git repository. * tissue/document.scm ()[snippet-source-text]: New slot. * tissue/document.scm (document-snippet-source-text): Delete method. (document-html-snippet): Remove blank lines from snippet source text before generating a snippet. * tissue/commit.scm (document-snippet-source-text): Delete method. (repository-commits): Initialize snippet-source-text. * tissue/skribilo.scm (fragment-text): New function. (document-fragment): Initialize snippet-source-text. (document-text): Use fragment-text. (document-snippet-source-text): Delete method. * tissue/file-document.scm (file-text): New function. (document-text): Use file-text. (read-gemtext-document): Initialize snippet-source-text. * tissue/issue.scm (read-gemtext-issue): Initialize snippet-source-text. * issues/skribilo-fragment-snippets-need-code-from-repo.gmi: Close issue. --- tissue/commit.scm | 18 ++++++++---------- tissue/document.scm | 22 ++++++++++------------ tissue/file-document.scm | 11 ++++++++--- tissue/issue.scm | 3 ++- tissue/skribilo.scm | 27 +++++++++++++-------------- 5 files changed, 41 insertions(+), 40 deletions(-) (limited to 'tissue') diff --git a/tissue/commit.scm b/tissue/commit.scm index c151d3a..b910695 100644 --- a/tissue/commit.scm +++ b/tissue/commit.scm @@ -51,15 +51,6 @@ "Return a date representing the recency of COMMIT." (doc:commit-author-date commit)) -(define-method (document-snippet-source-text (commit )) - "Return the source text for COMMIT from which to extract a search -result snippet." - ;; The snippet source text excludes the first paragraph (i.e., the - ;; summary line) of the commit. Hence, we use commit-body. - (commit-body - (commit-lookup (current-git-repository) - (string->oid (commit-hash commit))))) - (define-method (document-text (commit )) "Return the full text of COMMIT." (commit-message @@ -101,7 +92,14 @@ REPOSITORY." #:hash (oid->string (commit-id commit)) #:author (resolve-alias (signature-name (commit-author commit)) (%aliases)) - #:author-date (commit-author-date commit)) + #:author-date (commit-author-date commit) + ;; The snippet source text excludes the + ;; first paragraph (i.e., the summary line) + ;; of the commit. Hence, we use commit-body. + #:snippet-source-text + (commit-body + (commit-lookup (current-git-repository) + (commit-id commit)))) result)) (list) repository)) diff --git a/tissue/document.scm b/tissue/document.scm index c05e40f..1e55e67 100644 --- a/tissue/document.scm +++ b/tissue/document.scm @@ -133,7 +133,9 @@ mutate @var{object}." (define-class () (title #:accessor document-title #:init-keyword #:title) - (web-uri #:accessor document-web-uri #:init-keyword #:web-uri)) + (web-uri #:accessor document-web-uri #:init-keyword #:web-uri) + (snippet-source-text #:accessor document-snippet-source-text + #:init-keyword #:snippet-source-text)) (define-generic document-id-term) (define-generic document-text) @@ -173,21 +175,17 @@ and further text, increase-termpos! must be called before indexing." (index-text! term-generator (document-text document)) term-generator)) -(define-method (document-snippet-source-text (document )) - "Return the source text for DOCUMENT from which to extract a search -result snippet." - ;; Remove blank lines from document text. - (string-join - (remove string-blank? - (string-split (document-text document) - #\newline)) - "\n")) - (define (document-html-snippet document mset) "Return snippet for DOCUMENT. MSET is the xapian MSet object representing a list of search results." (mset-snippet mset - (document-snippet-source-text document) + ;; Remove blank lines from text. + (string-join + (remove string-blank? + (string-split + (document-snippet-source-text document) + #\newline)) + "\n") #:length 200 #:highlight-start "" #:highlight-end "" diff --git a/tissue/file-document.scm b/tissue/file-document.scm index 8de9645..ccd6a48 100644 --- a/tissue/file-document.scm +++ b/tissue/file-document.scm @@ -69,10 +69,14 @@ "Return a date representing the recency of DOCUMENT." (file-document-last-updated-date document)) +(define (file-text file) + "Return the contents of text @var{file}." + (call-with-file-in-git (current-git-repository) file + get-string-all)) + (define-method (document-text (document )) "Return the full text of DOCUMENT." - (call-with-file-in-git (current-git-repository) (file-document-path document) - get-string-all)) + (file-text (file-document-path document))) (define-method (document-term-generator (document )) "Return a term generator indexing DOCUMENT." @@ -148,4 +152,5 @@ MSet object representing a list of search results." ;; Fallback to filename if document has no title. file) #:path file - #:commits (commits-affecting-file file))) + #:commits (commits-affecting-file file) + #:snippet-source-text (file-text file))) diff --git a/tissue/issue.scm b/tissue/issue.scm index 529fcfb..ebfca52 100644 --- a/tissue/issue.scm +++ b/tissue/issue.scm @@ -295,4 +295,5 @@ object." #:open? (not (member "closed" all-keywords)) #:tasks (hashtable-ref file-details 'tasks 0) #:completed-tasks (hashtable-ref file-details 'completed-tasks 0) - #:commits (file-document-commits file-document)))) + #:commits (file-document-commits file-document) + #:snippet-source-text (document-snippet-source-text file-document)))) diff --git a/tissue/skribilo.scm b/tissue/skribilo.scm index d0c90ba..b17b30d 100644 --- a/tissue/skribilo.scm +++ b/tissue/skribilo.scm @@ -47,6 +47,14 @@ (call-with-input-file file (cut evaluate-ast-from-port <> #:reader (make-reader reader-name))))) +(define (fragment-text file identifier reader-name) + "Return the full text of skribilo fragment in @var{file} identified by +@var{identifier} using reader named by @var{reader-name}." + (call-with-output-string + (cut ast->text + (document-node file identifier reader-name) + <>))) + (define* (document-fragment file identifier #:key (reader-name 'skribe)) "Return a @code{} object describing node identified by @var{identifier} in @var{file} read using reader named by @@ -58,7 +66,8 @@ by @var{identifier} in @var{file} read using reader named by #:path file #:commits (commits-affecting-file file) #:identifier identifier - #:reader-name reader-name)) + #:reader-name reader-name + #:snippet-source-text (fragment-text file identifier reader-name))) (define-method (document-id-term (fragment )) "Return the ID term for skribilo @var{fragment}." @@ -89,16 +98,6 @@ output to @var{port}." (define-method (document-text (fragment )) "Return the full text of skribilo @var{fragment}." - (call-with-output-string - (cut ast->text - (document-node (file-document-path fragment) - (skribilo-fragment-identifier fragment) - (skribilo-fragment-reader-name fragment)) - <>))) - -;; We temporarily disable snippets for skribilo fragments until -;; issues/skribilo-fragment-snippets-need-code-from-repo.gmi is fixed. -(define-method (document-snippet-source-text (fragment )) - "Return the source text for FRAGMENT from which to extract a search -result snippet." - "") + (fragment-text (file-document-path fragment) + (skribilo-fragment-identifier fragment) + (skribilo-fragment-reader-name fragment))) -- cgit v1.2.3