1
0
mirror of https://codeberg.org/cage/tinmop/ synced 2025-02-17 08:10:36 +01:00

- prefixed all parsing rule for gempub metadata with 'gempub-' to avoid clash with other rules in the code.

This commit is contained in:
cage 2024-06-19 15:42:10 +02:00
parent 810759bd6b
commit 9c4503e3bd
2 changed files with 71 additions and 73 deletions

View File

@ -54,10 +54,6 @@
"folder") "folder")
(:function (lambda (a) (db::quote-symbol a)))) (:function (lambda (a) (db::quote-symbol a))))
(defrule fedisearch-column-value (and #\" (+ (not #\")) #\")
(:text t))
(defrule fedisearch-column-value (and #\" (+ (not #\")) #\") (defrule fedisearch-column-value (and #\" (+ (not #\")) #\")
(:text t)) (:text t))

View File

@ -16,51 +16,52 @@
(in-package :gempub) (in-package :gempub)
(defrule title "title" (:constant :title)) (defrule gempub-title "title" (:constant :title))
(defrule gpubVersion "gpubVersion" (:constant :gpubVersion)) (defrule gempub-gpubVersion "gpubVersion" (:constant :gpubVersion))
(defrule index "index" (:constant :index)) (defrule gempub-index "index" (:constant :index))
(defrule author "author" (:constant :author)) (defrule gempub-author "author" (:constant :author))
(defrule language "language" (:constant :language)) (defrule gempub-language "language" (:constant :language))
(defrule charset "charset" (:constant :charset)) (defrule gempub-charset "charset" (:constant :charset))
(defrule description "description" (:constant :description)) (defrule gempub-description "description" (:constant :description))
(defrule published "published" (:constant :published)) (defrule gempub-published "published" (:constant :published))
(defrule publishDate "publishDate" (:constant :publishDate)) (defrule gempub-publishDate "publishDate" (:constant :publishDate))
(defrule revisionDate "revisionDate" (:constant :revisionDate)) (defrule gempub-revisionDate "revisionDate" (:constant :revisionDate))
(defrule copyright "copyright" (:constant :copyright)) (defrule gempub-copyright "copyright" (:constant :copyright))
(defrule license "license" (:constant :license)) (defrule gempub-license "license" (:constant :license))
(defrule version "version" (:constant :version)) (defrule gempub-version "version" (:constant :version))
(defrule cover "cover" (:constant :cover)) (defrule gempub-cover "cover" (:constant :cover))
(defrule blank (or #\space #\Newline #\Tab) (defrule gempub-blank (or #\space #\Newline #\Tab)
(:constant nil)) (:constant nil))
(defrule blanks (* blank) (defrule gempub-blanks (* gempub-blank)
(:constant nil)) (:constant nil))
(defrule key-value-separator #\:) (defrule gempub-key-value-separator #\:)
(defrule value (+ (not #\Newline)) (defrule gempub-value (+ (not #\Newline))
(:text t)) (:text t))
(defrule key (or title (defrule gempub-key (or gempub-title
gpubVersion gempub-gpubVersion
index gempub-index
author gempub-author
language gempub-language
charset gempub-charset
description gempub-description
published gempub-published
publishDate gempub-publishDate
revisionDate gempub-revisionDate
copyright gempub-copyright
license gempub-license
version gempub-version
cover)) gempub-cover))
(defrule entry (and key (? blanks) key-value-separator (? blanks) value blanks) (defrule gempub-entry (and gempub-key (? gempub-blanks) gempub-key-value-separator
(? gempub-blanks) gempub-value gempub-blanks)
(:function (lambda (a) (list (first a) (fifth a))))) (:function (lambda (a) (list (first a) (fifth a)))))
(defrule metadata (* entry) (defrule gempub-metadata (* gempub-entry)
(:function flatten)) (:function flatten))
(defgeneric parse-metadata (object)) (defgeneric parse-metadata (object))
@ -125,95 +126,96 @@
(loop for added in added-file do (loop for added in added-file do
(ui:notify (format nil (_ "Added gempub ~s into the library") added)))))) (ui:notify (format nil (_ "Added gempub ~s into the library") added))))))
(defrule spaces (+ blank) (defrule gempub-spaces (+ gempub-blank)
(:constant nil)) (:constant nil))
(defrule publish-date-alias "publishedDate" (defrule gempub-publish-date-alias "publishedDate"
(:constant "\"published-date\"")) (:constant "\"published-date\""))
(defrule revision-date-alias "revisionDate" (defrule gempub-revision-date-alias "revisionDate"
(:constant "\"revision-date\"")) (:constant "\"revision-date\""))
(defrule column-alias (or publish-date-alias (defrule gempub-column-alias (or gempub-publish-date-alias
revision-date-alias)) gempub-revision-date-alias))
(defrule column (or column-alias (defrule gempub-column (or gempub-column-alias
"title" "title"
"author" "author"
"language" "language"
"description" "description"
"publish-date" "publish-date"
"revision-date" "revision-date"
"published" "published"
"copyright") "copyright")
(:text t)) (:text t))
(defrule column-value (and #\" (+ (not #\")) #\") (defrule gempub-column-value (and #\" (+ (not #\")) #\")
(:text t)) (:text t))
(defrule term (or and-where (defrule gempub-term (or gempub-and-where
or-where gempub-or-where
like gempub-like
=-term gempub-=-term
!=-term gempub-!=-term
<-term gempub-<-term
>-term gempub->-term
<=-term gempub-<=-term
>=-term) gempub->=-term)
(:function (lambda (a) (join-with-strings a " ")))) (:function (lambda (a) (join-with-strings a " "))))
(defrule like (and column spaces "like" spaces column-value) (defrule gempub-like (and gempub-column gempub-spaces "like"
gempub-spaces gempub-column-value)
(:function (lambda (a) (format nil (:function (lambda (a) (format nil
"~a like \"%~a%\"" "~a like \"%~a%\""
(first a) (first a)
(string-trim '(#\") (fifth a)))))) (string-trim '(#\") (fifth a))))))
(defrule =-term (and column spaces "=" spaces column-value) (defrule gempub-=-term (and gempub-column gempub-spaces "=" gempub-spaces gempub-column-value)
(:function (lambda (a) (format nil (:function (lambda (a) (format nil
"~a = ~a" "~a = ~a"
(first a) (first a)
(fifth a))))) (fifth a)))))
(defrule <-term (and column spaces "<" spaces column-value) (defrule gempub-<-term (and gempub-column gempub-spaces "<" gempub-spaces gempub-column-value)
(:function (lambda (a) (format nil (:function (lambda (a) (format nil
"~a < ~a" "~a < ~a"
(first a) (first a)
(fifth a))))) (fifth a)))))
(defrule >-term (and column spaces ">" spaces column-value) (defrule gempub->-term (and gempub-column gempub-spaces ">" gempub-spaces gempub-column-value)
(:function (lambda (a) (format nil (:function (lambda (a) (format nil
"~a > ~a" "~a > ~a"
(first a) (first a)
(fifth a))))) (fifth a)))))
(defrule <=-term (and column spaces "<=" spaces column-value) (defrule gempub-<=-term (and gempub-column gempub-spaces "<=" gempub-spaces gempub-column-value)
(:function (lambda (a) (format nil (:function (lambda (a) (format nil
"~a <= ~a" "~a <= ~a"
(first a) (first a)
(fifth a))))) (fifth a)))))
(defrule >=-term (and column spaces ">=" spaces column-value) (defrule gempub->=-term (and gempub-column gempub-spaces ">=" gempub-spaces gempub-column-value)
(:function (lambda (a) (format nil (:function (lambda (a) (format nil
"~a >= ~a" "~a >= ~a"
(first a) (first a)
(fifth a))))) (fifth a)))))
(defrule !=-term (and column spaces "!=" spaces column-value) (defrule gempub-!=-term (and gempub-column gempub-spaces "!=" gempub-spaces gempub-column-value)
(:function (lambda (a) (format nil (:function (lambda (a) (format nil
"~a != ~a" "~a != ~a"
(first a) (first a)
(fifth a))))) (fifth a)))))
(defrule and-where (and term spaces "and" spaces term)) (defrule gempub-and-where (and gempub-term gempub-spaces "and" gempub-spaces gempub-term))
(defrule or-where (and term spaces "or" spaces term)) (defrule gempub-or-where (and gempub-term gempub-spaces "or" gempub-spaces gempub-term))
(defrule where-clause (and "where" spaces (+ term)) (defrule gempub-where-clause (and "where" gempub-spaces (+ gempub-term))
(:function (lambda (a) (strcat "where " (join-with-strings (third a) " "))))) (:function (lambda (a) (strcat "where " (join-with-strings (third a) " ")))))
(defun parse-search-gempub (query) (defun parse-search-gempub (query)
(let* ((where-clause (when (string-not-empty-p query) (let* ((where-clause (when (string-not-empty-p query)
(parse 'where-clause query))) (parse 'gempub-where-clause query)))
(sql-query (if where-clause (sql-query (if where-clause
(strcat (format nil (strcat (format nil
"select * from \"~a\" ~a" "select * from \"~a\" ~a"