Update syntax-highlight to latest version
Makefile.am
11 | 11 | gitile/handler.scm \ | |
12 | 12 | gitile/pages.scm \ | |
13 | 13 | gitile/repo.scm \ | |
14 | - | gitile/highlight/gitignore.scm \ | |
15 | - | gitile/highlight/shell.scm \ | |
16 | - | gitile/highlight/utils.scm | |
14 | + | gitile/highlight/shell.scm | |
17 | 15 | ||
18 | 16 | jsdir=$(datadir)/gitile/assets/js | |
19 | 17 | cssdir=$(datadir)/gitile/assets/css |
gitile/code.scm
20 | 20 | #:use-module (ice-9 match) | |
21 | 21 | #:use-module (syntax-highlight) | |
22 | 22 | #:use-module (syntax-highlight scheme) | |
23 | - | #:use-module (gitile highlight gitignore) | |
23 | + | #:use-module (syntax-highlight gitignore) | |
24 | 24 | #:use-module (gitile highlight shell) | |
25 | - | #:use-module ((gitile highlight utils) #:prefix gitile:) | |
26 | 25 | #:export (display-code | |
27 | 26 | display-formatted-code)) | |
28 | 27 | ||
… | |||
39 | 38 | ("bootstrap" "shell") | |
40 | 39 | (_ "unknown")))))) | |
41 | 40 | `(table (@ (class ,(string-append "file-content language-" language))) | |
42 | - | ,@(split-tr (gitile:highlights->sxml (highlight-code content language)))))) | |
41 | + | ,@(split-tr (highlights->sxml (highlight-code content language)))))) | |
43 | 42 | ||
44 | 43 | (define (display-formatted-code content language) | |
45 | - | (gitile:highlights->sxml (highlight-code content language))) | |
44 | + | (highlights->sxml (highlight-code content language))) | |
46 | 45 | ||
47 | 46 | (define (highlight-code content language) | |
48 | 47 | (match language |
gitile/highlight/css.scm unknown status 2
1 | - | (define-module (gitile highlight css) | |
2 | - | #:use-module (ice-9 match) | |
3 | - | #:use-module (srfi srfi-1) | |
4 | - | #:use-module (srfi srfi-11) | |
5 | - | #:use-module (srfi srfi-26) | |
6 | - | #:use-module (syntax-highlight lexers) | |
7 | - | #:export (lex-css)) | |
8 | - | ||
9 | - | (define %css-units | |
10 | - | '("cm" "mm" "in" "px" "pt" "pc" "em" "ex" "ch" "rem" "vw" "vh" "vmin" "vmax" "%")) | |
11 | - | ||
12 | - | (define %css-functions | |
13 | - | '("url" "attr" "calc" "cubic-bezier" "hsl" "hsla" "linear-gradient" | |
14 | - | "radial-gradient" "repeating-linear-gradient" "repeating-radial-gradient" | |
15 | - | "rgb" "rgba" "var")) | |
16 | - | ||
17 | - | (define lex-css-whitespace | |
18 | - | (lex-char-set char-set:whitespace)) | |
19 | - | ||
20 | - | (define lex-comment | |
21 | - | (lex-tag 'comment (lex-delimited "/*" #:until "*/"))) | |
22 | - | ||
23 | - | (define lex-whitespace | |
24 | - | (lex-any | |
25 | - | lex-css-whitespace | |
26 | - | lex-comment)) | |
27 | - | ||
28 | - | (define lex-number | |
29 | - | (lex-all | |
30 | - | (lex-char-set char-set:digit) | |
31 | - | (lex-maybe | |
32 | - | (lex-all | |
33 | - | (lex-string ".") | |
34 | - | (lex-char-set char-set:digit))))) | |
35 | - | ||
36 | - | (define lex-css-string | |
37 | - | (lex-any | |
38 | - | (lex-tag 'string (lex-delimited "\"")) | |
39 | - | (lex-tag 'string (lex-delimited "'")))) | |
40 | - | ||
41 | - | (define lex-selector | |
42 | - | (lex-any | |
43 | - | (lex-all (lex-string ".") (lex-tag 'class (lex-char-set char-set:letter+digit))) | |
44 | - | (lex-all (lex-string "#") (lex-tag 'id (lex-char-set char-set:letter+digit))) | |
45 | - | (lex-all (lex-string "[") | |
46 | - | (lex-tag 'attr (lex-char-set char-set:letter)) | |
47 | - | (lex-any (map lex-string '("=" "~=" "|=" "^=" "$=" "*="))) | |
48 | - | (lex-tag 'value (lex-any lex-css-string | |
49 | - | (lex-char-set | |
50 | - | (char-set-adjoin char-set:letter+digit #\_)))) | |
51 | - | (lex-string "]")) | |
52 | - | (lex-all (lex-string "[") | |
53 | - | (lex-tag 'attr (lex-char-set char-set:letter)) | |
54 | - | (lex-string "]")) | |
55 | - | (lex-tag 'selector (lex-all (lex-string "::") (lex-char-set char-set:letter+digit))) | |
56 | - | (lex-tag 'selector (lex-all (lex-string ":") (lex-char-set char-set:letter+digit))))) | |
57 | - | ||
58 | - | (define lex-size | |
59 | - | (lex-tag 'size (lex-all lex-number (lex-any (map lex-string %css-units))))) | |
60 | - | ||
61 | - | (define lex-base-property-value | |
62 | - | (lex-any | |
63 | - | (lex-tag 'size (lex-all lex-number (lex-any (map lex-string %css-units)))) | |
64 | - | (lex-tag 'number lex-number) | |
65 | - | (lex-tag 'keyword (lex-char-set (char-set-adjoin char-set:letter #\-))) | |
66 | - | (lex-all (lex-string "#") (lex-tag 'color (lex-char-set (string->char-set "0123456789abcdefABCDEF")))) | |
67 | - | lex-css-string)) | |
68 | - | ||
69 | - | (define lex-expression | |
70 | - | (lex-all | |
71 | - | lex-base-property-value | |
72 | - | (lex-zero-or-more | |
73 | - | (lex-all | |
74 | - | lex-whitespace | |
75 | - | (lex-any* (map lex-string '("+" "-" "*" "/"))) | |
76 | - | lex-whitespace | |
77 | - | lex-base-property-value)))) | |
78 | - | ||
79 | - | (define lex-property-value | |
80 | - | (lex-any | |
81 | - | lex-base-property-value | |
82 | - | (lex-all | |
83 | - | (lex-tag 'function (map lex-string %css-functions)) | |
84 | - | (lex-string "(") | |
85 | - | (lex-zero-or-more | |
86 | - | (lex-any | |
87 | - | lex-whitespace | |
88 | - | (lex-string ",") | |
89 | - | lex-expression)) | |
90 | - | (lex-string ")")))) | |
91 | - | ||
92 | - | (define lex-property | |
93 | - | (lex-all | |
94 | - | (lex-tag 'property (lex-char-set (char-set-adjoin char-set:letter #\-))) | |
95 | - | lex-whitespace | |
96 | - | (lex-string ":") | |
97 | - | lex-whitespace | |
98 | - | (lex-zero-or-more | |
99 | - | (lex-any | |
100 | - | lex-property-value | |
101 | - | lex-whitespace | |
102 | - | (lex-string ",") | |
103 | - | lex-whitespace)) | |
104 | - | (lex-maybe (lex-string ";")))) | |
105 | - | ||
106 | - | (define lex-css | |
107 | - | (lex-consume | |
108 | - | (lex-any | |
109 | - | lex-whitespace | |
110 | - | lex-css-string | |
111 | - | (lex-tag 'tag (lex-any (lex-char-set char-set:letter+digit) (lex-string "*"))) | |
112 | - | (lex-tag 'operator (lex-any (map lex-string '(">" "+" "~")))) | |
113 | - | (lex-tag 'selector lex-selector) | |
114 | - | (lex-all (lex-string "(") | |
115 | - | (lex-any lex-selector (lex-char-set char-set:digit)) | |
116 | - | (lex-string ")")) | |
117 | - | (lex-string ",") | |
118 | - | (lex-all (lex-string "{") | |
119 | - | (lex-zero-or-more | |
120 | - | (lex-any | |
121 | - | lex-whitespace | |
122 | - | lex-comment | |
123 | - | lex-property)) | |
124 | - | (lex-string "}"))))) |
gitile/highlight/gitignore.scm unknown status 2
1 | - | ;;;; Copyright (C) 2021 Julien Lepiller <julien@lepiller.eu> | |
2 | - | ;;;; | |
3 | - | ;;;; SPDX-License-Identifier: AGPL-3.0-or-later | |
4 | - | ;;;; | |
5 | - | ;;;; This program is free software: you can redistribute it and/or modify | |
6 | - | ;;;; it under the terms of the GNU Affero General Public License as published by | |
7 | - | ;;;; the Free Software Foundation, either version 3 of the License, or | |
8 | - | ;;;; (at your option) any later version. | |
9 | - | ;;;; | |
10 | - | ;;;; This program is distributed in the hope that it will be useful, | |
11 | - | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | - | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | - | ;;;; GNU Affero General Public License for more details. | |
14 | - | ;;;; | |
15 | - | ;;;; You should have received a copy of the GNU Affero General Public License | |
16 | - | ;;;; along with this program. If not, see <https://www.gnu.org/licenses/>. | |
17 | - | ;;;; | |
18 | - | ||
19 | - | (define-module (gitile highlight gitignore) | |
20 | - | #:use-module (ice-9 match) | |
21 | - | #:use-module (srfi srfi-1) | |
22 | - | #:use-module (srfi srfi-11) | |
23 | - | #:use-module (srfi srfi-26) | |
24 | - | #:use-module (syntax-highlight lexers) | |
25 | - | #:use-module (gitile highlight utils) | |
26 | - | #:export (lex-gitignore)) | |
27 | - | ||
28 | - | (define lex-line | |
29 | - | (lex-consume-until | |
30 | - | (lex-string "\n") | |
31 | - | (lex-any | |
32 | - | (lex-tag 'special (apply lex-any (map lex-string '("*" "**" "?")))) | |
33 | - | (lex-tag 'range (lex-delimited "[" #:until "]")) | |
34 | - | (apply lex-any (map lex-string '("\\!" "\\*" "\\\\" "\\?"))) | |
35 | - | (lex-char-set (char-set-complement (char-set #\newline #\\ #\* #\?)))) | |
36 | - | #:tag 'line)) | |
37 | - | ||
38 | - | (define lex-gitignore | |
39 | - | (lex-consume | |
40 | - | (lex-any (lex-tag 'comment (lex-delimited "#" #:until "\n")) | |
41 | - | (lex-tag 'special (lex-string "!")) | |
42 | - | lex-line))) |
gitile/highlight/shell.scm
22 | 22 | #:use-module (srfi srfi-11) | |
23 | 23 | #:use-module (srfi srfi-26) | |
24 | 24 | #:use-module (syntax-highlight lexers) | |
25 | - | #:use-module (gitile highlight utils) | |
26 | 25 | #:export (%shell-builtins | |
27 | 26 | %shell-keywords | |
28 | 27 | make-shell-lexer |
gitile/highlight/utils.scm unknown status 2
1 | - | ;;;; Copyright (C) 2021 Julien Lepiller <julien@lepiller.eu> | |
2 | - | ;;;; | |
3 | - | ;;;; SPDX-License-Identifier: AGPL-3.0-or-later | |
4 | - | ;;;; | |
5 | - | ;;;; This program is free software: you can redistribute it and/or modify | |
6 | - | ;;;; it under the terms of the GNU Affero General Public License as published by | |
7 | - | ;;;; the Free Software Foundation, either version 3 of the License, or | |
8 | - | ;;;; (at your option) any later version. | |
9 | - | ;;;; | |
10 | - | ;;;; This program is distributed in the hope that it will be useful, | |
11 | - | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | - | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | - | ;;;; GNU Affero General Public License for more details. | |
14 | - | ;;;; | |
15 | - | ;;;; You should have received a copy of the GNU Affero General Public License | |
16 | - | ;;;; along with this program. If not, see <https://www.gnu.org/licenses/>. | |
17 | - | ;;;; | |
18 | - | ||
19 | - | (define-module (gitile highlight utils) | |
20 | - | #:use-module (ice-9 match) | |
21 | - | #:use-module (srfi srfi-1) | |
22 | - | #:use-module (srfi srfi-11) | |
23 | - | #:use-module (syntax-highlight lexers) | |
24 | - | #:export (highlights->sxml | |
25 | - | lex-consume-until)) | |
26 | - | ||
27 | - | (define (flatten-highlights highlights) | |
28 | - | (define (flatten-highlights-aux content tokens) | |
29 | - | (match content | |
30 | - | ((? string? s) (if (null? tokens) | |
31 | - | (list s) | |
32 | - | `((,@tokens ,s)))) | |
33 | - | (((? symbol? token) content ...) | |
34 | - | (flatten-highlights-aux content (cons token tokens))) | |
35 | - | ((? list? content) | |
36 | - | (append-map (lambda (c) (flatten-highlights-aux c tokens)) content)))) | |
37 | - | ||
38 | - | (flatten-highlights-aux highlights '())) | |
39 | - | ||
40 | - | (define (highlights->sxml highlights) | |
41 | - | (define flat-highlights (flatten-highlights highlights)) | |
42 | - | ||
43 | - | (define (tag->class tag) | |
44 | - | (string-append "syntax-" (symbol->string tag))) | |
45 | - | ||
46 | - | (map (match-lambda | |
47 | - | ((? string? str) str) | |
48 | - | ((content ...) | |
49 | - | (let loop ((tags '()) (text "") (content content)) | |
50 | - | (match content | |
51 | - | (() `(span (@ (class ,(string-join (map tag->class tags) " "))) ,text)) | |
52 | - | (((? symbol? tag) content ...) | |
53 | - | (loop (cons tag tags) text content)) | |
54 | - | (((? string? s) content ...) | |
55 | - | (loop tags (string-append text s) content)))))) | |
56 | - | flat-highlights)) | |
57 | - | ||
58 | - | (define* (lex-consume-until until lexer #:key (tag #f)) | |
59 | - | "Return a lexer that always succeeds with a list of as many consecutive | |
60 | - | successful applications of LEXER as possible, consuming the entire input text, | |
61 | - | or until a successful match of UNTIL, whichever comes first. Sections of text | |
62 | - | that could not be lexed are returned as plain strings." | |
63 | - | (define (substring* cursor start) | |
64 | - | (substring (cursor-text cursor) start (cursor-position cursor))) | |
65 | - | ||
66 | - | (define (consume-until tokens cursor) | |
67 | - | (if (cursor-end? cursor) | |
68 | - | (values tokens cursor) | |
69 | - | (let-values (((result remainder) (until tokens cursor))) | |
70 | - | (if result | |
71 | - | (values result remainder) | |
72 | - | (let-values (((result remainder) (lexer tokens cursor))) | |
73 | - | (if result | |
74 | - | (consume-until result remainder) | |
75 | - | (values (token-add tokens (cursor->string cursor)) | |
76 | - | (move-cursor-to-end cursor)))))))) | |
77 | - | ||
78 | - | (if tag | |
79 | - | (lambda (tokens cursor) | |
80 | - | (let-values (((result remainder) (consume-until empty-tokens cursor))) | |
81 | - | (values (token-add tokens (list tag (tokens->list result))) remainder))) | |
82 | - | consume-until)) |
guix.scm
20 | 20 | (guix licenses) | |
21 | 21 | (guix build-system gnu) | |
22 | 22 | (guix git-download) | |
23 | + | (guix git) | |
23 | 24 | (gnu packages autotools) | |
24 | 25 | (gnu packages gnupg) | |
25 | 26 | (gnu packages guile) | |
… | |||
35 | 36 | (method git-fetch) | |
36 | 37 | (uri (git-reference | |
37 | 38 | (url "https://git.dthompson.us/guile-syntax-highlight.git") | |
38 | - | (commit "51727cbb7fc05ef743aab2d7b16314ea1ed790e4"))) | |
39 | - | (file-name (git-file-name "guile-syntax-highlight" "0.1.51727cb")) | |
39 | + | (commit "897fa5156ff41588e0d281eb00e4e94de63ccd8a"))) | |
40 | + | (file-name (git-file-name "guile-syntax-highlight" "0.1.897fa51")) | |
40 | 41 | (sha256 | |
41 | 42 | (base32 | |
42 | - | "1cvacy4y5qxajygb1qg8hvhjdf2xnnwnm5j918cabsi8wfwchig7")))) | |
43 | + | "18zlg4mkgd3swgv2ggfz91ivnnzc0zhvc9ybgrxg1y762va9hyvj")))) | |
43 | 44 | (native-inputs | |
44 | 45 | `(("autoconf" ,autoconf) | |
45 | 46 | ("automake" ,automake) | |
… | |||
49 | 50 | (package | |
50 | 51 | (name "gitile") | |
51 | 52 | (version "0.1") | |
52 | - | (source #f) | |
53 | + | (source (git-checkout (url (dirname (current-filename))))) | |
53 | 54 | (build-system gnu-build-system) | |
54 | 55 | (propagated-inputs | |
55 | 56 | `(("guile-commonmark" ,guile-commonmark) |