summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
authorAndrew Tropin <andrew@trop.in>2023-02-09 17:34:05 +0400
committerAndrew Tropin <andrew@trop.in>2023-02-09 17:37:14 +0400
commit53b00b91b73bd60412d5bd057e22e6d63194a7f7 (patch)
treee29c398ce880548e9b31d3573ba696e55f87c8c6 /gnu/packages
parent0cd9bd5dce2b51a6d79a1a1a6fc70bfd787acbc7 (diff)
downloadguix-53b00b91b73bd60412d5bd057e22e6d63194a7f7.tar.gz
gnu: Add tree-sitter-grammar-html.
* gnu/packages/crates-io.scm (tree-sitter-grammar): New variable.
(tree-sitter-grammar-html): New variable.
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/tree-sitter.scm61
1 files changed, 61 insertions, 0 deletions
diff --git a/gnu/packages/tree-sitter.scm b/gnu/packages/tree-sitter.scm
index 4a5e082e5b..2e44339ca2 100644
--- a/gnu/packages/tree-sitter.scm
+++ b/gnu/packages/tree-sitter.scm
@@ -1,6 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
 ;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2022 muradm <mail@muradm.net>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2023 Andrew Tropin <andrew@trop.in>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -151,3 +154,61 @@ can be embedded in any application.
 
 This package includes the @command{tree-sitter} command-line tool.")
     (license license:expat)))
+
+(define* (tree-sitter-grammar
+          language language-for-synopsis version commit hash
+          #:key
+          (repository-url
+           (format #f "https://github.com/tree-sitter/tree-sitter-~a" language))
+          (source-directory ""))
+  (let ((synopsis (string-append language-for-synopsis
+                                 " grammar for tree-sitter"))
+        (name (string-append "tree-sitter-grammar-" language))
+        (src-dir source-directory)
+        (lib (format #f "libtree-sitter-~a.so" language)))
+    (package
+      (name name)
+      (version version)
+      (home-page repository-url)
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url repository-url)
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256 (base32 hash))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'configure)
+            (replace 'build
+              (lambda _
+                (with-directory-excursion (string-append #$src-dir "src")
+                  (let* ((scanner? (or (file-exists? "scanner.c")
+                                       (file-exists? "scanner.cc")))
+                         (CC (if (file-exists? "scanner.cc") "g++" "gcc"))
+                         (compile (lambda (f) (invoke CC "-fPIC" "-c" "-I." f)))
+                         (link-args `("-fPIC" "-shared" "parser.o"
+                                      ,@(if scanner? '("scanner.o") '())
+                                      "-o" ,#$lib)))
+                    (invoke "gcc" "-fPIC" "-c" "-I." "parser.c")
+                    (for-each
+                     (lambda (f) (when (file-exists? f) (compile f)))
+                     '("scanner.c" "scanner.cc"))
+                    (apply invoke CC link-args)))))
+            (delete 'check)
+            (replace 'install
+              (lambda _
+                (install-file (string-append #$src-dir "src/" #$lib)
+                              (string-append #$output "/lib/tree-sitter")))))))
+      (synopsis synopsis)
+      (description (string-append synopsis "."))
+      (license license:expat))))
+
+(define-public tree-sitter-grammar-html
+  (tree-sitter-grammar
+   "html" "HTML"
+   "0.19.0" "v0.19.0"
+   "1hg7vbcy7bir6b8x11v0a4x0glvqnsqc3i2ixiarbxmycbgl3axy"))