diff --git a/Makefile.am b/Makefile.am index 4ba03475..df3bc795 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,6 +6,7 @@ BINDIR=@bindir@ INCDIR=@includedir@/espeak LIBDIR=@libdir@ DATADIR=$(PREFIX)/share/espeak-data +VIMDIR=$(PREFIX)/share/vim pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = espeak-ng.pc @@ -70,6 +71,20 @@ SUFFIXES=.html .md .ronn .ronn.html: ronn --html $< +##### vim: + +vim_registrydir = $(VIMDIR)/registry +vim_registry_DATA = vim/registry/*.yaml +EXTRA_DIST += $(vim_registry_DATA) + +vim_addons_ftdetectdir = $(VIMDIR)/addons/ftdetect +vim_addons_ftdetect_DATA = vim/ftdetect/*.vim +EXTRA_DIST += $(vim_addons_ftdetect_DATA) + +vim_addons_syntaxdir = $(VIMDIR)/addons/syntax +vim_addons_syntax_DATA = vim/syntax/*.vim +EXTRA_DIST += $(vim_addons_syntax_DATA) + ##### documentation: src/espeak-ng.1: src/espeak-ng.1.ronn diff --git a/vim/ftdetect/espeakfiletype.vim b/vim/ftdetect/espeakfiletype.vim new file mode 100644 index 00000000..af3abc20 --- /dev/null +++ b/vim/ftdetect/espeakfiletype.vim @@ -0,0 +1,3 @@ +au BufRead,BufNewFile *_list set filetype=espeaklist fileencoding=utf-8 fileformat=unix +au BufRead,BufNewFile *_listx set filetype=espeaklist fileencoding=utf-8 fileformat=unix +au BufRead,BufNewFile *_extra set filetype=espeaklist fileencoding=utf-8 fileformat=unix diff --git a/vim/registry/espeak.yaml b/vim/registry/espeak.yaml new file mode 100644 index 00000000..4b6553a7 --- /dev/null +++ b/vim/registry/espeak.yaml @@ -0,0 +1,5 @@ +addon: espeak +description: "allow syntax highlighting for eSpeak and eSpeak NG Text-to-Speech data files (dictionaries, etc.)" +files: + - ftdetect/espeakfiletype.vim + - syntax/espeaklist.vim diff --git a/vim/syntax/espeaklist.vim b/vim/syntax/espeaklist.vim new file mode 100644 index 00000000..0f434be7 --- /dev/null +++ b/vim/syntax/espeaklist.vim @@ -0,0 +1,38 @@ +" Vim syntax file +" Language: eSpeak Dictionary List Files +" Filenames: *_list, *_listx, *_extra +" Maintainer: Reece H. Dunn +" Last Change: 2016 Jun 19 + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn region espeaklistLineComment start="^//" end="$" keepend contains=espeaklistComment +syn match espeaklistLinePhraseEntry "^\(\(//\)\@!\)(.*$" contains=espeaklistEntryPhrase +syn match espeaklistLineEntry "^\(\(//\)\@!\)[^?(].*$" contains=espeaklistEntryWord +syn match espeaklistLineConditionalEntry "^[?!].*$" contains=espeaklistEntryConditional + +syn region espeaklistComment contained start="//" end="$" keepend contains=@Spell + +syn region espeaklistFlag contained start="\$" end="[ \t\r\n]" skipwhite nextgroup=espeaklistFlag,espeaklistComment + +syn region espeaklistEntryConditional contained start="^[?!]" end="[ \t]" skipwhite nextgroup=espeaklistEntryPhrase,espeaklistEntryWord +syn region espeaklistEntryPhrase contained start="^(" end=")" skipwhite nextgroup=espeaklistEntryPronunciation +syn match espeaklistEntryWord contained "[^ \t\r\n]\+" skipwhite nextgroup=espeaklistEntryPronunciation,espeaklistFlag +syn match espeaklistEntryPronunciation contained "[^ \t\r\n/$!][^ \t\r\n]*" skipwhite nextgroup=espeaklistFlag,espeaklistComment + +" Define the default highlighting. +" Only used when an item doesn't have highlighting yet + +hi def link espeaklistComment Comment +hi def link espeaklistFlag PreProc +hi def link espeaklistEntryConditional PreProc +hi def link espeaklistEntryPhrase espeaklistEntry +hi def link espeaklistEntryWord espeaklistEntry +hi def link espeaklistEntryPronunciation None +hi def link espeaklistEntry Identifier + +let b:current_syntax = "espeaklist" +" vim: ts=8