editors.vim.generate-syntax: merge in factor.vim.fgen.

master
John Benediktsson 2020-06-08 11:06:22 -07:00
parent b0b5c31821
commit d9210f738d
3 changed files with 97 additions and 104 deletions

View File

@ -1,10 +1,101 @@
! Generate a new factor.vim file for syntax highlighting
USING: io.encodings.utf8 io.files parser ;
USING: accessors calendar calendar.format io io.encodings.utf8
io.files kernel multiline parser sequences sorting splitting
vocabs ;
IN: editors.vim.generate-syntax
<PRIVATE
CONSTANT: highlighted-vocabs {
"alien"
"arrays"
"assocs"
"byte-arrays"
"classes"
"classes.maybe"
"combinators"
"continuations"
"definitions"
"destructors"
"generic"
"growable"
"io"
"io.encodings"
"io.encodings.binary"
"io.encodings.utf8"
"io.files"
"kernel"
"layouts"
"make"
"math"
"math.order"
"memory"
"namespaces"
"sequences"
"sets"
"sorting"
"splitting"
"strings"
"strings.parser"
"syntax"
"vectors"
}
: (vocab-name>syntax-group-name) ( str -- str )
"_" "___" "-" "__" "." "_" [ replace ] 2tri@ ;
: vocab-name>syntax-group-name ( str -- str )
(vocab-name>syntax-group-name) "factorWord_" prepend ;
: write-syn-keyword ( str seq seq -- )
"syn keyword " write [ write ] 2dip
[ bl [ bl ] [ write ] interleave ] unless-empty
[ bl [ bl ] [ "|" "\\|" replace write ] interleave ]
unless-empty ;
: write-keywords ( vocab -- )
lookup-vocab
[ name>> ] [ vocab-words [ name>> ] map ] bi natural-sort [
[ vocab-name>syntax-group-name
[ "SynKeywordFactorWord " write write " | " write ] keep
] dip
{ "contained" } write-syn-keyword nl
] [ drop ] if* ;
: (generate-vim-syntax) ( -- )
[=[ " Vim syntax file
" Language: Factor
" Maintainer: Alex Chapman <chapman.alex@gmail.com>
" Last Change: ]=] write
now >gmt { YYYY " " MONTH " " DD } formatted [=[
" Minimum Version: 600
" To regenerate: USE: editors.vim.generate-syntax generate-vim-syntax
if exists('b:factorsyn_no_generated')
finish
endif
command -nargs=+ -bar HiLink hi def link <args>
function s:syn_keyword_factor_word(group, ...)
execute 'HiLink' a:group 'factorWord'
execute 'syn' 'cluster' 'factorWord' 'add=' . a:group
endfunction
command -nargs=+ -bar SynKeywordFactorWord
\ call s:syn_keyword_factor_word(<f-args>)
]=] print
highlighted-vocabs [ write-keywords ] each nl
[=[ delcommand HiLink
delcommand SynKeywordFactorWord
let b:factor_syn_no_generated = 1
" vim:set ft=vim sw=2:]=] print ;
PRIVATE>
: generate-vim-syntax ( -- )
"resource:misc/vim/syntax/factor/generated.vim"
utf8 "resource:misc/factor.vim.fgen" parse-file
with-file-writer ;
utf8 [ (generate-vim-syntax) ] with-file-writer ;
MAIN: generate-vim-syntax

View File

@ -1,98 +0,0 @@
USING: accessors
calendar calendar.format
io kernel multiline prettyprint sequences sorting
splitting tr vocabs ;
IN: factor.vim.fgen
ALIAS: wr write
[=[ " Vim syntax file
" Language: Factor
" Maintainer: Alex Chapman <chapman.alex@gmail.com>
" Last Change: ]=] wr
now >gmt { YYYY " " MONTH " " DD } formatted [=[
" Minimum Version: 600
" To regenerate: ]=] wr {
[=[ USING: io.encodings.utf8 io.files parser ; ]=]
[=[ "resource:misc/vim/syntax/factor/generated.vim" utf8 ]=]
[=[ "resource:misc/factor.vim.fgen" parse-file ]=]
[=[ with-file-writer]=]
} [ wr ] each [=[
if exists('b:factorsyn_no_generated')
finish
endif
]=] wr nl
[=[ command -nargs=+ -bar HiLink hi def link <args>
function s:syn_keyword_factor_word(group, ...)
execute 'HiLink' a:group 'factorWord'
execute 'syn' 'cluster' 'factorWord' 'add=' . a:group
endfunction
command -nargs=+ -bar SynKeywordFactorWord
\ call s:syn_keyword_factor_word(<f-args>)
]=] wr nl
: (vocab-name>syntax-group-name) ( string -- string )
"_" "___" "-" "__" "." "_" [ replace ] 2tri@ ;
: vocab-name>syntax-group-name ( string -- string )
(vocab-name>syntax-group-name) "factorWord_" prepend ;
: write-syn-keyword ( string seq seq -- )
"syn keyword " wr [ wr ] 2dip
[ bl [ bl ] [ wr ] interleave ] unless-empty
[ bl [ bl ] [ "|" "\\|" replace wr ] interleave ]
unless-empty ;
: write-keywords ( vocab -- )
lookup-vocab
[ name>> ] [ vocab-words [ name>> ] map ] bi natural-sort [
[ vocab-name>syntax-group-name
[ "SynKeywordFactorWord " wr wr " | " wr ] keep
] dip
{ "contained" } write-syn-keyword nl
] [ drop ] if* ;
f
! Uncomment to highlight all words from all vocabularies.
! Note that factor/generated.vim grows from ~16k to ~100k.
! drop t
[ loaded-vocab-names ] [ {
"alien"
"arrays"
"assocs"
"byte-arrays"
"classes"
"classes.maybe"
"combinators"
"continuations"
"definitions"
"destructors"
"generic"
"growable"
"io"
"io.encodings"
"io.encodings.binary"
"io.encodings.utf8"
"io.files"
"kernel"
"layouts"
"make"
"math"
"math.order"
"memory"
"namespaces"
"sequences"
"sets"
"sorting"
"splitting"
"strings"
"strings.parser"
"syntax"
"vectors"
} ] if [ write-keywords ] each nl
[=[ delcommand HiLink
delcommand SynKeywordFactorWord
]=] wr nl
[=[ let b:factor_syn_no_generated = 1
]=] wr nl
! Modeline is broken up to prevent detection here.
[=[ " vim]=] wr [=[ :set ft=vim sw=2:]=] wr nl
! vim:set ft=factor:

View File

@ -1,9 +1,9 @@
" Vim syntax file
" Language: Factor
" Maintainer: Alex Chapman <chapman.alex@gmail.com>
" Last Change: 2020 Jun 05
" Last Change: 2020 Jun 08
" Minimum Version: 600
" To regenerate: USING: io.encodings.utf8 io.files parser ; "resource:misc/vim/syntax/factor/generated.vim" utf8 "resource:misc/factor.vim.fgen" parse-file with-file-writer
" To regenerate: USE: editors.vim.generate-syntax generate-vim-syntax
if exists('b:factorsyn_no_generated')
finish