From d9210f738d40e38705b382f393952a87d464fb63 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 8 Jun 2020 11:06:22 -0700 Subject: [PATCH] editors.vim.generate-syntax: merge in factor.vim.fgen. --- .../generate-syntax/generate-syntax.factor | 99 ++++++++++++++++++- misc/factor.vim.fgen | 98 ------------------ misc/vim/syntax/factor/generated.vim | 4 +- 3 files changed, 97 insertions(+), 104 deletions(-) delete mode 100644 misc/factor.vim.fgen diff --git a/basis/editors/vim/generate-syntax/generate-syntax.factor b/basis/editors/vim/generate-syntax/generate-syntax.factor index 3df11f3fda..bbbc6c3a31 100644 --- a/basis/editors/vim/generate-syntax/generate-syntax.factor +++ b/basis/editors/vim/generate-syntax/generate-syntax.factor @@ -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 +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 +" 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 +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() +]=] 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 diff --git a/misc/factor.vim.fgen b/misc/factor.vim.fgen deleted file mode 100644 index 7a14103177..0000000000 --- a/misc/factor.vim.fgen +++ /dev/null @@ -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 -" 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 -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() -]=] 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: diff --git a/misc/vim/syntax/factor/generated.vim b/misc/vim/syntax/factor/generated.vim index 3e50b89a4b..eea14c8950 100644 --- a/misc/vim/syntax/factor/generated.vim +++ b/misc/vim/syntax/factor/generated.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: Factor " Maintainer: Alex Chapman -" 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 -- 2.34.1