" Maintainer: Jacob Nevins <jacobn+vim@chiark.greenend.org.uk>
" URL: http://www.chiark.greenend.org.uk/~sgtatham/halibut/
" Filenames: *.but
-" Version: $Id: halibut.vim,v 1.6 2004/04/01 23:06:46 jtn Exp $
+" Version: $Id: halibut.vim,v 1.12 2004/07/16 12:54:59 jacob Exp $
" I've never been entirely comfortable with vim's syntax highlighting
" facilities, so this may have all sorts of nasty loose ends, corner cases
" Based on docs in Halibut CVS 2004-03-31
+" FIXME:
+" - sync - last blank line, \quote, \lcont
+" - add "display" etc for speed?
+
" Rune from vim 6.1 help
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
" (matches current iscmd() in input.c; there are some oddballs which
" don't fit this handled specially below)
syn match butCmdGeneric "\\[A-Za-z0-9]\+" nextgroup=butTextArg
-" was: [A-Za-z0-9#]\+
syn cluster butText contains=butLiteral,@butCmd,butTodo
syn match butQLEmphInv "\S\@=[^bi]" contained
" Paragraph level comment -- might need to come before inline comment.
-syn region butCommentPara start="\\#\_s\@=" end="^\s*$" contains=butTodo
+syn region butCommentPara start="\\#" end="^\s*$" contains=butTodo
" Inline comments -- nested braces are honoured.
syn region butComment matchgroup=Comment start="\\#{" skip="\\}" end="}" contains=butCommentBrace,butTodo
" ...and overall title
syn match butCmdSpecific "\\title\_s\@=" nextgroup=butTextHeading
-" Bulleted lists
-syn match butCmdSpecific "\\\(b\|n\|dd\)" nextgroup=butIdentArg
+" Bulleted lists -- arguments optional
+syn match butCmdSpecific "\\\(b\|n\|dd\)[^A-Za-z0-9]\@=" nextgroup=butIdentArg
" Config
syn match butCmdSpecific "\\cfg{\@=" nextgroup=butCfgArg
" Specific inline commands
" (Some of these are defined out of paranoia about clashes with code quotes.)
+" Indexing -- invisible entries. (includes \I\c, \I\cw; \I\e left; no \q, \cq)
+syn match butCmdSpecific "\\I\(\\cw\|\\c\)\={\@=" nextgroup=butIndexArg
" Formatting.
syn match butCmdSpecific "\\e{\@=" nextgroup=butEmphArg
syn match butCmdSpecific "\\c{\@=" nextgroup=butTextArg
syn match butCmdSpecific "\\cw{\@=" nextgroup=butTextArg
+syn match butCmdSpecific "\\cq{\@=" nextgroup=butTextArg
syn match butCmdSpecific "\\W{\@=" nextgroup=butHyperArg
-" Indexing -- invisible entries.
-syn match butCmdSpecific "\\I{\@=" nextgroup=butIndexArg
" Xref commands
syn match butCmdSpecific "\\[kK]{\@=" nextgroup=butIdentArg
" Unicode literal -- a bit special.
-syn match butLiteral "\\u\x*" nextgroup=butTextArg
+syn match butLiteral "\\u\x\{,4}" nextgroup=butTextArg
" Command cluster.
-syn cluster butCmd contains=butCmdGeneric,butCmdSpecific,ButComment
+syn cluster butCmd contains=butCmdGeneric,butCmdSpecific,butComment,butQuoteLit,butQLEmph,butCommentPara,butLiteral
" Types of argument. XXX is this cluster still useful?
syn cluster butArgument contains=butTextArg,butIdentArg,butEmphArgmbutCfgArg,butIdentArgH,butTextArgH