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