blob: 4475417fd6f7a952cc5254c84772ad33fd370413 [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 Moolenaar5c736222010-01-06 20:54:52 +01004" Last Change: 2008 Sep 17
Bram Moolenaar446cb832008-06-24 21:56:24 +00005" Contributors: Dwayne Bailey (Most advanced syntax highlighting)
6" Leonardo Fontenelle (Spell checking)
Bram Moolenaar5c736222010-01-06 20:54:52 +01007" SungHyun Nam <goweol@gmail.com> (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
16
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=+"+
Bram Moolenaard114dbe2005-06-22 22:29:18 +000036syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
Bram Moolenaar446cb832008-06-24 21:56:24 +000037 \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
Bram Moolenaard114dbe2005-06-22 22:29:18 +000038syn 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
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
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
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
Bram Moolenaar071d4272004-06-13 20:20:40 +000059syn 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
Bram Moolenaard114dbe2005-06-22 22:29:18 +000062
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
Bram Moolenaar446cb832008-06-24 21:56:24 +000073syn 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
Bram Moolenaard114dbe2005-06-22 22:29:18 +000075
76" Variables simple
77syn match poVariable contained "%\d"
Bram Moolenaar071d4272004-06-13 20:20:40 +000078
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
Bram Moolenaard114dbe2005-06-22 22:29:18 +000090 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
Bram Moolenaar446cb832008-06-24 21:56:24 +0000102 HiLink poStatementMsgCTxt Statement
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000103 HiLink poPluralCaseN Constant
104
Bram Moolenaar446cb832008-06-24 21:56:24 +0000105 HiLink poStringCTxt Comment
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000106 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
Bram Moolenaar446cb832008-06-24 21:56:24 +0000119 HiLink poLineBreak String
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000120
121 HiLink poFormat poSpecial
122 HiLink poSpecial Special
Bram Moolenaar446cb832008-06-24 21:56:24 +0000123 HiLink poAcceleratorId Special
124 HiLink poAcceleratorStr Special
125 HiLink poVariable Special
Bram Moolenaard114dbe2005-06-22 22:29:18 +0000126
127 HiLink poMsguniqError Special
128 HiLink poMsguniqErrorMarkers Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129
130 delcommand HiLink
131endif
132
133let b:current_syntax = "po"
134
135" vim:set ts=8 sts=2 sw=2 noet: