Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

[PATCH] Re: Vim yodl syntax highlighting

Bart Schaefer wrote on Fri, Jul 10, 2015 at 17:01:34 -0700:
> If you can't jam it all in a .vimrc or the like, it should probably go
> in Util/ rather than Doc/.

Attached.  It's autoloading for those people who auto-source
$PWD/.vimrc, and there are instructions for everyone else.
(The "install permanently" part could be further streamlined.)
From 4d90d8bf5a8ca51879fe3a6f2ca53969668cf349 Mon Sep 17 00:00:00 2001
From: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
Date: Sat, 11 Jul 2015 09:18:20 +0000
Subject: [PATCH] New zsh-specific yodl vim syntax highlighting.

To try this, see the instructions at the top of Util/zyodl.vim (in the comment).

* Util/zyodl.vim: New syntax highlighting file.
* Doc/Zsh/.vimrc: New file, hooks up zyodl.vim for automatic loading.
* Etc/zsh-development-guide: Namedrop zyodl.vim for discoverability.
 Doc/Zsh/.vimrc            |  4 +++
 Etc/zsh-development-guide |  3 ++
 Util/zyodl.vim            | 74 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 Doc/Zsh/.vimrc
 create mode 100644 Util/zyodl.vim

diff --git a/Doc/Zsh/.vimrc b/Doc/Zsh/.vimrc
new file mode 100644
index 0000000..6544cd4
--- /dev/null
+++ b/Doc/Zsh/.vimrc
@@ -0,0 +1,4 @@
+augroup filetypedetect
+  autocmd BufRead,BufNewFile **/Doc/Zsh/*.yo set ft=zyodl | source <sfile>:h:h:h/Util/zyodl.vim
+  "autocmd BufRead,BufNewFile **/Etc/FAQ.yo  set ft=zyodl | source <sfile>:h:h:h/Util/zyodl.vim
+augroup END
diff --git a/Etc/zsh-development-guide b/Etc/zsh-development-guide
index d92b724..4d6cefd 100644
--- a/Etc/zsh-development-guide
+++ b/Etc/zsh-development-guide
@@ -920,6 +920,9 @@ Documentation
   surrounding text.  No extra newlines after the opening or before the
   closing parenthesis are required.
+A syntax highlighting file for Vim is included, just source tt(Doc/Zsh/.vimrc)
+before editing one of the Doc/Zsh/*.yo files.
 Module names
diff --git a/Util/zyodl.vim b/Util/zyodl.vim
new file mode 100644
index 0000000..db2a599
--- /dev/null
+++ b/Util/zyodl.vim
@@ -0,0 +1,74 @@
+"" A Vim syntax highlighting file for Doc/Zsh/*.yo
+" To try this, run:
+"     cd Doc/Zsh && vim --cmd "source ./.vimrc" zle.yo
+" (This sources the file <Doc/Zsh/.vimrc>.)
+" To install this permanently:
+" 1. Copy this file to ~/.vim/syntax/zyodl.vim
+" 2. Create ~/.vim/filetype.vim as explained in ":help new-filetype" case C.
+" 3. Add the following command to ~/.vim/filetype.vim:
+"      autocmd BufRead,BufNewFile **/Doc/Zsh/*.yo setfiletype zyodl
+"" Test case:
+"   texinode()()()()
+"   chapter(foo)
+"   vindex(foo) 
+"   foo tt(foo) var(foo) bf(foo) em(foo) foo
+"   xitem(foo)
+"   item(foo)(foo)
+"   sitem(foo)(foo foo)
+"   example(print *.c+LPAR()#q:s/#%+LPAR()#b+RPAR()s+LPAR()*+RPAR().c/'S${match[1]}.C'/+RPAR())
+"   ifzman(zmanref(zshmisc))ifnzman(noderef(Redirection))
+"   LPAR()foo 42 foo+RPAR()
+"   chapter(foo (foo) foo) # nested parentheses
+"   sitem(foo)(foo tt(foo) foo) # nested underline
+if exists("b:current_syntax")
+  finish
+"" Syntax groups:
+syn clear
+syn cluster zyodlInline contains=zyodlTt,zyodlVar,zyodlBold,zyodlEmph,zyodlCond
+syn region zyodlTt      start="\<tt("      end=")" contains=zyodlSpecial
+syn region zyodlVar     start="\<var("     end=")" contains=zyodlSpecial
+syn region zyodlBold    start="\<bf("      end=")" contains=zyodlSpecial
+syn region zyodlEmph    start="\<em("      end=")" contains=zyodlSpecial
+syn region zyodlIndex   start="\<.index("  end=")" contains=zyodlSpecial
+syn match  zyodlSpecial "+\?\<\(LPAR\|RPAR\|PLUS\)()"
+syn match  zyodlNumber  "\d\+"
+syn region zyodlItem    start="\<xitem(" end=")" contains=zyodlSpecial,@zyodlInline
+syn region zyodlItem    start="\<item("  end=")" contains=zyodlSpecial,@zyodlInline
+syn region zyodlExample start="\<example(" end=")" contains=zyodlSpecial
+syn region zyodlTitle   start="\<\(chapter\|subsect\|sect\)(" end=")" contains=zyodlSpecial,@zyodlInline
+syn match  zyodlTitle   "^texinode\%x28.*$"
+syn region zyodlCond    start="\<\(ifzman\|ifnzman\)(" end=")" contains=zyodlRef,zyodlSpecial,@zyodlInline
+syn region zyodlRef     start="\<\(zmanref\|noderef\)(" end=")"
+syn keyword zyodlKeyword sitem nextgroup=zyodlSItemArg1
+syn region zyodlSItemArg1 oneline start="(" end=")" contains=zyodlSpecial,@zyodlInline nextgroup=zyodlSItemArg2 contained
+syn region zyodlSItemArg2 start="(" end=")" contains=zyodlSpecial,@zyodlInline contained
+"" Highlight groups:
+hi def link zyodlTt Constant
+hi def link zyodlVar Identifier
+" Not ':hi def link zyodlBold Bold' since there's no such group.
+hi def zyodlBold gui=bold cterm=bold
+hi def link zyodlEmph Type
+hi def link zyodlIndex Comment
+hi def link zyodlSpecial Special
+hi def link zyodlNumber Number
+hi def link zyodlItem Keyword
+hi def link zyodlExample String
+hi def link zyodlTitle Title
+hi def link zyodlCond Conditional
+hi def link zyodlRef Include
+hi def link zyodlSItemArg1 Macro
+hi def link zyodlSItemArg2 Underlined
+let b:current_syntax = "zyodl"

Messages sorted by: Reverse Date, Date, Thread, Author