blob: 6da27f639dd774fbd2b33739af83d3b47e1a258a [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: po (gettext)
Bram Moolenaard114dbe2005-06-22 22:29:18 +00003" Maintainer: Dwayne Bailey <dwayne@translate.org.za>
Eisuke Kawashima511eb842024-11-28 18:00:09 +01004" Last Change: 2024 Nov 28
Bram Moolenaar446cb832008-06-24 21:56:24 +00005" Contributors: Dwayne Bailey (Most advanced syntax highlighting)
6" Leonardo Fontenelle (Spell checking)
Bram Moolenaar00659062010-09-21 22:34:02 +02007" Nam SungHyun <namsh@kldp.org> (Original maintainer)
Eisuke Kawashima511eb842024-11-28 18:00:09 +01008" Eisuke Kawashima (add format-flags: #16132)
Bram Moolenaar071d4272004-06-13 20:20:40 +00009
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020010" quit when a syntax file was already loaded
11if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000012 finish
13endif
Bram Moolenaar9a7224b2012-04-30 15:56:52 +020014let s:keepcpo= &cpo
15set cpo&vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000016
Bram Moolenaard114dbe2005-06-22 22:29:18 +000017syn sync minlines=10
18
19" Identifiers
Bram Moolenaar446cb832008-06-24 21:56:24 +000020syn match poStatementMsgCTxt "^msgctxt"
Bram Moolenaard114dbe2005-06-22 22:29:18 +000021syn 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
Bram Moolenaar446cb832008-06-24 21:56:24 +000026syn match poHtml "<\_[^<>]\+>" contains=poHtmlTranslatables,poLineBreak
Bram Moolenaard114dbe2005-06-22 22:29:18 +000027syn match poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1
Bram Moolenaar446cb832008-06-24 21:56:24 +000028syn region poHtmlTranslatables start=+\(abbr\|alt\|content\|summary\|standby\|title\)=\\"+ms=e-1 end=+\\"+ contained contains=@Spell
29syn match poLineBreak +"\n"+ contained
Bram Moolenaard114dbe2005-06-22 22:29:18 +000030
31" Translation blocks
Bram Moolenaar446cb832008-06-24 21:56:24 +000032syn region poMsgCTxt matchgroup=poStatementMsgCTxt start=+^msgctxt "+rs=e-1 matchgroup=poStringCTxt end=+^msgid "+me=s-1 contains=poStringCTxt
Bram Moolenaard114dbe2005-06-22 22:29:18 +000033syn 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
Bram Moolenaar446cb832008-06-24 21:56:24 +000035syn region poStringCTxt start=+"+ skip=+\\\\\|\\"+ end=+"+
Eisuke Kawashima511eb842024-11-28 18:00:09 +010036syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
Bram Moolenaar446cb832008-06-24 21:56:24 +000037 \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
Eisuke Kawashima511eb842024-11-28 18:00:09 +010038syn region poStringSTR start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
Bram Moolenaar446cb832008-06-24 21:56:24 +000039 \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
Bram Moolenaard114dbe2005-06-22 22:29:18 +000040
41" Header and Copyright
Bram Moolenaar00659062010-09-21 22:34:02 +020042syn 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
Bram Moolenaar446cb832008-06-24 21:56:24 +000043syn match poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <LL@li.org>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
Bram Moolenaard114dbe2005-06-22 22:29:18 +000044syn 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
Viktor Szépedbf749b2023-10-16 09:53:37 +020046" Translation comment block including: translator comment, automatic comments, flags and locations
Bram Moolenaard114dbe2005-06-22 22:29:18 +000047syn match poComment "^#.*$"
48syn keyword poFlagFuzzy fuzzy contained
Eisuke Kawashima511eb842024-11-28 18:00:09 +010049
50syn match poFlagFormat /\<\%(no-\)\?awk-format\>/ contained
51syn match poFlagFormat /\<\%(no-\)\?boost-format\>/ contained
52syn match poFlagFormat /\<\%(no-\)\?c++-format\>/ contained
53syn match poFlagFormat /\<\%(no-\)\?c-format\>/ contained
54syn match poFlagFormat /\<\%(no-\)\?csharp-format\>/ contained
55syn match poFlagFormat /\<\%(no-\)\?elisp-format\>/ contained
56syn match poFlagFormat /\<\%(no-\)\?gcc-internal-format\>/ contained
57syn match poFlagFormat /\<\%(no-\)\?gfc-internal-format\>/ contained
58syn match poFlagFormat /\<\%(no-\)\?java-format\>/ contained
59syn match poFlagFormat /\<\%(no-\)\?java-printf-format\>/ contained
60syn match poFlagFormat /\<\%(no-\)\?javascript-format\>/ contained
61syn match poFlagFormat /\<\%(no-\)\?kde-format\>/ contained
62syn match poFlagFormat /\<\%(no-\)\?librep-format\>/ contained
63syn match poFlagFormat /\<\%(no-\)\?lisp-format\>/ contained
64syn match poFlagFormat /\<\%(no-\)\?lua-format\>/ contained
65syn match poFlagFormat /\<\%(no-\)\?objc-format\>/ contained
66syn match poFlagFormat /\<\%(no-\)\?object-pascal-format\>/ contained
67syn match poFlagFormat /\<\%(no-\)\?perl-brace-format\>/ contained
68syn match poFlagFormat /\<\%(no-\)\?perl-format\>/ contained
69syn match poFlagFormat /\<\%(no-\)\?php-format\>/ contained
70syn match poFlagFormat /\<\%(no-\)\?python-brace-format\>/ contained
71syn match poFlagFormat /\<\%(no-\)\?python-format\>/ contained
72syn match poFlagFormat /\<\%(no-\)\?qt-format\>/ contained
73syn match poFlagFormat /\<\%(no-\)\?qt-plural-format\>/ contained
74syn match poFlagFormat /\<\%(no-\)\?ruby-format\>/ contained
75syn match poFlagFormat /\<\%(no-\)\?scheme-format\>/ contained
76syn match poFlagFormat /\<\%(no-\)\?sh-format\>/ contained
77syn match poFlagFormat /\<\%(no-\)\?smalltalk-format\>/ contained
78syn match poFlagFormat /\<\%(no-\)\?tcl-format\>/ contained
79syn match poFlagFormat /\<\%(no-\)\?ycp-format\>/ contained
80
Bram Moolenaard114dbe2005-06-22 22:29:18 +000081syn match poCommentTranslator "^# .*$" contains=poCopyrightUnset
Eisuke Kawashima511eb842024-11-28 18:00:09 +010082syn match poCommentAutomatic "^#\..*$"
Bram Moolenaard114dbe2005-06-22 22:29:18 +000083syn match poCommentSources "^#:.*$"
Eisuke Kawashima511eb842024-11-28 18:00:09 +010084syn match poCommentFlags "^#,.*$" contains=poFlagFuzzy,poFlagFormat
85syn match poCommentPrevious "^#|.*$"
Bram Moolenaard114dbe2005-06-22 22:29:18 +000086
87" Translations (also includes header fields as they appear in a translation msgstr)
88syn region poCommentKDE start=+"_: +ms=s+1 end="\\n" end="\"\n^msgstr"me=s-1 contained
89syn region poCommentKDEError start=+"\(\|\s\+\)_:+ms=s+1 end="\\n" end=+"\n\n+me=s-1 contained
90syn match poPluralKDE +"_n: +ms=s+1 contained
91syn region poPluralKDEError start=+"\(\|\s\+\)_n:+ms=s+1 end="\"\n\n"me=s-1 contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000092syn match poSpecial contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
93syn match poFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
94syn match poFormat "%%" contained
Bram Moolenaard114dbe2005-06-22 22:29:18 +000095
96" msguniq and msgcat conflicts
97syn region poMsguniqError matchgroup=poMsguniqErrorMarkers start="#-#-#-#-#" end='#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)\\n' contained
98
99" Obsolete messages
Eisuke Kawashima511eb842024-11-28 18:00:09 +0100100syn match poObsolete "^#\~.*$"
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000101
102" KDE Name= handling
103syn match poKDEdesktopFile "\"\(Name\|Comment\|GenericName\|Description\|Keywords\|About\)="ms=s+1,me=e-1
104
105" Accelerator keys - this messes up if the preceding or following char is a multibyte unicode char
Eisuke Kawashima511eb842024-11-28 18:00:09 +0100106syn match poAcceleratorId contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1
Bram Moolenaar446cb832008-06-24 21:56:24 +0000107syn match poAcceleratorStr contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1 contains=@Spell
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000108
109" Variables simple
110syn match poVariable contained "%\d"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111
112" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200113" Only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +0000114
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200115hi def link poCommentSources PreProc
116hi def link poComment Comment
117hi def link poCommentAutomatic Comment
118hi def link poCommentTranslator Comment
119hi def link poCommentFlags Special
Eisuke Kawashima511eb842024-11-28 18:00:09 +0100120hi def link poCommentPrevious Comment
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200121hi def link poCopyrightUnset Todo
122hi def link poFlagFuzzy Todo
Eisuke Kawashima511eb842024-11-28 18:00:09 +0100123hi def link poFlagFormat Todo
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200124hi def link poObsolete Comment
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000125
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200126hi def link poStatementMsgid Statement
127hi def link poStatementMsgstr Statement
128hi def link poStatementMsgidplural Statement
129hi def link poStatementMsgCTxt Statement
130hi def link poPluralCaseN Constant
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000131
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200132hi def link poStringCTxt Comment
133hi def link poStringID String
134hi def link poStringSTR String
135hi def link poCommentKDE Comment
136hi def link poCommentKDEError Error
137hi def link poPluralKDE Comment
138hi def link poPluralKDEError Error
139hi def link poHeaderItem Identifier
140hi def link poHeaderUndefined Todo
141hi def link poKDEdesktopFile Identifier
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000142
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200143hi def link poHtml Identifier
144hi def link poHtmlNot String
145hi def link poHtmlTranslatables String
146hi def link poLineBreak String
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000147
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200148hi def link poFormat poSpecial
149hi def link poSpecial Special
150hi def link poAcceleratorId Special
151hi def link poAcceleratorStr Special
152hi def link poVariable Special
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000153
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200154hi def link poMsguniqError Special
155hi def link poMsguniqErrorMarkers Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157
158let b:current_syntax = "po"
159
Bram Moolenaar9a7224b2012-04-30 15:56:52 +0200160let &cpo = s:keepcpo
161unlet s:keepcpo
162
Bram Moolenaar071d4272004-06-13 20:20:40 +0000163" vim:set ts=8 sts=2 sw=2 noet: