diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | syntax-highlight/gitignore.scm | 42 |
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))) |