blob: f98813c62a2dd27f46414b099d6cf1d6ceddfd1d [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
45" Translation comment block including: translator comment, automatic coments, flags and locations
46syn 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
83command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +000084
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020085HiLink poCommentSources PreProc
86HiLink poComment Comment
87HiLink poCommentAutomatic Comment
88HiLink poCommentTranslator Comment
89HiLink poCommentFlags Special
90HiLink poCommentDiff Comment
91HiLink poCopyrightUnset Todo
92HiLink poFlagFuzzy Todo
93HiLink poDiffOld Todo
94HiLink poDiffNew Special
95HiLink poObsolete Comment
Bram Moolenaard114dbe2005-06-22 22:29:18 +000096
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020097HiLink poStatementMsgid Statement
98HiLink poStatementMsgstr Statement
99HiLink poStatementMsgidplural Statement
100HiLink poStatementMsgCTxt Statement
101HiLink poPluralCaseN Constant
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000102
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200103HiLink poStringCTxt Comment
104HiLink poStringID String
105HiLink poStringSTR String
106HiLink poCommentKDE Comment
107HiLink poCommentKDEError Error
108HiLink poPluralKDE Comment
109HiLink poPluralKDEError Error
110HiLink poHeaderItem Identifier
111HiLink poHeaderUndefined Todo
112HiLink poKDEdesktopFile Identifier
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000113
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200114HiLink poHtml Identifier
115HiLink poHtmlNot String
116HiLink poHtmlTranslatables String
117HiLink poLineBreak String
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000118
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200119HiLink poFormat poSpecial
120HiLink poSpecial Special
121HiLink poAcceleratorId Special
122HiLink poAcceleratorStr Special
123HiLink poVariable Special
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000124
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200125HiLink poMsguniqError Special
126HiLink poMsguniqErrorMarkers Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200128delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129
130let b:current_syntax = "po"
131
Bram Moolenaar9a7224b2012-04-30 15:56:52 +0200132let &cpo = s:keepcpo
133unlet s:keepcpo
134
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135" vim:set ts=8 sts=2 sw=2 noet: