xref: /vim-8.2.3635/runtime/syntax/po.vim (revision dee2e315)
1" Vim syntax file
2" Language:	po (gettext)
3" Maintainer:	Dwayne Bailey <[email protected]>
4" Last Change:	2012 Apr 30
5" Contributors: Dwayne Bailey (Most advanced syntax highlighting)
6"               Leonardo Fontenelle (Spell checking)
7"               Nam SungHyun <[email protected]> (Original maintainer)
8
9" For version 5.x: Clear all syntax items
10" For version 6.x: Quit when a syntax file was already loaded
11if version < 600
12  syntax clear
13elseif exists("b:current_syntax")
14  finish
15endif
16let s:keepcpo= &cpo
17set cpo&vim
18
19syn sync minlines=10
20
21" Identifiers
22syn match  poStatementMsgCTxt "^msgctxt"
23syn match  poStatementMsgidplural "^msgid_plural" contained
24syn match  poPluralCaseN "[0-9]" contained
25syn match  poStatementMsgstr "^msgstr\(\[[0-9]\]\)" contains=poPluralCaseN
26
27" Simple HTML and XML highlighting
28syn match  poHtml "<\_[^<>]\+>" contains=poHtmlTranslatables,poLineBreak
29syn match  poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1
30syn region poHtmlTranslatables start=+\(abbr\|alt\|content\|summary\|standby\|title\)=\\"+ms=e-1 end=+\\"+ contained contains=@Spell
31syn match poLineBreak +"\n"+ contained
32
33" Translation blocks
34syn region     poMsgCTxt	matchgroup=poStatementMsgCTxt start=+^msgctxt "+rs=e-1 matchgroup=poStringCTxt end=+^msgid "+me=s-1 contains=poStringCTxt
35syn region     poMsgID	matchgroup=poStatementMsgid start=+^msgid "+rs=e-1 matchgroup=poStringID end=+^msgstr\(\|\[[\]0\[]\]\) "+me=s-1 contains=poStringID,poStatementMsgidplural,poStatementMsgid
36syn region     poMsgSTR	matchgroup=poStatementMsgstr start=+^msgstr\(\|\[[\]0\[]\]\) "+rs=e-1 matchgroup=poStringSTR end=+\n\n+me=s-1 contains=poStringSTR,poStatementMsgstr
37syn region poStringCTxt	start=+"+ skip=+\\\\\|\\"+ end=+"+
38syn region poStringID	start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
39                            \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
40syn region poStringSTR	start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
41                            \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
42
43" Header and Copyright
44syn match     poHeaderItem "\(Project-Id-Version\|Report-Msgid-Bugs-To\|POT-Creation-Date\|PO-Revision-Date\|Last-Translator\|Language-Team\|Language\|MIME-Version\|Content-Type\|Content-Transfer-Encoding\|Plural-Forms\|X-Generator\): " contained
45syn match     poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <[email protected]>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
46syn match     poCopyrightUnset "SOME DESCRIPTIVE TITLE\|FIRST AUTHOR <EMAIL@ADDRESS>, YEAR\|Copyright (C) YEAR Free Software Foundation, Inc\|YEAR THE PACKAGE\'S COPYRIGHT HOLDER\|PACKAGE" contained
47
48" Translation comment block including: translator comment, automatic coments, flags and locations
49syn match     poComment "^#.*$"
50syn keyword   poFlagFuzzy fuzzy contained
51syn match     poCommentTranslator "^# .*$" contains=poCopyrightUnset
52syn match     poCommentAutomatic "^#\..*$"
53syn match     poCommentSources	"^#:.*$"
54syn match     poCommentFlags "^#,.*$" contains=poFlagFuzzy
55
56" Translations (also includes header fields as they appear in a translation msgstr)
57syn region poCommentKDE	  start=+"_: +ms=s+1 end="\\n" end="\"\n^msgstr"me=s-1 contained
58syn region poCommentKDEError  start=+"\(\|\s\+\)_:+ms=s+1 end="\\n" end=+"\n\n+me=s-1 contained
59syn match  poPluralKDE   +"_n: +ms=s+1 contained
60syn region poPluralKDEError   start=+"\(\|\s\+\)_n:+ms=s+1 end="\"\n\n"me=s-1 contained
61syn match  poSpecial	contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
62syn match  poFormat	"%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
63syn match  poFormat	"%%" contained
64
65" msguniq and msgcat conflicts
66syn region poMsguniqError matchgroup=poMsguniqErrorMarkers  start="#-#-#-#-#"  end='#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)\\n' contained
67
68" Obsolete messages
69syn match poObsolete "^#\~.*$"
70
71" KDE Name= handling
72syn match poKDEdesktopFile "\"\(Name\|Comment\|GenericName\|Description\|Keywords\|About\)="ms=s+1,me=e-1
73
74" Accelerator keys - this messes up if the preceding or following char is a multibyte unicode char
75syn match poAcceleratorId  contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1
76syn match poAcceleratorStr  contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1 contains=@Spell
77
78" Variables simple
79syn match poVariable contained "%\d"
80
81" Define the default highlighting.
82" For version 5.7 and earlier: only when not done already
83" For version 5.8 and later: only when an item doesn't have highlighting yet
84if version >= 508 || !exists("did_po_syn_inits")
85  if version < 508
86    let did_po_syn_inits = 1
87    command -nargs=+ HiLink hi link <args>
88  else
89    command -nargs=+ HiLink hi def link <args>
90  endif
91
92  HiLink poCommentSources    PreProc
93  HiLink poComment	     Comment
94  HiLink poCommentAutomatic  Comment
95  HiLink poCommentTranslator Comment
96  HiLink poCommentFlags      Special
97  HiLink poCopyrightUnset    Todo
98  HiLink poFlagFuzzy         Todo
99  HiLink poObsolete         Comment
100
101  HiLink poStatementMsgid   Statement
102  HiLink poStatementMsgstr  Statement
103  HiLink poStatementMsgidplural  Statement
104  HiLink poStatementMsgCTxt Statement
105  HiLink poPluralCaseN      Constant
106
107  HiLink poStringCTxt	    Comment
108  HiLink poStringID	    String
109  HiLink poStringSTR	    String
110  HiLink poCommentKDE       Comment
111  HiLink poCommentKDEError  Error
112  HiLink poPluralKDE        Comment
113  HiLink poPluralKDEError   Error
114  HiLink poHeaderItem       Identifier
115  HiLink poHeaderUndefined  Todo
116  HiLink poKDEdesktopFile   Identifier
117
118  HiLink poHtml              Identifier
119  HiLink poHtmlNot           String
120  HiLink poHtmlTranslatables String
121  HiLink poLineBreak         String
122
123  HiLink poFormat	    poSpecial
124  HiLink poSpecial	    Special
125  HiLink poAcceleratorId    Special
126  HiLink poAcceleratorStr   Special
127  HiLink poVariable         Special
128
129  HiLink poMsguniqError        Special
130  HiLink poMsguniqErrorMarkers Comment
131
132  delcommand HiLink
133endif
134
135let b:current_syntax = "po"
136
137let &cpo = s:keepcpo
138unlet s:keepcpo
139
140" vim:set ts=8 sts=2 sw=2 noet:
141