1" Vim syntax file 2" Language: po (gettext) 3" Maintainer: Dwayne Bailey <[email protected]> 4" Last Change: 2012 Apr 30 5" Contributors: Dwayne Bailey (Most advanced syntax highlighting) 6" Leonardo Fontenelle (Spell checking) 7" Nam SungHyun <[email protected]> (Original maintainer) 8 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 16let s:keepcpo= &cpo 17set cpo&vim 18 19syn sync minlines=10 20 21" Identifiers 22syn match poStatementMsgCTxt "^msgctxt" 23syn 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 28syn match poHtml "<\_[^<>]\+>" contains=poHtmlTranslatables,poLineBreak 29syn match poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1 30syn region poHtmlTranslatables start=+\(abbr\|alt\|content\|summary\|standby\|title\)=\\"+ms=e-1 end=+\\"+ contained contains=@Spell 31syn match poLineBreak +"\n"+ contained 32 33" Translation blocks 34syn region poMsgCTxt matchgroup=poStatementMsgCTxt start=+^msgctxt "+rs=e-1 matchgroup=poStringCTxt end=+^msgid "+me=s-1 contains=poStringCTxt 35syn 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 37syn region poStringCTxt start=+"+ skip=+\\\\\|\\"+ end=+"+ 38syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained 39 \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable 40syn region poStringSTR start=+"+ skip=+\\\\\|\\"+ end=+"+ contained 41 \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable 42 43" Header and Copyright 44syn 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 45syn match poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <[email protected]>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained 46syn 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 61syn 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 64 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 75syn 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 77 78" Variables simple 79syn match poVariable contained "%\d" 80 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 92 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 104 HiLink poStatementMsgCTxt Statement 105 HiLink poPluralCaseN Constant 106 107 HiLink poStringCTxt Comment 108 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 121 HiLink poLineBreak String 122 123 HiLink poFormat poSpecial 124 HiLink poSpecial Special 125 HiLink poAcceleratorId Special 126 HiLink poAcceleratorStr Special 127 HiLink poVariable Special 128 129 HiLink poMsguniqError Special 130 HiLink poMsguniqErrorMarkers Comment 131 132 delcommand HiLink 133endif 134 135let b:current_syntax = "po" 136 137let &cpo = s:keepcpo 138unlet s:keepcpo 139 140" vim:set ts=8 sts=2 sw=2 noet: 141