]> gitweb.factorcode.org Git - factor.git/blob - basis/editors/vim/generate-syntax/generate-syntax.factor
factor: trim more using lists.
[factor.git] / basis / editors / vim / generate-syntax / generate-syntax.factor
1 USING: accessors calendar calendar.format io io.encodings.utf8
2 io.files kernel multiline sequences sorting splitting vocabs ;
3 IN: editors.vim.generate-syntax
4
5 <PRIVATE
6
7 CONSTANT: highlighted-vocabs {
8     "alien"
9     "arrays"
10     "assocs"
11     "byte-arrays"
12     "classes"
13     "classes.maybe"
14     "combinators"
15     "continuations"
16     "definitions"
17     "destructors"
18     "generic"
19     "growable"
20     "io"
21     "io.encodings"
22     "io.encodings.binary"
23     "io.encodings.utf8"
24     "io.files"
25     "kernel"
26     "layouts"
27     "make"
28     "math"
29     "math.order"
30     "memory"
31     "namespaces"
32     "sequences"
33     "sets"
34     "sorting"
35     "splitting"
36     "strings"
37     "strings.parser"
38     "syntax"
39     "vectors"
40 }
41
42 : (vocab-name>syntax-group-name) ( str -- str )
43     "_" "___" "-" "__" "." "_" [ replace ] 2tri@ ;
44
45 : vocab-name>syntax-group-name ( str -- str )
46     (vocab-name>syntax-group-name) "factorWord_" prepend ;
47
48 : write-syn-keyword ( str seq seq -- )
49     "syn keyword " write [ write ] 2dip
50     [ bl [ bl ] [ write ] interleave ] unless-empty
51     [ bl [ bl ] [ "|" "\\|" replace write ] interleave ]
52     unless-empty ;
53
54 : write-keywords ( vocab -- )
55     lookup-vocab
56     [ name>> ] [ vocab-words [ name>> ] map ] bi natural-sort [
57         [ vocab-name>syntax-group-name
58             [ "SynKeywordFactorWord " write write " | " write ] keep
59         ] dip
60         { "contained" } write-syn-keyword nl
61     ] [ drop ] if* ;
62
63 : (generate-vim-syntax) ( -- )
64     [=[ " Vim syntax file
65 " Language: Factor
66 " Maintainer: Alex Chapman <chapman.alex@gmail.com>
67 " Last Change: ]=] write
68     now-gmt { YYYY " " MONTH " " DD } formatted [=[
69 " Minimum Version: 600
70 " To regenerate: USE: editors.vim.generate-syntax generate-vim-syntax
71
72 if exists('b:factorsyn_no_generated')
73   finish
74 endif
75
76 command -nargs=+ -bar HiLink hi def link <args>
77 function s:syn_keyword_factor_word(group, ...)
78   execute 'HiLink' a:group 'factorWord'
79   execute 'syn' 'cluster' 'factorWord' 'add=' . a:group
80 endfunction
81 command -nargs=+ -bar SynKeywordFactorWord
82       \ call s:syn_keyword_factor_word(<f-args>)
83 ]=] print
84
85     highlighted-vocabs [ write-keywords ] each nl
86
87     [=[ delcommand HiLink
88 delcommand SynKeywordFactorWord
89
90 let b:factor_syn_no_generated = 1
91
92 " vim:set ft=vim sw=2:]=] print ;
93
94 PRIVATE>
95
96 : generate-vim-syntax ( -- )
97     "resource:misc/vim/syntax/factor/generated.vim"
98     utf8 [ (generate-vim-syntax) ] with-file-writer ;
99
100 MAIN: generate-vim-syntax