blob: 47781c3cec3db4e9ce63bde65edb3a003a4bc53d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
;;; guile-syntax-highlight --- General-purpose syntax highlighter
;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
;;;
;;; Guile-syntax-highlight is free software; you can redistribute it
;;; and/or modify it under the terms of the GNU Lesser General Public
;;; License as published by the Free Software Foundation; either
;;; version 3 of the License, or (at your option) any later version.
;;;
;;; Guile-syntax-highlight is distributed in the hope that it will be
;;; useful, but WITHOUT ANY WARRANTY; without even the implied
;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
;;; See the GNU Lesser General Public License for more details.
;;;
;;; You should have received a copy of the GNU Lesser General Public
;;; License along with guile-syntax-highlight. If not, see
;;; <http://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; Syntax highlighting for gitignore files.
;;
;;; Code:
(define-module (syntax-highlight gitignore)
#:use-module (syntax-highlight lexers)
#:export (lex-gitignore))
(define lex-line
(lex-consume-until
(lex-string "\n")
(lex-any
(lex-tag 'special (apply lex-any (map lex-string '("*" "**" "?"))))
(lex-tag 'range (lex-delimited "[" #:until "]"))
(apply lex-any (map lex-string '("\\!" "\\*" "\\\\" "\\?" "\\[")))
(lex-char-set (char-set-complement (char-set #\newline #\\ #\* #\? #\[))))
#:tag 'line))
(define lex-gitignore
(lex-consume
(lex-any (lex-tag 'comment (lex-delimited "#" #:until "\n"))
(lex-tag 'special (lex-string "!"))
lex-line)))
|