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
7 CONSTANT: highlighted-vocabs {
42 : (vocab-name>syntax-group-name) ( str -- str )
43 "_" "___" "-" "__" "." "_" [ replace ] 2tri@ ;
45 : vocab-name>syntax-group-name ( str -- str )
46 (vocab-name>syntax-group-name) "factorWord_" prepend ;
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 ]
54 : write-keywords ( vocab -- )
56 [ name>> ] [ vocab-words [ name>> ] map ] bi natural-sort [
57 [ vocab-name>syntax-group-name
58 [ "SynKeywordFactorWord " write write " | " write ] keep
60 { "contained" } write-syn-keyword nl
63 : (generate-vim-syntax) ( -- )
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
72 if exists('b:factorsyn_no_generated')
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
81 command -nargs=+ -bar SynKeywordFactorWord
82 \ call s:syn_keyword_factor_word(<f-args>)
85 highlighted-vocabs [ write-keywords ] each nl
88 delcommand SynKeywordFactorWord
90 let b:factor_syn_no_generated = 1
92 " vim:set ft=vim sw=2:]=] print ;
96 : generate-vim-syntax ( -- )
97 "resource:misc/vim/syntax/factor/generated.vim"
98 utf8 [ (generate-vim-syntax) ] with-file-writer ;
100 MAIN: generate-vim-syntax