blob: 08d6baec27d4bc865929da2222bc6935f2e7e023 [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>
Bram Moolenaarf2571c62015-06-09 19:44:55 +02004" Last Change: 2015 Jun 07
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)
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02009" quit when a syntax file was already loaded
10if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000011 finish
12endif
Bram Moolenaar9a7224b2012-04-30 15:56:52 +020013let s:keepcpo= &cpo
14set cpo&vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000015
Bram Moolenaard114dbe2005-06-22 22:29:18 +000016syn sync minlines=10
17
18" Identifiers
Bram Moolenaar446cb832008-06-24 21:56:24 +000019syn match poStatementMsgCTxt "^msgctxt"
Bram Moolenaard114dbe2005-06-22 22:29:18 +000020syn match poStatementMsgidplural "^msgid_plural" contained
21syn match poPluralCaseN "[0-9]" contained
22syn match poStatementMsgstr "^msgstr\(\[[0-9]\]\)" contains=poPluralCaseN
23
24" Simple HTML and XML highlighting
Bram Moolenaar446cb832008-06-24 21:56:24 +000025syn match poHtml "<\_[^<>]\+>" contains=poHtmlTranslatables,poLineBreak
Bram Moolenaard114dbe2005-06-22 22:29:18 +000026syn match poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1
Bram Moolenaar446cb832008-06-24 21:56:24 +000027syn region poHtmlTranslatables start=+\(abbr\|alt\|content\|summary\|standby\|title\)=\\"+ms=e-1 end=+\\"+ contained contains=@Spell
28syn match poLineBreak +"\n"+ contained
Bram Moolenaard114dbe2005-06-22 22:29:18 +000029
30" Translation blocks
Bram Moolenaar446cb832008-06-24 21:56:24 +000031syn 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 +000032syn region poMsgID matchgroup=poStatementMsgid start=+^msgid "+rs=e-1 matchgroup=poStringID end=+^msgstr\(\|\[[\]0\[]\]\) "+me=s-1 contains=poStringID,poStatementMsgidplural,poStatementMsgid
33syn 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 +000034syn region poStringCTxt start=+"+ skip=+\\\\\|\\"+ end=+"+
Bram Moolenaard114dbe2005-06-22 22:29:18 +000035syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
Bram Moolenaar446cb832008-06-24 21:56:24 +000036 \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
Bram Moolenaard114dbe2005-06-22 22:29:18 +000037syn region poStringSTR start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
Bram Moolenaar446cb832008-06-24 21:56:24 +000038 \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
Bram Moolenaard114dbe2005-06-22 22:29:18 +000039
40" Header and Copyright
Bram Moolenaar00659062010-09-21 22:34:02 +020041syn 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 +000042syn 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 +000043syn 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
44
Viktor Szépedbf749b2023-10-16 09:53:37 +020045" Translation comment block including: translator comment, automatic comments, flags and locations
Bram Moolenaard114dbe2005-06-22 22:29:18 +000046syn match poComment "^#.*$"
47syn keyword poFlagFuzzy fuzzy contained
48syn match poCommentTranslator "^# .*$" contains=poCopyrightUnset
49syn match poCommentAutomatic "^#\..*$"
50syn match poCommentSources "^#:.*$"
51syn match poCommentFlags "^#,.*$" contains=poFlagFuzzy
Bram Moolenaarf2571c62015-06-09 19:44:55 +020052syn match poDiffOld '\(^#| "[^{]*+}\|{+[^}]*+}\|{+[^}]*\|"$\)' contained
53syn match poDiffNew '\(^#| "[^{]*-}\|{-[^}]*-}\|{-[^}]*\|"$\)' contained
54syn match poCommentDiff "^#|.*$" contains=poDiffOld,poDiffNew
Bram Moolenaard114dbe2005-06-22 22:29:18 +000055
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
Bram Moolenaar071d4272004-06-13 20:20:40 +000061syn 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
Bram Moolenaard114dbe2005-06-22 22:29:18 +000064
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
Bram Moolenaar446cb832008-06-24 21:56:24 +000075syn 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
Bram Moolenaard114dbe2005-06-22 22:29:18 +000077
78" Variables simple
79syn match poVariable contained "%\d"
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
81" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020082" Only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +000083
Bram Moolenaarf37506f2016-08-31 22:22:10 +020084hi def link poCommentSources PreProc
85hi def link poComment Comment
86hi def link poCommentAutomatic Comment
87hi def link poCommentTranslator Comment
88hi def link poCommentFlags Special
89hi def link poCommentDiff Comment
90hi def link poCopyrightUnset Todo
91hi def link poFlagFuzzy Todo
92hi def link poDiffOld Todo
93hi def link poDiffNew Special
94hi def link poObsolete Comment
Bram Moolenaard114dbe2005-06-22 22:29:18 +000095
Bram Moolenaarf37506f2016-08-31 22:22:10 +020096hi def link poStatementMsgid Statement
97hi def link poStatementMsgstr Statement
98hi def link poStatementMsgidplural Statement
99hi def link poStatementMsgCTxt Statement
100hi def link poPluralCaseN Constant
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000101
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200102hi def link poStringCTxt Comment
103hi def link poStringID String
104hi def link poStringSTR String
105hi def link poCommentKDE Comment
106hi def link poCommentKDEError Error
107hi def link poPluralKDE Comment
108hi def link poPluralKDEError Error
109hi def link poHeaderItem Identifier
110hi def link poHeaderUndefined Todo
111hi def link poKDEdesktopFile Identifier
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000112
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200113hi def link poHtml Identifier
114hi def link poHtmlNot String
115hi def link poHtmlTranslatables String
116hi def link poLineBreak String
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000117
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200118hi def link poFormat poSpecial
119hi def link poSpecial Special
120hi def link poAcceleratorId Special
121hi def link poAcceleratorStr Special
122hi def link poVariable Special
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000123
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200124hi def link poMsguniqError Special
125hi def link poMsguniqErrorMarkers Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127
128let b:current_syntax = "po"
129
Bram Moolenaar9a7224b2012-04-30 15:56:52 +0200130let &cpo = s:keepcpo
131unlet s:keepcpo
132
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133" vim:set ts=8 sts=2 sw=2 noet: