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