From 8ef95ff9e8e6125e9ae12d43dfccc00eeec30b4e Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Sat, 3 Jul 2021 17:10:43 +0200 Subject: Add gitignore lexer. --- Makefile.am | 1 + syntax-highlight/gitignore.scm | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 syntax-highlight/gitignore.scm 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 +;;; +;;; 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 +;;; . + +;;; 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))) -- cgit v1.2.3