blob: c09b9603572cd81f7fd462b0f8f78a8828641779 [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 Moolenaar9a7224b2012-04-30 15:56:52 +02004" Last Change: 2012 Apr 30
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
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
Bram Moolenaar9a7224b2012-04-30 15:56:52 +020016let s:keepcpo= &cpo
17set cpo&vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000018
Bram Moolenaard114dbe2005-06-22 22:29:18 +000019syn sync minlines=10
20
21" Identifiers
Bram Moolenaar446cb832008-06-24 21:56:24 +000022syn match poStatementMsgCTxt "^msgctxt"
Bram Moolenaard114dbe2005-06-22 22:29:18 +000023syn 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
Bram Moolenaar446cb832008-06-24 21:56:24 +000028syn match poHtml "<\_[^<>]\+>" contains=poHtmlTranslatables,poLineBreak
Bram Moolenaard114dbe2005-06-22 22:29:18 +000029syn match poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1
Bram Moolenaar446cb832008-06-24 21:56:24 +000030syn region poHtmlTranslatables start=+\(abbr\|alt\|content\|summary\|standby\|title\)=\\"+ms=e-1 end=+\\"+ contained contains=@Spell
31syn match poLineBreak +"\n"+ contained
Bram Moolenaard114dbe2005-06-22 22:29:18 +000032
33" Translation blocks
Bram Moolenaar446cb832008-06-24 21:56:24 +000034syn 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 +000035syn 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
Bram Moolenaar446cb832008-06-24 21:56:24 +000037syn region poStringCTxt start=+"+ skip=+\\\\\|\\"+ end=+"+
Bram Moolenaard114dbe2005-06-22 22:29:18 +000038syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
Bram Moolenaar446cb832008-06-24 21:56:24 +000039 \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
Bram Moolenaard114dbe2005-06-22 22:29:18 +000040syn region poStringSTR start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
Bram Moolenaar446cb832008-06-24 21:56:24 +000041 \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
Bram Moolenaard114dbe2005-06-22 22:29:18 +000042
43" Header and Copyright
Bram Moolenaar00659062010-09-21 22:34:02 +020044syn 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 +000045syn 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 +000046syn 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
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.
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
Bram Moolenaard114dbe2005-06-22 22:29:18 +000092 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
Bram Moolenaar446cb832008-06-24 21:56:24 +0000104 HiLink poStatementMsgCTxt Statement
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000105 HiLink poPluralCaseN Constant
106
Bram Moolenaar446cb832008-06-24 21:56:24 +0000107 HiLink poStringCTxt Comment
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000108 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
Bram Moolenaar446cb832008-06-24 21:56:24 +0000121 HiLink poLineBreak String
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000122
123 HiLink poFormat poSpecial
124 HiLink poSpecial Special
Bram Moolenaar446cb832008-06-24 21:56:24 +0000125 HiLink poAcceleratorId Special
126 HiLink poAcceleratorStr Special
127 HiLink poVariable Special
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000128
129 HiLink poMsguniqError Special
130 HiLink poMsguniqErrorMarkers Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131
132 delcommand HiLink
133endif
134
135let b:current_syntax = "po"
136
Bram Moolenaar9a7224b2012-04-30 15:56:52 +0200137let &cpo = s:keepcpo
138unlet s:keepcpo
139
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140" vim:set ts=8 sts=2 sw=2 noet: