blob: 3cfae816ffea23aaa17e4f1912acea620f6e3f2e [file] [log] [blame]
Bram Moolenaar3c053a12022-10-16 13:11:12 +01001" Vim syntax file
2" Language: SubStation Alpha
3" Maintainer: ObserverOfTime <chronobserver@disroot.org>
4" Filenames: *.ass,*.ssa
ObserverOfTimef351fd82024-04-28 17:22:55 +03005" Last Change: 2024 Apr 28
Bram Moolenaar3c053a12022-10-16 13:11:12 +01006
7if exists('b:current_syntax')
8 finish
9endif
10
11" Comments
12syn keyword ssaTodo TODO FIXME NOTE XXX contained
13syn match ssaComment /^\(;\|!:\).*$/ contains=ssaTodo,@Spell
14syn match ssaTextComment /{[^}]*}/ contained contains=@Spell
15
16" Sections
17syn match ssaSection /^\[[a-zA-Z0-9+ ]\+\]$/
18
19" Headers
20syn match ssaHeader /^[^;!:]\+:/ skipwhite nextgroup=ssaField
21
22" Fields
ObserverOfTimef351fd82024-04-28 17:22:55 +030023syn match ssaField /[^,]*\(,\|$\)/ contained skipwhite contains=ssaDelimiter,ssaTime nextgroup=ssaField
Bram Moolenaar3c053a12022-10-16 13:11:12 +010024
25" Time
ObserverOfTimef351fd82024-04-28 17:22:55 +030026syn match ssaTime /\d:\d\d:\d\d\.\d\d/ contained
Bram Moolenaar3c053a12022-10-16 13:11:12 +010027
28" Delimiter
ObserverOfTimef351fd82024-04-28 17:22:55 +030029syn match ssaDelimiter /,/ contained
30
31" Dialogue
32syn match ssaDialogue /^Dialogue:/ transparent skipwhite nextgroup=ssaDialogueFields
33syn match ssaDialogueFields /\([^,]*,\)\{9\}/ contained transparent skipwhite contains=ssaField,ssaDelimiter nextgroup=ssaText
Bram Moolenaar3c053a12022-10-16 13:11:12 +010034
35" Text
ObserverOfTimef351fd82024-04-28 17:22:55 +030036syn match ssaText /.*$/ contained contains=@ssaTags,@Spell
Bram Moolenaar3c053a12022-10-16 13:11:12 +010037syn cluster ssaTags contains=ssaOverrideTag,ssaEscapeChar,ssaTextComment,ssaItalics,ssaBold,ssaUnderline,ssaStrikeout
38
39" Override tags
40syn match ssaOverrideTag /{\\[^}]\+}/ contained contains=@NoSpell
41
42" Special characters
43syn match ssaEscapeChar /\\[nNh{}]/ contained contains=@NoSpell
44
45" Markup
46syn region ssaItalics start=/{\\i1}/ end=/{\\i0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell
47syn region ssaBold start=/{\\b1}/ end=/{\\b0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell
48syn region ssaUnderline start=/{\\u1}/ end=/{\\u0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell
49syn region ssaStrikeout start=/{\\s1}/ end=/{\\s0}/ matchgroup=ssaOverrideTag keepend oneline contained contains=@ssaTags,@Spell
50
51hi def link ssaDelimiter Delimiter
52hi def link ssaComment Comment
53hi def link ssaEscapeChar SpecialChar
54hi def link ssaField String
55hi def link ssaHeader Label
56hi def link ssaSection StorageClass
57hi def link ssaOverrideTag Special
58hi def link ssaTextComment Comment
59hi def link ssaTime Number
60hi def link ssaTodo Todo
61
62hi ssaBold cterm=bold gui=bold
63hi ssaItalics cterm=italic gui=italic
64hi ssaStrikeout cterm=strikethrough gui=strikethrough
65hi ssaUnderline cterm=underline gui=underline
66
ObserverOfTimef351fd82024-04-28 17:22:55 +030067let b:current_syntax = 'ssa'