1 USING: accessors calendar calendar.format io io.encodings.utf8
2 io.files kernel multiline parser sequences sorting splitting
4 IN: editors.vim.generate-syntax
8 CONSTANT: highlighted-vocabs {
43 : (vocab-name>syntax-group-name) ( str -- str )
44 "_" "___" "-" "__" "." "_" [ replace ] 2tri@ ;
46 : vocab-name>syntax-group-name ( str -- str )
47 (vocab-name>syntax-group-name) "factorWord_" prepend ;
49 : write-syn-keyword ( str seq seq -- )
50 "syn keyword " write [ write ] 2dip
51 [ bl [ bl ] [ write ] interleave ] unless-empty
52 [ bl [ bl ] [ "|" "\\|" replace write ] interleave ]
55 : write-keywords ( vocab -- )
57 [ name>> ] [ vocab-words [ name>> ] map ] bi natural-sort [
58 [ vocab-name>syntax-group-name
59 [ "SynKeywordFactorWord " write write " | " write ] keep
61 { "contained" } write-syn-keyword nl
64 : (generate-vim-syntax) ( -- )
67 " Maintainer: Alex Chapman <chapman.alex@gmail.com>
68 " Last Change: ]=] write
69 now >gmt { YYYY " " MONTH " " DD } formatted [=[
70 " Minimum Version: 600
71 " To regenerate: USE: editors.vim.generate-syntax generate-vim-syntax
73 if exists('b:factorsyn_no_generated')
77 command -nargs=+ -bar HiLink hi def link <args>
78 function s:syn_keyword_factor_word(group, ...)
79 execute 'HiLink' a:group 'factorWord'
80 execute 'syn' 'cluster' 'factorWord' 'add=' . a:group
82 command -nargs=+ -bar SynKeywordFactorWord
83 \ call s:syn_keyword_factor_word(<f-args>)
86 highlighted-vocabs [ write-keywords ] each nl
89 delcommand SynKeywordFactorWord
91 let b:factor_syn_no_generated = 1
93 " vim:set ft=vim sw=2:]=] print ;
97 : generate-vim-syntax ( -- )
98 "resource:misc/vim/syntax/factor/generated.vim"
99 utf8 [ (generate-vim-syntax) ] with-file-writer ;
101 MAIN: generate-vim-syntax