summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--syntax-highlight/gitignore.scm42
2 files changed, 43 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index 6b89de1..3344c7d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -42,6 +42,7 @@ SOURCES = \
syntax-highlight/utils.scm \
syntax-highlight/lexers.scm \
syntax-highlight/c.scm \
+ syntax-highlight/gitignore.scm \
syntax-highlight/scheme.scm \
syntax-highlight/xml.scm \
syntax-highlight.scm
diff --git a/syntax-highlight/gitignore.scm b/syntax-highlight/gitignore.scm
new file mode 100644
index 0000000..47781c3
--- /dev/null
+++ b/syntax-highlight/gitignore.scm
@@ -0,0 +1,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)))