2 " Language: po (gettext)
3 " Maintainer: Dwayne Bailey <dwayne@translate.org.za>
4 " Last Change: 2008 Jan 08
5 " Contributors: Dwayne Bailey (Most advanced syntax highlighting)
6 " Leonardo Fontenelle (Spell checking)
7 " Nam SungHyun <namsh@kldp.org> (Original maintainer)
9 " For version 5.x: Clear all syntax items
10 " For version 6.x: Quit when a syntax file was already loaded
13 elseif exists("b:current_syntax")
20 syn match poStatementMsgCTxt "^msgctxt"
21 syn match poStatementMsgidplural "^msgid_plural" contained
22 syn match poPluralCaseN "[0-9]" contained
23 syn match poStatementMsgstr "^msgstr\(\[[0-9]\]\)" contains=poPluralCaseN
25 " Simple HTML and XML highlighting
26 syn match poHtml "<\_[^<>]\+>" contains=poHtmlTranslatables,poLineBreak
27 syn match poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1
28 syn region poHtmlTranslatables start=+\(abbr\|alt\|content\|summary\|standby\|title\)=\\"+ms=e-1 end=+\\"+ contained contains=@Spell
29 syn match poLineBreak +"\n"+ contained
32 syn region poMsgCTxt matchgroup=poStatementMsgCTxt start=+^msgctxt "+rs=e-1 matchgroup=poStringCTxt end=+^msgid "+me=s-1 contains=poStringCTxt
33 syn region poMsgID matchgroup=poStatementMsgid start=+^msgid "+rs=e-1 matchgroup=poStringID end=+^msgstr\(\|\[[\]0\[]\]\) "+me=s-1 contains=poStringID,poStatementMsgidplural,poStatementMsgid
34 syn region poMsgSTR matchgroup=poStatementMsgstr start=+^msgstr\(\|\[[\]0\[]\]\) "+rs=e-1 matchgroup=poStringSTR end=+\n\n+me=s-1 contains=poStringSTR,poStatementMsgstr
35 syn region poStringCTxt start=+"+ skip=+\\\\\|\\"+ end=+"+
36 syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
37 \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
38 syn region poStringSTR start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
39 \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
41 " Header and Copyright
42 syn 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
43 syn match poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <LL@li.org>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
44 syn 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
46 " Translation comment block including: translator comment, automatic coments, flags and locations
47 syn match poComment "^#.*$"
48 syn keyword poFlagFuzzy fuzzy contained
49 syn match poCommentTranslator "^# .*$" contains=poCopyrightUnset
50 syn match poCommentAutomatic "^#\..*$"
51 syn match poCommentSources "^#:.*$"
52 syn match poCommentFlags "^#,.*$" contains=poFlagFuzzy
54 " Translations (also includes header fields as they appear in a translation msgstr)
55 syn region poCommentKDE start=+"_: +ms=s+1 end="\\n" end="\"\n^msgstr"me=s-1 contained
56 syn region poCommentKDEError start=+"\(\|\s\+\)_:+ms=s+1 end="\\n" end=+"\n\n+me=s-1 contained
57 syn match poPluralKDE +"_n: +ms=s+1 contained
58 syn region poPluralKDEError start=+"\(\|\s\+\)_n:+ms=s+1 end="\"\n\n"me=s-1 contained
59 syn match poSpecial contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
60 syn match poFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
61 syn match poFormat "%%" contained
63 " msguniq and msgcat conflicts
64 syn region poMsguniqError matchgroup=poMsguniqErrorMarkers start="#-#-#-#-#" end='#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)\\n' contained
67 syn match poObsolete "^#\~.*$"
70 syn match poKDEdesktopFile "\"\(Name\|Comment\|GenericName\|Description\|Keywords\|About\)="ms=s+1,me=e-1
72 " Accelerator keys - this messes up if the preceding or following char is a multibyte unicode char
73 syn match poAcceleratorId contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1
74 syn match poAcceleratorStr contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1 contains=@Spell
77 syn match poVariable contained "%\d"
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
82 if version >= 508 || !exists("did_po_syn_inits")
84 let did_po_syn_inits = 1
85 command -nargs=+ HiLink hi link <args>
87 command -nargs=+ HiLink hi def link <args>
90 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
99 HiLink poStatementMsgid Statement
100 HiLink poStatementMsgstr Statement
101 HiLink poStatementMsgidplural Statement
102 HiLink poStatementMsgCTxt Statement
103 HiLink poPluralCaseN Constant
105 HiLink poStringCTxt Comment
106 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
116 HiLink poHtml Identifier
117 HiLink poHtmlNot String
118 HiLink poHtmlTranslatables String
119 HiLink poLineBreak String
121 HiLink poFormat poSpecial
122 HiLink poSpecial Special
123 HiLink poAcceleratorId Special
124 HiLink poAcceleratorStr Special
125 HiLink poVariable Special
127 HiLink poMsguniqError Special
128 HiLink poMsguniqErrorMarkers Comment
133 let b:current_syntax = "po"
135 " vim:set ts=8 sts=2 sw=2 noet: