2 " Language: po (gettext)
3 " Maintainer: Dwayne Bailey <dwayne@translate.org.za>
4 " Last Change: 2007 Aug 23
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
27 syn match poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1
28 syn region poHtmlTranslatables start=+alt=\\"+ms=e-1 end=+\\"+ contained
31 syn region poMsgCTxt matchgroup=poStatementMsgCTxt start=+^msgctxt "+rs=e-1 matchgroup=poStringCTxt end=+^msgid "+me=s-1 contains=poStringCTxt
32 syn region poMsgID matchgroup=poStatementMsgid start=+^msgid "+rs=e-1 matchgroup=poStringID end=+^msgstr\(\|\[[\]0\[]\]\) "+me=s-1 contains=poStringID,poStatementMsgidplural,poStatementMsgid
33 syn region poMsgSTR matchgroup=poStatementMsgstr start=+^msgstr\(\|\[[\]0\[]\]\) "+rs=e-1 matchgroup=poStringSTR end=+\n\n+me=s-1 contains=poStringSTR,poStatementMsgstr
34 syn region poStringCTxt start=+"+ skip=+\\\\\|\\"+ end=+"+
35 syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
36 \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
37 syn region poStringSTR start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
38 \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
40 " Header and Copyright
41 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
42 syn match poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <LL@li.org>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
43 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
45 " Translation comment block including: translator comment, automatic coments, flags and locations
46 syn match poComment "^#.*$"
47 syn keyword poFlagFuzzy fuzzy contained
48 syn match poCommentTranslator "^# .*$" contains=poCopyrightUnset
49 syn match poCommentAutomatic "^#\..*$"
50 syn match poCommentSources "^#:.*$"
51 syn match poCommentFlags "^#,.*$" contains=poFlagFuzzy
53 " Translations (also includes header fields as they appear in a translation msgstr)
54 syn region poCommentKDE start=+"_: +ms=s+1 end="\\n" end="\"\n^msgstr"me=s-1 contained
55 syn region poCommentKDEError start=+"\(\|\s\+\)_:+ms=s+1 end="\\n" end=+"\n\n+me=s-1 contained
56 syn match poPluralKDE +"_n: +ms=s+1 contained
57 syn region poPluralKDEError start=+"\(\|\s\+\)_n:+ms=s+1 end="\"\n\n"me=s-1 contained
58 syn match poSpecial contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
59 syn match poFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
60 syn match poFormat "%%" contained
62 " msguniq and msgcat conflicts
63 syn region poMsguniqError matchgroup=poMsguniqErrorMarkers start="#-#-#-#-#" end='#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)\\n' contained
66 syn match poObsolete "^#\~.*$"
69 syn match poKDEdesktopFile "\"\(Name\|Comment\|GenericName\|Description\|Keywords\|About\)="ms=s+1,me=e-1
71 " Accelerator keys - this messes up if the preceding or following char is a multibyte unicode char
72 syn match poAcceleratorId contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1
73 syn match poAcceleratorStr contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1 contains=@Spell
76 syn match poVariable contained "%\d"
78 " Define the default highlighting.
79 " For version 5.7 and earlier: only when not done already
80 " For version 5.8 and later: only when an item doesn't have highlighting yet
81 if version >= 508 || !exists("did_po_syn_inits")
83 let did_po_syn_inits = 1
84 command -nargs=+ HiLink hi link <args>
86 command -nargs=+ HiLink hi def link <args>
89 HiLink poCommentSources PreProc
90 HiLink poComment Comment
91 HiLink poCommentAutomatic Comment
92 HiLink poCommentTranslator Comment
93 HiLink poCommentFlags Special
94 HiLink poCopyrightUnset Todo
95 HiLink poFlagFuzzy Todo
96 HiLink poObsolete Comment
98 HiLink poStatementMsgid Statement
99 HiLink poStatementMsgstr Statement
100 HiLink poStatementMsgidplural Statement
101 HiLink poStatementMsgCTxt Statement
102 HiLink poPluralCaseN Constant
104 HiLink poStringCTxt Comment
105 HiLink poStringID String
106 HiLink poStringSTR String
107 HiLink poCommentKDE Comment
108 HiLink poCommentKDEError Error
109 HiLink poPluralKDE Comment
110 HiLink poPluralKDEError Error
111 HiLink poHeaderItem Identifier
112 HiLink poHeaderUndefined Todo
113 HiLink poKDEdesktopFile Identifier
115 HiLink poHtml Identifier
116 HiLink poHtmlNot String
117 HiLink poHtmlTranslatables String
119 HiLink poFormat poSpecial
120 HiLink poSpecial Special
121 HiLink poAcceleratorId Special
122 HiLink poAcceleratorStr Special
123 HiLink poVariable Special
125 HiLink poMsguniqError Special
126 HiLink poMsguniqErrorMarkers Comment
131 let b:current_syntax = "po"
133 " vim:set ts=8 sts=2 sw=2 noet: