" Language: Texte Convivial Technique (TCT)
" License: GNU General Public License, version 3 or later (at your option)
-" Maintainer: Julien Moutinho <julm+tct@autogeree.net>
-" URL: http://autogeree.net/pad/edition/tct/
-" Version: v2017-08-24
+" Maintainer: Julien Moutinho <julm+hdoc@autogeree.net>
+" URL: git://git.autogeree.net/hdoc
+" Version: v2018-10-11
" Installation:
" Copy this file to ~/.vim/syntax/tct.vim
" then add this line to ~/.vimrc :
" autocmd BufNewFile,BufRead *.tct set filetype=tct
if exists("b:current_syntax")
- "finish
+ finish
endif
syn clear
hi def link tctPlain Normal
" Block
-syn match tctPath /^\( *\([^<>:=| *`«»/"_,.;@^!?~%(){}[\]\\#&+-]* *[:>]\|\[[^]]*\]\|- \|\( *\d\+\.\)\+\)\)* *\ze\([^<>:=| *`«»/"_,.;@^!?~%(){}[\]\\#&+-]* *\([>=|@]\|: \|:$\)\|\[[^]]*\]\|-- \|- \|\( *\d\+\.\)\+\|#\+ \)/
- \ contains=tctNodeBird,tctNodeColon,tctNodeComment,tctNodeUL,tctNodeOL,tctNodeBracket
- \ nextgroup=@tctKeyPath
-syn cluster tctKeyPath
- \ contains=tctKeyAt,tctKeyBird,tctKeyColon,tctKeyEqual,tctKeyBar,tctKeyComment,tctKeyUL,tctKeyOL,tctKeyBracket,tctKeySection
-syn match tctKeyAt /[^<>:=| ]* *@/ contained contains=tctNodeAt nextgroup=tctValueAt
-syn match tctKeyBar /[^<>:=| ]* *|/ contained contains=tctNodeBar nextgroup=tctValueBar
-syn match tctKeyBird /[^<>:=| ]* *>/ contained contains=tctNodeBird nextgroup=tctValueBird
-syn match tctKeyColon /[^<>:=| ]* *:\ze\( \|$\)/ contained contains=tctNodeColon nextgroup=tctValueColon
-syn match tctKeyEqual /[^<>:=| ]* *=/ contained contains=tctNodeEqual nextgroup=tctValueEqual
-syn match tctKeyBracket /\[[^]]*\]/ contained contains=tctNodeBracket nextgroup=tctValueBracket
-syn match tctKeyComment /-- / contained contains=tctNodeComment nextgroup=tctValueComment
-syn match tctKeyUL /-\ze / contained contains=tctNodeUL nextgroup=tctValueUL
-syn match tctKeyOL /\( *\d\+\.\)\+\ze\( \|$\)/ contained contains=tctNodeOL nextgroup=tctValueOL
-syn match tctKeySection /#\+\ze / contained contains=tctNodeSection nextgroup=tctValueSection
-
-syn match tctNodeAt /[^<>:=| ]* *@/ contained contains=tctSymAt,tctSymDot
-syn match tctNodeBar /[^<>:=| ]* *|/ contained contains=tctSymBar,tctSymDot
-syn match tctNodeBird /[^<>:=| ]* *>/ contained contains=tctSymBird,tctSymDot
-syn match tctNodeColon /[^<>:=| ]* *:\ze\( \|$\)/ contained contains=tctSymColon,@tctColons,tctSymDot
-syn match tctNodeEqual /[^<>:=| ]* *=/ contained contains=tctSymEqual,tctSymDot
-syn match tctNodeBracket /\[[^]]*\]/ contained contains=tctSymBracket,@tctInline
-syn match tctNodeComment /--/ contained
-syn match tctNodeUL /-/ contained
-syn match tctNodeOL /\( *\d\+\.\)\+/ contained contains=tctSymDot
-syn match tctNodeSection /#\+/ contained
+syn match tctPath /^\( *\([^<>:=| *`«»/"_,.;@^!?~%(){}[\]\\#&+]* *[:>]\|\[[^]]*\]\|- \|\( *\d\+\.\)\+\)\)* *\ze\([^<>:=| *`«»/"_,.;@^!?~%(){}[\]\\#&+]*\(@ \| *[>=|]\| *: \| *:$\)\|\[[^]]*\]\|-- \|- \|\( *\d\+\.\)\+\|@ \|#\+ \)/
+ \ contains=tctHeaderBird,tctHeaderColon,tctHeaderComment,tctHeaderUL,tctHeaderOL,tctHeaderBracket
+ \ nextgroup=@tctRowPath
+syn cluster tctRowPath
+ \ contains=tctRowAt,tctRowBird,tctRowColon,tctRowEqual,tctRowBar,tctRowComment,tctRowUL,tctRowOL,tctRowBracket,tctRowSection
+syn match tctRowAt /[^<>:=| ]*@ / contained contains=tctHeaderAt nextgroup=tctValueAt
+syn match tctRowBar /[^<>:=| ]* *|/ contained contains=tctHeaderBar nextgroup=tctValueBar
+syn match tctRowBird /[^<>:=| ]* *>/ contained contains=tctHeaderBird nextgroup=tctValueBird
+syn match tctRowColon /[^<>:=| ]* *:\ze\( \|$\)/ contained contains=tctHeaderColon nextgroup=tctValueColon
+syn match tctRowEqual /[^<>:=| ]* *=/ contained contains=tctHeaderEqual nextgroup=tctValueEqual
+syn match tctRowBracket /\[[^]]*\]/ contained contains=tctHeaderBracket nextgroup=tctValueBracket
+syn match tctRowComment /-- / contained contains=tctHeaderComment nextgroup=tctValueComment
+syn match tctRowUL /-\ze / contained contains=tctHeaderUL nextgroup=tctValueUL
+syn match tctRowOL /\( *\d\+\.\)\+\ze\( \|$\)/ contained contains=tctHeaderOL nextgroup=tctValueOL
+syn match tctRowSection /#\+\ze / contained contains=tctHeaderSection nextgroup=tctValueSection
+
+syn match tctHeaderAt /[^<>:=| ]*@ / contained contains=tctSymAt,tctSymDot
+syn match tctHeaderBar /[^<>:=| ]* *|/ contained contains=tctSymBar,tctSymDot
+syn match tctHeaderBird /[^<>:=| ]* *>/ contained contains=tctSymBird,tctSymDot
+syn match tctHeaderColon /[^<>:=| ]* *:\ze\( \|$\)/ contained contains=tctSymColon,@tctColons,tctSymDot
+syn match tctHeaderEqual /[^<>:=| ]* *=/ contained contains=tctSymEqual,tctSymDot
+syn match tctHeaderBracket /\[[^]]*\]/ contained contains=tctSymBracket,@tctInline
+syn match tctHeaderComment /--/ contained
+syn match tctHeaderUL /-/ contained
+syn match tctHeaderOL /\( *\d\+\.\)\+/ contained contains=tctSymDot
+syn match tctHeaderSection /#\+/ contained
syn match tctSymAt /@/ contained
syn match tctSymBar /|/ contained
"syn match tctSection /^ *#\+ .*/ contains=@tctInline
-hi tctNodeAt cterm=NONE ctermfg=yellow guifg=yellow
-hi tctNodeBar cterm=NONE ctermfg=DarkYellow guifg=yellow
-hi tctNodeBird cterm=NONE ctermfg=DarkYellow guifg=yellow
-hi tctNodeColon cterm=bold ctermfg=yellow guifg=yellow
-hi tctNodeEqual cterm=bold ctermfg=DarkGrey guifg=yellow
-hi tctNodeBracket cterm=NONE ctermfg=NONE guifg=NONE
-hi tctNodeComment cterm=bold ctermfg=DarkGrey guifg=grey
-hi tctNodeUL cterm=bold ctermfg=yellow guifg=yellow
-hi tctNodeOL cterm=bold ctermfg=yellow guifg=yellow
-hi tctNodeSection cterm=bold ctermfg=magenta guifg=magenta gui=bold
+hi tctHeaderAt cterm=NONE ctermfg=yellow guifg=yellow
+hi tctHeaderBar cterm=NONE ctermfg=DarkYellow guifg=yellow
+hi tctHeaderBird cterm=NONE ctermfg=DarkYellow guifg=yellow
+hi tctHeaderColon cterm=bold ctermfg=yellow guifg=yellow
+hi tctHeaderEqual cterm=bold ctermfg=DarkGrey guifg=yellow
+hi tctHeaderBracket cterm=NONE ctermfg=NONE guifg=NONE
+hi tctHeaderComment cterm=bold ctermfg=DarkGrey guifg=grey
+hi tctHeaderUL cterm=bold ctermfg=yellow guifg=yellow
+hi tctHeaderOL cterm=bold ctermfg=yellow guifg=yellow
+hi tctHeaderSection cterm=bold ctermfg=magenta guifg=magenta gui=bold
hi tctSymAt cterm=bold ctermfg=cyan guifg=cyan
hi tctSymBar cterm=bold ctermfg=cyan guifg=cyan
hi tctValueOL cterm=NONE gui=NONE
hi tctComment cterm=bold ctermfg=DarkGrey guifg=grey
-hi tctKeySection cterm=bold ctermfg=magenta guifg=magenta gui=bold
+hi tctRowSection cterm=bold ctermfg=magenta guifg=magenta gui=bold
hi tctValueSection cterm=bold ctermfg=magenta guifg=magenta gui=bold
" Inline
syn match tctBold
- \ /\(^\|[ `’«»/"|_,.:;@^!?=~%(){}[\]\\&+-]\)\zs\*[^ *]\([^*]*[^ *]\)\?\*\ze\([ `’«»/"|_,.:;@^!?=~%(){}[\]\\&+-]\|$\)/
+ \ /\(^\|[ `’«»/"|,.:…;@^!?=~%(){}[\]\\&+]\)\zs\*[^ *]\([^*]*[^ *]\)\?\*\ze\([ `’«»/"|,.:…;@^!?=~%(){}[\]\\&+]\|$\)/
\ contained contains=@tctInline
syn match tctCode
- \ /\(^\|[ *’«»/"|_,.:;@^!?=~%(){}[\]\\&+-]\)\zs`[^ `]\([^`]*[^ `]\)\?`\ze\([ *’«»/"|_,.:;@^!?=~%(){}[\]\\&+-]\|$\)/
+ \ /\(^\|[ *’«»/"|,.:…;@^!?=~%(){}[\]\\&+]\)\zs`[^ `]\([^`]*[^ `]\)\?`\ze\([ *’«»/"|,.:…;@^!?=~%(){}[\]\\&+]\|$\)/
\ contained contains=@tctInline
syn match tctE
\ /<\/\?[^ >]\+\/\?>/
\ /«.\{-}»/
\ contained contains=@tctInline
syn match tctItalic
- \ /\(^\|[ *`’«»"'’|_,.:;@^!?=~<>%(){}[\]\\#&+-]\)\zs\/[^ /]\([^/]*[^ /]\)\?\/\ze\([ *`’«»"'’|_,.:;@^!?=~<>%(){}[\]\\#&+-]\|$\)/
+ \ /\(^\|[ *`’«»"'’|,.:…;@^!?=~<>%(){}[\]\\#&+]\)\zs\/[^ /]\([^/]*[^ /]\)\?\/\ze\([ *`’«»"'’|,.:…;@^!?=~<>%(){}[\]\\#&+]\|$\)/
\ contained contains=@tctInline
syn match tctQuote
- \ /\(^\|[ *`’«»/'’|_,.:;@^!?=~<>%(){}[\]\\#&+-]\)\zs"[^ "]\([^"]*[^ "]\)\?"\ze\([ *`’«»/'’|_,.:;@^!?=~<>%(){}[\]\\#&+-]\|$\)/
+ \ /\(^\|[ *`’«»/'’|,.:…;@^!?=~<>%(){}[\]\\#&+]\)\zs"[^ "]\([^"]*[^ "]\)\?"\ze\([ *`’«»/'’|,.:…;@^!?=~<>%(){}[\]\\#&+]\|$\)/
+ \ contained contains=@tctInline
+syn match tctAt
+ \ /\(^\|[ *`’«»/"'’|,.:…;^!?=~<>%(){}[\]\\#&+]\)\zs@\([^ @]\([^@]*[^ @]\)\?@\|[^@ *`’«»/"'’|,.:…;^!?=~<>%(){}[\]\\#&+]*[^@ *`’«»/"'’|,.:…;^!?=~<>%(){}[\]\\#&+]\)\ze\([ *`’«»/"'’|,.:…;^!?=~<>%(){}[\]\\#&+]\|$\)/
\ contained contains=@tctInline
syn match tctTag
- \ /\(^\|[ *`’«»/"'’|_,.:;@^!?=~<>%(){}[\]\&+-]\)\zs#\([^ #]\([^#]*[^ #]\)\?#\|[^ #]*[^# *`’«»/"'’|_,.:;@^!?=~<>%(){}[\]\&+-]\)\ze\([ *`’«»/"'’|_,.:;@^!?=~<>%(){}[\]\&+-]\|$\)/
+ \ /\(^\|[ *`’«»/"'’|,.:…;@^!?=~<>%(){}[\]\\&+]\)\zs#\([^ #]\([^#]*[^ #]\)\?#\|[^# *`’«»/"'’|,.:…;@^!?=~<>%(){}[\]\\&+]*[^# *`’«»/"'’|,.:…;@^!?=~<>%(){}[\]\\&+]\)\ze\([ *`’«»/"'’|,.:…;@^!?=~<>%(){}[\]\\&+]\|$\)/
+ \ contained contains=@tctInline
+syn match tctRef
+ \ /\(^\|[ *`’«»/"'’|,.:…;@^!?=~<>%(){}\\#&+]\)\zs\[[^[\] ]*\]\ze\([ *`’«»/"'’|,.:…;@^!?=~<>%(){}\\#&+]\|$\)/
\ contained contains=@tctInline
syn match tctUnderline
- \ /\(^\|[ *`’«»/"'’|,.:;@!?=~<>%(){}[\]\\#&+-]\)\zs_.*_\ze\([ *`’«»/"'’|,.:;@!?=~<>%(){}[\]\\#&+-]\|$\)/
+ \ /\(^\|[ *`’«»/"'’|,.:…;@!?=~<>%(){}[\]\\#&+]\)\zs_.*_\ze\([ *`’«»/"'’|,.:…;@!?=~<>%(){}[\]\\#&+]\|$\)/
\ contained contains=@tctInline
syn match tctURL
\ /[a-z+-]\+:\/\/[^| \t[\]]*\(\[[^\]]*\]\)\?/
syn region tctAttrValue contained start=+'+ end=+'+ contains=tctEntity
-syn cluster tctInline contains=tctBold,tctCode,tctElem,tctElemEnd,tctEntity,tctQuoteFrench,tctItalic,tctQuote,tctTag,tctUnderline,tctURL
+syn cluster tctInline contains=tctBold,tctCode,tctElem,tctElemEnd,tctEntity,tctQuoteFrench,tctItalic,tctQuote,tctAt,tctTag,tctRef,tctUnderline,tctURL
hi def link tctAttr Type
hi def link tctEntityPunct Type
hi tctItalic cterm=italic gui=italic
hi def link tctNamespace Tag
-hi tctQuote cterm=bold ctermfg=cyan guifg=cyan
-hi tctQuoteFrench cterm=bold ctermfg=green guifg=green
-hi tctTag cterm=bold ctermfg=cyan guifg=cyan
+hi tctQuote cterm=bold ctermfg=cyan guifg=cyan
+hi tctQuoteFrench cterm=bold ctermfg=green guifg=green
+hi tctTag cterm=bold ctermfg=cyan guifg=cyan
+hi tctAt ctermfg=red cterm=NONE guifg=DarkRed
+hi tctRef ctermfg=cyan cterm=NONE guifg=DarkCyan
hi def link tctElem Function
hi def link tctElemEnd Identifier
hi tctElemName cterm=bold ctermfg=yellow guifg=yellow